Loading src/com/android/settings/SettingsActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ public class SettingsActivity extends SettingsDrawerActivity private static final String LOG_TAG = "Settings"; private static final int LOADER_ID_INDEXABLE_CONTENT_MONITOR = 1; public static final int LOADER_ID_INDEXABLE_CONTENT_MONITOR = 1; // Constants for state save/restore private static final String SAVE_KEY_CATEGORIES = ":settings:categories"; Loading src/com/android/settings/search/IndexingCallback.java 0 → 100644 +12 −0 Original line number Diff line number Diff line package com.android.settings.search; /** * Callback for Settings search indexing. */ public interface IndexingCallback { /** * Called when Indexing is finished. */ void onIndexingFinished(); } src/com/android/settings/search2/DatabaseIndexingManager.java +52 −19 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.util.Xml; import com.android.settings.core.PreferenceController; import com.android.settings.search.IndexDatabaseHelper; import com.android.settings.search.Indexable; import com.android.settings.search.IndexingCallback; import com.android.settings.search.SearchIndexableRaw; import com.android.settings.search.SearchIndexableResources; Loading Loading @@ -132,7 +133,8 @@ public class DatabaseIndexingManager { private final String mBaseAuthority; private final AtomicBoolean mIsAvailable = new AtomicBoolean(false); @VisibleForTesting final AtomicBoolean mIsIndexingComplete = new AtomicBoolean(false); @VisibleForTesting final UpdateData mDataToProcess = new UpdateData(); Loading @@ -147,17 +149,13 @@ public class DatabaseIndexingManager { mContext = context; } public boolean isAvailable() { return mIsAvailable.get(); public boolean isIndexingComplete() { return mIsIndexingComplete.get(); } public void indexDatabase() { AsyncTask.execute(new Runnable() { @Override public void run() { performIndexing(); } }); public void indexDatabase(IndexingCallback callback) { IndexingTask task = new IndexingTask(callback); task.execute(); } /** Loading @@ -171,15 +169,12 @@ public class DatabaseIndexingManager { final List<ResolveInfo> list = mContext.getPackageManager().queryIntentContentProviders(intent, 0); final String localeStr = Locale.getDefault().toString(); final String fingerprint = Build.FINGERPRINT; String localeStr = Locale.getDefault().toString(); String fingerprint = Build.FINGERPRINT; final boolean isFullIndex = isFullIndex(localeStr, fingerprint); // Drop the database when the locale or build has changed. This eliminates rows which are // dynamically inserted in the old language, or deprecated settings. if (isFullIndex) { final SQLiteDatabase db = getWritableDatabase(); IndexDatabaseHelper.getInstance(mContext).reconstruct(db); rebuildDatabase(); } for (final ResolveInfo info : list) { Loading Loading @@ -217,6 +212,18 @@ public class DatabaseIndexingManager { return !isLocaleIndexed || !isBuildIndexed; } /** * Reconstruct the database in the following cases: * - Language has changed * - Build has changed */ private void rebuildDatabase() { // Drop the database when the locale or build has changed. This eliminates rows which are // dynamically inserted in the old language, or deprecated settings. final SQLiteDatabase db = getWritableDatabase(); IndexDatabaseHelper.getInstance(mContext).reconstruct(db); } /** * Adds new data to the database and verifies the correctness of the ENABLED column. * First, the data to be updated and all non-indexable keys are copied locally. Loading @@ -229,7 +236,6 @@ public class DatabaseIndexingManager { */ @VisibleForTesting void updateDatabase(boolean needsReindexing, String localeStr) { mIsAvailable.set(false); final UpdateData copy; synchronized (mDataToProcess) { Loading Loading @@ -264,8 +270,6 @@ public class DatabaseIndexingManager { } finally { database.endTransaction(); } mIsAvailable.set(true); } /** Loading Loading @@ -1223,4 +1227,33 @@ public class DatabaseIndexingManager { } } } public class IndexingTask extends AsyncTask<Void, Void, Void> { @VisibleForTesting IndexingCallback mCallback; public IndexingTask(IndexingCallback callback) { mCallback = callback; } @Override protected void onPreExecute() { mIsIndexingComplete.set(false); } @Override protected Void doInBackground(Void... voids) { performIndexing(); return null; } @Override protected void onPostExecute(Void aVoid) { mIsIndexingComplete.set(true); if (mCallback != null) { mCallback.onIndexingFinished(); } } } } No newline at end of file src/com/android/settings/search2/SearchFeatureProvider.java +7 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.view.Menu; import android.view.View; import com.android.settings.dashboard.SiteMapManager; import com.android.settings.search.IndexingCallback; /** * FeatureProvider for Settings Search Loading Loading @@ -68,7 +69,12 @@ public interface SearchFeatureProvider { /** * Updates the Settings indexes */ void updateIndex(Context context); void updateIndex(Context context, IndexingCallback callback); /** * @returns true when indexing is complete. */ boolean isIndexingComplete(Context context); /** * Initializes the feedback button in case it was dismissed. Loading src/com/android/settings/search2/SearchFeatureProviderImpl.java +11 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.settings.search2; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.support.annotation.VisibleForTesting; import android.util.Log; import android.view.Menu; import android.view.MenuItem; Loading @@ -26,6 +27,9 @@ import android.view.MenuItem; import com.android.settings.R; import com.android.settings.applications.PackageManagerWrapperImpl; import com.android.settings.dashboard.SiteMapManager; import com.android.settings.search.IndexingCallback; import java.util.concurrent.atomic.AtomicBoolean; /** * FeatureProvider for the refactored search code. Loading Loading @@ -88,6 +92,11 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider { return mDatabaseIndexingManager; } @Override public boolean isIndexingComplete(Context context) { return getIndexingManager(context).isIndexingComplete(); } public SiteMapManager getSiteMapManager() { if (mSiteMapManager == null) { mSiteMapManager = new SiteMapManager(); Loading @@ -96,9 +105,9 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider { } @Override public void updateIndex(Context context) { public void updateIndex(Context context, IndexingCallback callback) { long indexStartTime = System.currentTimeMillis(); getIndexingManager(context).indexDatabase(); getIndexingManager(context).indexDatabase(callback); Log.d(TAG, "IndexDatabase() took " + (System.currentTimeMillis() - indexStartTime) + " ms"); } Loading Loading
src/com/android/settings/SettingsActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ public class SettingsActivity extends SettingsDrawerActivity private static final String LOG_TAG = "Settings"; private static final int LOADER_ID_INDEXABLE_CONTENT_MONITOR = 1; public static final int LOADER_ID_INDEXABLE_CONTENT_MONITOR = 1; // Constants for state save/restore private static final String SAVE_KEY_CATEGORIES = ":settings:categories"; Loading
src/com/android/settings/search/IndexingCallback.java 0 → 100644 +12 −0 Original line number Diff line number Diff line package com.android.settings.search; /** * Callback for Settings search indexing. */ public interface IndexingCallback { /** * Called when Indexing is finished. */ void onIndexingFinished(); }
src/com/android/settings/search2/DatabaseIndexingManager.java +52 −19 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.util.Xml; import com.android.settings.core.PreferenceController; import com.android.settings.search.IndexDatabaseHelper; import com.android.settings.search.Indexable; import com.android.settings.search.IndexingCallback; import com.android.settings.search.SearchIndexableRaw; import com.android.settings.search.SearchIndexableResources; Loading Loading @@ -132,7 +133,8 @@ public class DatabaseIndexingManager { private final String mBaseAuthority; private final AtomicBoolean mIsAvailable = new AtomicBoolean(false); @VisibleForTesting final AtomicBoolean mIsIndexingComplete = new AtomicBoolean(false); @VisibleForTesting final UpdateData mDataToProcess = new UpdateData(); Loading @@ -147,17 +149,13 @@ public class DatabaseIndexingManager { mContext = context; } public boolean isAvailable() { return mIsAvailable.get(); public boolean isIndexingComplete() { return mIsIndexingComplete.get(); } public void indexDatabase() { AsyncTask.execute(new Runnable() { @Override public void run() { performIndexing(); } }); public void indexDatabase(IndexingCallback callback) { IndexingTask task = new IndexingTask(callback); task.execute(); } /** Loading @@ -171,15 +169,12 @@ public class DatabaseIndexingManager { final List<ResolveInfo> list = mContext.getPackageManager().queryIntentContentProviders(intent, 0); final String localeStr = Locale.getDefault().toString(); final String fingerprint = Build.FINGERPRINT; String localeStr = Locale.getDefault().toString(); String fingerprint = Build.FINGERPRINT; final boolean isFullIndex = isFullIndex(localeStr, fingerprint); // Drop the database when the locale or build has changed. This eliminates rows which are // dynamically inserted in the old language, or deprecated settings. if (isFullIndex) { final SQLiteDatabase db = getWritableDatabase(); IndexDatabaseHelper.getInstance(mContext).reconstruct(db); rebuildDatabase(); } for (final ResolveInfo info : list) { Loading Loading @@ -217,6 +212,18 @@ public class DatabaseIndexingManager { return !isLocaleIndexed || !isBuildIndexed; } /** * Reconstruct the database in the following cases: * - Language has changed * - Build has changed */ private void rebuildDatabase() { // Drop the database when the locale or build has changed. This eliminates rows which are // dynamically inserted in the old language, or deprecated settings. final SQLiteDatabase db = getWritableDatabase(); IndexDatabaseHelper.getInstance(mContext).reconstruct(db); } /** * Adds new data to the database and verifies the correctness of the ENABLED column. * First, the data to be updated and all non-indexable keys are copied locally. Loading @@ -229,7 +236,6 @@ public class DatabaseIndexingManager { */ @VisibleForTesting void updateDatabase(boolean needsReindexing, String localeStr) { mIsAvailable.set(false); final UpdateData copy; synchronized (mDataToProcess) { Loading Loading @@ -264,8 +270,6 @@ public class DatabaseIndexingManager { } finally { database.endTransaction(); } mIsAvailable.set(true); } /** Loading Loading @@ -1223,4 +1227,33 @@ public class DatabaseIndexingManager { } } } public class IndexingTask extends AsyncTask<Void, Void, Void> { @VisibleForTesting IndexingCallback mCallback; public IndexingTask(IndexingCallback callback) { mCallback = callback; } @Override protected void onPreExecute() { mIsIndexingComplete.set(false); } @Override protected Void doInBackground(Void... voids) { performIndexing(); return null; } @Override protected void onPostExecute(Void aVoid) { mIsIndexingComplete.set(true); if (mCallback != null) { mCallback.onIndexingFinished(); } } } } No newline at end of file
src/com/android/settings/search2/SearchFeatureProvider.java +7 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.view.Menu; import android.view.View; import com.android.settings.dashboard.SiteMapManager; import com.android.settings.search.IndexingCallback; /** * FeatureProvider for Settings Search Loading Loading @@ -68,7 +69,12 @@ public interface SearchFeatureProvider { /** * Updates the Settings indexes */ void updateIndex(Context context); void updateIndex(Context context, IndexingCallback callback); /** * @returns true when indexing is complete. */ boolean isIndexingComplete(Context context); /** * Initializes the feedback button in case it was dismissed. Loading
src/com/android/settings/search2/SearchFeatureProviderImpl.java +11 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.settings.search2; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.support.annotation.VisibleForTesting; import android.util.Log; import android.view.Menu; import android.view.MenuItem; Loading @@ -26,6 +27,9 @@ import android.view.MenuItem; import com.android.settings.R; import com.android.settings.applications.PackageManagerWrapperImpl; import com.android.settings.dashboard.SiteMapManager; import com.android.settings.search.IndexingCallback; import java.util.concurrent.atomic.AtomicBoolean; /** * FeatureProvider for the refactored search code. Loading Loading @@ -88,6 +92,11 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider { return mDatabaseIndexingManager; } @Override public boolean isIndexingComplete(Context context) { return getIndexingManager(context).isIndexingComplete(); } public SiteMapManager getSiteMapManager() { if (mSiteMapManager == null) { mSiteMapManager = new SiteMapManager(); Loading @@ -96,9 +105,9 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider { } @Override public void updateIndex(Context context) { public void updateIndex(Context context, IndexingCallback callback) { long indexStartTime = System.currentTimeMillis(); getIndexingManager(context).indexDatabase(); getIndexingManager(context).indexDatabase(callback); Log.d(TAG, "IndexDatabase() took " + (System.currentTimeMillis() - indexStartTime) + " ms"); } Loading