diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 0751b814c17..13bc0488d3b 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -191,10 +191,12 @@ public class SettingsActivity extends SettingsDrawerActivity private final BroadcastReceiver mUserAddRemoveReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action.equals(Intent.ACTION_USER_ADDED) - || action.equals(Intent.ACTION_USER_REMOVED)) { - mSearchFeatureProvider.updateIndex(getApplicationContext()); + 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()); + } } } }; @@ -251,7 +253,9 @@ public class SettingsActivity extends SettingsDrawerActivity @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - mSearchFeatureProvider.updateIndex(getApplicationContext()); + if (!mSearchFeatureProvider.isEnabled(this)) { + mSearchFeatureProvider.updateIndex(getApplicationContext()); + } } @Override @@ -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)); - registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_ADDED)); - registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_REMOVED)); + 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); - unregisterReceiver(mUserAddRemoveReceiver); + if (!mSearchFeatureProvider.isEnabled(this)) { + unregisterReceiver(mUserAddRemoveReceiver); + } if (mDynamicIndexableContentMonitor != null) { mDynamicIndexableContentMonitor.unregister(this, LOADER_ID_INDEXABLE_CONTENT_MONITOR); } diff --git a/src/com/android/settings/search/IndexDatabaseHelper.java b/src/com/android/settings/search/IndexDatabaseHelper.java index fcf5e7cf63e..ba53e94c320 100644 --- a/src/com/android/settings/search/IndexDatabaseHelper.java +++ b/src/com/android/settings/search/IndexDatabaseHelper.java @@ -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); } diff --git a/src/com/android/settings/search2/DatabaseIndexingManager.java b/src/com/android/settings/search2/DatabaseIndexingManager.java index e29ffeb9122..2cd0cea274e 100644 --- a/src/com/android/settings/search2/DatabaseIndexingManager.java +++ b/src/com/android/settings/search2/DatabaseIndexingManager.java @@ -152,7 +152,7 @@ public class DatabaseIndexingManager { return mIsAvailable.get(); } - public void update() { + public void indexDatabase() { AsyncTask.execute(new Runnable() { @Override public void run() { diff --git a/src/com/android/settings/search2/SearchFeatureProviderImpl.java b/src/com/android/settings/search2/SearchFeatureProviderImpl.java index 97b7bfe0d13..a76d9055d74 100644 --- a/src/com/android/settings/search2/SearchFeatureProviderImpl.java +++ b/src/com/android/settings/search2/SearchFeatureProviderImpl.java @@ -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"); } } diff --git a/src/com/android/settings/search2/SearchFragment.java b/src/com/android/settings/search2/SearchFragment.java index 757a0e2ac0c..e26f5edbf2d 100644 --- a/src/com/android/settings/search2/SearchFragment.java +++ b/src/com/android/settings/search2/SearchFragment.java @@ -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 diff --git a/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java b/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java index 64d602e502d..d97360d0414 100644 --- a/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java +++ b/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java @@ -113,4 +113,16 @@ public class SearchFragmentTest { verify(mFeatureFactory.searchFeatureProvider) .getInstalledAppSearchLoader(any(Context.class), anyString()); } + + @Test + public void updateIndex_TriggerOnCreate() { + ActivityController activityController = + Robolectric.buildActivity(SearchActivity.class); + activityController.setup(); + SearchFragment fragment = (SearchFragment) activityController.get().getFragmentManager() + .findFragmentById(R.id.main_content); + + fragment.onAttach(null); + verify(mFeatureFactory.searchFeatureProvider).updateIndex(any(Context.class)); + } }