Add button to remove saved search query
TODO: move all saved query related logic into its own manager instead of leaving them in SearchFragment. Change-Id: I9635140eb507331246f9035a23138421cfa4b50a Fix: 27391895 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -74,8 +74,8 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
|
||||
@VisibleForTesting
|
||||
String mQuery;
|
||||
|
||||
private final SaveQueryRecorderCallback mSaveQueryRecorderCallback =
|
||||
new SaveQueryRecorderCallback();
|
||||
private final SaveQueryCallback mSaveQueryCallback =
|
||||
new SaveQueryCallback();
|
||||
|
||||
private boolean mNeverEnteredQuery = true;
|
||||
private int mResultClickCount;
|
||||
@@ -218,8 +218,8 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
// Save submitted query.
|
||||
getLoaderManager().restartLoader(SaveQueryRecorderCallback.LOADER_ID_SAVE_QUERY_TASK, null,
|
||||
mSaveQueryRecorderCallback);
|
||||
getLoaderManager().restartLoader(SaveQueryCallback.LOADER_ID_SAVE_QUERY_TASK, null,
|
||||
mSaveQueryCallback);
|
||||
hideKeyboard();
|
||||
return true;
|
||||
}
|
||||
@@ -264,6 +264,8 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
|
||||
}
|
||||
|
||||
public void onSearchResultClicked() {
|
||||
getLoaderManager().restartLoader(SaveQueryCallback.LOADER_ID_SAVE_QUERY_TASK, null,
|
||||
mSaveQueryCallback);
|
||||
mResultClickCount++;
|
||||
}
|
||||
|
||||
@@ -275,6 +277,13 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
|
||||
onQueryTextChange(queryString);
|
||||
}
|
||||
|
||||
public void onRemoveSavedQueryClicked(CharSequence title) {
|
||||
final Bundle args = new Bundle();
|
||||
args.putString(SaveQueryCallback.ARG_REMOVE_QUERY, title.toString());
|
||||
getLoaderManager().restartLoader(SaveQueryCallback.LOADER_ID_REMOVE_QUERY_TASK,
|
||||
args, mSaveQueryCallback);
|
||||
}
|
||||
|
||||
private void restartLoaders() {
|
||||
final LoaderManager loaderManager = getLoaderManager();
|
||||
mUnfinishedLoadersCount.set(NUM_QUERY_LOADERS);
|
||||
@@ -317,19 +326,31 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
|
||||
}
|
||||
}
|
||||
|
||||
private class SaveQueryRecorderCallback implements LoaderManager.LoaderCallbacks<Void> {
|
||||
private class SaveQueryCallback 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;
|
||||
private static final int LOADER_ID_REMOVE_QUERY_TASK = 1;
|
||||
private static final String ARG_REMOVE_QUERY = "remove_query";
|
||||
|
||||
@Override
|
||||
public Loader<Void> onCreateLoader(int id, Bundle args) {
|
||||
return new SavedQueryRecorder(getActivity(), mQuery);
|
||||
switch (id) {
|
||||
case LOADER_ID_SAVE_QUERY_TASK:
|
||||
return new SavedQueryRecorder(getActivity(), mQuery);
|
||||
case LOADER_ID_REMOVE_QUERY_TASK:
|
||||
return new SavedQueryRemover(getActivity(), args.getString(ARG_REMOVE_QUERY));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Void> loader, Void data) {
|
||||
|
||||
switch (loader.getId()) {
|
||||
case LOADER_ID_REMOVE_QUERY_TASK:
|
||||
getLoaderManager().restartLoader(LOADER_ID_RECENTS, null, SearchFragment.this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user