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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java

Issue 2703463002: [List UI Unification] Basic list unification for phones (Closed)
Patch Set: [List UI Unification] Basic list unification for phones Created 3 years, 10 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.view.LayoutInflater; 10 import android.view.LayoutInflater;
11 import android.view.View; 11 import android.view.View;
12 import android.view.ViewGroup; 12 import android.view.ViewGroup;
13 13
14 import org.chromium.base.VisibleForTesting; 14 import org.chromium.base.VisibleForTesting;
15 import org.chromium.base.annotations.SuppressFBWarnings; 15 import org.chromium.base.annotations.SuppressFBWarnings;
16 import org.chromium.chrome.R; 16 import org.chromium.chrome.R;
17 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; 17 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
18 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserve r; 18 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserve r;
19 import org.chromium.chrome.browser.bookmarks.BookmarkPromoHeader.PromoHeaderShow ingChangeListener; 19 import org.chromium.chrome.browser.bookmarks.BookmarkPromoHeader.PromoHeaderShow ingChangeListener;
20 import org.chromium.components.bookmarks.BookmarkId; 20 import org.chromium.components.bookmarks.BookmarkId;
21 import org.chromium.ui.base.DeviceFormFactor;
21 22
22 import java.util.ArrayList; 23 import java.util.ArrayList;
23 import java.util.List; 24 import java.util.List;
24 25
25 /** 26 /**
26 * BaseAdapter for {@link RecyclerView}. It manages bookmarks to list there. 27 * BaseAdapter for {@link RecyclerView}. It manages bookmarks to list there.
27 */ 28 */
28 class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements 29 class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements
29 BookmarkUIObserver, PromoHeaderShowingChangeListener { 30 BookmarkUIObserver, PromoHeaderShowingChangeListener {
30 private static final int PROMO_HEADER_VIEW = 0; 31 private static final int PROMO_HEADER_VIEW = 0;
31 private static final int FOLDER_VIEW = 1; 32 private static final int FOLDER_VIEW = 1;
32 private static final int DIVIDER_VIEW = 2; 33 private static final int DIVIDER_VIEW = 2;
33 private static final int BOOKMARK_VIEW = 3; 34 private static final int BOOKMARK_VIEW = 3;
34 35
35 private BookmarkDelegate mDelegate; 36 private BookmarkDelegate mDelegate;
36 private Context mContext; 37 private Context mContext;
37 private BookmarkPromoHeader mPromoHeaderManager; 38 private BookmarkPromoHeader mPromoHeaderManager;
39 private boolean mShouldShowDividers;
38 40
39 private List<List<? extends Object>> mSections; 41 private List<List<? extends Object>> mSections;
40 private List<Object> mPromoHeaderSection = new ArrayList<>(); 42 private List<Object> mPromoHeaderSection = new ArrayList<>();
41 private List<Object> mFolderDividerSection = new ArrayList<>(); 43 private List<Object> mFolderDividerSection;
42 private List<BookmarkId> mFolderSection = new ArrayList<>(); 44 private List<BookmarkId> mFolderSection = new ArrayList<>();
43 private List<Object> mBookmarkDividerSection = new ArrayList<>(); 45 private List<Object> mBookmarkDividerSection;
44 private List<BookmarkId> mBookmarkSection = new ArrayList<>(); 46 private List<BookmarkId> mBookmarkSection = new ArrayList<>();
45 47
48 private List<BookmarkRow> mBookmarkRows = new ArrayList<>();
49 private List<BookmarkRow> mFolderRows = new ArrayList<>();
50
46 private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObse rver() { 51 private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObse rver() {
47 @Override 52 @Override
48 public void bookmarkNodeChanged(BookmarkItem node) { 53 public void bookmarkNodeChanged(BookmarkItem node) {
49 assert mDelegate != null; 54 assert mDelegate != null;
50 int position = getPositionForBookmark(node.getId()); 55 int position = getPositionForBookmark(node.getId());
51 if (position >= 0) notifyItemChanged(position); 56 if (position >= 0) notifyItemChanged(position);
52 } 57 }
53 58
54 @Override 59 @Override
55 public void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, Bookm arkItem node, 60 public void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, Bookm arkItem node,
(...skipping 12 matching lines...) Expand all
68 @Override 73 @Override
69 public void bookmarkModelChanged() { 74 public void bookmarkModelChanged() {
70 assert mDelegate != null; 75 assert mDelegate != null;
71 mDelegate.notifyStateChange(BookmarkItemsAdapter.this); 76 mDelegate.notifyStateChange(BookmarkItemsAdapter.this);
72 } 77 }
73 }; 78 };
74 79
75 BookmarkItemsAdapter(Context context) { 80 BookmarkItemsAdapter(Context context) {
76 mContext = context; 81 mContext = context;
77 82
83 // TODO(twellington): remove dividers entirely after the bookmarks 720dp layout is restyled
84 // to match the < 720dp style.
85 mShouldShowDividers = DeviceFormFactor.isLargeTablet(context);
86
78 mSections = new ArrayList<>(); 87 mSections = new ArrayList<>();
79 mSections.add(mPromoHeaderSection); 88 mSections.add(mPromoHeaderSection);
80 mSections.add(mFolderDividerSection); 89
90 if (mShouldShowDividers) {
91 mFolderDividerSection = new ArrayList<>();
92 mSections.add(mFolderDividerSection);
93 }
94
81 mSections.add(mFolderSection); 95 mSections.add(mFolderSection);
82 mSections.add(mBookmarkDividerSection); 96
97 if (mShouldShowDividers) {
98 mBookmarkDividerSection = new ArrayList<>();
99 mSections.add(mBookmarkDividerSection);
100 }
101
83 mSections.add(mBookmarkSection); 102 mSections.add(mBookmarkSection);
84 } 103 }
85 104
86 BookmarkId getItem(int position) { 105 BookmarkId getItem(int position) {
87 return (BookmarkId) getSection(position).get(toSectionPosition(position) ); 106 return (BookmarkId) getSection(position).get(toSectionPosition(position) );
88 } 107 }
89 108
90 private int toSectionPosition(int globalPosition) { 109 private int toSectionPosition(int globalPosition) {
91 int sectionPosition = globalPosition; 110 int sectionPosition = globalPosition;
92 for (List<?> section : mSections) { 111 for (List<?> section : mSections) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 155
137 updateHeader(); 156 updateHeader();
138 updateDividerSections(); 157 updateDividerSections();
139 158
140 // TODO(kkimlabs): Animation is disabled due to a performance issue on b ookmark undo. 159 // TODO(kkimlabs): Animation is disabled due to a performance issue on b ookmark undo.
141 // http://crbug.com/484174 160 // http://crbug.com/484174
142 notifyDataSetChanged(); 161 notifyDataSetChanged();
143 } 162 }
144 163
145 private void updateDividerSections() { 164 private void updateDividerSections() {
165 if (!mShouldShowDividers) return;
166
146 mFolderDividerSection.clear(); 167 mFolderDividerSection.clear();
147 mBookmarkDividerSection.clear(); 168 mBookmarkDividerSection.clear();
148 169
149 boolean isHeaderPresent = !mPromoHeaderSection.isEmpty(); 170 boolean isHeaderPresent = !mPromoHeaderSection.isEmpty();
150 171
151 if (isHeaderPresent && !mFolderSection.isEmpty()) { 172 if (isHeaderPresent && !mFolderSection.isEmpty()) {
152 mFolderDividerSection.add(null); 173 mFolderDividerSection.add(null);
153 } 174 }
154 if ((isHeaderPresent || !mFolderSection.isEmpty()) && !mBookmarkSection. isEmpty()) { 175 if ((isHeaderPresent || !mFolderSection.isEmpty()) && !mBookmarkSection. isEmpty()) {
155 mBookmarkDividerSection.add(null); 176 mBookmarkDividerSection.add(null);
156 } 177 }
157 } 178 }
158 179
159 private void removeItem(int position) { 180 private void removeItem(int position) {
160 List<?> section = getSection(position); 181 List<?> section = getSection(position);
161 assert section == mFolderSection || section == mBookmarkSection; 182 assert section == mFolderSection || section == mBookmarkSection;
162 section.remove(toSectionPosition(position)); 183 section.remove(toSectionPosition(position));
163 notifyItemRemoved(position); 184 notifyItemRemoved(position);
185
186 if (section == mBookmarkSection && !mBookmarkSection.isEmpty()) {
187 for (BookmarkRow row : mBookmarkRows) {
188 BookmarkId id = row.getItem();
189 setBackgroundResourceForBookmarkRow(row, id);
190 }
191 } else if (!mFolderSection.isEmpty()) {
192 for (BookmarkRow row : mFolderRows) {
193 BookmarkId id = row.getItem();
194 setBackgroundResourceForFolderRow(row, id);
195 }
196 }
164 } 197 }
165 198
166 // RecyclerView.Adapter implementation. 199 // RecyclerView.Adapter implementation.
167 200
168 @Override 201 @Override
169 public int getItemCount() { 202 public int getItemCount() {
170 int count = 0; 203 int count = 0;
171 for (List<?> section : mSections) { 204 for (List<?> section : mSections) {
172 count += section.size(); 205 count += section.size();
173 } 206 }
(...skipping 26 matching lines...) Expand all
200 switch (viewType) { 233 switch (viewType) {
201 case PROMO_HEADER_VIEW: 234 case PROMO_HEADER_VIEW:
202 return mPromoHeaderManager.createHolder(parent); 235 return mPromoHeaderManager.createHolder(parent);
203 case DIVIDER_VIEW: 236 case DIVIDER_VIEW:
204 return new ViewHolder(LayoutInflater.from(parent.getContext()).i nflate( 237 return new ViewHolder(LayoutInflater.from(parent.getContext()).i nflate(
205 R.layout.bookmark_divider, parent, false)) {}; 238 R.layout.bookmark_divider, parent, false)) {};
206 case FOLDER_VIEW: 239 case FOLDER_VIEW:
207 BookmarkFolderRow folder = (BookmarkFolderRow) LayoutInflater.fr om( 240 BookmarkFolderRow folder = (BookmarkFolderRow) LayoutInflater.fr om(
208 parent.getContext()).inflate(R.layout.bookmark_folder_ro w, parent, false); 241 parent.getContext()).inflate(R.layout.bookmark_folder_ro w, parent, false);
209 folder.onBookmarkDelegateInitialized(mDelegate); 242 folder.onBookmarkDelegateInitialized(mDelegate);
243 mFolderRows.add(folder);
210 return new ItemViewHolder(folder); 244 return new ItemViewHolder(folder);
211 case BOOKMARK_VIEW: 245 case BOOKMARK_VIEW:
212 BookmarkItemRow item = (BookmarkItemRow) LayoutInflater.from( 246 BookmarkItemRow item = (BookmarkItemRow) LayoutInflater.from(
213 parent.getContext()).inflate(R.layout.bookmark_item_row, parent, false); 247 parent.getContext()).inflate(R.layout.bookmark_item_row, parent, false);
214 item.onBookmarkDelegateInitialized(mDelegate); 248 item.onBookmarkDelegateInitialized(mDelegate);
249 mBookmarkRows.add(item);
215 return new ItemViewHolder(item); 250 return new ItemViewHolder(item);
216 default: 251 default:
217 assert false; 252 assert false;
218 return null; 253 return null;
219 } 254 }
220 } 255 }
221 256
222 @SuppressFBWarnings("BC_UNCONFIRMED_CAST") 257 @SuppressFBWarnings("BC_UNCONFIRMED_CAST")
223 @Override 258 @Override
224 public void onBindViewHolder(ViewHolder holder, int position) { 259 public void onBindViewHolder(ViewHolder holder, int position) {
225 BookmarkId id = getItem(position); 260 BookmarkId id = getItem(position);
226 261
227 switch (getItemViewType(position)) { 262 switch (getItemViewType(position)) {
228 case PROMO_HEADER_VIEW: 263 case PROMO_HEADER_VIEW:
229 case DIVIDER_VIEW: 264 case DIVIDER_VIEW:
230 break; 265 break;
231 case FOLDER_VIEW: 266 case FOLDER_VIEW:
232 ((BookmarkRow) holder.itemView).setBookmarkId(id); 267 ((BookmarkRow) holder.itemView).setBookmarkId(id);
268 setBackgroundResourceForFolderRow(((BookmarkRow) holder.itemView ), id);
233 break; 269 break;
234 case BOOKMARK_VIEW: 270 case BOOKMARK_VIEW:
235 ((BookmarkRow) holder.itemView).setBookmarkId(id); 271 ((BookmarkRow) holder.itemView).setBookmarkId(id);
272 setBackgroundResourceForBookmarkRow((BookmarkRow) holder.itemVie w, id);
236 break; 273 break;
237 default: 274 default:
238 assert false : "View type not supported!"; 275 assert false : "View type not supported!";
239 } 276 }
240 } 277 }
241 278
242 // PromoHeaderShowingChangeListener implementation. 279 // PromoHeaderShowingChangeListener implementation.
243 280
244 @Override 281 @Override
245 public void onPromoHeaderShowingChanged(boolean isShowing) { 282 public void onPromoHeaderShowingChanged(boolean isShowing) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI s tate"; 335 assert currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI s tate";
299 if (mPromoHeaderManager.shouldShow()) { 336 if (mPromoHeaderManager.shouldShow()) {
300 mPromoHeaderSection.add(null); 337 mPromoHeaderSection.add(null);
301 } 338 }
302 } 339 }
303 340
304 @VisibleForTesting 341 @VisibleForTesting
305 public BookmarkDelegate getDelegateForTesting() { 342 public BookmarkDelegate getDelegateForTesting() {
306 return mDelegate; 343 return mDelegate;
307 } 344 }
345
346 private void setBackgroundResourceForBookmarkRow(BookmarkRow row, BookmarkId id) {
347 row.setBackgroundResourceForGroupPosition(id.equals(mBookmarkSection.get (0)),
348 id.equals(mBookmarkSection.get(mBookmarkSection.size() - 1)));
349 }
350
351 private void setBackgroundResourceForFolderRow(BookmarkRow row, BookmarkId i d) {
352 row.setBackgroundResourceForGroupPosition(id.equals(mFolderSection.get(0 )),
353 id.equals(mFolderSection.get(mFolderSection.size() - 1)));
354 }
308 } 355 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698