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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.bookmarks; 5 package org.chromium.chrome.browser.bookmarks;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.support.v7.widget.RecyclerView; 8 import android.support.v7.widget.RecyclerView;
9 import android.support.v7.widget.RecyclerView.ViewHolder; 9 import android.support.v7.widget.RecyclerView.ViewHolder;
10 import android.text.TextUtils;
10 import android.view.LayoutInflater; 11 import android.view.LayoutInflater;
11 import android.view.View; 12 import android.view.View;
12 import android.view.ViewGroup; 13 import android.view.ViewGroup;
13 14
14 import org.chromium.base.VisibleForTesting; 15 import org.chromium.base.VisibleForTesting;
15 import org.chromium.base.annotations.SuppressFBWarnings; 16 import org.chromium.base.annotations.SuppressFBWarnings;
16 import org.chromium.chrome.R; 17 import org.chromium.chrome.R;
17 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; 18 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
18 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserve r; 19 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserve r;
19 import org.chromium.chrome.browser.bookmarks.BookmarkPromoHeader.PromoHeaderShow ingChangeListener; 20 import org.chromium.chrome.browser.bookmarks.BookmarkPromoHeader.PromoHeaderShow ingChangeListener;
20 import org.chromium.components.bookmarks.BookmarkId; 21 import org.chromium.components.bookmarks.BookmarkId;
21 import org.chromium.ui.base.DeviceFormFactor; 22 import org.chromium.ui.base.DeviceFormFactor;
22 23
23 import java.util.ArrayList; 24 import java.util.ArrayList;
24 import java.util.List; 25 import java.util.List;
25 26
26 /** 27 /**
27 * BaseAdapter for {@link RecyclerView}. It manages bookmarks to list there. 28 * BaseAdapter for {@link RecyclerView}. It manages bookmarks to list there.
28 */ 29 */
29 class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements 30 class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements
30 BookmarkUIObserver, PromoHeaderShowingChangeListener { 31 BookmarkUIObserver, PromoHeaderShowingChangeListener {
31 private static final int PROMO_HEADER_VIEW = 0; 32 private static final int PROMO_HEADER_VIEW = 0;
32 private static final int FOLDER_VIEW = 1; 33 private static final int FOLDER_VIEW = 1;
33 private static final int DIVIDER_VIEW = 2; 34 private static final int DIVIDER_VIEW = 2;
34 private static final int BOOKMARK_VIEW = 3; 35 private static final int BOOKMARK_VIEW = 3;
35 36
37 private static final int MAXIMUM_NUMBER_OF_SEARCH_RESULTS = 500;
38 private static final String EMPTY_QUERY = null;
39
36 private BookmarkDelegate mDelegate; 40 private BookmarkDelegate mDelegate;
37 private Context mContext; 41 private Context mContext;
38 private BookmarkPromoHeader mPromoHeaderManager; 42 private BookmarkPromoHeader mPromoHeaderManager;
39 private boolean mShouldShowDividers; 43 private boolean mShouldShowDividers;
44 private String mSearchText;
40 45
41 private List<List<? extends Object>> mSections; 46 private List<List<? extends Object>> mSections;
42 private List<Object> mPromoHeaderSection = new ArrayList<>(); 47 private List<Object> mPromoHeaderSection = new ArrayList<>();
43 private List<Object> mFolderDividerSection; 48 private List<Object> mFolderDividerSection;
44 private List<BookmarkId> mFolderSection = new ArrayList<>(); 49 private List<BookmarkId> mFolderSection = new ArrayList<>();
45 private List<Object> mBookmarkDividerSection; 50 private List<Object> mBookmarkDividerSection;
46 private List<BookmarkId> mBookmarkSection = new ArrayList<>(); 51 private List<BookmarkId> mBookmarkSection = new ArrayList<>();
47 52
48 private List<BookmarkRow> mBookmarkRows = new ArrayList<>(); 53 private List<BookmarkRow> mBookmarkRows = new ArrayList<>();
49 private List<BookmarkRow> mFolderRows = new ArrayList<>(); 54 private List<BookmarkRow> mFolderRows = new ArrayList<>();
(...skipping 17 matching lines...) Expand all
67 if (deletedPosition >= 0) { 72 if (deletedPosition >= 0) {
68 removeItem(deletedPosition); 73 removeItem(deletedPosition);
69 } 74 }
70 } 75 }
71 } 76 }
72 77
73 @Override 78 @Override
74 public void bookmarkModelChanged() { 79 public void bookmarkModelChanged() {
75 assert mDelegate != null; 80 assert mDelegate != null;
76 mDelegate.notifyStateChange(BookmarkItemsAdapter.this); 81 mDelegate.notifyStateChange(BookmarkItemsAdapter.this);
82
83 if (mDelegate.getCurrentState() == BookmarkUIState.STATE_SEARCHING
84 && !TextUtils.equals(mSearchText, EMPTY_QUERY)) {
85 search(mSearchText);
86 }
77 } 87 }
78 }; 88 };
79 89
80 BookmarkItemsAdapter(Context context) { 90 BookmarkItemsAdapter(Context context) {
81 mContext = context; 91 mContext = context;
82 92
83 // TODO(twellington): remove dividers entirely after the bookmarks 720dp layout is restyled 93 // TODO(twellington): remove dividers entirely after the bookmarks 720dp layout is restyled
84 // to match the < 720dp style. 94 // to match the < 720dp style.
85 mShouldShowDividers = DeviceFormFactor.isLargeTablet(context); 95 mShouldShowDividers = DeviceFormFactor.isLargeTablet(context);
86 96
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 * @param folders This can be null if there is no folders to show. 156 * @param folders This can be null if there is no folders to show.
147 */ 157 */
148 private void setBookmarks(List<BookmarkId> folders, List<BookmarkId> bookmar ks) { 158 private void setBookmarks(List<BookmarkId> folders, List<BookmarkId> bookmar ks) {
149 if (folders == null) folders = new ArrayList<BookmarkId>(); 159 if (folders == null) folders = new ArrayList<BookmarkId>();
150 160
151 mFolderSection.clear(); 161 mFolderSection.clear();
152 mFolderSection.addAll(folders); 162 mFolderSection.addAll(folders);
153 mBookmarkSection.clear(); 163 mBookmarkSection.clear();
154 mBookmarkSection.addAll(bookmarks); 164 mBookmarkSection.addAll(bookmarks);
155 165
156 updateHeader(); 166 updateHeaderAndNotify();
157 updateDividerSections();
158
159 // TODO(kkimlabs): Animation is disabled due to a performance issue on b ookmark undo.
160 // http://crbug.com/484174
161 notifyDataSetChanged();
162 } 167 }
163 168
164 private void updateDividerSections() { 169 private void updateDividerSections() {
165 if (!mShouldShowDividers) return; 170 if (!mShouldShowDividers) return;
166 171
167 mFolderDividerSection.clear(); 172 mFolderDividerSection.clear();
168 mBookmarkDividerSection.clear(); 173 mBookmarkDividerSection.clear();
169 174
170 boolean isHeaderPresent = !mPromoHeaderSection.isEmpty(); 175 boolean isHeaderPresent = !mPromoHeaderSection.isEmpty();
171 176
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 283
279 // PromoHeaderShowingChangeListener implementation. 284 // PromoHeaderShowingChangeListener implementation.
280 285
281 @Override 286 @Override
282 public void onPromoHeaderShowingChanged(boolean isShowing) { 287 public void onPromoHeaderShowingChanged(boolean isShowing) {
283 assert mDelegate != null; 288 assert mDelegate != null;
284 if (mDelegate.getCurrentState() != BookmarkUIState.STATE_FOLDER) { 289 if (mDelegate.getCurrentState() != BookmarkUIState.STATE_FOLDER) {
285 return; 290 return;
286 } 291 }
287 292
288 updateHeader(); 293 updateHeaderAndNotify();
289 updateDividerSections();
290 notifyDataSetChanged();
291 } 294 }
292 295
293 // BookmarkUIObserver implementations. 296 // BookmarkUIObserver implementations.
294 297
295 @Override 298 @Override
296 public void onBookmarkDelegateInitialized(BookmarkDelegate delegate) { 299 public void onBookmarkDelegateInitialized(BookmarkDelegate delegate) {
297 mDelegate = delegate; 300 mDelegate = delegate;
298 mDelegate.addUIObserver(this); 301 mDelegate.addUIObserver(this);
299 mDelegate.getModel().addObserver(mBookmarkModelObserver); 302 mDelegate.getModel().addObserver(mBookmarkModelObserver);
300 mPromoHeaderManager = new BookmarkPromoHeader(mContext, this); 303 mPromoHeaderManager = new BookmarkPromoHeader(mContext, this);
301 } 304 }
302 305
303 @Override 306 @Override
304 public void onDestroy() { 307 public void onDestroy() {
305 mDelegate.removeUIObserver(this); 308 mDelegate.removeUIObserver(this);
306 mDelegate.getModel().removeObserver(mBookmarkModelObserver); 309 mDelegate.getModel().removeObserver(mBookmarkModelObserver);
307 mDelegate = null; 310 mDelegate = null;
308 311
309 mPromoHeaderManager.destroy(); 312 mPromoHeaderManager.destroy();
310 } 313 }
311 314
312 @Override 315 @Override
313 public void onFolderStateSet(BookmarkId folder) { 316 public void onFolderStateSet(BookmarkId folder) {
314 assert mDelegate != null; 317 assert mDelegate != null;
315 setBookmarks(mDelegate.getModel().getChildIDs(folder, true, false), 318 setBookmarks(mDelegate.getModel().getChildIDs(folder, true, false),
316 mDelegate.getModel().getChildIDs(folder, false, true)); 319 mDelegate.getModel().getChildIDs(folder, false, true));
320
321 mSearchText = EMPTY_QUERY;
322 }
323
324 @Override
325 public void onSearchStateSet() {
326 updateHeaderAndNotify();
317 } 327 }
318 328
319 @Override 329 @Override
320 public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {} 330 public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {}
321 331
332 /**
333 * Synchronously searches for the given query.
334 * @param query The query text to search for.
335 */
336 void search(String query) {
337 mSearchText = query.toString().trim();
338 List<BookmarkId> results =
339 mDelegate.getModel().searchBookmarks(mSearchText, MAXIMUM_NUMBER _OF_SEARCH_RESULTS);
340 setBookmarks(null, results);
341 }
342
322 private static class ItemViewHolder extends RecyclerView.ViewHolder { 343 private static class ItemViewHolder extends RecyclerView.ViewHolder {
323 private ItemViewHolder(View view) { 344 private ItemViewHolder(View view) {
324 super(view); 345 super(view);
325 } 346 }
326 } 347 }
327 348
349 private void updateHeaderAndNotify() {
350 updateHeader();
351 updateDividerSections();
352 notifyDataSetChanged();
353 }
354
328 private void updateHeader() { 355 private void updateHeader() {
329 if (mDelegate == null) return; 356 if (mDelegate == null) return;
330 357
331 int currentUIState = mDelegate.getCurrentState(); 358 int currentUIState = mDelegate.getCurrentState();
332 if (currentUIState == BookmarkUIState.STATE_LOADING) return; 359 if (currentUIState == BookmarkUIState.STATE_LOADING) return;
333 360
334 mPromoHeaderSection.clear(); 361 mPromoHeaderSection.clear();
362
363 if (currentUIState == BookmarkUIState.STATE_SEARCHING) return;
364
335 assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI s tate"; 365 assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI s tate";
336 if (mPromoHeaderManager.shouldShow()) { 366 if (mPromoHeaderManager.shouldShow()) {
337 mPromoHeaderSection.add(null); 367 mPromoHeaderSection.add(null);
338 } 368 }
339 } 369 }
340 370
341 @VisibleForTesting 371 @VisibleForTesting
342 public BookmarkDelegate getDelegateForTesting() { 372 public BookmarkDelegate getDelegateForTesting() {
343 return mDelegate; 373 return mDelegate;
344 } 374 }
345 375
346 private void setBackgroundResourceForBookmarkRow(BookmarkRow row, BookmarkId id) { 376 private void setBackgroundResourceForBookmarkRow(BookmarkRow row, BookmarkId id) {
347 row.setBackgroundResourceForGroupPosition(id.equals(mBookmarkSection.get (0)), 377 row.setBackgroundResourceForGroupPosition(id.equals(mBookmarkSection.get (0)),
348 id.equals(mBookmarkSection.get(mBookmarkSection.size() - 1))); 378 id.equals(mBookmarkSection.get(mBookmarkSection.size() - 1)));
349 } 379 }
350 380
351 private void setBackgroundResourceForFolderRow(BookmarkRow row, BookmarkId i d) { 381 private void setBackgroundResourceForFolderRow(BookmarkRow row, BookmarkId i d) {
352 row.setBackgroundResourceForGroupPosition(id.equals(mFolderSection.get(0 )), 382 row.setBackgroundResourceForGroupPosition(id.equals(mFolderSection.get(0 )),
353 id.equals(mFolderSection.get(mFolderSection.size() - 1))); 383 id.equals(mFolderSection.get(mFolderSection.size() - 1)));
354 } 384 }
355 } 385 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698