Chromium Code Reviews| 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 39f86dd3b467f3364d3dc87c0b817423f4b4d94c..4f9a7d07b6dab99acfdb10ebc6e81e6c8b2d5837 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,84 @@ 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. |
| + */ |
|
dewittj
2017/04/27 17:29:14
@visiblefortest
fgorski
2017/05/08 21:41:24
Done.
|
| + 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) { |
| + OfflinePageBridge offlinePageBridge = getOfflinePageBridge(tab.getProfile()); |
| + if (offlinePageBridge == null) return false; |
| + return offlinePageBridge.isOfflinePage(tab.getWebContents()); |
| + } |
| + |
| + @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 +186,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 +207,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 +280,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 +631,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,9 +640,7 @@ public class OfflinePageUtils { |
| * @return True if the offline page is opened. |
| */ |
| public static boolean isOfflinePage(Tab tab) { |
| - OfflinePageBridge offlinePageBridge = getInstance().getOfflinePageBridge(tab.getProfile()); |
| - if (offlinePageBridge == null) return false; |
| - return offlinePageBridge.isOfflinePage(tab.getWebContents()); |
| + return getInstance().isOfflinePage(tab); |
| } |
| /** |
| @@ -613,10 +682,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 |
| @@ -788,7 +853,7 @@ public class OfflinePageUtils { |
| } |
| @VisibleForTesting |
| - static void setInstanceForTesting(OfflinePageUtils instance) { |
| + static void setInstanceForTesting(Internal instance) { |
| sInstance = instance; |
| } |