| Index: chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
|
| index 5a6b260011939de8f8464e4d8a6d22da70d3acf5..a9b50244362436452af1acf6f2473ff77f01798f 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
|
| @@ -46,6 +46,9 @@ public class BookmarkUtils {
|
| /**
|
| * If the tab has already been bookmarked, start {@link BookmarkEditActivity} for the
|
| * bookmark. If not, add the bookmark to bookmarkmodel, and show a snackbar notifying the user.
|
| + *
|
| + * Note: Takes ownership of bookmarkModel, and will call |destroy| on it when finished.
|
| + *
|
| * @param idToAdd The bookmark ID if the tab has already been bookmarked.
|
| * @param bookmarkModel The bookmark model.
|
| * @param tab The tab to add or edit a bookmark.
|
| @@ -61,6 +64,7 @@ public class BookmarkUtils {
|
| if (idToAdd != Tab.INVALID_BOOKMARK_ID) {
|
| startEditActivity(activity, new BookmarkId(idToAdd, BookmarkType.NORMAL),
|
| webContentsToSave);
|
| + bookmarkModel.destroy();
|
| return;
|
| }
|
|
|
| @@ -72,8 +76,9 @@ public class BookmarkUtils {
|
| // The bookmark model will be destroyed in the created AddBookmarkCallback.
|
| bookmarkModel.addBookmarkAsync(parent, bookmarkModel.getChildCount(parent), tab.getTitle(),
|
| tab.getUrl(), webContentsToSave,
|
| + // bookmarkModel will be destroyed in the callback.
|
| createAddBookmarkCallback(bookmarkModel, snackbarManager, activity,
|
| - webContentsToSave));
|
| + webContentsToSave));
|
| }
|
|
|
| /**
|
| @@ -224,21 +229,42 @@ public class BookmarkUtils {
|
| }
|
|
|
| /**
|
| - * Gets whether bookmark manager should load offline page initially.
|
| + * Shows bookmark main UI.
|
| + *
|
| + * The initial url the bookmark manager shows depends on offline page status and some
|
| + * experiments we run.
|
| */
|
| - private static boolean shouldShowOfflinePageAtFirst(OfflinePageBridge bridge) {
|
| - if (bridge == null || bridge.getAllPages().isEmpty() || OfflinePageUtils.isConnected()) {
|
| - return false;
|
| + public static void showBookmarkManager(final Activity activity) {
|
| + String lastUsedUrl = getLastUsedUrl(activity);
|
| + final String defaultUrl =
|
| + TextUtils.isEmpty(lastUsedUrl) ? UrlConstants.BOOKMARKS_URL : lastUsedUrl;
|
| +
|
| + BookmarkModel bookmarkModel = new BookmarkModel();
|
| + OfflinePageBridge bridge = bookmarkModel.getOfflinePageBridge();
|
| + bookmarkModel.destroy();
|
| +
|
| + // If we are connected show the default URL.
|
| + if (bridge == null || OfflinePageUtils.isConnected()) {
|
| + openUrlOrStartActivityWithUrl(activity, defaultUrl);
|
| + return;
|
| }
|
| - return true;
|
| - }
|
|
|
| - /**
|
| - * Shows bookmark main UI.
|
| - */
|
| - public static void showBookmarkManager(Activity activity) {
|
| - String url = getFirstUrlToLoad(activity);
|
| + // Otherwise we want to show offline pages. If there aren't any, just default to the
|
| + // regular list.
|
| + bridge.hasPages(new OfflinePageBridge.HasPagesCallback() {
|
| + @Override
|
| + public void onHasPagesDone(boolean hasPages) {
|
| + String url = defaultUrl;
|
| + if (hasPages) {
|
| + url = BookmarkUIState.createFilterUrl(BookmarkFilter.OFFLINE_PAGES, false)
|
| + .toString();
|
| + }
|
| + openUrlOrStartActivityWithUrl(activity, url);
|
| + }
|
| + });
|
| + }
|
|
|
| + private static void openUrlOrStartActivityWithUrl(Activity activity, String url) {
|
| if (DeviceFormFactor.isTablet(activity)) {
|
| openUrl(activity, url);
|
| } else {
|
| @@ -249,26 +275,6 @@ public class BookmarkUtils {
|
| }
|
|
|
| /**
|
| - * The initial url the bookmark manager shows depends on offline page status and some
|
| - * experiments we run.
|
| - */
|
| - private static String getFirstUrlToLoad(Activity activity) {
|
| - BookmarkModel model = new BookmarkModel();
|
| - OfflinePageBridge bridge = model.getOfflinePageBridge();
|
| - try {
|
| - if (shouldShowOfflinePageAtFirst(bridge)) {
|
| - return BookmarkUIState.createFilterUrl(BookmarkFilter.OFFLINE_PAGES,
|
| - false).toString();
|
| - }
|
| - String lastUsedUrl = getLastUsedUrl(activity);
|
| - if (!TextUtils.isEmpty(lastUsedUrl)) return lastUsedUrl;
|
| - return UrlConstants.BOOKMARKS_URL;
|
| - } finally {
|
| - model.destroy();
|
| - }
|
| - }
|
| -
|
| - /**
|
| * Saves the last used url to preference. The saved url will be later queried by
|
| * {@link #getLastUsedUrl(Context)}
|
| */
|
|
|