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 7ecfa903e0504e9d55c7507c6414b5619c37a561..963eae3959d1a15acbdd4a3dcf67628a9c30e546 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 |
| @@ -27,8 +27,6 @@ import org.chromium.ui.base.PageTransition; |
| */ |
| public class OfflinePageUtils { |
| private static final String TAG = "OfflinePageUtils"; |
| - /** Snackbar button types */ |
| - public static final int RELOAD_BUTTON = 0; |
| private static final int SNACKBAR_DURATION = 6 * 1000; // 6 second |
| @@ -163,10 +161,16 @@ public class OfflinePageUtils { |
| * @param tab The current tab. |
| */ |
| public static void showOfflineSnackbarIfNecessary(ChromeActivity activity, Tab tab) { |
| - SnackbarController snackbarController = |
| - createSnackbarController(activity.getTabModelSelector(), tab.getId()); |
| - showOfflineSnackbarIfNecessary( |
| - activity.getBaseContext(), activity.getSnackbarManager(), tab, snackbarController); |
| + if (!OfflinePageBridge.isEnabled()) return; |
| + |
| + if (OfflinePageTabObserver.getInstance() == null) { |
| + SnackbarController snackbarController = |
| + createReloadSnackbarController(activity.getTabModelSelector()); |
|
dewittj
2016/03/28 20:17:59
should OfflinePageUtils#createReloadSnackbarContro
fgorski
2016/03/28 22:52:32
Yes, that is the plan, but we have at least one mo
|
| + OfflinePageTabObserver.init( |
| + activity.getBaseContext(), activity.getSnackbarManager(), snackbarController); |
| + } |
| + |
| + showOfflineSnackbarIfNecessary(tab); |
| } |
| /** |
| @@ -177,34 +181,10 @@ public class OfflinePageUtils { |
| * @param tab The current tab. |
| * @param snackbarController The snackbar controller to control snackbar behavior. |
| */ |
| - static void showOfflineSnackbarIfNecessary(Context context, SnackbarManager snackbarManager, |
| - Tab tab, SnackbarController snackbarController) { |
| - Log.d(TAG, "showOfflineSnackbarIfNecessary, controller is " + snackbarController); |
| - if (tab == null || tab.isFrozen()) return; |
| - |
| - if (!OfflinePageBridge.isEnabled()) return; |
| - |
| - // We only show a snackbar if we are seeing an offline page. |
| - if (!tab.isOfflinePage()) return; |
| - |
| - final boolean connected = isConnected(); |
| - |
| - Log.d(TAG, "showOfflineSnackbarIfNecessary called, tabId " + tab.getId() + ", hidden " |
| - + tab.isHidden() + ", connected " + connected + ", controller " |
| - + snackbarController); |
| - |
| - // If the tab is no longer hidden, and we have a connection while showing an offline |
| - // page, offer to reload it now. |
| - if (!tab.isHidden() && connected) { |
| - Log.d(TAG, "Offering to reload page, controller " + snackbarController); |
| - showReloadSnackbar(context, snackbarManager, snackbarController); |
| - return; |
| - } |
| - |
| - // Set up the tab observer to watch for the tab being unhidden or connectivity. |
| - OfflinePageTabObserver.addObserverForTab( |
| - context, snackbarManager, tab, connected, snackbarController); |
| - return; |
| + static void showOfflineSnackbarIfNecessary(Tab tab) { |
| + // Set up the tab observer to watch for the tab being shown (not hidden) and a valid |
| + // connection. When both conditions are met a snackbar is shown. |
|
Pete Williamson
2016/03/28 19:52:38
If both conditions are already met, will this stil
fgorski
2016/03/28 22:52:32
Actually you are right. I added a piece of code th
Pete Williamson
2016/03/29 08:09:36
Sorry, did you make a change in response to this c
fgorski
2016/03/29 16:00:43
Code was added at the end of OPTabObserver#startOb
|
| + OfflinePageTabObserver.addObserverForTab(tab); |
| } |
| /** |
| @@ -213,13 +193,15 @@ public class OfflinePageUtils { |
| * @param snackbarController Class to show the snackbar. |
| */ |
| public static void showReloadSnackbar(Context context, SnackbarManager snackbarManager, |
| - final SnackbarController snackbarController) { |
| + final SnackbarController snackbarController, int tabId) { |
| + 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), RELOAD_BUTTON); |
| + .setAction(context.getString(R.string.reload), tabId); |
| snackbar.setDuration(SNACKBAR_DURATION); |
| snackbarManager.showSnackbar(snackbar); |
| } |
| @@ -268,16 +250,16 @@ public class OfflinePageUtils { |
| /** |
| * Gets a snackbar controller that we can use to show our snackbar. |
| * @param tabModelSelector used to retrieve a tab by ID |
| - * @param tabId an ID of a tab that shows the snackbar |
| */ |
| - private static SnackbarController createSnackbarController( |
| - final TabModelSelector tabModelSelector, final int tabId) { |
| + private static SnackbarController createReloadSnackbarController( |
| + final TabModelSelector tabModelSelector) { |
| Log.d(TAG, "building snackbar controller"); |
| return new SnackbarController() { |
| @Override |
| public void onAction(Object actionData) { |
| - assert RELOAD_BUTTON == (int) actionData; |
| + assert actionData != null; |
| + int tabId = (int) actionData; |
| RecordUserAction.record("OfflinePages.ReloadButtonClicked"); |
| Tab foundTab = tabModelSelector.getTabById(tabId); |
| if (foundTab == null) return; |