Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34c27609 authored by Matthew Fritze's avatar Matthew Fritze
Browse files

Move indexing into the Search Fragment

Cold start latency for Settings increased drastically
from the indexing of the Search Database. Moving it into
the Search Fragment moves that latency to cases where
users are actually searching.

Change-Id: I11368af610ac9e80f9901654f980c2c1e26342a5
Fixes: 34142852
Test: make RunSettingsRoboTests
parent c3fdc3e8
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -191,12 +191,14 @@ public class SettingsActivity extends SettingsDrawerActivity
    private final BroadcastReceiver mUserAddRemoveReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (mSearchFeatureProvider != null && !mSearchFeatureProvider.isEnabled(context)) {
                String action = intent.getAction();
                if (action.equals(Intent.ACTION_USER_ADDED)
                        || action.equals(Intent.ACTION_USER_REMOVED)) {
                    mSearchFeatureProvider.updateIndex(getApplicationContext());
                }
            }
        }
    };

    private DynamicIndexableContentMonitor mDynamicIndexableContentMonitor;
@@ -251,8 +253,10 @@ public class SettingsActivity extends SettingsDrawerActivity
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (!mSearchFeatureProvider.isEnabled(this)) {
            mSearchFeatureProvider.updateIndex(getApplicationContext());
        }
    }

    @Override
    protected void onStart() {
@@ -400,7 +404,7 @@ public class SettingsActivity extends SettingsDrawerActivity

        getFragmentManager().addOnBackStackChangedListener(this);

        if (mIsShowingDashboard) {
        if (mIsShowingDashboard && !mSearchFeatureProvider.isEnabled(this)) {
            // Run the Index update only if we have some space
            if (!Utils.isLowStorage(this)) {
                mSearchFeatureProvider.updateIndex(getApplicationContext());
@@ -642,8 +646,10 @@ public class SettingsActivity extends SettingsDrawerActivity
                mDevelopmentPreferencesListener);

        registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        if (!mSearchFeatureProvider.isEnabled(this)) {
            registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_ADDED));
            registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_REMOVED));
        }
        if (mDynamicIndexableContentMonitor == null) {
            mDynamicIndexableContentMonitor = new DynamicIndexableContentMonitor();
        }
@@ -659,7 +665,9 @@ public class SettingsActivity extends SettingsDrawerActivity
    protected void onPause() {
        super.onPause();
        unregisterReceiver(mBatteryInfoReceiver);
        if (!mSearchFeatureProvider.isEnabled(this)) {
            unregisterReceiver(mUserAddRemoveReceiver);
        }
        if (mDynamicIndexableContentMonitor != null) {
            mDynamicIndexableContentMonitor.unregister(this, LOADER_ID_INDEXABLE_CONTENT_MONITOR);
        }
+1 −1
Original line number Diff line number Diff line
@@ -201,7 +201,7 @@ public class IndexDatabaseHelper extends SQLiteOpenHelper {
        reconstruct(db);
    }

    private void reconstruct(SQLiteDatabase db) {
    public void reconstruct(SQLiteDatabase db) {
        dropTables(db);
        bootstrapDB(db);
    }
+1 −1
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ public class DatabaseIndexingManager {
        return mIsAvailable.get();
    }

    public void update() {
    public void indexDatabase() {
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
+3 −2
Original line number Diff line number Diff line
@@ -85,10 +85,11 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider {
    public void updateIndex(Context context) {
        long indexStartTime = System.currentTimeMillis();
        if (isEnabled(context)) {
            getIndexingManager(context).update();
            getIndexingManager(context).indexDatabase();
        } else {
            Index.getInstance(context).update();
        }
        Log.d(TAG, "Index.update() took " + (System.currentTimeMillis() - indexStartTime) + " ms");
        Log.d(TAG, "IndexDatabase() took " +
                (System.currentTimeMillis() - indexStartTime) + " ms");
    }
}
+12 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -34,6 +35,7 @@ import android.widget.SearchView;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.InstrumentedFragment;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
@@ -92,10 +94,19 @@ public class SearchFragment extends InstrumentedFragment implements
            loaderManager.initLoader(LOADER_ID_DATABASE, null, this);
            loaderManager.initLoader(LOADER_ID_INSTALLED_APPS, null, this);
        }
        final ActionBar actionBar = getActivity().getActionBar();

        final Activity activity = getActivity();
        final ActionBar actionBar = activity.getActionBar();
        actionBar.setCustomView(makeSearchView(actionBar, mQuery));
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setDisplayShowTitleEnabled(false);

        // Run the Index update only if we have some space
        if (!Utils.isLowStorage(activity)) {
            mSearchFeatureProvider.updateIndex(activity);
        } else {
            Log.w(TAG, "Cannot update the Indexer as we are running low on storage space!");
        }
    }

    @Override
Loading