Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java |
| index 2ac93fbb8153af21fdb33597ba24c467f67fc8e8..833188b58325d9a149055ffc88d78418b91526c7 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java |
| @@ -7,14 +7,13 @@ package org.chromium.chrome.browser.bookmarks; |
| import android.app.Activity; |
| import android.app.ActivityManager; |
| import android.content.Context; |
| +import android.support.v4.view.GravityCompat; |
| import android.support.v4.widget.DrawerLayout; |
| import android.support.v7.widget.RecyclerView; |
| import android.support.v7.widget.Toolbar; |
| import android.text.TextUtils; |
| -import android.view.Gravity; |
| import android.view.View; |
| import android.view.ViewGroup; |
| -import android.widget.ViewSwitcher; |
| import org.chromium.base.ApiCompatibilityUtils; |
| import org.chromium.base.ContextUtils; |
| @@ -29,6 +28,7 @@ import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim; |
| import org.chromium.chrome.browser.profiles.Profile; |
| import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable; |
| import org.chromium.chrome.browser.widget.selection.SelectableListLayout; |
| +import org.chromium.chrome.browser.widget.selection.SelectableListToolbar.SearchDelegate; |
| import org.chromium.chrome.browser.widget.selection.SelectionDelegate; |
| import org.chromium.components.bookmarks.BookmarkId; |
| @@ -39,9 +39,15 @@ import java.util.Stack; |
| * views and shared logics between tablet and phone. For tablet/phone specific logics, see |
| * {@link BookmarkActivity} (phone) and {@link BookmarkPage} (tablet). |
| */ |
| -public class BookmarkManager implements BookmarkDelegate { |
| +public class BookmarkManager implements BookmarkDelegate, SearchDelegate { |
| private static final int FAVICON_MAX_CACHE_SIZE_BYTES = 10 * 1024 * 1024; // 10MB |
| + /** |
| + * This shared preference used to be used to save a list of recent searches. That feature |
| + * has been removed, so this string is now used solely to clear the shared preference. |
| + */ |
| + private static final String PREF_SEARCH_HISTORY = "bookmark_search_history"; |
| + |
|
gone
2017/03/23 00:56:36
We should really have a central place for this.
Theresa
2017/03/23 15:49:38
"bookmark_search_history" was previously in Bookma
gone
2017/03/23 17:12:03
Yeah, common place for removing deprecated prefs.
|
| private Activity mActivity; |
| private ViewGroup mMainView; |
| private BookmarkModel mBookmarkModel; |
| @@ -53,8 +59,6 @@ public class BookmarkManager implements BookmarkDelegate { |
| private RecyclerView mRecyclerView; |
| private BookmarkItemsAdapter mAdapter; |
| private BookmarkActionBar mToolbar; |
| - private BookmarkSearchView mSearchView; |
| - private ViewSwitcher mViewSwitcher; |
| private DrawerLayout mDrawer; |
| private BookmarkDrawerListView mDrawerListView; |
| private SelectionDelegate<BookmarkId> mSelectionDelegate; |
| @@ -102,7 +106,6 @@ public class BookmarkManager implements BookmarkDelegate { |
| private final Runnable mModelLoadedRunnable = new Runnable() { |
| @Override |
| public void run() { |
| - mSearchView.onBookmarkDelegateInitialized(BookmarkManager.this); |
| mDrawerListView.onBookmarkDelegateInitialized(BookmarkManager.this); |
| mAdapter.onBookmarkDelegateInitialized(BookmarkManager.this); |
| mToolbar.onBookmarkDelegateInitialized(BookmarkManager.this); |
| @@ -144,8 +147,7 @@ public class BookmarkManager implements BookmarkDelegate { |
| mSelectableListLayout.initializeEmptyView( |
| ApiCompatibilityUtils.getDrawable( |
| mActivity.getResources(), R.drawable.bookmark_logo_large), |
| - R.string.bookmarks_folder_empty, |
| - 0 /* Bookmarks search is not yet controlled by the SelectableListLayout. */); |
| + R.string.bookmarks_folder_empty, R.string.bookmark_no_result); |
| mAdapter = new BookmarkItemsAdapter(activity); |
| @@ -154,11 +156,11 @@ public class BookmarkManager implements BookmarkDelegate { |
| mToolbar = (BookmarkActionBar) mSelectableListLayout.initializeToolbar( |
| R.layout.bookmark_action_bar, mSelectionDelegate, 0, mDrawer, |
| R.id.normal_menu_group, R.id.selection_mode_menu_group, null, true, null); |
| + mToolbar.initializeSearchView( |
| + this, R.string.bookmark_action_bar_search, R.id.search_menu_id); |
| - mViewSwitcher = (ViewSwitcher) mMainView.findViewById(R.id.bookmark_view_switcher); |
| mUndoController = new BookmarkUndoController(activity, mBookmarkModel, |
| ((SnackbarManageable) activity).getSnackbarManager()); |
| - mSearchView = (BookmarkSearchView) getView().findViewById(R.id.bookmark_search_view); |
| mBookmarkModel.addObserver(mBookmarkModelObserver); |
| initializeToLoadingState(); |
| mBookmarkModel.runAfterBookmarkModelLoaded(mModelLoadedRunnable); |
| @@ -179,6 +181,10 @@ public class BookmarkManager implements BookmarkDelegate { |
| if (!isDialogUi) { |
| RecordUserAction.record("MobileBookmarkManagerPageOpen"); |
| } |
| + |
| + // TODO(twellington): Remove this when Chrome version 59 is a distant memory and users |
| + // are unlikely to have the old PREF_SEARCH_HISTORY in shared preferences. |
| + ContextUtils.getAppSharedPreferences().edit().remove(PREF_SEARCH_HISTORY).apply(); |
| } |
| /** |
| @@ -207,8 +213,8 @@ public class BookmarkManager implements BookmarkDelegate { |
| */ |
| public boolean onBackPressed() { |
| if (doesDrawerExist()) { |
| - if (mDrawer.isDrawerVisible(Gravity.START)) { |
| - mDrawer.closeDrawer(Gravity.START); |
| + if (mDrawer.isDrawerVisible(GravityCompat.START)) { |
| + mDrawer.closeDrawer(GravityCompat.START); |
| return true; |
| } |
| } |
| @@ -347,7 +353,7 @@ public class BookmarkManager implements BookmarkDelegate { |
| @Override |
| public void openFolder(BookmarkId folder) { |
| - closeSearchUI(); |
| + mToolbar.hideSearchView(); |
| setState(BookmarkUIState.createFolderState(folder, mBookmarkModel)); |
| mRecyclerView.scrollToPosition(0); |
| } |
| @@ -369,6 +375,9 @@ public class BookmarkManager implements BookmarkDelegate { |
| // UIObservers, which means that there will be no observers at the time. Do nothing. |
| assert mUIObservers.isEmpty(); |
| break; |
| + case BookmarkUIState.STATE_SEARCHING: |
| + observer.onSearchStateSet(); |
| + break; |
| default: |
| assert false : "State not valid"; |
| break; |
| @@ -384,7 +393,7 @@ public class BookmarkManager implements BookmarkDelegate { |
| public void closeDrawer() { |
| if (!doesDrawerExist()) return; |
| - mDrawer.closeDrawer(Gravity.START); |
| + mDrawer.closeDrawer(GravityCompat.START); |
| } |
| @Override |
| @@ -403,14 +412,22 @@ public class BookmarkManager implements BookmarkDelegate { |
| @Override |
| public void openSearchUI() { |
| - // Give search view focus, because it needs to handle back key event. |
| - mViewSwitcher.showNext(); |
| + mSelectableListLayout.onStartSearch(); |
| + mToolbar.showSearchView(); |
| + setState(BookmarkUIState.createSearchState()); |
| } |
| @Override |
| public void closeSearchUI() { |
| - if (mSearchView.getVisibility() != View.VISIBLE) return; |
| - mViewSwitcher.showPrevious(); |
| + mSelectableListLayout.onEndSearch(); |
| + |
| + // Pop the search state off the stack. |
| + mStateStack.pop(); |
| + |
| + // Set the state back to the folder that was previously being viewed. Listeners, including |
| + // the BookmarkItemsAdapter, will be notified of the change and the list of bookmarks will |
| + // be updated. |
| + setState(mStateStack.pop()); |
| } |
| @Override |
| @@ -438,4 +455,16 @@ public class BookmarkManager implements BookmarkDelegate { |
| public LargeIconBridge getLargeIconBridge() { |
| return mLargeIconBridge; |
| } |
| + |
| + // SearchDelegate overrides |
| + |
| + @Override |
| + public void onSearchTextChanged(String query) { |
| + mAdapter.search(query); |
| + } |
| + |
| + @Override |
| + public void onEndSearch() { |
| + closeSearchUI(); |
| + } |
| } |