| Index: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageTabObserver.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageTabObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageTabObserver.java
|
| index 929109c91af23ea966816eb47eec433f86d96037..16c95854140136747d91bb5a29c339554ede0351 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageTabObserver.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageTabObserver.java
|
| @@ -4,8 +4,10 @@
|
|
|
| package org.chromium.chrome.browser.offlinepages;
|
|
|
| +import android.content.Context;
|
| +
|
| import org.chromium.base.Log;
|
| -import org.chromium.chrome.browser.ChromeActivity;
|
| +import org.chromium.chrome.browser.snackbar.SnackbarManager;
|
| import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
|
| import org.chromium.chrome.browser.tab.EmptyTabObserver;
|
| import org.chromium.chrome.browser.tab.Tab;
|
| @@ -21,8 +23,8 @@ import java.util.WeakHashMap;
|
| */
|
| public class OfflinePageTabObserver extends EmptyTabObserver {
|
| private static final String TAG = "OfflinePageTO";
|
| - private ChromeActivity mActivity;
|
| - private long mBookmarkId;
|
| + private Context mContext;
|
| + private SnackbarManager mSnackbarManager;
|
| private boolean mConnected;
|
| private SnackbarController mSnackbarController;
|
| private boolean mWasHidden;
|
| @@ -33,19 +35,22 @@ public class OfflinePageTabObserver extends EmptyTabObserver {
|
|
|
| /**
|
| * Create and attach a tab observer if we don't already have one, otherwise update it.
|
| - * @param activity The ChromeActivity we are associated with.
|
| + * @param context Android context.
|
| + * @param snackbarManager The snackbar manager to show and dismiss snackbars.
|
| * @param tab The tab we are adding an observer for.
|
| - * @param conneted True if we were connected when this call was made.
|
| + * @param connected True if we were connected when this call was made.
|
| + * @param snackbarController The snackbar controller to control snackbar behavior.
|
| */
|
| - public static void addObserverForTab(ChromeActivity activity, Tab tab, boolean connected,
|
| - SnackbarController snackbarController) {
|
| + public static void addObserverForTab(Context context, SnackbarManager snackbarManager, Tab tab,
|
| + boolean connected, SnackbarController snackbarController) {
|
| // See if we already have an observer for this tab.
|
| int tabId = tab.getId();
|
| OfflinePageTabObserver observer = sTabObservers.get(tabId);
|
|
|
| if (observer == null) {
|
| // If we don't have an observer, build one and attach it to the tab.
|
| - observer = new OfflinePageTabObserver(activity, tab, connected, snackbarController);
|
| + observer = new OfflinePageTabObserver(
|
| + context, snackbarManager, tab, connected, snackbarController);
|
| sTabObservers.put(tabId, observer);
|
| tab.addObserver(observer);
|
| } else {
|
| @@ -63,62 +68,36 @@ public class OfflinePageTabObserver extends EmptyTabObserver {
|
| }
|
|
|
| /**
|
| - * Removes tab observer for a given bookmark.
|
| - * @param bookmarkId The bookmarkId we are removing an observer for.
|
| - */
|
| - public static void removeObserverForBookmark(long bookmarkId) {
|
| - // Find any observer, if we have one.
|
| - int tabId = findTabIdByObserverBookmarkId(bookmarkId);
|
| - Log.d(TAG, "removeObserver called, tabId " + tabId + ", bookmarkId " + bookmarkId);
|
| - if (tabId == Tab.INVALID_TAB_ID) return;
|
| -
|
| - removeObserverForTab(tabId);
|
| - }
|
| -
|
| - /**
|
| * Removes the observer for a tab with the specified tabId.
|
| - * @param tabId The Id of the tab to remove an observer for.
|
| + * @param tab The tab to remove an observer for.
|
| */
|
| - private static void removeObserverForTab(int tabId) {
|
| - OfflinePageTabObserver observer = sTabObservers.get(tabId);
|
| - sTabObservers.remove(tabId);
|
| + private static void removeObserverForTab(Tab tab) {
|
| + OfflinePageTabObserver observer = sTabObservers.get(tab.getId());
|
| if (observer != null) {
|
| - Tab tab = observer.mActivity.getTabModelSelector().getTabById(tabId);
|
| tab.removeObserver(observer);
|
| }
|
| - }
|
| - /**
|
| - * Finds the tab ID of the observer with the specified bookmark ID, if it exists. Returns an
|
| - * invalid tab ID if none found.
|
| - * @param bookmarkId The bookmark ID on the observer on the searched for tab.
|
| - * @return ID of the tab associated with this bookmark, or Tab.INVALID_TAB_ID if none found.
|
| - */
|
| - private static int findTabIdByObserverBookmarkId(long bookmarkId) {
|
| - // Iterate over the whole map looking for a bookmark ID that matches.
|
| - for (Map.Entry<Integer, OfflinePageTabObserver> entry : sTabObservers.entrySet()) {
|
| - OfflinePageTabObserver value = (OfflinePageTabObserver) entry.getValue();
|
| - if (value != null && value.mBookmarkId == bookmarkId) return entry.getKey();
|
| - }
|
| - return Tab.INVALID_TAB_ID;
|
| + sTabObservers.remove(tab.getId());
|
| }
|
|
|
| /**
|
| * Builds a new OfflinePageTabObserver.
|
| - * @param activity The ChromeActivity of this instance of the browser.
|
| + * @param context Android context.
|
| + * @param snackbarManager The snackbar manager to show and dismiss snackbars.
|
| + * @param tab The tab we are adding an observer for.
|
| * @param connected True if the phone is connected when the observer is created.
|
| - * @param bookmarkId Id of the bookmark (offline page) that is associated with this observer.
|
| * @param snackbarController Controller to use to build the snackbar.
|
| */
|
| - public OfflinePageTabObserver(ChromeActivity activity, Tab tab, boolean connected,
|
| - SnackbarController snackbarController) {
|
| - mActivity = activity;
|
| - mBookmarkId = tab.getBookmarkId();
|
| + OfflinePageTabObserver(Context context, SnackbarManager snackbarManager, Tab tab,
|
| + boolean connected, SnackbarController snackbarController) {
|
| + mContext = context;
|
| + mSnackbarManager = snackbarManager;
|
| mConnected = connected;
|
| // Remember if the tab was hidden when we started, so we can show the snackbar when
|
| // the tab becomes visible.
|
| mWasHidden = tab.isHidden();
|
|
|
| - mListener = new OfflinePageConnectivityListener(activity, tab, snackbarController);
|
| + mListener = new OfflinePageConnectivityListener(
|
| + context, snackbarManager, tab, snackbarController);
|
| mSnackbarController = snackbarController;
|
| }
|
|
|
| @@ -139,7 +118,8 @@ public class OfflinePageTabObserver extends EmptyTabObserver {
|
|
|
| if (mWasHidden) {
|
| if (mConnected) {
|
| - OfflinePageUtils.showReloadSnackbar(mActivity, mSnackbarController);
|
| + OfflinePageUtils.showReloadSnackbar(
|
| + mContext, mSnackbarManager, mSnackbarController);
|
| }
|
|
|
| mWasHidden = false;
|
| @@ -151,12 +131,12 @@ public class OfflinePageTabObserver extends EmptyTabObserver {
|
| public void onHidden(Tab hiddenTab) {
|
| mWasHidden = true;
|
| // In case any snackbars are showing, dismiss them before we switch tabs.
|
| - mActivity.getSnackbarManager().dismissSnackbars(mSnackbarController);
|
| + mSnackbarManager.dismissSnackbars(mSnackbarController);
|
| }
|
|
|
| @Override
|
| public void onPageLoadStarted(Tab tab, String newUrl) {
|
| - OfflinePageUtils.preferOnlineVersion(mActivity, tab, newUrl);
|
| + OfflinePageUtils.preferOnlineVersion(tab, newUrl);
|
| }
|
|
|
| @Override
|
| @@ -173,9 +153,9 @@ public class OfflinePageTabObserver extends EmptyTabObserver {
|
| // Unregister this tab for OS connectivity notifications.
|
| mListener.disable();
|
| Log.d(TAG, "onUrlUpdated");
|
| - removeObserverForTab(reloadingTab.getId());
|
| + removeObserverForTab(reloadingTab);
|
| // In case any snackbars are showing, dismiss them before we navigate away.
|
| - mActivity.getSnackbarManager().dismissSnackbars(mSnackbarController);
|
| + mSnackbarManager.dismissSnackbars(mSnackbarController);
|
| }
|
|
|
| /**
|
|
|