| 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 fb0f227cdc53ddd4ab7b6a36e878228fa5bd0d71..54e0c0e2799083b71c68fb03f8eac88297abb101 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
|
| @@ -76,7 +76,8 @@ public class OfflinePageUtils {
|
| // Used instead of the constant so tests can override the value.
|
| private static int sSnackbarDurationMs = DEFAULT_SNACKBAR_DURATION_MS;
|
|
|
| - private static OfflinePageUtils sInstance;
|
| + /** Instance carrying actual implementation of utility methods. */
|
| + private static Internal sInstance;
|
|
|
| private static File sOfflineSharingDirectory;
|
|
|
| @@ -88,6 +89,88 @@ public class OfflinePageUtils {
|
| private static Map<ChromeActivity, RecentTabTracker> sTabModelObservers = new HashMap<>();
|
|
|
| /**
|
| + * Interface for implementation of offline page utilities, that can be implemented for testing.
|
| + * We are using an internal interface, so that instance methods can have the same names as
|
| + * static methods.
|
| + */
|
| + @VisibleForTesting
|
| + interface Internal {
|
| + /** Returns offline page bridge for specified profile. */
|
| + OfflinePageBridge getOfflinePageBridge(Profile profile);
|
| +
|
| + /** Returns whether the network is connected. */
|
| + boolean isConnected();
|
| +
|
| + /**
|
| + * Checks if an offline page is shown for the tab.
|
| + * @param tab The tab to be reloaded.
|
| + * @return True if the offline page is opened.
|
| + */
|
| + boolean isOfflinePage(Tab tab);
|
| +
|
| + /**
|
| + * Returns whether the tab is showing offline preview.
|
| + * @param tab The current tab.
|
| + */
|
| + boolean isShowingOfflinePreview(Tab tab);
|
| +
|
| + /**
|
| + * Shows the "reload" snackbar for the given tab.
|
| + * @param context The application context.
|
| + * @param snackbarManager Class that shows the snackbar.
|
| + * @param snackbarController Class to control the snackbar.
|
| + * @param tabId Id of a tab that the snackbar is related to.
|
| + */
|
| + void showReloadSnackbar(Context context, SnackbarManager snackbarManager,
|
| + final SnackbarController snackbarController, int tabId);
|
| + }
|
| +
|
| + private static class OfflinePageUtilsImpl implements Internal {
|
| + @Override
|
| + public OfflinePageBridge getOfflinePageBridge(Profile profile) {
|
| + return OfflinePageBridge.getForProfile(profile);
|
| + }
|
| +
|
| + @Override
|
| + public boolean isConnected() {
|
| + return NetworkChangeNotifier.isOnline();
|
| + }
|
| +
|
| + @Override
|
| + public boolean isOfflinePage(Tab tab) {
|
| + WebContents webContents = tab.getWebContents();
|
| + if (webContents == null) return false;
|
| + OfflinePageBridge offlinePageBridge =
|
| + getInstance().getOfflinePageBridge(tab.getProfile());
|
| + if (offlinePageBridge == null) return false;
|
| + return offlinePageBridge.isOfflinePage(webContents);
|
| + }
|
| +
|
| + @Override
|
| + public boolean isShowingOfflinePreview(Tab tab) {
|
| + OfflinePageBridge offlinePageBridge = getOfflinePageBridge(tab.getProfile());
|
| + if (offlinePageBridge == null) return false;
|
| + return offlinePageBridge.isShowingOfflinePreview(tab.getWebContents());
|
| + }
|
| +
|
| + @Override
|
| + public void showReloadSnackbar(Context context, SnackbarManager snackbarManager,
|
| + final SnackbarController snackbarController, int tabId) {
|
| + if (tabId == Tab.INVALID_TAB_ID) return;
|
| +
|
| + Log.d(TAG, "showReloadSnackbar called with controller " + snackbarController);
|
| + Snackbar snackbar =
|
| + Snackbar.make(context.getString(R.string.offline_pages_viewing_offline_page),
|
| + snackbarController, Snackbar.TYPE_ACTION,
|
| + Snackbar.UMA_OFFLINE_PAGE_RELOAD)
|
| + .setSingleLine(false)
|
| + .setAction(context.getString(R.string.reload), tabId);
|
| + snackbar.setDuration(sSnackbarDurationMs);
|
| + snackbarManager.showSnackbar(snackbar);
|
| + }
|
| + }
|
| +
|
| + /**
|
| * Contains values from the histogram enum OfflinePagesTabRestoreType used for reporting the
|
| * OfflinePages.TabRestore metric.
|
| */
|
| @@ -107,9 +190,9 @@ public class OfflinePageUtils {
|
| public static final int COUNT = 10;
|
| }
|
|
|
| - private static OfflinePageUtils getInstance() {
|
| + private static Internal getInstance() {
|
| if (sInstance == null) {
|
| - sInstance = new OfflinePageUtils();
|
| + sInstance = new OfflinePageUtilsImpl();
|
| }
|
| return sInstance;
|
| }
|
| @@ -128,11 +211,9 @@ public class OfflinePageUtils {
|
| return Environment.getDataDirectory().getTotalSpace();
|
| }
|
|
|
| - /**
|
| - * Returns true if the network is connected.
|
| - */
|
| + /** Returns whether the network is connected. */
|
| public static boolean isConnected() {
|
| - return NetworkChangeNotifier.isOnline();
|
| + return getInstance().isConnected();
|
| }
|
|
|
| /*
|
| @@ -203,25 +284,21 @@ public class OfflinePageUtils {
|
| OfflinePageTabObserver.addObserverForTab(tab);
|
| }
|
|
|
| + protected void showReloadSnackbarInternal(Context context, SnackbarManager snackbarManager,
|
| + final SnackbarController snackbarController, int tabId) {}
|
| +
|
| /**
|
| * Shows the "reload" snackbar for the given tab.
|
| - * @param activity The activity owning the tab.
|
| - * @param snackbarController Class to show the snackbar.
|
| + * @param context The application context.
|
| + * @param snackbarManager Class that shows the snackbar.
|
| + * @param snackbarController Class to control the snackbar.
|
| + * @param tabId Id of a tab that the snackbar is related to.
|
| */
|
| public static void showReloadSnackbar(Context context, SnackbarManager snackbarManager,
|
| final SnackbarController snackbarController, int tabId) {
|
| - if (tabId == Tab.INVALID_TAB_ID) return;
|
| -
|
| - Log.d(TAG, "showReloadSnackbar called with controller " + snackbarController);
|
| - Snackbar snackbar =
|
| - Snackbar.make(context.getString(R.string.offline_pages_viewing_offline_page),
|
| - snackbarController, Snackbar.TYPE_ACTION, Snackbar.UMA_OFFLINE_PAGE_RELOAD)
|
| - .setSingleLine(false).setAction(context.getString(R.string.reload), tabId);
|
| - snackbar.setDuration(sSnackbarDurationMs);
|
| - snackbarManager.showSnackbar(snackbar);
|
| + getInstance().showReloadSnackbar(context, snackbarManager, snackbarController, tabId);
|
| }
|
|
|
| -
|
| /**
|
| * Records UMA data when the Offline Pages Background Load service awakens.
|
| * @param context android context
|
| @@ -558,9 +635,7 @@ public class OfflinePageUtils {
|
| * @param tab The current tab.
|
| */
|
| public static boolean isShowingOfflinePreview(Tab tab) {
|
| - OfflinePageBridge offlinePageBridge = getInstance().getOfflinePageBridge(tab.getProfile());
|
| - if (offlinePageBridge == null) return false;
|
| - return offlinePageBridge.isShowingOfflinePreview(tab.getWebContents());
|
| + return getInstance().isShowingOfflinePreview(tab);
|
| }
|
|
|
| /**
|
| @@ -569,11 +644,7 @@ public class OfflinePageUtils {
|
| * @return True if the offline page is opened.
|
| */
|
| public static boolean isOfflinePage(Tab tab) {
|
| - WebContents webContents = tab.getWebContents();
|
| - if (webContents == null) return false;
|
| - OfflinePageBridge offlinePageBridge = getInstance().getOfflinePageBridge(tab.getProfile());
|
| - if (offlinePageBridge == null) return false;
|
| - return offlinePageBridge.isOfflinePage(webContents);
|
| + return getInstance().isOfflinePage(tab);
|
| }
|
|
|
| /**
|
| @@ -617,10 +688,6 @@ public class OfflinePageUtils {
|
| tab.loadUrl(params);
|
| }
|
|
|
| - protected OfflinePageBridge getOfflinePageBridge(Profile profile) {
|
| - return OfflinePageBridge.getForProfile(profile);
|
| - }
|
| -
|
| /**
|
| * Tracks tab creation and closure for the Recent Tabs feature. UI needs to stop showing
|
| * recent offline pages as soon as the tab is closed. The TabModel is used to get profile
|
| @@ -792,7 +859,7 @@ public class OfflinePageUtils {
|
| }
|
|
|
| @VisibleForTesting
|
| - static void setInstanceForTesting(OfflinePageUtils instance) {
|
| + static void setInstanceForTesting(Internal instance) {
|
| sInstance = instance;
|
| }
|
|
|
|
|