Chromium Code Reviews| 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 313fff87082f0b24af123473b16c8b6189cc3eca..86e4f60506ee6d933eeeb731d2dcee4df3cd888e 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 |
| @@ -11,6 +11,7 @@ import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| +import org.chromium.base.Callback; |
| import org.chromium.base.annotations.SuppressFBWarnings; |
| import org.chromium.base.metrics.RecordHistogram; |
| import org.chromium.chrome.R; |
| @@ -23,6 +24,7 @@ import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageMod |
| import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceCallback; |
| import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceDialog; |
| import org.chromium.chrome.browser.offlinepages.OfflinePageStorageSpaceHeader; |
| +import org.chromium.chrome.browser.offlinepages.OfflinePageStorageSpacePolicy; |
| import org.chromium.components.bookmarks.BookmarkId; |
| import java.util.ArrayList; |
| @@ -39,6 +41,7 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> |
| private static final int BOOKMARK_VIEW = 3; |
| private static final int OFFLINE_PAGES_STORAGE_VIEW = 4; |
| + private boolean mDestroyed = false; |
| private BookmarkDelegate mDelegate; |
| private Context mContext; |
| private BookmarkPromoHeader mPromoHeaderManager; |
| @@ -274,7 +277,7 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> |
| mDelegate.addUIObserver(this); |
| mDelegate.getModel().addObserver(mBookmarkModelObserver); |
| mPromoHeaderManager = new BookmarkPromoHeader(mContext, this); |
| - OfflinePageBridge offlinePageBridge = mDelegate.getModel().getOfflinePageBridge(); |
| + final OfflinePageBridge offlinePageBridge = mDelegate.getModel().getOfflinePageBridge(); |
| if (offlinePageBridge != null) { |
| mOfflinePageModelObserver = new OfflinePageModelObserver() { |
| @Override |
| @@ -295,19 +298,13 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> |
| }; |
| offlinePageBridge.addObserver(mOfflinePageModelObserver); |
| - mOfflineStorageHeader = new OfflinePageStorageSpaceHeader( |
| - mContext, offlinePageBridge, new OfflinePageFreeUpSpaceCallback() { |
| - @Override |
| - public void onFreeUpSpaceDone() { |
| - refreshOfflinePagesFilterView(); |
| - mDelegate.getSnackbarManager().showSnackbar( |
| - OfflinePageFreeUpSpaceDialog.createStorageClearedSnackbar( |
| - mContext)); |
| - } |
| - |
| + OfflinePageStorageSpacePolicy.create( |
| + offlinePageBridge, new Callback<OfflinePageStorageSpacePolicy>() { |
| @Override |
| - public void onFreeUpSpaceCancelled() { |
| - // No need to refresh, as result outcome should be the same here. |
| + public void onResult(OfflinePageStorageSpacePolicy policy) { |
| + if (!mDestroyed) { |
| + setOfflineStorageHeader(offlinePageBridge, policy); |
| + } |
| } |
| }); |
| } |
| @@ -315,6 +312,8 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> |
| @Override |
| public void onDestroy() { |
| + mDestroyed = true; |
|
Ian Wen
2016/04/08 00:07:45
Instead of using mDestroyed, you could set mDelega
dewittj
2016/04/08 18:06:58
Done. I annotated other methods that depend on mD
|
| + |
| mDelegate.removeUIObserver(this); |
| mDelegate.getModel().removeObserver(mBookmarkModelObserver); |
| mPromoHeaderManager.destroy(); |
| @@ -322,6 +321,9 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> |
| OfflinePageBridge offlinePageBridge = mDelegate.getModel().getOfflinePageBridge(); |
| if (offlinePageBridge != null) { |
| offlinePageBridge.removeObserver(mOfflinePageModelObserver); |
| + } |
| + |
| + if (mOfflineStorageHeader != null) { |
| mOfflineStorageHeader.destroy(); |
| } |
| } |
| @@ -344,10 +346,22 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> |
| @Override |
| public void onFilterStateSet(BookmarkFilter filter) { |
| assert filter == BookmarkFilter.OFFLINE_PAGES; |
| - List<BookmarkId> bookmarkIds = mDelegate.getModel().getBookmarkIDsByFilter(filter); |
| - RecordHistogram.recordCountHistogram("OfflinePages.OfflinePageCount", bookmarkIds.size()); |
| - setBookmarks(null, mDelegate.getModel().getBookmarkIDsByFilter(filter)); |
| - mDelegate.getModel().getOfflinePageBridge().checkOfflinePageMetadata(); |
| + setBookmarks(null, new ArrayList<BookmarkId>()); |
| + BookmarkModel bookmarkModel = mDelegate.getModel(); |
| + bookmarkModel.getOfflinePageBridge().checkOfflinePageMetadata(); |
| + bookmarkModel.getBookmarkIDsByFilter( |
| + BookmarkFilter.OFFLINE_PAGES, new Callback<List<BookmarkId>>() { |
| + @Override |
| + public void onResult(List<BookmarkId> bookmarkIds) { |
| + RecordHistogram.recordCountHistogram( |
| + "OfflinePages.OfflinePageCount", bookmarkIds.size()); |
| + if (mDestroyed) { |
| + return; |
| + } |
| + |
| + setBookmarks(null, bookmarkIds); |
| + } |
| + }); |
| } |
| @Override |
| @@ -359,6 +373,30 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> |
| } |
| } |
| + private void setOfflineStorageHeader( |
| + OfflinePageBridge offlinePageBridge, OfflinePageStorageSpacePolicy policy) { |
| + mOfflineStorageHeader = new OfflinePageStorageSpaceHeader( |
| + mContext, offlinePageBridge, policy, new OfflinePageFreeUpSpaceCallback() { |
| + @Override |
| + public void onFreeUpSpaceDone() { |
| + if (!mDestroyed) { |
| + refreshOfflinePagesFilterView(); |
| + } |
| + mDelegate.getSnackbarManager().showSnackbar( |
| + OfflinePageFreeUpSpaceDialog.createStorageClearedSnackbar( |
| + mContext)); |
| + } |
| + |
| + @Override |
| + public void onFreeUpSpaceCancelled() { |
| + // No need to refresh, as result outcome should |
| + // be the same here. |
| + } |
| + }); |
| + |
| + updateHeader(); |
| + } |
| + |
| private void updateHeader() { |
| int currentUIState = mDelegate.getCurrentState(); |
| if (currentUIState == BookmarkUIState.STATE_LOADING) return; |
| @@ -381,7 +419,16 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> |
| private void refreshOfflinePagesFilterView() { |
| if (mDelegate.getCurrentState() != BookmarkUIState.STATE_FILTER) return; |
| - setBookmarks(null, |
| - mDelegate.getModel().getBookmarkIDsByFilter(BookmarkFilter.OFFLINE_PAGES)); |
| + setBookmarks(null, new ArrayList<BookmarkId>()); |
| + mDelegate.getModel().getBookmarkIDsByFilter( |
| + BookmarkFilter.OFFLINE_PAGES, new Callback<List<BookmarkId>>() { |
| + @Override |
| + public void onResult(List<BookmarkId> bookmarkIds) { |
| + if (mDestroyed) { |
| + return; |
| + } |
| + setBookmarks(null, bookmarkIds); |
| + } |
| + }); |
| } |
| } |