Showing recents in search
A list of recent queries will display when search first launches, or when text query is empty. Fix: 32452066 Test: make RunSettingsRoboTests Change-Id: Ic697f8c0795f2315a01406537c7ce1bbf9a813be
This commit is contained in:
@@ -52,8 +52,9 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
private static final String STATE_RESULT_CLICK_COUNT = "state_result_click_count";
|
||||
|
||||
// Loader IDs
|
||||
private static final int LOADER_ID_DATABASE = 0;
|
||||
private static final int LOADER_ID_INSTALLED_APPS = 1;
|
||||
private static final int LOADER_ID_RECENTS = 0;
|
||||
private static final int LOADER_ID_DATABASE = 1;
|
||||
private static final int LOADER_ID_INSTALLED_APPS = 2;
|
||||
|
||||
// Logging
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||
@@ -61,6 +62,10 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||
String mQuery;
|
||||
|
||||
private final SaveQueryRecorderCallback mSaveQueryRecorderCallback =
|
||||
new SaveQueryRecorderCallback();
|
||||
|
||||
private boolean mNeverEnteredQuery = true;
|
||||
private int mResultClickCount;
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
@@ -68,6 +73,7 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
|
||||
private SearchResultsAdapter mSearchAdapter;
|
||||
private RecyclerView mResultsRecyclerView;
|
||||
private SearchView mSearchView;
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -86,18 +92,21 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
super.onCreate(savedInstanceState);
|
||||
setHasOptionsMenu(true);
|
||||
mSearchAdapter = new SearchResultsAdapter(this);
|
||||
final LoaderManager loaderManager = getLoaderManager();
|
||||
if (savedInstanceState != null) {
|
||||
mQuery = savedInstanceState.getString(STATE_QUERY);
|
||||
mNeverEnteredQuery = savedInstanceState.getBoolean(STATE_NEVER_ENTERED_QUERY);
|
||||
mResultClickCount = savedInstanceState.getInt(STATE_RESULT_CLICK_COUNT);
|
||||
final LoaderManager loaderManager = getLoaderManager();
|
||||
loaderManager.initLoader(LOADER_ID_DATABASE, null, this);
|
||||
loaderManager.initLoader(LOADER_ID_INSTALLED_APPS, null, this);
|
||||
} else {
|
||||
loaderManager.initLoader(LOADER_ID_RECENTS, null, this);
|
||||
}
|
||||
|
||||
final Activity activity = getActivity();
|
||||
final ActionBar actionBar = activity.getActionBar();
|
||||
actionBar.setCustomView(makeSearchView(actionBar, mQuery));
|
||||
mSearchView = makeSearchView(actionBar, mQuery);
|
||||
actionBar.setCustomView(mSearchView);
|
||||
actionBar.setDisplayShowCustomEnabled(true);
|
||||
actionBar.setDisplayShowTitleEnabled(false);
|
||||
|
||||
@@ -151,7 +160,10 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
mSearchAdapter.clearResults();
|
||||
|
||||
if (TextUtils.isEmpty(mQuery)) {
|
||||
getLoaderManager().destroyLoader(LOADER_ID_DATABASE);
|
||||
final LoaderManager loaderManager = getLoaderManager();
|
||||
loaderManager.destroyLoader(LOADER_ID_DATABASE);
|
||||
loaderManager.destroyLoader(LOADER_ID_INSTALLED_APPS);
|
||||
loaderManager.restartLoader(LOADER_ID_RECENTS, null /* args */, this /* callback */);
|
||||
} else {
|
||||
restartLoaders();
|
||||
}
|
||||
@@ -161,6 +173,10 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
// Save submitted query.
|
||||
getLoaderManager().restartLoader(SaveQueryRecorderCallback.LOADER_ID_SAVE_QUERY_TASK, null,
|
||||
mSaveQueryRecorderCallback);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -173,6 +189,8 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
return mSearchFeatureProvider.getDatabaseSearchLoader(activity, mQuery);
|
||||
case LOADER_ID_INSTALLED_APPS:
|
||||
return mSearchFeatureProvider.getInstalledAppSearchLoader(activity, mQuery);
|
||||
case LOADER_ID_RECENTS:
|
||||
return mSearchFeatureProvider.getSavedQueryLoader(activity);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@@ -191,6 +209,12 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
mResultClickCount++;
|
||||
}
|
||||
|
||||
public void onSavedQueryClicked(CharSequence query) {
|
||||
final String queryString = query.toString();
|
||||
mSearchView.setQuery(queryString, false /* submit */);
|
||||
onQueryTextChange(queryString);
|
||||
}
|
||||
|
||||
private void restartLoaders() {
|
||||
final LoaderManager loaderManager = getLoaderManager();
|
||||
loaderManager.restartLoader(LOADER_ID_DATABASE, null /* args */, this /* callback */);
|
||||
@@ -207,4 +231,25 @@ public class SearchFragment extends InstrumentedFragment implements
|
||||
searchView.setLayoutParams(lp);
|
||||
return searchView;
|
||||
}
|
||||
|
||||
private class SaveQueryRecorderCallback implements LoaderManager.LoaderCallbacks<Void> {
|
||||
// TODO: make a generic background task manager to handle one-off tasks like this one.
|
||||
|
||||
private static final int LOADER_ID_SAVE_QUERY_TASK = 0;
|
||||
|
||||
@Override
|
||||
public Loader<Void> onCreateLoader(int id, Bundle args) {
|
||||
return new SavedQueryRecorder(getActivity(), mQuery);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Void> loader, Void data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(Loader<Void> loader) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user