| Index: chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
|
| index 78f1d85c91d6efd14b519b8c183489f6b68d0139..0675e4ba47049b0adf31d62e551f1ca0bb200a2c 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
|
| @@ -7,6 +7,7 @@ package org.chromium.chrome.browser.bookmarks;
|
| import android.content.Context;
|
| import android.support.v7.widget.RecyclerView;
|
| import android.support.v7.widget.RecyclerView.ViewHolder;
|
| +import android.text.TextUtils;
|
| import android.view.LayoutInflater;
|
| import android.view.View;
|
| import android.view.ViewGroup;
|
| @@ -33,10 +34,14 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
| private static final int DIVIDER_VIEW = 2;
|
| private static final int BOOKMARK_VIEW = 3;
|
|
|
| + private static final int MAXIMUM_NUMBER_OF_SEARCH_RESULTS = 500;
|
| + private static final String EMPTY_QUERY = null;
|
| +
|
| private BookmarkDelegate mDelegate;
|
| private Context mContext;
|
| private BookmarkPromoHeader mPromoHeaderManager;
|
| private boolean mShouldShowDividers;
|
| + private String mSearchText;
|
|
|
| private List<List<? extends Object>> mSections;
|
| private List<Object> mPromoHeaderSection = new ArrayList<>();
|
| @@ -74,6 +79,11 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
| public void bookmarkModelChanged() {
|
| assert mDelegate != null;
|
| mDelegate.notifyStateChange(BookmarkItemsAdapter.this);
|
| +
|
| + if (mDelegate.getCurrentState() == BookmarkUIState.STATE_SEARCHING
|
| + && !TextUtils.equals(mSearchText, EMPTY_QUERY)) {
|
| + search(mSearchText);
|
| + }
|
| }
|
| };
|
|
|
| @@ -153,12 +163,7 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
| mBookmarkSection.clear();
|
| mBookmarkSection.addAll(bookmarks);
|
|
|
| - updateHeader();
|
| - updateDividerSections();
|
| -
|
| - // TODO(kkimlabs): Animation is disabled due to a performance issue on bookmark undo.
|
| - // http://crbug.com/484174
|
| - notifyDataSetChanged();
|
| + updateHeaderAndNotify();
|
| }
|
|
|
| private void updateDividerSections() {
|
| @@ -285,9 +290,7 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
| return;
|
| }
|
|
|
| - updateHeader();
|
| - updateDividerSections();
|
| - notifyDataSetChanged();
|
| + updateHeaderAndNotify();
|
| }
|
|
|
| // BookmarkUIObserver implementations.
|
| @@ -314,17 +317,41 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
| assert mDelegate != null;
|
| setBookmarks(mDelegate.getModel().getChildIDs(folder, true, false),
|
| mDelegate.getModel().getChildIDs(folder, false, true));
|
| +
|
| + mSearchText = EMPTY_QUERY;
|
| + }
|
| +
|
| + @Override
|
| + public void onSearchStateSet() {
|
| + updateHeaderAndNotify();
|
| }
|
|
|
| @Override
|
| public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {}
|
|
|
| + /**
|
| + * Synchronously searches for the given query.
|
| + * @param query The query text to search for.
|
| + */
|
| + void search(String query) {
|
| + mSearchText = query.toString().trim();
|
| + List<BookmarkId> results =
|
| + mDelegate.getModel().searchBookmarks(mSearchText, MAXIMUM_NUMBER_OF_SEARCH_RESULTS);
|
| + setBookmarks(null, results);
|
| + }
|
| +
|
| private static class ItemViewHolder extends RecyclerView.ViewHolder {
|
| private ItemViewHolder(View view) {
|
| super(view);
|
| }
|
| }
|
|
|
| + private void updateHeaderAndNotify() {
|
| + updateHeader();
|
| + updateDividerSections();
|
| + notifyDataSetChanged();
|
| + }
|
| +
|
| private void updateHeader() {
|
| if (mDelegate == null) return;
|
|
|
| @@ -332,6 +359,9 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
| if (currentUIState == BookmarkUIState.STATE_LOADING) return;
|
|
|
| mPromoHeaderSection.clear();
|
| +
|
| + if (currentUIState == BookmarkUIState.STATE_SEARCHING) return;
|
| +
|
| assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI state";
|
| if (mPromoHeaderManager.shouldShow()) {
|
| mPromoHeaderSection.add(null);
|
|
|