diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index 37022f06aff..b7d2a7325e4 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -362,7 +362,8 @@ public class SecuritySettings extends SettingsPreferenceFragment // smarter in the future. final Activity activity = getActivity(); FeatureFactory.getFactory(activity).getSearchFeatureProvider().getIndexingManager(activity) - .updateFromClassNameResource(SecuritySettings.class.getName(), true, true); + .updateFromClassNameResource(SecuritySettings.class.getName(), + true /* includeInSearchResults */); PreferenceGroup securityStatusPreferenceGroup = (PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS); diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 11190d57086..09380e5c00b 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -30,7 +30,6 @@ import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.Drawable; @@ -86,7 +85,6 @@ public class SettingsActivity extends SettingsDrawerActivity // Constants for state save/restore private static final String SAVE_KEY_CATEGORIES = ":settings:categories"; private static final String SAVE_KEY_SHOW_HOME_AS_UP = ":settings:show_home_as_up"; - private static final String SAVE_KEY_SHOW_SEARCH = ":settings:show_search"; /** * When starting this activity, the invoking Intent can contain this extra @@ -188,19 +186,6 @@ 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; private ActionBar mActionBar; @@ -241,14 +226,6 @@ public class SettingsActivity extends SettingsDrawerActivity return false; } - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (!mSearchFeatureProvider.isEnabled(this)) { - mSearchFeatureProvider.updateIndex(getApplicationContext()); - } - } - @Override public boolean onCreateOptionsMenu(Menu menu) { if (!mDisplaySearch) { @@ -346,15 +323,6 @@ public class SettingsActivity extends SettingsDrawerActivity getFragmentManager().addOnBackStackChangedListener(this); - if (mIsShowingDashboard && !mSearchFeatureProvider.isEnabled(this)) { - // Run the Index update only if we have some space - if (!Utils.isLowStorage(this)) { - mSearchFeatureProvider.updateIndex(getApplicationContext()); - } else { - Log.w(LOG_TAG, "Cannot update the Indexer as we are running low on storage space!"); - } - } - if (savedState != null) { // We are restarting from a previous saved state; used that to initialize, instead // of starting fresh. @@ -568,10 +536,6 @@ 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(); } @@ -587,9 +551,6 @@ public class SettingsActivity extends SettingsDrawerActivity mDevelopmentPreferencesListener); mDevelopmentPreferencesListener = null; unregisterReceiver(mBatteryInfoReceiver); - if (!mSearchFeatureProvider.isEnabled(this)) { - unregisterReceiver(mUserAddRemoveReceiver); - } if (mDynamicIndexableContentMonitor != null) { mDynamicIndexableContentMonitor.unregister(this, LOADER_ID_INDEXABLE_CONTENT_MONITOR); } diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java index 85e09d1ee68..6d226206eba 100644 --- a/src/com/android/settings/accounts/AccountPreferenceController.java +++ b/src/com/android/settings/accounts/AccountPreferenceController.java @@ -318,7 +318,7 @@ public class AccountPreferenceController extends PreferenceController } mProfiles.put(userInfo.id, profileData); new SearchFeatureProviderImpl().getIndexingManager(mContext).updateFromClassNameResource( - UserAndAccountDashboardFragment.class.getName(), true, true); + UserAndAccountDashboardFragment.class.getName(), true /* includeInSearchResults */); } private DimmableIconPreference newAddAccountPreference(Context context) { diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java index f174e10bd7c..bee13513c62 100644 --- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java @@ -221,6 +221,7 @@ public class BuildNumberPreferenceController extends PreferenceController mDevHitToast.show(); // This is good time to index the Developer Options FeatureFactory.getFactory(mContext).getSearchFeatureProvider().getIndexingManager(mContext) - .updateFromClassNameResource(DevelopmentSettings.class.getName(), true, true); + .updateFromClassNameResource(DevelopmentSettings.class.getName(), + true /* includeInSearchResults */); } } diff --git a/src/com/android/settings/search/DynamicIndexableContentMonitor.java b/src/com/android/settings/search/DynamicIndexableContentMonitor.java index b3672021833..bb9f5adf12d 100644 --- a/src/com/android/settings/search/DynamicIndexableContentMonitor.java +++ b/src/com/android/settings/search/DynamicIndexableContentMonitor.java @@ -176,7 +176,7 @@ public final class DynamicIndexableContentMonitor implements public void onLoadFinished(Loader> loader, List services) { mIndexManager.updateFromClassNameResource(PrintSettingsFragment.class.getName(), - false /* rebuild */, true /* includeInSearchResult */); + true /* includeInSearchResults */); } @Override @@ -213,30 +213,30 @@ public final class DynamicIndexableContentMonitor implements if (mIndexManager != null) return; mIndexManager = indexManager; mInputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE); - buildIndex(true /* rebuild */); + buildIndex(); // Watch for input device changes. mInputManager.registerInputDeviceListener(this /* listener */, null /* handler */); } - private void buildIndex(boolean rebuild) { + private void buildIndex() { mIndexManager.updateFromClassNameResource(PhysicalKeyboardFragment.class.getName(), - rebuild, true /* includeInSearchResult */); + true /* includeInSearchResults */); } @Override public void onInputDeviceAdded(int deviceId) { - buildIndex(false /* rebuild */); + buildIndex(); } @Override public void onInputDeviceRemoved(int deviceId) { - buildIndex(true /* rebuild */); + buildIndex(); } @Override public void onInputDeviceChanged(int deviceId) { - buildIndex(true /* rebuild */); + buildIndex(); } } @@ -344,7 +344,7 @@ public final class DynamicIndexableContentMonitor implements mIndexManager = index; mPackageManager = context.getPackageManager(); mAccessibilityServices.clear(); - buildIndex(true /* rebuild */); + buildIndex(); // Cache accessibility service packages to know when they go away. AccessibilityManager accessibilityManager = (AccessibilityManager) context @@ -358,9 +358,9 @@ public final class DynamicIndexableContentMonitor implements } } - private void buildIndex(boolean rebuild) { + private void buildIndex() { mIndexManager.updateFromClassNameResource(AccessibilitySettings.class.getName(), - rebuild, true /* includeInSearchResult */); + true /* includeInSearchResults */); } synchronized void onPackageAvailable(String packageName) { @@ -372,13 +372,13 @@ public final class DynamicIndexableContentMonitor implements .queryIntentServices(intent, 0 /* flags */); if (services == null || services.isEmpty()) return; mAccessibilityServices.add(packageName); - buildIndex(false /* rebuild */); + buildIndex(); } synchronized void onPackageUnavailable(String packageName) { if (mIndexManager == null) return; if (!mAccessibilityServices.remove(packageName)) return; - buildIndex(true /* rebuild */); + buildIndex(); } } @@ -428,10 +428,10 @@ public final class DynamicIndexableContentMonitor implements mContentResolver = context.getContentResolver(); mInputMethodServices.clear(); // Build index of {@link UserDictionary}. - buildIndex(LanguageAndInputSettings.class, true /* rebuild */); + buildIndex(LanguageAndInputSettings.class); // Build index of IMEs. - buildIndex(VirtualKeyboardFragment.class, true /* rebuild */); - buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */); + buildIndex(VirtualKeyboardFragment.class); + buildIndex(AvailableVirtualKeyboardFragment.class); // Cache IME service packages to know when they go away. final InputMethodManager inputMethodManager = (InputMethodManager) context @@ -452,9 +452,9 @@ public final class DynamicIndexableContentMonitor implements false /* notifyForDescendants */, this /* observer */); } - private void buildIndex(Class indexClass, boolean rebuild) { - mIndexManager.updateFromClassNameResource(indexClass.getName(), rebuild, - true /* includeInSearchResult */); + private void buildIndex(Class indexClass) { + mIndexManager.updateFromClassNameResource(indexClass.getName(), + true /* includeInSearchResults */); } synchronized void onPackageAvailable(String packageName) { @@ -466,24 +466,24 @@ public final class DynamicIndexableContentMonitor implements .queryIntentServices(intent, 0 /* flags */); if (services == null || services.isEmpty()) return; mInputMethodServices.add(packageName); - buildIndex(VirtualKeyboardFragment.class, false /* rebuild */); - buildIndex(AvailableVirtualKeyboardFragment.class, false /* rebuild */); + buildIndex(VirtualKeyboardFragment.class); + buildIndex(AvailableVirtualKeyboardFragment.class); } synchronized void onPackageUnavailable(String packageName) { if (mIndexManager == null) return; if (!mInputMethodServices.remove(packageName)) return; - buildIndex(VirtualKeyboardFragment.class, true /* rebuild */); - buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */); + buildIndex(VirtualKeyboardFragment.class); + buildIndex(AvailableVirtualKeyboardFragment.class); } @Override public void onChange(boolean selfChange, Uri uri) { if (ENABLED_INPUT_METHODS_CONTENT_URI.equals(uri)) { - buildIndex(VirtualKeyboardFragment.class, true /* rebuild */); - buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */); + buildIndex(VirtualKeyboardFragment.class); + buildIndex(AvailableVirtualKeyboardFragment.class); } else if (UserDictionary.Words.CONTENT_URI.equals(uri)) { - buildIndex(LanguageAndInputSettings.class, true /* rebuild */); + buildIndex(LanguageAndInputSettings.class); } } } diff --git a/src/com/android/settings/search2/DatabaseIndexingManager.java b/src/com/android/settings/search2/DatabaseIndexingManager.java index 0d61a6658d1..1e664ffbf2a 100644 --- a/src/com/android/settings/search2/DatabaseIndexingManager.java +++ b/src/com/android/settings/search2/DatabaseIndexingManager.java @@ -187,6 +187,8 @@ public class DatabaseIndexingManager { final String localeStr = Locale.getDefault().toString(); updateDatabase(isLocaleIndexed, localeStr); + + IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr); } @VisibleForTesting @@ -242,8 +244,6 @@ public class DatabaseIndexingManager { } finally { database.endTransaction(); } - // TODO Refactor: move the locale out of the helper class - IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr); mIsAvailable.set(true); } @@ -432,12 +432,10 @@ public class DatabaseIndexingManager { * Update the Index for a specific class name resources * * @param className the class name (typically a fragment name). - * @param rebuild true means that you want to delete the data from the Index first. * @param includeInSearchResults true means that you want the bit "enabled" set so that the * data will be seen included into the search results */ - public void updateFromClassNameResource(String className, final boolean rebuild, - boolean includeInSearchResults) { + public void updateFromClassNameResource(String className, boolean includeInSearchResults) { if (className == null) { throw new IllegalArgumentException("class name cannot be null!"); } @@ -452,26 +450,12 @@ public class DatabaseIndexingManager { @Override public void run() { addIndexableData(res); - performIndexing(); + updateDatabase(false, Locale.getDefault().toString()); res.enabled = false; } }); } - public void updateFromSearchIndexableData(final SearchIndexableData data) { - AsyncTask.execute(new Runnable() { - @Override - public void run() { - addIndexableData(data); - performIndexing(); - } - }); - } - - private SQLiteDatabase getReadableDatabase() { - return IndexDatabaseHelper.getInstance(mContext).getReadableDatabase(); - } - private SQLiteDatabase getWritableDatabase() { try { return IndexDatabaseHelper.getInstance(mContext).getWritableDatabase(); diff --git a/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java b/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java index 5068349c42f..79c0d632517 100644 --- a/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java +++ b/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java @@ -63,6 +63,7 @@ import com.android.settings.inputmethod.VirtualKeyboardFragment; import com.android.settings.language.LanguageAndInputSettings; import com.android.settings.print.PrintSettingsFragment; import com.android.settings.search2.DatabaseIndexingManager; +import com.android.settings.testutils.DatabaseTestUtils; import com.android.settings.testutils.shadow.ShadowActivityWithLoadManager; import com.android.settings.testutils.shadow.ShadowContextImplWithRegisterReceiver; import com.android.settings.testutils.shadow.ShadowInputManager; @@ -162,6 +163,8 @@ public class DynamicIndexableContentMonitorTest { DynamicIndexableContentMonitor.resetForTesting(); mRobolectricPackageManager.reset(); + + DatabaseTestUtils.clearDb(); } @Test @@ -173,7 +176,7 @@ public class DynamicIndexableContentMonitorTest { anyInt(), any(Bundle.class), any(LoaderManager.LoaderCallbacks.class)); // No indexing happens. verify(mIndexManager, never()).updateFromClassNameResource( - anyString(), anyBoolean(), anyBoolean()); + anyString(), anyBoolean()); mMonitor.unregister(mActivity, LOADER_ID); @@ -226,7 +229,7 @@ public class DynamicIndexableContentMonitorTest { mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */); // Rebuild indexing should happen. - verifyRebuildIndexing(PhysicalKeyboardFragment.class); + verifyIncrementalIndexing(PhysicalKeyboardFragment.class); // Input monitor should be registered to InputManager. final InputManager.InputDeviceListener listener = extactInputDeviceListener(); assertThat(listener).isNotNull(); @@ -258,7 +261,7 @@ public class DynamicIndexableContentMonitorTest { listener.onInputDeviceRemoved(2 /* deviceId */); - verifyRebuildIndexing(PhysicalKeyboardFragment.class); + verifyIncrementalIndexing(PhysicalKeyboardFragment.class); /* * A device is changed. @@ -267,14 +270,14 @@ public class DynamicIndexableContentMonitorTest { listener.onInputDeviceChanged(3 /* deviceId */); - verifyRebuildIndexing(PhysicalKeyboardFragment.class); + verifyIncrementalIndexing(PhysicalKeyboardFragment.class); } @Test public void testAccessibilityServicesMonitor() throws Exception { mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */); - verifyRebuildIndexing(AccessibilitySettings.class); + verifyIncrementalIndexing(AccessibilitySettings.class); /* * When an accessibility service package is installed, incremental indexing happen. @@ -301,7 +304,7 @@ public class DynamicIndexableContentMonitorTest { disableInstalledPackage(A11Y_PACKAGE_1); - verifyRebuildIndexing(AccessibilitySettings.class); + verifyIncrementalIndexing(AccessibilitySettings.class); /* * When an accessibility service is enabled, incremental indexing happens. @@ -319,7 +322,7 @@ public class DynamicIndexableContentMonitorTest { uninstallAccessibilityService(A11Y_PACKAGE_1); - verifyRebuildIndexing(AccessibilitySettings.class); + verifyIncrementalIndexing(AccessibilitySettings.class); /* * When an input method service package is installed, nothing happens. @@ -335,8 +338,8 @@ public class DynamicIndexableContentMonitorTest { public void testInputMethodServicesMonitor() throws Exception { mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */); - verifyRebuildIndexing(VirtualKeyboardFragment.class); - verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class); + verifyIncrementalIndexing(VirtualKeyboardFragment.class); + verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class); final Uri enabledInputMethodsContentUri = Settings.Secure.getUriFor( Settings.Secure.ENABLED_INPUT_METHODS); @@ -371,8 +374,8 @@ public class DynamicIndexableContentMonitorTest { disableInstalledPackage(IME_PACKAGE_1); - verifyRebuildIndexing(VirtualKeyboardFragment.class); - verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class); + verifyIncrementalIndexing(VirtualKeyboardFragment.class); + verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class); /* * When an input method service is enabled, incremental indexing happens. @@ -391,8 +394,8 @@ public class DynamicIndexableContentMonitorTest { uninstallInputMethodService(IME_PACKAGE_1); - verifyRebuildIndexing(VirtualKeyboardFragment.class); - verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class); + verifyIncrementalIndexing(VirtualKeyboardFragment.class); + verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class); /* * When an accessibility service package is installed, nothing happens. @@ -411,8 +414,8 @@ public class DynamicIndexableContentMonitorTest { observer.onChange(false /* selfChange */, enabledInputMethodsContentUri); - verifyRebuildIndexing(VirtualKeyboardFragment.class); - verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class); + verifyIncrementalIndexing(VirtualKeyboardFragment.class); + verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class); } @Test @@ -423,7 +426,7 @@ public class DynamicIndexableContentMonitorTest { final ContentObserver observer = extractContentObserver(UserDictionary.Words.CONTENT_URI); assertThat(observer).isNotNull(); - verifyRebuildIndexing(LanguageAndInputSettings.class); + verifyIncrementalIndexing(LanguageAndInputSettings.class); /* * When user dictionary content is changed, rebuild indexing happens. @@ -432,7 +435,7 @@ public class DynamicIndexableContentMonitorTest { observer.onChange(false /* selfChange */, UserDictionary.Words.CONTENT_URI); - verifyRebuildIndexing(LanguageAndInputSettings.class); + verifyIncrementalIndexing(LanguageAndInputSettings.class); } /* @@ -441,21 +444,14 @@ public class DynamicIndexableContentMonitorTest { private void verifyNoIndexing(Class indexingClass) { verify(mIndexManager, never()).updateFromClassNameResource(eq(indexingClass.getName()), - anyBoolean(), anyBoolean()); - } - - private void verifyRebuildIndexing(Class indexingClass) { - verify(mIndexManager, times(1)).updateFromClassNameResource(indexingClass.getName(), - true /* rebuild */, true /* includeInSearchResults */); - verify(mIndexManager, never()).updateFromClassNameResource(indexingClass.getName(), - false /* rebuild */, true /* includeInSearchResults */); + anyBoolean()); } private void verifyIncrementalIndexing(Class indexingClass) { verify(mIndexManager, times(1)).updateFromClassNameResource(indexingClass.getName(), - false /* rebuild */, true /* includeInSearchResults */); + true /* includeInSearchResults */); verify(mIndexManager, never()).updateFromClassNameResource(indexingClass.getName(), - true /* rebuild */, true /* includeInSearchResults */); + false /* includeInSearchResults */); } /* diff --git a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java index 29cbe644878..327b9104373 100644 --- a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java +++ b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java @@ -741,8 +741,15 @@ public class DatabaseIndexingManagerTest { } @Test - public void testLocaleUpdated_afterIndexing_localeAdded() { + public void testLocaleUpdated_afterIndexing_localeNotAdded() { mManager.updateDatabase(false, localeStr); + assertThat(IndexDatabaseHelper.getInstance(mContext) + .isLocaleAlreadyIndexed(mContext, localeStr)).isFalse(); + } + + @Test + public void testLocaleUpdated_afterFullIndexing_localeAdded() { + mManager.performIndexing(); assertThat(IndexDatabaseHelper.getInstance(mContext) .isLocaleAlreadyIndexed(mContext, localeStr)).isTrue(); }