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

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

Issue 1739503002: Makes the OfflinePageBridge.getAllPages method asynchronous. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Wait for model load in new async method. Created 4 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.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;
14 import org.chromium.base.annotations.SuppressFBWarnings; 15 import org.chromium.base.annotations.SuppressFBWarnings;
15 import org.chromium.base.metrics.RecordHistogram; 16 import org.chromium.base.metrics.RecordHistogram;
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.chrome.browser.offlinepages.ClientId; 21 import org.chromium.chrome.browser.offlinepages.ClientId;
21 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; 22 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
22 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageMod elObserver; 23 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageMod elObserver;
23 import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceCallback; 24 import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceCallback;
24 import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceDialog; 25 import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceDialog;
25 import org.chromium.chrome.browser.offlinepages.OfflinePageStorageSpaceHeader; 26 import org.chromium.chrome.browser.offlinepages.OfflinePageStorageSpaceHeader;
27 import org.chromium.chrome.browser.offlinepages.OfflinePageStorageSpacePolicy;
26 import org.chromium.components.bookmarks.BookmarkId; 28 import org.chromium.components.bookmarks.BookmarkId;
27 29
28 import java.util.ArrayList; 30 import java.util.ArrayList;
29 import java.util.List; 31 import java.util.List;
30 32
31 /** 33 /**
32 * BaseAdapter for {@link BookmarkRecyclerView}. It manages bookmarks to list th ere. 34 * BaseAdapter for {@link BookmarkRecyclerView}. It manages bookmarks to list th ere.
33 */ 35 */
34 class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements 36 class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements
35 BookmarkUIObserver, PromoHeaderShowingChangeListener { 37 BookmarkUIObserver, PromoHeaderShowingChangeListener {
36 private static final int PROMO_HEADER_VIEW = 0; 38 private static final int PROMO_HEADER_VIEW = 0;
37 private static final int FOLDER_VIEW = 1; 39 private static final int FOLDER_VIEW = 1;
38 private static final int DIVIDER_VIEW = 2; 40 private static final int DIVIDER_VIEW = 2;
39 private static final int BOOKMARK_VIEW = 3; 41 private static final int BOOKMARK_VIEW = 3;
40 private static final int OFFLINE_PAGES_STORAGE_VIEW = 4; 42 private static final int OFFLINE_PAGES_STORAGE_VIEW = 4;
41 43
44 private boolean mDestroyed = false;
42 private BookmarkDelegate mDelegate; 45 private BookmarkDelegate mDelegate;
43 private Context mContext; 46 private Context mContext;
44 private BookmarkPromoHeader mPromoHeaderManager; 47 private BookmarkPromoHeader mPromoHeaderManager;
45 private OfflinePageStorageSpaceHeader mOfflineStorageHeader; 48 private OfflinePageStorageSpaceHeader mOfflineStorageHeader;
46 49
47 private List<List<? extends Object>> mSections; 50 private List<List<? extends Object>> mSections;
48 private List<Object> mPromoHeaderSection = new ArrayList<>(); 51 private List<Object> mPromoHeaderSection = new ArrayList<>();
49 private List<Object> mOfflineStorageSection = new ArrayList<>(); 52 private List<Object> mOfflineStorageSection = new ArrayList<>();
50 private List<Object> mFolderDividerSection = new ArrayList<>(); 53 private List<Object> mFolderDividerSection = new ArrayList<>();
51 private List<BookmarkId> mFolderSection = new ArrayList<>(); 54 private List<BookmarkId> mFolderSection = new ArrayList<>();
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 } 270 }
268 271
269 // BookmarkUIObserver implementations. 272 // BookmarkUIObserver implementations.
270 273
271 @Override 274 @Override
272 public void onBookmarkDelegateInitialized(BookmarkDelegate delegate) { 275 public void onBookmarkDelegateInitialized(BookmarkDelegate delegate) {
273 mDelegate = delegate; 276 mDelegate = delegate;
274 mDelegate.addUIObserver(this); 277 mDelegate.addUIObserver(this);
275 mDelegate.getModel().addObserver(mBookmarkModelObserver); 278 mDelegate.getModel().addObserver(mBookmarkModelObserver);
276 mPromoHeaderManager = new BookmarkPromoHeader(mContext, this); 279 mPromoHeaderManager = new BookmarkPromoHeader(mContext, this);
277 OfflinePageBridge offlinePageBridge = mDelegate.getModel().getOfflinePag eBridge(); 280 final OfflinePageBridge offlinePageBridge = mDelegate.getModel().getOffl inePageBridge();
278 if (offlinePageBridge != null) { 281 if (offlinePageBridge != null) {
279 mOfflinePageModelObserver = new OfflinePageModelObserver() { 282 mOfflinePageModelObserver = new OfflinePageModelObserver() {
280 @Override 283 @Override
281 public void offlinePageModelChanged() { 284 public void offlinePageModelChanged() {
282 mDelegate.notifyStateChange(BookmarkItemsAdapter.this); 285 mDelegate.notifyStateChange(BookmarkItemsAdapter.this);
283 } 286 }
284 287
285 @Override 288 @Override
286 public void offlinePageDeleted(long offlineId, ClientId clientId ) { 289 public void offlinePageDeleted(long offlineId, ClientId clientId ) {
287 if (mDelegate.getCurrentState() == BookmarkUIState.STATE_FIL TER) { 290 if (mDelegate.getCurrentState() == BookmarkUIState.STATE_FIL TER) {
288 BookmarkId id = BookmarkModel.getBookmarkIdForOfflineCli entId(clientId); 291 BookmarkId id = BookmarkModel.getBookmarkIdForOfflineCli entId(clientId);
289 int deletedPosition = getPositionForBookmark(id); 292 int deletedPosition = getPositionForBookmark(id);
290 if (deletedPosition >= 0) { 293 if (deletedPosition >= 0) {
291 removeItem(deletedPosition); 294 removeItem(deletedPosition);
292 } 295 }
293 } 296 }
294 } 297 }
295 }; 298 };
296 offlinePageBridge.addObserver(mOfflinePageModelObserver); 299 offlinePageBridge.addObserver(mOfflinePageModelObserver);
297 300
298 mOfflineStorageHeader = new OfflinePageStorageSpaceHeader( 301 OfflinePageStorageSpacePolicy.create(
299 mContext, offlinePageBridge, new OfflinePageFreeUpSpaceCallb ack() { 302 offlinePageBridge, new Callback<OfflinePageStorageSpacePolic y>() {
300 @Override 303 @Override
301 public void onFreeUpSpaceDone() { 304 public void onResult(OfflinePageStorageSpacePolicy polic y) {
302 refreshOfflinePagesFilterView(); 305 if (!mDestroyed) {
303 mDelegate.getSnackbarManager().showSnackbar( 306 setOfflineStorageHeader(offlinePageBridge, polic y);
304 OfflinePageFreeUpSpaceDialog.createStorageCl earedSnackbar( 307 }
305 mContext));
306 }
307
308 @Override
309 public void onFreeUpSpaceCancelled() {
310 // No need to refresh, as result outcome should be t he same here.
311 } 308 }
312 }); 309 });
313 } 310 }
314 } 311 }
315 312
316 @Override 313 @Override
317 public void onDestroy() { 314 public void onDestroy() {
315 mDestroyed = true;
316
318 mDelegate.removeUIObserver(this); 317 mDelegate.removeUIObserver(this);
319 mDelegate.getModel().removeObserver(mBookmarkModelObserver); 318 mDelegate.getModel().removeObserver(mBookmarkModelObserver);
320 mPromoHeaderManager.destroy(); 319 mPromoHeaderManager.destroy();
321 320
322 OfflinePageBridge offlinePageBridge = mDelegate.getModel().getOfflinePag eBridge(); 321 OfflinePageBridge offlinePageBridge = mDelegate.getModel().getOfflinePag eBridge();
323 if (offlinePageBridge != null) { 322 if (offlinePageBridge != null) {
324 offlinePageBridge.removeObserver(mOfflinePageModelObserver); 323 offlinePageBridge.removeObserver(mOfflinePageModelObserver);
324 }
325
326 if (mOfflineStorageHeader != null) {
325 mOfflineStorageHeader.destroy(); 327 mOfflineStorageHeader.destroy();
326 } 328 }
327 } 329 }
328 330
329 @Override 331 @Override
330 public void onAllBookmarksStateSet() { 332 public void onAllBookmarksStateSet() {
331 List<BookmarkId> bookmarkIds = 333 List<BookmarkId> bookmarkIds =
332 mDelegate.getModel().getAllBookmarkIDsOrderedByCreationDate(); 334 mDelegate.getModel().getAllBookmarkIDsOrderedByCreationDate();
333 RecordHistogram.recordCountHistogram("EnhancedBookmarks.AllBookmarksCoun t", 335 RecordHistogram.recordCountHistogram("EnhancedBookmarks.AllBookmarksCoun t",
334 bookmarkIds.size()); 336 bookmarkIds.size());
335 setBookmarks(null, bookmarkIds); 337 setBookmarks(null, bookmarkIds);
336 } 338 }
337 339
338 @Override 340 @Override
339 public void onFolderStateSet(BookmarkId folder) { 341 public void onFolderStateSet(BookmarkId folder) {
340 setBookmarks(mDelegate.getModel().getChildIDs(folder, true, false), 342 setBookmarks(mDelegate.getModel().getChildIDs(folder, true, false),
341 mDelegate.getModel().getChildIDs(folder, false, true)); 343 mDelegate.getModel().getChildIDs(folder, false, true));
342 } 344 }
343 345
344 @Override 346 @Override
345 public void onFilterStateSet(BookmarkFilter filter) { 347 public void onFilterStateSet(BookmarkFilter filter) {
346 assert filter == BookmarkFilter.OFFLINE_PAGES; 348 assert filter == BookmarkFilter.OFFLINE_PAGES;
347 List<BookmarkId> bookmarkIds = mDelegate.getModel().getBookmarkIDsByFilt er(filter); 349 setBookmarks(null, new ArrayList<BookmarkId>());
348 RecordHistogram.recordCountHistogram("OfflinePages.OfflinePageCount", bo okmarkIds.size()); 350 BookmarkModel bookmarkModel = mDelegate.getModel();
349 setBookmarks(null, mDelegate.getModel().getBookmarkIDsByFilter(filter)); 351 bookmarkModel.getOfflinePageBridge().checkOfflinePageMetadata();
350 mDelegate.getModel().getOfflinePageBridge().checkOfflinePageMetadata(); 352 bookmarkModel.getOfflineBookmarkIds(new BookmarkModel.GetOfflineBookmark IdsCallback() {
fgorski 2016/03/28 17:58:46 perhaps extract method?
dewittj 2016/03/31 18:43:17 This callback really only calls one method + UMA,
353 @Override
354 public void onGetOfflineBookmarkIdsDone(List<BookmarkId> bookmarkIds ) {
355 RecordHistogram.recordCountHistogram(
356 "OfflinePages.OfflinePageCount", bookmarkIds.size());
357 if (mDestroyed) {
358 return;
359 }
360
361 setBookmarks(null, bookmarkIds);
362 }
363 });
351 } 364 }
352 365
353 @Override 366 @Override
354 public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {} 367 public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {}
355 368
356 private static class ItemViewHolder extends RecyclerView.ViewHolder { 369 private static class ItemViewHolder extends RecyclerView.ViewHolder {
357 private ItemViewHolder(View view) { 370 private ItemViewHolder(View view) {
358 super(view); 371 super(view);
359 } 372 }
360 } 373 }
361 374
375 private void setOfflineStorageHeader(
376 OfflinePageBridge offlinePageBridge, OfflinePageStorageSpacePolicy p olicy) {
377 mOfflineStorageHeader = new OfflinePageStorageSpaceHeader(
378 mContext, offlinePageBridge, policy, new OfflinePageFreeUpSpaceC allback() {
379 @Override
380 public void onFreeUpSpaceDone() {
381 if (!mDestroyed) {
382 refreshOfflinePagesFilterView();
383 }
384 mDelegate.getSnackbarManager().showSnackbar(
385 OfflinePageFreeUpSpaceDialog.createStorageCleare dSnackbar(
386 mContext));
387 }
388
389 @Override
390 public void onFreeUpSpaceCancelled() {
391 // No need to refresh, as result outcome should
392 // be the same here.
393 }
394 });
395
396 updateHeader();
397 }
398
362 private void updateHeader() { 399 private void updateHeader() {
363 int currentUIState = mDelegate.getCurrentState(); 400 int currentUIState = mDelegate.getCurrentState();
364 if (currentUIState == BookmarkUIState.STATE_LOADING) return; 401 if (currentUIState == BookmarkUIState.STATE_LOADING) return;
365 402
366 mPromoHeaderSection.clear(); 403 mPromoHeaderSection.clear();
367 mOfflineStorageSection.clear(); 404 mOfflineStorageSection.clear();
368 if (currentUIState == BookmarkUIState.STATE_FILTER) { 405 if (currentUIState == BookmarkUIState.STATE_FILTER) {
369 if (mOfflineStorageHeader != null && mOfflineStorageHeader.shouldSho w()) { 406 if (mOfflineStorageHeader != null && mOfflineStorageHeader.shouldSho w()) {
370 mOfflineStorageSection.add(null); 407 mOfflineStorageSection.add(null);
371 } 408 }
372 } else { 409 } else {
373 assert currentUIState == BookmarkUIState.STATE_ALL_BOOKMARKS 410 assert currentUIState == BookmarkUIState.STATE_ALL_BOOKMARKS
374 || currentUIState == BookmarkUIState.STATE_FOLDER 411 || currentUIState == BookmarkUIState.STATE_FOLDER
375 : "Unexpected UI state"; 412 : "Unexpected UI state";
376 if (mPromoHeaderManager.shouldShow()) { 413 if (mPromoHeaderManager.shouldShow()) {
377 mPromoHeaderSection.add(null); 414 mPromoHeaderSection.add(null);
378 } 415 }
379 } 416 }
380 } 417 }
381 418
382 private void refreshOfflinePagesFilterView() { 419 private void refreshOfflinePagesFilterView() {
383 if (mDelegate.getCurrentState() != BookmarkUIState.STATE_FILTER) return; 420 if (mDelegate.getCurrentState() != BookmarkUIState.STATE_FILTER) return;
384 setBookmarks(null, 421 setBookmarks(null, new ArrayList<BookmarkId>());
385 mDelegate.getModel().getBookmarkIDsByFilter(BookmarkFilter.OFFLI NE_PAGES)); 422 mDelegate.getModel().getOfflineBookmarkIds(
423 new BookmarkModel.GetOfflineBookmarkIdsCallback() {
424 @Override
425 public void onGetOfflineBookmarkIdsDone(List<BookmarkId> boo kmarkIds) {
426 if (mDestroyed) {
427 return;
428 }
429 setBookmarks(null, bookmarkIds);
430 }
431 });
386 } 432 }
387 } 433 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698