Index: chrome/android/java/src/org/chromium/chrome/browser/snackbar/LoFiBarPopupController.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/LoFiBarPopupController.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/LoFiBarPopupController.java |
index 3afad9752451f1d638b0cd0fe255eaccff8845e7..7b2c0035877ab2ac398231b49693eea2f3042672 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/LoFiBarPopupController.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/LoFiBarPopupController.java |
@@ -11,7 +11,9 @@ import org.chromium.chrome.R; |
import org.chromium.chrome.browser.ChromeSwitches; |
import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
import org.chromium.chrome.browser.preferences.datareduction.DataReductionProxyUma; |
+import org.chromium.chrome.browser.tab.EmptyTabObserver; |
import org.chromium.chrome.browser.tab.Tab; |
+import org.chromium.chrome.browser.tab.TabObserver; |
/** |
* Each time a tab loads with Lo-Fi this controller saves that tab id and title to the stack of |
@@ -26,6 +28,7 @@ public class LoFiBarPopupController implements SnackbarManager.SnackbarControlle |
private final Context mContext; |
private final boolean mDisabled; |
private Tab mTab; |
+ private boolean mLoFiPopupShownForPageLoad = false; |
/** |
* Creates an instance of a {@link LoFiBarPopupController}. |
@@ -39,9 +42,50 @@ public class LoFiBarPopupController implements SnackbarManager.SnackbarControlle |
} |
/** |
+ * Called on new page loads to indicate that a Lo-Fi snackbar has not been shown yet. |
+ */ |
+ public void resetLoFiPopupShownForPageLoad() { |
+ mLoFiPopupShownForPageLoad = false; |
+ } |
+ |
+ /** |
+ * If a Lo-Fi snackbar has not been shown for the current page load, creates a Lo-Fi snackbar |
+ * for the given tab and shows it. If the tab is hidden, waits until it is visible to show the |
+ * snackbar. |
+ * |
+ * @param tab The tab to show the snackbar on. |
+ */ |
+ public void maybeCreateLoFiBar(Tab tab) { |
+ if (mLoFiPopupShownForPageLoad) return; |
+ mLoFiPopupShownForPageLoad = true; |
+ if (tab.isHidden()) { |
+ TabObserver tabObserver = new EmptyTabObserver() { |
+ @Override |
+ public void onShown(Tab tab) { |
+ showLoFiBar(tab); |
+ tab.removeObserver(this); |
+ } |
+ |
+ @Override |
+ public void onHidden(Tab tab) { |
+ dismissLoFiBar(); |
+ } |
+ |
+ @Override |
+ public void onDestroyed(Tab tab) { |
+ dismissLoFiBar(); |
+ } |
+ }; |
+ tab.addObserver(tabObserver); |
+ return; |
+ } |
+ showLoFiBar(tab); |
+ } |
+ |
+ /** |
* @param tab The tab. Saved to reload the page. |
*/ |
- public void showLoFiBar(Tab tab) { |
+ private void showLoFiBar(Tab tab) { |
if (mDisabled) return; |
mTab = tab; |
mSnackbarManager.showSnackbar(Snackbar.make( |
@@ -57,7 +101,7 @@ public class LoFiBarPopupController implements SnackbarManager.SnackbarControlle |
/** |
* Dismisses the snackbar. |
*/ |
- public void dismissLoFiBar() { |
+ private void dismissLoFiBar() { |
if (mSnackbarManager.isShowing()) mSnackbarManager.dismissSnackbars(this); |
} |