Reserve full indexing for SearchFragment

Full Index should only be accessible from Search Fragment,
and when only full index should declare a locale to be
indexed.

Test: make RunSettingsRoboTests
Fixes: 36656637
Change-Id: Ie673067118ac6b184570e116ea24a169be027053
This commit is contained in:
Matthew Fritze
2017-03-27 17:42:36 -07:00
parent 88b57826f5
commit 8a42b074a7
8 changed files with 65 additions and 115 deletions

View File

@@ -362,7 +362,8 @@ public class SecuritySettings extends SettingsPreferenceFragment
// smarter in the future. // smarter in the future.
final Activity activity = getActivity(); final Activity activity = getActivity();
FeatureFactory.getFactory(activity).getSearchFeatureProvider().getIndexingManager(activity) FeatureFactory.getFactory(activity).getSearchFeatureProvider().getIndexingManager(activity)
.updateFromClassNameResource(SecuritySettings.class.getName(), true, true); .updateFromClassNameResource(SecuritySettings.class.getName(),
true /* includeInSearchResults */);
PreferenceGroup securityStatusPreferenceGroup = PreferenceGroup securityStatusPreferenceGroup =
(PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS); (PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS);

View File

@@ -30,7 +30,6 @@ import android.content.SharedPreferences;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
@@ -86,7 +85,6 @@ public class SettingsActivity extends SettingsDrawerActivity
// Constants for state save/restore // Constants for state save/restore
private static final String SAVE_KEY_CATEGORIES = ":settings:categories"; 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_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 * 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 DynamicIndexableContentMonitor mDynamicIndexableContentMonitor;
private ActionBar mActionBar; private ActionBar mActionBar;
@@ -241,14 +226,6 @@ public class SettingsActivity extends SettingsDrawerActivity
return false; return false;
} }
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (!mSearchFeatureProvider.isEnabled(this)) {
mSearchFeatureProvider.updateIndex(getApplicationContext());
}
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
if (!mDisplaySearch) { if (!mDisplaySearch) {
@@ -346,15 +323,6 @@ public class SettingsActivity extends SettingsDrawerActivity
getFragmentManager().addOnBackStackChangedListener(this); 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) { if (savedState != null) {
// We are restarting from a previous saved state; used that to initialize, instead // We are restarting from a previous saved state; used that to initialize, instead
// of starting fresh. // of starting fresh.
@@ -568,10 +536,6 @@ public class SettingsActivity extends SettingsDrawerActivity
mDevelopmentPreferencesListener); mDevelopmentPreferencesListener);
registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 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) { if (mDynamicIndexableContentMonitor == null) {
mDynamicIndexableContentMonitor = new DynamicIndexableContentMonitor(); mDynamicIndexableContentMonitor = new DynamicIndexableContentMonitor();
} }
@@ -587,9 +551,6 @@ public class SettingsActivity extends SettingsDrawerActivity
mDevelopmentPreferencesListener); mDevelopmentPreferencesListener);
mDevelopmentPreferencesListener = null; mDevelopmentPreferencesListener = null;
unregisterReceiver(mBatteryInfoReceiver); unregisterReceiver(mBatteryInfoReceiver);
if (!mSearchFeatureProvider.isEnabled(this)) {
unregisterReceiver(mUserAddRemoveReceiver);
}
if (mDynamicIndexableContentMonitor != null) { if (mDynamicIndexableContentMonitor != null) {
mDynamicIndexableContentMonitor.unregister(this, LOADER_ID_INDEXABLE_CONTENT_MONITOR); mDynamicIndexableContentMonitor.unregister(this, LOADER_ID_INDEXABLE_CONTENT_MONITOR);
} }

View File

@@ -318,7 +318,7 @@ public class AccountPreferenceController extends PreferenceController
} }
mProfiles.put(userInfo.id, profileData); mProfiles.put(userInfo.id, profileData);
new SearchFeatureProviderImpl().getIndexingManager(mContext).updateFromClassNameResource( new SearchFeatureProviderImpl().getIndexingManager(mContext).updateFromClassNameResource(
UserAndAccountDashboardFragment.class.getName(), true, true); UserAndAccountDashboardFragment.class.getName(), true /* includeInSearchResults */);
} }
private DimmableIconPreference newAddAccountPreference(Context context) { private DimmableIconPreference newAddAccountPreference(Context context) {

View File

@@ -221,6 +221,7 @@ public class BuildNumberPreferenceController extends PreferenceController
mDevHitToast.show(); mDevHitToast.show();
// This is good time to index the Developer Options // This is good time to index the Developer Options
FeatureFactory.getFactory(mContext).getSearchFeatureProvider().getIndexingManager(mContext) FeatureFactory.getFactory(mContext).getSearchFeatureProvider().getIndexingManager(mContext)
.updateFromClassNameResource(DevelopmentSettings.class.getName(), true, true); .updateFromClassNameResource(DevelopmentSettings.class.getName(),
true /* includeInSearchResults */);
} }
} }

View File

@@ -176,7 +176,7 @@ public final class DynamicIndexableContentMonitor implements
public void onLoadFinished(Loader<List<PrintServiceInfo>> loader, public void onLoadFinished(Loader<List<PrintServiceInfo>> loader,
List<PrintServiceInfo> services) { List<PrintServiceInfo> services) {
mIndexManager.updateFromClassNameResource(PrintSettingsFragment.class.getName(), mIndexManager.updateFromClassNameResource(PrintSettingsFragment.class.getName(),
false /* rebuild */, true /* includeInSearchResult */); true /* includeInSearchResults */);
} }
@Override @Override
@@ -213,30 +213,30 @@ public final class DynamicIndexableContentMonitor implements
if (mIndexManager != null) return; if (mIndexManager != null) return;
mIndexManager = indexManager; mIndexManager = indexManager;
mInputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE); mInputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE);
buildIndex(true /* rebuild */); buildIndex();
// Watch for input device changes. // Watch for input device changes.
mInputManager.registerInputDeviceListener(this /* listener */, null /* handler */); mInputManager.registerInputDeviceListener(this /* listener */, null /* handler */);
} }
private void buildIndex(boolean rebuild) { private void buildIndex() {
mIndexManager.updateFromClassNameResource(PhysicalKeyboardFragment.class.getName(), mIndexManager.updateFromClassNameResource(PhysicalKeyboardFragment.class.getName(),
rebuild, true /* includeInSearchResult */); true /* includeInSearchResults */);
} }
@Override @Override
public void onInputDeviceAdded(int deviceId) { public void onInputDeviceAdded(int deviceId) {
buildIndex(false /* rebuild */); buildIndex();
} }
@Override @Override
public void onInputDeviceRemoved(int deviceId) { public void onInputDeviceRemoved(int deviceId) {
buildIndex(true /* rebuild */); buildIndex();
} }
@Override @Override
public void onInputDeviceChanged(int deviceId) { public void onInputDeviceChanged(int deviceId) {
buildIndex(true /* rebuild */); buildIndex();
} }
} }
@@ -344,7 +344,7 @@ public final class DynamicIndexableContentMonitor implements
mIndexManager = index; mIndexManager = index;
mPackageManager = context.getPackageManager(); mPackageManager = context.getPackageManager();
mAccessibilityServices.clear(); mAccessibilityServices.clear();
buildIndex(true /* rebuild */); buildIndex();
// Cache accessibility service packages to know when they go away. // Cache accessibility service packages to know when they go away.
AccessibilityManager accessibilityManager = (AccessibilityManager) context 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(), mIndexManager.updateFromClassNameResource(AccessibilitySettings.class.getName(),
rebuild, true /* includeInSearchResult */); true /* includeInSearchResults */);
} }
synchronized void onPackageAvailable(String packageName) { synchronized void onPackageAvailable(String packageName) {
@@ -372,13 +372,13 @@ public final class DynamicIndexableContentMonitor implements
.queryIntentServices(intent, 0 /* flags */); .queryIntentServices(intent, 0 /* flags */);
if (services == null || services.isEmpty()) return; if (services == null || services.isEmpty()) return;
mAccessibilityServices.add(packageName); mAccessibilityServices.add(packageName);
buildIndex(false /* rebuild */); buildIndex();
} }
synchronized void onPackageUnavailable(String packageName) { synchronized void onPackageUnavailable(String packageName) {
if (mIndexManager == null) return; if (mIndexManager == null) return;
if (!mAccessibilityServices.remove(packageName)) return; if (!mAccessibilityServices.remove(packageName)) return;
buildIndex(true /* rebuild */); buildIndex();
} }
} }
@@ -428,10 +428,10 @@ public final class DynamicIndexableContentMonitor implements
mContentResolver = context.getContentResolver(); mContentResolver = context.getContentResolver();
mInputMethodServices.clear(); mInputMethodServices.clear();
// Build index of {@link UserDictionary}. // Build index of {@link UserDictionary}.
buildIndex(LanguageAndInputSettings.class, true /* rebuild */); buildIndex(LanguageAndInputSettings.class);
// Build index of IMEs. // Build index of IMEs.
buildIndex(VirtualKeyboardFragment.class, true /* rebuild */); buildIndex(VirtualKeyboardFragment.class);
buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */); buildIndex(AvailableVirtualKeyboardFragment.class);
// Cache IME service packages to know when they go away. // Cache IME service packages to know when they go away.
final InputMethodManager inputMethodManager = (InputMethodManager) context final InputMethodManager inputMethodManager = (InputMethodManager) context
@@ -452,9 +452,9 @@ public final class DynamicIndexableContentMonitor implements
false /* notifyForDescendants */, this /* observer */); false /* notifyForDescendants */, this /* observer */);
} }
private void buildIndex(Class<?> indexClass, boolean rebuild) { private void buildIndex(Class<?> indexClass) {
mIndexManager.updateFromClassNameResource(indexClass.getName(), rebuild, mIndexManager.updateFromClassNameResource(indexClass.getName(),
true /* includeInSearchResult */); true /* includeInSearchResults */);
} }
synchronized void onPackageAvailable(String packageName) { synchronized void onPackageAvailable(String packageName) {
@@ -466,24 +466,24 @@ public final class DynamicIndexableContentMonitor implements
.queryIntentServices(intent, 0 /* flags */); .queryIntentServices(intent, 0 /* flags */);
if (services == null || services.isEmpty()) return; if (services == null || services.isEmpty()) return;
mInputMethodServices.add(packageName); mInputMethodServices.add(packageName);
buildIndex(VirtualKeyboardFragment.class, false /* rebuild */); buildIndex(VirtualKeyboardFragment.class);
buildIndex(AvailableVirtualKeyboardFragment.class, false /* rebuild */); buildIndex(AvailableVirtualKeyboardFragment.class);
} }
synchronized void onPackageUnavailable(String packageName) { synchronized void onPackageUnavailable(String packageName) {
if (mIndexManager == null) return; if (mIndexManager == null) return;
if (!mInputMethodServices.remove(packageName)) return; if (!mInputMethodServices.remove(packageName)) return;
buildIndex(VirtualKeyboardFragment.class, true /* rebuild */); buildIndex(VirtualKeyboardFragment.class);
buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */); buildIndex(AvailableVirtualKeyboardFragment.class);
} }
@Override @Override
public void onChange(boolean selfChange, Uri uri) { public void onChange(boolean selfChange, Uri uri) {
if (ENABLED_INPUT_METHODS_CONTENT_URI.equals(uri)) { if (ENABLED_INPUT_METHODS_CONTENT_URI.equals(uri)) {
buildIndex(VirtualKeyboardFragment.class, true /* rebuild */); buildIndex(VirtualKeyboardFragment.class);
buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */); buildIndex(AvailableVirtualKeyboardFragment.class);
} else if (UserDictionary.Words.CONTENT_URI.equals(uri)) { } else if (UserDictionary.Words.CONTENT_URI.equals(uri)) {
buildIndex(LanguageAndInputSettings.class, true /* rebuild */); buildIndex(LanguageAndInputSettings.class);
} }
} }
} }

View File

@@ -187,6 +187,8 @@ public class DatabaseIndexingManager {
final String localeStr = Locale.getDefault().toString(); final String localeStr = Locale.getDefault().toString();
updateDatabase(isLocaleIndexed, localeStr); updateDatabase(isLocaleIndexed, localeStr);
IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr);
} }
@VisibleForTesting @VisibleForTesting
@@ -242,8 +244,6 @@ public class DatabaseIndexingManager {
} finally { } finally {
database.endTransaction(); database.endTransaction();
} }
// TODO Refactor: move the locale out of the helper class
IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr);
mIsAvailable.set(true); mIsAvailable.set(true);
} }
@@ -432,12 +432,10 @@ public class DatabaseIndexingManager {
* Update the Index for a specific class name resources * Update the Index for a specific class name resources
* *
* @param className the class name (typically a fragment name). * @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 * @param includeInSearchResults true means that you want the bit "enabled" set so that the
* data will be seen included into the search results * data will be seen included into the search results
*/ */
public void updateFromClassNameResource(String className, final boolean rebuild, public void updateFromClassNameResource(String className, boolean includeInSearchResults) {
boolean includeInSearchResults) {
if (className == null) { if (className == null) {
throw new IllegalArgumentException("class name cannot be null!"); throw new IllegalArgumentException("class name cannot be null!");
} }
@@ -452,26 +450,12 @@ public class DatabaseIndexingManager {
@Override @Override
public void run() { public void run() {
addIndexableData(res); addIndexableData(res);
performIndexing(); updateDatabase(false, Locale.getDefault().toString());
res.enabled = false; 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() { private SQLiteDatabase getWritableDatabase() {
try { try {
return IndexDatabaseHelper.getInstance(mContext).getWritableDatabase(); return IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();

View File

@@ -63,6 +63,7 @@ import com.android.settings.inputmethod.VirtualKeyboardFragment;
import com.android.settings.language.LanguageAndInputSettings; import com.android.settings.language.LanguageAndInputSettings;
import com.android.settings.print.PrintSettingsFragment; import com.android.settings.print.PrintSettingsFragment;
import com.android.settings.search2.DatabaseIndexingManager; 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.ShadowActivityWithLoadManager;
import com.android.settings.testutils.shadow.ShadowContextImplWithRegisterReceiver; import com.android.settings.testutils.shadow.ShadowContextImplWithRegisterReceiver;
import com.android.settings.testutils.shadow.ShadowInputManager; import com.android.settings.testutils.shadow.ShadowInputManager;
@@ -162,6 +163,8 @@ public class DynamicIndexableContentMonitorTest {
DynamicIndexableContentMonitor.resetForTesting(); DynamicIndexableContentMonitor.resetForTesting();
mRobolectricPackageManager.reset(); mRobolectricPackageManager.reset();
DatabaseTestUtils.clearDb();
} }
@Test @Test
@@ -173,7 +176,7 @@ public class DynamicIndexableContentMonitorTest {
anyInt(), any(Bundle.class), any(LoaderManager.LoaderCallbacks.class)); anyInt(), any(Bundle.class), any(LoaderManager.LoaderCallbacks.class));
// No indexing happens. // No indexing happens.
verify(mIndexManager, never()).updateFromClassNameResource( verify(mIndexManager, never()).updateFromClassNameResource(
anyString(), anyBoolean(), anyBoolean()); anyString(), anyBoolean());
mMonitor.unregister(mActivity, LOADER_ID); mMonitor.unregister(mActivity, LOADER_ID);
@@ -226,7 +229,7 @@ public class DynamicIndexableContentMonitorTest {
mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */); mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */);
// Rebuild indexing should happen. // Rebuild indexing should happen.
verifyRebuildIndexing(PhysicalKeyboardFragment.class); verifyIncrementalIndexing(PhysicalKeyboardFragment.class);
// Input monitor should be registered to InputManager. // Input monitor should be registered to InputManager.
final InputManager.InputDeviceListener listener = extactInputDeviceListener(); final InputManager.InputDeviceListener listener = extactInputDeviceListener();
assertThat(listener).isNotNull(); assertThat(listener).isNotNull();
@@ -258,7 +261,7 @@ public class DynamicIndexableContentMonitorTest {
listener.onInputDeviceRemoved(2 /* deviceId */); listener.onInputDeviceRemoved(2 /* deviceId */);
verifyRebuildIndexing(PhysicalKeyboardFragment.class); verifyIncrementalIndexing(PhysicalKeyboardFragment.class);
/* /*
* A device is changed. * A device is changed.
@@ -267,14 +270,14 @@ public class DynamicIndexableContentMonitorTest {
listener.onInputDeviceChanged(3 /* deviceId */); listener.onInputDeviceChanged(3 /* deviceId */);
verifyRebuildIndexing(PhysicalKeyboardFragment.class); verifyIncrementalIndexing(PhysicalKeyboardFragment.class);
} }
@Test @Test
public void testAccessibilityServicesMonitor() throws Exception { public void testAccessibilityServicesMonitor() throws Exception {
mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */); mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */);
verifyRebuildIndexing(AccessibilitySettings.class); verifyIncrementalIndexing(AccessibilitySettings.class);
/* /*
* When an accessibility service package is installed, incremental indexing happen. * When an accessibility service package is installed, incremental indexing happen.
@@ -301,7 +304,7 @@ public class DynamicIndexableContentMonitorTest {
disableInstalledPackage(A11Y_PACKAGE_1); disableInstalledPackage(A11Y_PACKAGE_1);
verifyRebuildIndexing(AccessibilitySettings.class); verifyIncrementalIndexing(AccessibilitySettings.class);
/* /*
* When an accessibility service is enabled, incremental indexing happens. * When an accessibility service is enabled, incremental indexing happens.
@@ -319,7 +322,7 @@ public class DynamicIndexableContentMonitorTest {
uninstallAccessibilityService(A11Y_PACKAGE_1); uninstallAccessibilityService(A11Y_PACKAGE_1);
verifyRebuildIndexing(AccessibilitySettings.class); verifyIncrementalIndexing(AccessibilitySettings.class);
/* /*
* When an input method service package is installed, nothing happens. * When an input method service package is installed, nothing happens.
@@ -335,8 +338,8 @@ public class DynamicIndexableContentMonitorTest {
public void testInputMethodServicesMonitor() throws Exception { public void testInputMethodServicesMonitor() throws Exception {
mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */); mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */);
verifyRebuildIndexing(VirtualKeyboardFragment.class); verifyIncrementalIndexing(VirtualKeyboardFragment.class);
verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class); verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class);
final Uri enabledInputMethodsContentUri = Settings.Secure.getUriFor( final Uri enabledInputMethodsContentUri = Settings.Secure.getUriFor(
Settings.Secure.ENABLED_INPUT_METHODS); Settings.Secure.ENABLED_INPUT_METHODS);
@@ -371,8 +374,8 @@ public class DynamicIndexableContentMonitorTest {
disableInstalledPackage(IME_PACKAGE_1); disableInstalledPackage(IME_PACKAGE_1);
verifyRebuildIndexing(VirtualKeyboardFragment.class); verifyIncrementalIndexing(VirtualKeyboardFragment.class);
verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class); verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class);
/* /*
* When an input method service is enabled, incremental indexing happens. * When an input method service is enabled, incremental indexing happens.
@@ -391,8 +394,8 @@ public class DynamicIndexableContentMonitorTest {
uninstallInputMethodService(IME_PACKAGE_1); uninstallInputMethodService(IME_PACKAGE_1);
verifyRebuildIndexing(VirtualKeyboardFragment.class); verifyIncrementalIndexing(VirtualKeyboardFragment.class);
verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class); verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class);
/* /*
* When an accessibility service package is installed, nothing happens. * When an accessibility service package is installed, nothing happens.
@@ -411,8 +414,8 @@ public class DynamicIndexableContentMonitorTest {
observer.onChange(false /* selfChange */, enabledInputMethodsContentUri); observer.onChange(false /* selfChange */, enabledInputMethodsContentUri);
verifyRebuildIndexing(VirtualKeyboardFragment.class); verifyIncrementalIndexing(VirtualKeyboardFragment.class);
verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class); verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class);
} }
@Test @Test
@@ -423,7 +426,7 @@ public class DynamicIndexableContentMonitorTest {
final ContentObserver observer = extractContentObserver(UserDictionary.Words.CONTENT_URI); final ContentObserver observer = extractContentObserver(UserDictionary.Words.CONTENT_URI);
assertThat(observer).isNotNull(); assertThat(observer).isNotNull();
verifyRebuildIndexing(LanguageAndInputSettings.class); verifyIncrementalIndexing(LanguageAndInputSettings.class);
/* /*
* When user dictionary content is changed, rebuild indexing happens. * When user dictionary content is changed, rebuild indexing happens.
@@ -432,7 +435,7 @@ public class DynamicIndexableContentMonitorTest {
observer.onChange(false /* selfChange */, UserDictionary.Words.CONTENT_URI); 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) { private void verifyNoIndexing(Class<?> indexingClass) {
verify(mIndexManager, never()).updateFromClassNameResource(eq(indexingClass.getName()), verify(mIndexManager, never()).updateFromClassNameResource(eq(indexingClass.getName()),
anyBoolean(), 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 */);
} }
private void verifyIncrementalIndexing(Class<?> indexingClass) { private void verifyIncrementalIndexing(Class<?> indexingClass) {
verify(mIndexManager, times(1)).updateFromClassNameResource(indexingClass.getName(), verify(mIndexManager, times(1)).updateFromClassNameResource(indexingClass.getName(),
false /* rebuild */, true /* includeInSearchResults */); true /* includeInSearchResults */);
verify(mIndexManager, never()).updateFromClassNameResource(indexingClass.getName(), verify(mIndexManager, never()).updateFromClassNameResource(indexingClass.getName(),
true /* rebuild */, true /* includeInSearchResults */); false /* includeInSearchResults */);
} }
/* /*

View File

@@ -741,8 +741,15 @@ public class DatabaseIndexingManagerTest {
} }
@Test @Test
public void testLocaleUpdated_afterIndexing_localeAdded() { public void testLocaleUpdated_afterIndexing_localeNotAdded() {
mManager.updateDatabase(false, localeStr); mManager.updateDatabase(false, localeStr);
assertThat(IndexDatabaseHelper.getInstance(mContext)
.isLocaleAlreadyIndexed(mContext, localeStr)).isFalse();
}
@Test
public void testLocaleUpdated_afterFullIndexing_localeAdded() {
mManager.performIndexing();
assertThat(IndexDatabaseHelper.getInstance(mContext) assertThat(IndexDatabaseHelper.getInstance(mContext)
.isLocaleAlreadyIndexed(mContext, localeStr)).isTrue(); .isLocaleAlreadyIndexed(mContext, localeStr)).isTrue();
} }