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

Commit d4075ea9 authored by Matthew Fritze's avatar Matthew Fritze Committed by android-build-merger
Browse files

Merge "Add synchronous indexing api to SearchFeatureProvider" into oc-dr1-dev

am: e2e54e17

Change-Id: Ib8b6696cc232ef492a75180c4ac18ee7685be047
parents 46483a1a e2e54e17
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -39,11 +39,14 @@ import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Pair;
import android.util.Xml;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.SettingsActivity;
import com.android.settings.core.PreferenceController;

import com.android.settings.overlay.FeatureFactory;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

@@ -115,6 +118,9 @@ import static com.android.settings.search.IndexDatabaseHelper.Tables.TABLE_PREFS
public class DatabaseIndexingManager {
    private static final String LOG_TAG = "DatabaseIndexingManager";

    private static final String METRICS_ACTION_SETTINGS_ASYNC_INDEX =
            "search_asynchronous_indexing";

    public static final String FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER =
            "SEARCH_INDEX_DATA_PROVIDER";

@@ -156,8 +162,7 @@ public class DatabaseIndexingManager {
     * Only the first indexing for the default language gets static search results - subsequent
     * calls will only gather non-indexable keys.
     */
    @VisibleForTesting
    void performIndexing() {
    public void performIndexing() {
        final Intent intent = new Intent(SearchIndexablesContract.PROVIDER_INTERFACE);
        final List<ResolveInfo> list =
                mContext.getPackageManager().queryIntentContentProviders(intent, 0);
@@ -1262,6 +1267,7 @@ public class DatabaseIndexingManager {

        @VisibleForTesting
        IndexingCallback mCallback;
        private long mIndexStartTime;

        public IndexingTask(IndexingCallback callback) {
            mCallback = callback;
@@ -1269,6 +1275,7 @@ public class DatabaseIndexingManager {

        @Override
        protected void onPreExecute() {
            mIndexStartTime = System.currentTimeMillis();
            mIsIndexingComplete.set(false);
        }

@@ -1280,6 +1287,10 @@ public class DatabaseIndexingManager {

        @Override
        protected void onPostExecute(Void aVoid) {
            int indexingTime = (int) (System.currentTimeMillis() - mIndexStartTime);
            FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
                    .histogram(mContext, METRICS_ACTION_SETTINGS_ASYNC_INDEX, indexingTime);

            mIsIndexingComplete.set(true);
            if (mCallback != null) {
                mCallback.onIndexingFinished();
+8 −2
Original line number Diff line number Diff line
@@ -62,9 +62,15 @@ public interface SearchFeatureProvider {
    SiteMapManager getSiteMapManager();

    /**
     * Updates the Settings indexes
     * Updates the Settings indexes and calls {@link IndexingCallback#onIndexingFinished()} on
     * {@param callback} when indexing is complete.
     */
    void updateIndex(Context context, IndexingCallback callback);
    void updateIndexAsync(Context context, IndexingCallback callback);

    /**
     * Synchronously updates the Settings database.
     */
    void updateIndex(Context context);

    /**
     * @returns true when indexing is complete.
+13 −6
Original line number Diff line number Diff line
@@ -19,10 +19,9 @@ package com.android.settings.search;

import android.content.Context;
import android.text.TextUtils;
import android.util.Log;

import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.dashboard.SiteMapManager;
import com.android.settings.overlay.FeatureFactory;

/**
 * FeatureProvider for the refactored search code.
@@ -31,6 +30,8 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider {

    private static final String TAG = "SearchFeatureProvider";

    private static final String METRICS_ACTION_SETTINGS_INDEX = "search_synchronous_indexing";

    private DatabaseIndexingManager mDatabaseIndexingManager;
    private SiteMapManager mSiteMapManager;

@@ -78,11 +79,17 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider {
    }

    @Override
    public void updateIndex(Context context, IndexingCallback callback) {
        long indexStartTime = System.currentTimeMillis();
    public void updateIndexAsync(Context context, IndexingCallback callback) {
        getIndexingManager(context).indexDatabase(callback);
        Log.d(TAG, "IndexDatabase() took " +
                (System.currentTimeMillis() - indexStartTime) + " ms");
    }

    @Override
    public void updateIndex(Context context) {
        long indexStartTime = System.currentTimeMillis();
        getIndexingManager(context).performIndexing();
        int indexingTime = (int) (System.currentTimeMillis() - indexStartTime);
        FeatureFactory.getFactory(context).getMetricsFeatureProvider()
                .histogram(context, METRICS_ACTION_SETTINGS_INDEX, indexingTime);
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -156,7 +156,7 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
        final Activity activity = getActivity();
        // Run the Index update only if we have some space
        if (!Utils.isLowStorage(activity)) {
            mSearchFeatureProvider.updateIndex(activity, this /* indexingCallback */);
            mSearchFeatureProvider.updateIndexAsync(activity, this /* indexingCallback */);
        } else {
            Log.w(TAG, "Cannot update the Indexer as we are running low on storage space!");
        }
+2 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.provider.SearchIndexableResource;
import android.util.ArrayMap;

import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.DatabaseTestUtils;
@@ -131,6 +132,7 @@ public class DatabaseIndexingManagerTest {
        mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();

        doReturn(mPackageManager).when(mContext).getPackageManager();
        FakeFeatureFactory.setupForTest(mContext);
    }

    @After
Loading