| Index: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
|
| index 9333a7c9575e7ef45edf2aab3bc6f70fff26c773..3ffb456f354fc4ab4b2271103b2d230a54aa0596 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
|
| @@ -4,14 +4,12 @@
|
|
|
| package org.chromium.chrome.browser.offlinepages;
|
|
|
| -import android.app.Activity;
|
| import android.content.Context;
|
| import android.content.Intent;
|
| import android.content.IntentFilter;
|
| import android.os.BatteryManager;
|
| import android.os.Environment;
|
|
|
| -import org.chromium.base.Callback;
|
| import org.chromium.base.Log;
|
| import org.chromium.base.metrics.RecordHistogram;
|
| import org.chromium.base.metrics.RecordUserAction;
|
| @@ -22,8 +20,9 @@ import org.chromium.chrome.browser.snackbar.SnackbarManager;
|
| import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
|
| import org.chromium.chrome.browser.tab.Tab;
|
| import org.chromium.chrome.browser.tabmodel.TabModelSelector;
|
| -import org.chromium.components.offlinepages.FeatureMode;
|
| +import org.chromium.components.bookmarks.BookmarkId;
|
| import org.chromium.content_public.browser.LoadUrlParams;
|
| +import org.chromium.content_public.browser.WebContents;
|
| import org.chromium.net.ConnectionType;
|
| import org.chromium.net.NetworkChangeNotifier;
|
| import org.chromium.ui.base.PageTransition;
|
| @@ -55,80 +54,53 @@ public class OfflinePageUtils {
|
| }
|
|
|
| /**
|
| - * Returns true if the stoarge is almost full which indicates that the user probably needs to
|
| - * free up some space.
|
| - */
|
| - public static boolean isStorageAlmostFull() {
|
| - return getFreeSpaceInBytes() < STORAGE_ALMOST_FULL_THRESHOLD_BYTES;
|
| - }
|
| -
|
| - /**
|
| * Returns true if the network is connected.
|
| */
|
| public static boolean isConnected() {
|
| return NetworkChangeNotifier.isOnline();
|
| }
|
|
|
| + /*
|
| + * Save an offline copy for the bookmarked page asynchronously.
|
| + *
|
| + * @param bookmarkId The ID of the page to save an offline copy.
|
| + * @param tab A {@link Tab} object.
|
| + * @param callback The callback to be invoked when the offline copy is saved.
|
| + */
|
| + public static void saveBookmarkOffline(BookmarkId bookmarkId, Tab tab) {
|
| + // If bookmark ID is missing there is nothing to save here.
|
| + if (bookmarkId == null) return;
|
| +
|
| + // Making sure the feature is enabled.
|
| + if (!OfflinePageBridge.isEnabled()) return;
|
| +
|
| + // Making sure tab is worth keeping.
|
| + if (shouldSkipSavingTabOffline(tab)) return;
|
| +
|
| + OfflinePageBridge offlinePageBridge = OfflinePageBridge.getForProfile(tab.getProfile());
|
| + if (offlinePageBridge == null) return;
|
| +
|
| + WebContents webContents = tab.getWebContents();
|
| + ClientId clientId = ClientId.createClientIdForBookmarkId(bookmarkId);
|
| +
|
| + // TODO(fgorski): Ensure that request is queued if the model is not loaded.
|
| + offlinePageBridge.savePage(webContents, clientId, new OfflinePageBridge.SavePageCallback() {
|
| + @Override
|
| + public void onSavePageDone(int savePageResult, String url, long offlineId) {
|
| + // TODO(fgorski): Decide if we need to do anything with result.
|
| + // Perhaps some UMA reporting, but that can really happen someplace else.
|
| + }
|
| + });
|
| + }
|
| +
|
| /**
|
| - * Finds out the appropriate resource ID of UI string shown to the user.
|
| - * @param stringResId The resource ID of UI string used when 'bookmarks' name is used in UI
|
| - * strings.
|
| - * return The resource ID of UI string shown to the user, depending on the experiment.
|
| + * Indicates whether we should skip saving the given tab as an offline page.
|
| + * A tab shouldn't be saved offline if it shows an error page or a sad tab page.
|
| */
|
| - public static int getStringId(int stringResId) {
|
| - if (!OfflinePageBridge.isEnabled()) {
|
| - return stringResId;
|
| - }
|
| - if (OfflinePageBridge.getFeatureMode() != FeatureMode.ENABLED_AS_SAVED_PAGES) {
|
| - return stringResId;
|
| - }
|
| - if (stringResId == R.string.bookmark_action_bar_delete) {
|
| - return R.string.offline_pages_action_bar_delete;
|
| - } else if (stringResId == R.string.bookmark_action_bar_move) {
|
| - return R.string.offline_pages_action_bar_move;
|
| - } else if (stringResId == R.string.bookmark_action_bar_search) {
|
| - return R.string.offline_pages_action_bar_search;
|
| - } else if (stringResId == R.string.edit_bookmark) {
|
| - return R.string.offline_pages_edit_item;
|
| - } else if (stringResId == R.string.bookmark_drawer_all_items) {
|
| - return R.string.offline_pages_all_items;
|
| - } else if (stringResId == R.string.bookmark_title_bar_all_items) {
|
| - return R.string.offline_pages_all_items;
|
| - } else if (stringResId == R.string.bookmarks) {
|
| - return R.string.offline_pages_saved_pages;
|
| - } else if (stringResId == R.string.menu_bookmarks) {
|
| - return R.string.menu_bookmarks_offline_pages;
|
| - } else if (stringResId == R.string.ntp_bookmarks) {
|
| - return R.string.offline_pages_ntp_button_name;
|
| - } else if (stringResId == R.string.accessibility_ntp_toolbar_btn_bookmarks) {
|
| - return R.string.offline_pages_ntp_button_accessibility;
|
| - } else if (stringResId == R.string.bookmarks_folder_empty) {
|
| - return R.string.offline_pages_folder_empty;
|
| - } else if (stringResId == R.string.new_tab_incognito_message) {
|
| - return R.string.offline_pages_new_tab_incognito_message;
|
| - } else if (stringResId == R.string.offline_pages_as_bookmarks_page_saved) {
|
| - return R.string.offline_pages_page_saved;
|
| - } else if (stringResId == R.string.offline_pages_as_bookmarks_page_saved_folder) {
|
| - return R.string.offline_pages_page_saved_folder;
|
| - } else if (stringResId == R.string.offline_pages_as_bookmarks_page_skipped) {
|
| - return R.string.offline_pages_page_skipped;
|
| - } else if (stringResId
|
| - == R.string.offline_pages_as_bookmarks_page_saved_storage_near_full) {
|
| - return R.string.offline_pages_page_saved_storage_near_full;
|
| - } else if (stringResId == R.string.offline_pages_as_bookmarks_page_failed_to_save) {
|
| - return R.string.offline_pages_page_failed_to_save;
|
| - } else if (stringResId
|
| - == R.string.offline_pages_as_bookmarks_page_failed_to_save_storage_near_full) {
|
| - return R.string.offline_pages_page_failed_to_save_storage_near_full;
|
| - } else if (stringResId == R.string.offline_pages_as_bookmarks_storage_space_message) {
|
| - return R.string.offline_pages_storage_space_message;
|
| - } else if (stringResId == R.string.offline_pages_as_bookmarks_viewing_offline_page) {
|
| - return R.string.offline_pages_viewing_offline_page;
|
| - } else if (stringResId == R.string.offline_pages_as_bookmarks_offline_page_size) {
|
| - return R.string.bookmark_offline_page_size;
|
| - } else {
|
| - return stringResId;
|
| - }
|
| + private static boolean shouldSkipSavingTabOffline(Tab tab) {
|
| + WebContents webContents = tab.getWebContents();
|
| + return tab.isShowingErrorPage() || tab.isShowingSadTab() || webContents == null
|
| + || webContents.isDestroyed() || webContents.isIncognito();
|
| }
|
|
|
| /**
|
| @@ -190,69 +162,16 @@ public class OfflinePageUtils {
|
| if (tabId == Tab.INVALID_TAB_ID) return;
|
|
|
| Log.d(TAG, "showReloadSnackbar called with controller " + snackbarController);
|
| - final int snackbarTextId = getStringId(R.string.offline_pages_viewing_offline_page);
|
| - Snackbar snackbar = Snackbar.make(context.getString(snackbarTextId), snackbarController,
|
| - Snackbar.TYPE_ACTION)
|
| - .setSingleLine(false)
|
| - .setAction(context.getString(R.string.reload), tabId);
|
| + Snackbar snackbar =
|
| + Snackbar.make(context.getString(R.string.offline_pages_viewing_offline_page),
|
| + snackbarController, Snackbar.TYPE_ACTION)
|
| + .setSingleLine(false)
|
| + .setAction(context.getString(R.string.reload), tabId);
|
| snackbar.setDuration(SNACKBAR_DURATION);
|
| snackbarManager.showSnackbar(snackbar);
|
| }
|
|
|
| /**
|
| - * Creates a snackbar controller for a case where "Free up space" button is shown to clean up
|
| - * space taken by the offline pages.
|
| - */
|
| - public static SnackbarController createSnackbarControllerForFreeUpSpaceButton(
|
| - final OfflinePageBridge offlinePageBridge, final SnackbarManager snackbarManager,
|
| - final Activity activity) {
|
| - return new SnackbarController() {
|
| - @Override
|
| - public void onDismissNoAction(Object actionData) {
|
| - // This method will be called only if the snackbar is dismissed by timeout.
|
| - RecordUserAction.record(
|
| - "OfflinePages.SaveStatusSnackbar.FreeUpSpaceButtonNotClicked");
|
| - }
|
| -
|
| - @Override
|
| - public void onAction(Object actionData) {
|
| - RecordUserAction.record("OfflinePages.SaveStatusSnackbar.FreeUpSpaceButtonClicked");
|
| - Callback<OfflinePageStorageSpacePolicy> callback =
|
| - getStorageSpacePolicyCallback(offlinePageBridge, snackbarManager, activity);
|
| -
|
| - OfflinePageStorageSpacePolicy.create(offlinePageBridge, callback);
|
| - }
|
| - };
|
| - }
|
| -
|
| - private static Callback<OfflinePageStorageSpacePolicy> getStorageSpacePolicyCallback(
|
| - final OfflinePageBridge offlinePageBridge, final SnackbarManager snackbarManager,
|
| - final Activity activity) {
|
| - return new Callback<OfflinePageStorageSpacePolicy>() {
|
| - @Override
|
| - public void onResult(OfflinePageStorageSpacePolicy policy) {
|
| - if (policy.hasPagesToCleanUp()) {
|
| - OfflinePageFreeUpSpaceCallback callback = new OfflinePageFreeUpSpaceCallback() {
|
| - @Override
|
| - public void onFreeUpSpaceDone() {
|
| - snackbarManager.showSnackbar(
|
| - OfflinePageFreeUpSpaceDialog.createStorageClearedSnackbar(
|
| - activity));
|
| - }
|
| - @Override
|
| - public void onFreeUpSpaceCancelled() {}
|
| - };
|
| - OfflinePageFreeUpSpaceDialog dialog =
|
| - OfflinePageFreeUpSpaceDialog.newInstance(offlinePageBridge, callback);
|
| - dialog.show(activity.getFragmentManager(), null);
|
| - } else {
|
| - OfflinePageOpenStorageSettingsDialog.showDialog(activity);
|
| - }
|
| - }
|
| - };
|
| - }
|
| -
|
| - /**
|
| * Gets a snackbar controller that we can use to show our snackbar.
|
| * @param tabModelSelector used to retrieve a tab by ID
|
| */
|
|
|