Bug 1269406 - Upgrade delegates needing BrowserApp references to use BrowserAppDelegateWithReference r?sebastian draft
authorAndrzej Hunt <ahunt@mozilla.com>
Mon, 02 May 2016 11:08:16 -0700
changeset 358380 0f1f7860812b97d11ab864a0b214fc1150e9b35e
parent 358379 b93966130d9c027d1157e2cc6673f2af80712add
child 519841 dec317b94e6b17e3c00294700abf8e5ba95d1bbb
push id16994
push userahunt@mozilla.com
push dateMon, 02 May 2016 18:09:36 +0000
reviewerssebastian
bugs1269406
milestone49.0a1
Bug 1269406 - Upgrade delegates needing BrowserApp references to use BrowserAppDelegateWithReference r?sebastian MozReview-Commit-ID: CV4uA2N8q8e
mobile/android/base/java/org/mozilla/gecko/delegates/BookmarkStateChangeDelegate.java
mobile/android/base/java/org/mozilla/gecko/delegates/ScreenshotDelegate.java
mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java
--- a/mobile/android/base/java/org/mozilla/gecko/delegates/BookmarkStateChangeDelegate.java
+++ b/mobile/android/base/java/org/mozilla/gecko/delegates/BookmarkStateChangeDelegate.java
@@ -40,26 +40,19 @@ import org.mozilla.gecko.util.ThreadUtil
 import java.lang.ref.WeakReference;
 
 /**
  * Delegate to watch for bookmark state changes.
  *
  * This is responsible for showing snackbars and helper UIs related to the addition/removal
  * of bookmarks, or reader view bookmarks.
  */
-public class BookmarkStateChangeDelegate extends BrowserAppDelegate implements Tabs.OnTabsChangedListener {
+public class BookmarkStateChangeDelegate extends BrowserAppDelegateWithReference implements Tabs.OnTabsChangedListener {
     private static final String LOGTAG = "BookmarkDelegate";
 
-    private WeakReference<BrowserApp> mBrowserApp;
-
-    @Override
-    public void onCreate(BrowserApp browserApp, Bundle savedInstanceState) {
-        mBrowserApp = new WeakReference<>(browserApp);
-    }
-
     @Override
     public void onResume(BrowserApp browserApp) {
         Tabs.registerOnTabsChangedListener(this);
     }
 
     @Override
     public void onPause(BrowserApp browserApp) {
         Tabs.unregisterOnTabsChangedListener(this);
@@ -95,17 +88,17 @@ public class BookmarkStateChangeDelegate
                 browserApp.openUrlAndStopEditing("about:home?panel=" + HomeConfig.getIdForBuiltinPanelType(HomeConfig.PanelType.BOOKMARKS));
             } else if (resultCode == BrowserApp.ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_IGNORE) {
                 showReaderModeBookmarkAddedSnackbar();
             }
         }
     }
 
     private boolean promoteReaderViewBookmarkAdded() {
-        final BrowserApp browserApp = mBrowserApp.get();
+        final BrowserApp browserApp = getBrowserApp();
         if (browserApp == null) {
             return false;
         }
 
         final SharedPreferences prefs = GeckoSharedPrefs.forProfile(browserApp);
 
         final boolean hasFirstReaderViewPromptBeenShownBefore = prefs.getBoolean(SimpleHelperUI.PREF_FIRST_RVBP_SHOWN, false);
 
@@ -125,17 +118,17 @@ public class BookmarkStateChangeDelegate
                 .edit()
                 .putBoolean(SimpleHelperUI.PREF_FIRST_RVBP_SHOWN, true)
                 .apply();
 
         return true;
     }
 
     private void showBookmarkAddedSnackbar() {
-        final BrowserApp browserApp = mBrowserApp.get();
+        final BrowserApp browserApp = getBrowserApp();
         if (browserApp == null) {
             return;
         }
 
         // This flow is from the option menu which has check to see if a bookmark was already added.
         // So, it is safe here to show the snackbar that bookmark_added without any checks.
         final SnackbarHelper.SnackbarCallback callback = new SnackbarHelper.SnackbarCallback() {
             @Override
@@ -148,17 +141,17 @@ public class BookmarkStateChangeDelegate
         SnackbarHelper.showSnackbarWithAction(browserApp,
                 browserApp.getResources().getString(R.string.bookmark_added),
                 Snackbar.LENGTH_LONG,
                 browserApp.getResources().getString(R.string.bookmark_options),
                 callback);
     }
 
     private void showBookmarkRemovedSnackbar() {
-        final BrowserApp browserApp = mBrowserApp.get();
+        final BrowserApp browserApp = getBrowserApp();
         if (browserApp == null) {
             return;
         }
 
         SnackbarHelper.showSnackbar(browserApp, browserApp.getResources().getString(R.string.bookmark_removed), Snackbar.LENGTH_LONG);
     }
 
     private static void showBookmarkDialog(final BrowserApp browserApp) {
@@ -208,17 +201,17 @@ public class BookmarkStateChangeDelegate
         final PromptListItem[] items = new PromptListItem[2];
         items[0] = new PromptListItem(res.getString(R.string.contextmenu_edit_bookmark));
         items[1] = new PromptListItem(res.getString(R.string.contextmenu_add_to_launcher));
 
         ps.show("", "", items, ListView.CHOICE_MODE_NONE);
     }
 
     private void showReaderModeBookmarkAddedSnackbar() {
-        final BrowserApp browserApp = mBrowserApp.get();
+        final BrowserApp browserApp = getBrowserApp();
         if (browserApp == null) {
             return;
         }
 
         final Drawable iconDownloaded = DrawableUtil.tintDrawable(browserApp, R.drawable.status_icon_readercache, Color.WHITE);
 
         final SnackbarHelper.SnackbarCallback callback = new SnackbarHelper.SnackbarCallback() {
             @Override
--- a/mobile/android/base/java/org/mozilla/gecko/delegates/ScreenshotDelegate.java
+++ b/mobile/android/base/java/org/mozilla/gecko/delegates/ScreenshotDelegate.java
@@ -15,32 +15,30 @@ import org.mozilla.gecko.BrowserApp;
 import org.mozilla.gecko.GeckoProfile;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.ScreenshotObserver;
 import org.mozilla.gecko.SnackbarHelper;
 import org.mozilla.gecko.Tab;
 import org.mozilla.gecko.Tabs;
 import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
-import org.mozilla.gecko.delegates.BrowserAppDelegate;
 
 import java.lang.ref.WeakReference;
 
 /**
  * Delegate for observing screenshots being taken.
  */
-public class ScreenshotDelegate extends BrowserAppDelegate implements ScreenshotObserver.OnScreenshotListener {
+public class ScreenshotDelegate extends BrowserAppDelegateWithReference implements ScreenshotObserver.OnScreenshotListener {
     private static final String LOGTAG = "GeckoScreenshotDelegate";
 
-    private WeakReference<Activity> activityReference;
     private final ScreenshotObserver mScreenshotObserver = new ScreenshotObserver();
 
     @Override
     public void onCreate(BrowserApp browserApp, Bundle savedInstanceState) {
-        activityReference = new WeakReference<Activity>(browserApp);
+        super.onCreate(browserApp, savedInstanceState);
 
         mScreenshotObserver.setListener(browserApp, this);
     }
 
     @Override
     public void onScreenshotTaken(String screenshotPath, String title) {
         // Treat screenshots as a sharing method.
         Telemetry.sendUIEvent(TelemetryContract.Event.SHARE, TelemetryContract.Method.BUTTON, "screenshot");
@@ -50,17 +48,17 @@ public class ScreenshotDelegate extends 
         }
 
         final Tab selectedTab = Tabs.getInstance().getSelectedTab();
         if (selectedTab == null) {
             Log.w(LOGTAG, "Selected tab is null: could not page info to store screenshot.");
             return;
         }
 
-        final Activity activity = activityReference.get();
+        final Activity activity = getBrowserApp();
         if (activity == null) {
             return;
         }
 
         GeckoProfile.get(activity).getDB().getUrlAnnotations().insertScreenshot(
                 activity.getContentResolver(), selectedTab.getURL(), screenshotPath);
 
         SnackbarHelper.showSnackbar(activity,
--- a/mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java
+++ b/mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java
@@ -12,30 +12,29 @@ import android.os.Bundle;
 import com.keepsafe.switchboard.SwitchBoard;
 
 import org.mozilla.gecko.BrowserApp;
 import org.mozilla.gecko.delegates.BrowserAppDelegate;
 import org.mozilla.gecko.GeckoSharedPrefs;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.Tab;
 import org.mozilla.gecko.Tabs;
+import org.mozilla.gecko.delegates.BrowserAppDelegateWithReference;
 import org.mozilla.gecko.reader.ReaderModeUtils;
 import org.mozilla.gecko.util.Experiments;
 
 import java.lang.ref.WeakReference;
 
-public class ReaderViewBookmarkPromotion extends BrowserAppDelegate implements Tabs.OnTabsChangedListener {
-    private WeakReference<BrowserApp> mBrowserApp;
-
+public class ReaderViewBookmarkPromotion extends BrowserAppDelegateWithReference implements Tabs.OnTabsChangedListener {
     private int mTimesEnteredReaderMode;
     private boolean mExperimentEnabled;
 
     @Override
     public void onCreate(BrowserApp browserApp, Bundle savedInstanceState) {
-        mBrowserApp = new WeakReference<>(browserApp);
+        super.onCreate(browserApp, savedInstanceState);
 
         mExperimentEnabled = SwitchBoard.isInExperiment(browserApp, Experiments.TRIPLE_READERVIEW_BOOKMARK_PROMPT);
     }
 
     @Override
     public void onResume(BrowserApp browserApp) {
         Tabs.registerOnTabsChangedListener(this);
     }
@@ -77,17 +76,17 @@ public class ReaderViewBookmarkPromotion
                 } else if (resultCode == BrowserApp.ACTIVITY_RESULT_TRIPLE_READERVIEW_IGNORE) {
                     // Nothing to do: we won't show this promotion again either way.
                 }
                 break;
         }
     }
 
     private void promoteBookmarking() {
-        final BrowserApp browserApp = mBrowserApp.get();
+        final BrowserApp browserApp = getBrowserApp();
         if (browserApp == null) {
             return;
         }
 
         final SharedPreferences prefs = GeckoSharedPrefs.forProfile(browserApp);
 
         // We reuse the same preference as for the first offline reader view bookmark
         // as we only want to show one of the two UIs (they both explain the same