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

Unified 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 side-by-side diff with in-line comments
Download patch
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..33a6a6bf68c75fd8bfabc92d3fa4e37e1d781dd8 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;
+
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,21 @@ 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.getOfflineBookmarkIds(new BookmarkModel.GetOfflineBookmarkIdsCallback() {
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,
+ @Override
+ public void onGetOfflineBookmarkIdsDone(List<BookmarkId> bookmarkIds) {
+ RecordHistogram.recordCountHistogram(
+ "OfflinePages.OfflinePageCount", bookmarkIds.size());
+ if (mDestroyed) {
+ return;
+ }
+
+ setBookmarks(null, bookmarkIds);
+ }
+ });
}
@Override
@@ -359,6 +372,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 +418,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().getOfflineBookmarkIds(
+ new BookmarkModel.GetOfflineBookmarkIdsCallback() {
+ @Override
+ public void onGetOfflineBookmarkIdsDone(List<BookmarkId> bookmarkIds) {
+ if (mDestroyed) {
+ return;
+ }
+ setBookmarks(null, bookmarkIds);
+ }
+ });
}
}

Powered by Google App Engine
This is Rietveld 408576698