Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(728)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java

Issue 2768663002: [Bookmarks] Refactor search view to use SelectableListLayout paradigm (Closed)
Patch Set: Fix spelling error Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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";
+
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();
+ }
}

Powered by Google App Engine
This is Rietveld 408576698