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

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

Issue 1894703002: [Offline pages] Removing offline pages from Bookmarks UI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing compilation issues and addressing comments Created 4 years, 8 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.Callback;
15 import org.chromium.base.annotations.SuppressFBWarnings; 14 import org.chromium.base.annotations.SuppressFBWarnings;
16 import org.chromium.base.metrics.RecordHistogram; 15 import org.chromium.base.metrics.RecordHistogram;
17 import org.chromium.chrome.R; 16 import org.chromium.chrome.R;
18 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; 17 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
19 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserve r; 18 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserve r;
20 import org.chromium.chrome.browser.bookmarks.BookmarkPromoHeader.PromoHeaderShow ingChangeListener; 19 import org.chromium.chrome.browser.bookmarks.BookmarkPromoHeader.PromoHeaderShow ingChangeListener;
21 import org.chromium.chrome.browser.offlinepages.ClientId;
22 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
23 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageMod elObserver;
24 import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceCallback;
25 import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceDialog;
26 import org.chromium.chrome.browser.offlinepages.OfflinePageStorageSpaceHeader;
27 import org.chromium.chrome.browser.offlinepages.OfflinePageStorageSpacePolicy;
28 import org.chromium.components.bookmarks.BookmarkId; 20 import org.chromium.components.bookmarks.BookmarkId;
29 21
30 import java.util.ArrayList; 22 import java.util.ArrayList;
31 import java.util.List; 23 import java.util.List;
32 24
33 /** 25 /**
34 * BaseAdapter for {@link BookmarkRecyclerView}. It manages bookmarks to list th ere. 26 * BaseAdapter for {@link BookmarkRecyclerView}. It manages bookmarks to list th ere.
35 */ 27 */
36 class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements 28 class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements
37 BookmarkUIObserver, PromoHeaderShowingChangeListener { 29 BookmarkUIObserver, PromoHeaderShowingChangeListener {
38 private static final int PROMO_HEADER_VIEW = 0; 30 private static final int PROMO_HEADER_VIEW = 0;
39 private static final int FOLDER_VIEW = 1; 31 private static final int FOLDER_VIEW = 1;
40 private static final int DIVIDER_VIEW = 2; 32 private static final int DIVIDER_VIEW = 2;
41 private static final int BOOKMARK_VIEW = 3; 33 private static final int BOOKMARK_VIEW = 3;
42 private static final int OFFLINE_PAGES_STORAGE_VIEW = 4;
43 34
44 private BookmarkDelegate mDelegate; 35 private BookmarkDelegate mDelegate;
45 private Context mContext; 36 private Context mContext;
46 private BookmarkPromoHeader mPromoHeaderManager; 37 private BookmarkPromoHeader mPromoHeaderManager;
47 private OfflinePageStorageSpaceHeader mOfflineStorageHeader;
48 private OfflinePageBridge mOfflinePageBridge;
49 38
50 private List<List<? extends Object>> mSections; 39 private List<List<? extends Object>> mSections;
51 private List<Object> mPromoHeaderSection = new ArrayList<>(); 40 private List<Object> mPromoHeaderSection = new ArrayList<>();
52 private List<Object> mOfflineStorageSection = new ArrayList<>();
53 private List<Object> mFolderDividerSection = new ArrayList<>(); 41 private List<Object> mFolderDividerSection = new ArrayList<>();
54 private List<BookmarkId> mFolderSection = new ArrayList<>(); 42 private List<BookmarkId> mFolderSection = new ArrayList<>();
55 private List<Object> mBookmarkDividerSection = new ArrayList<>(); 43 private List<Object> mBookmarkDividerSection = new ArrayList<>();
56 private List<BookmarkId> mBookmarkSection = new ArrayList<>(); 44 private List<BookmarkId> mBookmarkSection = new ArrayList<>();
57 45
58 private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObse rver() { 46 private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObse rver() {
59 @Override 47 @Override
60 public void bookmarkNodeChanged(BookmarkItem node) { 48 public void bookmarkNodeChanged(BookmarkItem node) {
61 assert mDelegate != null; 49 assert mDelegate != null;
62 int position = getPositionForBookmark(node.getId()); 50 int position = getPositionForBookmark(node.getId());
(...skipping 14 matching lines...) Expand all
77 } 65 }
78 } 66 }
79 67
80 @Override 68 @Override
81 public void bookmarkModelChanged() { 69 public void bookmarkModelChanged() {
82 assert mDelegate != null; 70 assert mDelegate != null;
83 mDelegate.notifyStateChange(BookmarkItemsAdapter.this); 71 mDelegate.notifyStateChange(BookmarkItemsAdapter.this);
84 } 72 }
85 }; 73 };
86 74
87 private OfflinePageModelObserver mOfflinePageModelObserver;
88
89 BookmarkItemsAdapter(Context context) { 75 BookmarkItemsAdapter(Context context) {
90 mContext = context; 76 mContext = context;
91 77
92 mSections = new ArrayList<>(); 78 mSections = new ArrayList<>();
93 mSections.add(mPromoHeaderSection); 79 mSections.add(mPromoHeaderSection);
94 mSections.add(mOfflineStorageSection);
95 mSections.add(mFolderDividerSection); 80 mSections.add(mFolderDividerSection);
96 mSections.add(mFolderSection); 81 mSections.add(mFolderSection);
97 mSections.add(mBookmarkDividerSection); 82 mSections.add(mBookmarkDividerSection);
98 mSections.add(mBookmarkSection); 83 mSections.add(mBookmarkSection);
99 } 84 }
100 85
101 BookmarkId getItem(int position) { 86 BookmarkId getItem(int position) {
102 return (BookmarkId) getSection(position).get(toSectionPosition(position) ); 87 return (BookmarkId) getSection(position).get(toSectionPosition(position) );
103 } 88 }
104 89
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 139
155 // TODO(kkimlabs): Animation is disabled due to a performance issue on b ookmark undo. 140 // TODO(kkimlabs): Animation is disabled due to a performance issue on b ookmark undo.
156 // http://crbug.com/484174 141 // http://crbug.com/484174
157 notifyDataSetChanged(); 142 notifyDataSetChanged();
158 } 143 }
159 144
160 private void updateDividerSections() { 145 private void updateDividerSections() {
161 mFolderDividerSection.clear(); 146 mFolderDividerSection.clear();
162 mBookmarkDividerSection.clear(); 147 mBookmarkDividerSection.clear();
163 148
164 boolean isHeaderPresent = 149 boolean isHeaderPresent = !mPromoHeaderSection.isEmpty();
165 !mPromoHeaderSection.isEmpty() || !mOfflineStorageSection.isEmpt y();
166 150
167 if (isHeaderPresent && !mFolderSection.isEmpty()) { 151 if (isHeaderPresent && !mFolderSection.isEmpty()) {
168 mFolderDividerSection.add(null); 152 mFolderDividerSection.add(null);
169 } 153 }
170 if ((isHeaderPresent || !mFolderSection.isEmpty()) && !mBookmarkSection. isEmpty()) { 154 if ((isHeaderPresent || !mFolderSection.isEmpty()) && !mBookmarkSection. isEmpty()) {
171 mBookmarkDividerSection.add(null); 155 mBookmarkDividerSection.add(null);
172 } 156 }
173 } 157 }
174 158
175 private void removeItem(int position) { 159 private void removeItem(int position) {
(...skipping 13 matching lines...) Expand all
189 } 173 }
190 return count; 174 return count;
191 } 175 }
192 176
193 @Override 177 @Override
194 public int getItemViewType(int position) { 178 public int getItemViewType(int position) {
195 List<?> section = getSection(position); 179 List<?> section = getSection(position);
196 180
197 if (section == mPromoHeaderSection) { 181 if (section == mPromoHeaderSection) {
198 return PROMO_HEADER_VIEW; 182 return PROMO_HEADER_VIEW;
199 } else if (section == mOfflineStorageSection) {
200 return OFFLINE_PAGES_STORAGE_VIEW;
201 } else if (section == mFolderDividerSection 183 } else if (section == mFolderDividerSection
202 || section == mBookmarkDividerSection) { 184 || section == mBookmarkDividerSection) {
203 return DIVIDER_VIEW; 185 return DIVIDER_VIEW;
204 } else if (section == mFolderSection) { 186 } else if (section == mFolderSection) {
205 return FOLDER_VIEW; 187 return FOLDER_VIEW;
206 } else if (section == mBookmarkSection) { 188 } else if (section == mBookmarkSection) {
207 return BOOKMARK_VIEW; 189 return BOOKMARK_VIEW;
208 } 190 }
209 191
210 assert false : "Invalid position requested"; 192 assert false : "Invalid position requested";
211 return -1; 193 return -1;
212 } 194 }
213 195
214 @Override 196 @Override
215 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 197 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
216 assert mDelegate != null; 198 assert mDelegate != null;
217 199
218 switch (viewType) { 200 switch (viewType) {
219 case PROMO_HEADER_VIEW: 201 case PROMO_HEADER_VIEW:
220 return mPromoHeaderManager.createHolder(parent); 202 return mPromoHeaderManager.createHolder(parent);
221 case OFFLINE_PAGES_STORAGE_VIEW:
222 return mOfflineStorageHeader.createHolder(parent);
223 case DIVIDER_VIEW: 203 case DIVIDER_VIEW:
224 return new ViewHolder(LayoutInflater.from(parent.getContext()).i nflate( 204 return new ViewHolder(LayoutInflater.from(parent.getContext()).i nflate(
225 R.layout.bookmark_divider, parent, false)) {}; 205 R.layout.bookmark_divider, parent, false)) {};
226 case FOLDER_VIEW: 206 case FOLDER_VIEW:
227 BookmarkFolderRow folder = (BookmarkFolderRow) LayoutInflater.fr om( 207 BookmarkFolderRow folder = (BookmarkFolderRow) LayoutInflater.fr om(
228 parent.getContext()).inflate(R.layout.bookmark_folder_ro w, parent, false); 208 parent.getContext()).inflate(R.layout.bookmark_folder_ro w, parent, false);
229 folder.onBookmarkDelegateInitialized(mDelegate); 209 folder.onBookmarkDelegateInitialized(mDelegate);
230 return new ItemViewHolder(folder); 210 return new ItemViewHolder(folder);
231 case BOOKMARK_VIEW: 211 case BOOKMARK_VIEW:
232 BookmarkItemRow item = (BookmarkItemRow) LayoutInflater.from( 212 BookmarkItemRow item = (BookmarkItemRow) LayoutInflater.from(
233 parent.getContext()).inflate(R.layout.bookmark_item_row, parent, false); 213 parent.getContext()).inflate(R.layout.bookmark_item_row, parent, false);
234 item.onBookmarkDelegateInitialized(mDelegate); 214 item.onBookmarkDelegateInitialized(mDelegate);
235 return new ItemViewHolder(item); 215 return new ItemViewHolder(item);
236 default: 216 default:
237 assert false; 217 assert false;
238 return null; 218 return null;
239 } 219 }
240 } 220 }
241 221
242 @SuppressFBWarnings("BC_UNCONFIRMED_CAST") 222 @SuppressFBWarnings("BC_UNCONFIRMED_CAST")
243 @Override 223 @Override
244 public void onBindViewHolder(ViewHolder holder, int position) { 224 public void onBindViewHolder(ViewHolder holder, int position) {
245 BookmarkId id = getItem(position); 225 BookmarkId id = getItem(position);
246 226
247 switch (getItemViewType(position)) { 227 switch (getItemViewType(position)) {
248 case PROMO_HEADER_VIEW: 228 case PROMO_HEADER_VIEW:
249 case OFFLINE_PAGES_STORAGE_VIEW:
250 case DIVIDER_VIEW: 229 case DIVIDER_VIEW:
251 break; 230 break;
252 case FOLDER_VIEW: 231 case FOLDER_VIEW:
253 ((BookmarkRow) holder.itemView).setBookmarkId(id); 232 ((BookmarkRow) holder.itemView).setBookmarkId(id);
254 break; 233 break;
255 case BOOKMARK_VIEW: 234 case BOOKMARK_VIEW:
256 ((BookmarkRow) holder.itemView).setBookmarkId(id); 235 ((BookmarkRow) holder.itemView).setBookmarkId(id);
257 break; 236 break;
258 default: 237 default:
259 assert false : "View type not supported!"; 238 assert false : "View type not supported!";
(...skipping 16 matching lines...) Expand all
276 } 255 }
277 256
278 // BookmarkUIObserver implementations. 257 // BookmarkUIObserver implementations.
279 258
280 @Override 259 @Override
281 public void onBookmarkDelegateInitialized(BookmarkDelegate delegate) { 260 public void onBookmarkDelegateInitialized(BookmarkDelegate delegate) {
282 mDelegate = delegate; 261 mDelegate = delegate;
283 mDelegate.addUIObserver(this); 262 mDelegate.addUIObserver(this);
284 mDelegate.getModel().addObserver(mBookmarkModelObserver); 263 mDelegate.getModel().addObserver(mBookmarkModelObserver);
285 mPromoHeaderManager = new BookmarkPromoHeader(mContext, this); 264 mPromoHeaderManager = new BookmarkPromoHeader(mContext, this);
286 mOfflinePageBridge = mDelegate.getModel().getOfflinePageBridge();
287 if (mOfflinePageBridge != null) {
288 mOfflinePageModelObserver = new OfflinePageModelObserver() {
289 @Override
290 public void offlinePageModelChanged() {
291 mDelegate.notifyStateChange(BookmarkItemsAdapter.this);
292 }
293
294 @Override
295 public void offlinePageDeleted(long offlineId, ClientId clientId ) {
296 if (mDelegate.getCurrentState() == BookmarkUIState.STATE_FIL TER) {
297 BookmarkId id = BookmarkModel.getBookmarkIdForOfflineCli entId(clientId);
298 int deletedPosition = getPositionForBookmark(id);
299 if (deletedPosition >= 0) {
300 removeItem(deletedPosition);
301 }
302 }
303 }
304 };
305 mOfflinePageBridge.addObserver(mOfflinePageModelObserver);
306
307 OfflinePageStorageSpacePolicy.create(
308 mOfflinePageBridge, new Callback<OfflinePageStorageSpacePoli cy>() {
309 @Override
310 public void onResult(OfflinePageStorageSpacePolicy polic y) {
311 setOfflineStorageHeader(policy);
312 }
313 });
314 }
315 } 265 }
316 266
317 @Override 267 @Override
318 public void onDestroy() { 268 public void onDestroy() {
319 mDelegate.removeUIObserver(this); 269 mDelegate.removeUIObserver(this);
320 mDelegate.getModel().removeObserver(mBookmarkModelObserver); 270 mDelegate.getModel().removeObserver(mBookmarkModelObserver);
321 mDelegate = null; 271 mDelegate = null;
322 272
323 mPromoHeaderManager.destroy(); 273 mPromoHeaderManager.destroy();
324
325 if (mOfflinePageBridge != null) {
326 mOfflinePageBridge.removeObserver(mOfflinePageModelObserver);
327 mOfflinePageBridge = null;
328 }
329
330 if (mOfflineStorageHeader != null) {
331 mOfflineStorageHeader.destroy();
332 }
333 } 274 }
334 275
335 @Override 276 @Override
336 public void onAllBookmarksStateSet() { 277 public void onAllBookmarksStateSet() {
337 assert mDelegate != null; 278 assert mDelegate != null;
338 List<BookmarkId> bookmarkIds = 279 List<BookmarkId> bookmarkIds =
339 mDelegate.getModel().getAllBookmarkIDsOrderedByCreationDate(); 280 mDelegate.getModel().getAllBookmarkIDsOrderedByCreationDate();
340 RecordHistogram.recordCountHistogram("EnhancedBookmarks.AllBookmarksCoun t", 281 RecordHistogram.recordCountHistogram("EnhancedBookmarks.AllBookmarksCoun t",
341 bookmarkIds.size()); 282 bookmarkIds.size());
342 setBookmarks(null, bookmarkIds); 283 setBookmarks(null, bookmarkIds);
343 } 284 }
344 285
345 @Override 286 @Override
346 public void onFolderStateSet(BookmarkId folder) { 287 public void onFolderStateSet(BookmarkId folder) {
347 assert mDelegate != null; 288 assert mDelegate != null;
348 setBookmarks(mDelegate.getModel().getChildIDs(folder, true, false), 289 setBookmarks(mDelegate.getModel().getChildIDs(folder, true, false),
349 mDelegate.getModel().getChildIDs(folder, false, true)); 290 mDelegate.getModel().getChildIDs(folder, false, true));
350 } 291 }
351 292
352 @Override 293 @Override
353 public void onFilterStateSet(BookmarkFilter filter) {
354 assert filter == BookmarkFilter.OFFLINE_PAGES;
355 assert mDelegate != null;
356 assert mOfflinePageBridge != null;
357
358 setBookmarks(null, new ArrayList<BookmarkId>());
359 mOfflinePageBridge.checkOfflinePageMetadata();
360 BookmarkModel bookmarkModel = mDelegate.getModel();
361 bookmarkModel.getBookmarkIDsByFilter(
362 BookmarkFilter.OFFLINE_PAGES, new Callback<List<BookmarkId>>() {
363 @Override
364 public void onResult(List<BookmarkId> bookmarkIds) {
365 if (mDelegate == null) return;
366 RecordHistogram.recordCountHistogram(
367 "OfflinePages.OfflinePageCount", bookmarkIds.siz e());
368
369 setBookmarks(null, bookmarkIds);
370 }
371 });
372 }
373
374 @Override
375 public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {} 294 public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {}
376 295
377 private static class ItemViewHolder extends RecyclerView.ViewHolder { 296 private static class ItemViewHolder extends RecyclerView.ViewHolder {
378 private ItemViewHolder(View view) { 297 private ItemViewHolder(View view) {
379 super(view); 298 super(view);
380 } 299 }
381 } 300 }
382 301
383 private void setOfflineStorageHeader(OfflinePageStorageSpacePolicy policy) {
384 if (mOfflinePageBridge == null) return;
385
386 mOfflineStorageHeader = new OfflinePageStorageSpaceHeader(
387 mContext, mOfflinePageBridge, policy, new OfflinePageFreeUpSpace Callback() {
388 @Override
389 public void onFreeUpSpaceDone() {
390 if (mDelegate == null) return;
391
392 refreshOfflinePagesFilterView();
393 mDelegate.getSnackbarManager().showSnackbar(
394 OfflinePageFreeUpSpaceDialog.createStorageCleare dSnackbar(
395 mContext));
396 }
397
398 @Override
399 public void onFreeUpSpaceCancelled() {
400 // No need to refresh, as result outcome should
401 // be the same here.
402 }
403 });
404
405 updateHeader();
406 }
407
408 private void updateHeader() { 302 private void updateHeader() {
409 if (mDelegate == null) return; 303 if (mDelegate == null) return;
410 304
411 int currentUIState = mDelegate.getCurrentState(); 305 int currentUIState = mDelegate.getCurrentState();
412 if (currentUIState == BookmarkUIState.STATE_LOADING) return; 306 if (currentUIState == BookmarkUIState.STATE_LOADING) return;
413 307
414 mPromoHeaderSection.clear(); 308 mPromoHeaderSection.clear();
415 mOfflineStorageSection.clear(); 309 assert currentUIState == BookmarkUIState.STATE_ALL_BOOKMARKS
416 if (currentUIState == BookmarkUIState.STATE_FILTER) { 310 || currentUIState == BookmarkUIState.STATE_FOLDER : "Unexpected UI state";
417 if (mOfflineStorageHeader != null && mOfflineStorageHeader.shouldSho w()) { 311 if (mPromoHeaderManager.shouldShow()) {
418 mOfflineStorageSection.add(null); 312 mPromoHeaderSection.add(null);
419 }
420 } else {
421 assert currentUIState == BookmarkUIState.STATE_ALL_BOOKMARKS
422 || currentUIState == BookmarkUIState.STATE_FOLDER
423 : "Unexpected UI state";
424 if (mPromoHeaderManager.shouldShow()) {
425 mPromoHeaderSection.add(null);
426 }
427 } 313 }
428 } 314 }
429
430 private void refreshOfflinePagesFilterView() {
431 if (mDelegate == null || mDelegate.getCurrentState() != BookmarkUIState. STATE_FILTER) {
432 return;
433 }
434 setBookmarks(null, new ArrayList<BookmarkId>());
435 mDelegate.getModel().getBookmarkIDsByFilter(
436 BookmarkFilter.OFFLINE_PAGES, new Callback<List<BookmarkId>>() {
437 @Override
438 public void onResult(List<BookmarkId> bookmarkIds) {
439 if (mDelegate == null) return;
440 setBookmarks(null, bookmarkIds);
441 }
442 });
443 }
444 } 315 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698