Bug 1277467 - Pre: Add ForegroundAwareDelegate to help track if Gecko tabs are user-visible r=sebastian draft
authorGrigory Kruglov <gkruglov@mozilla.com>
Wed, 22 Jun 2016 06:31:27 -0700
changeset 380622 9c19cd72e0dc19d5c80bb1bf7fd2177c14862056
parent 376752 fcd8a5d33cb63d088911f02c601145f2829106ec
child 380623 77d36c835ca0d1c2a0db2174e0b392a09999caf7
child 380624 e7f94098603a6f75fe3c7fc741fa315bb6ad7787
child 381238 457a42ebba5cfc32ab7dabce0a8a11d6511b9c08
push id21260
push usergkruglov@mozilla.com
push dateWed, 22 Jun 2016 13:38:11 +0000
reviewerssebastian
bugs1277467
milestone50.0a1
Bug 1277467 - Pre: Add ForegroundAwareDelegate to help track if Gecko tabs are user-visible r=sebastian MozReview-Commit-ID: KZavLxL4u8V
mobile/android/base/java/org/mozilla/gecko/delegates/TabsTrayVisibilityAwareDelegate.java
mobile/android/base/java/org/mozilla/gecko/promotion/AddToHomeScreenPromotion.java
mobile/android/base/moz.build
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/delegates/TabsTrayVisibilityAwareDelegate.java
@@ -0,0 +1,38 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.delegates;
+
+import android.os.Bundle;
+import android.support.annotation.CallSuper;
+
+import org.mozilla.gecko.BrowserApp;
+import org.mozilla.gecko.tabs.TabsPanel;
+
+public abstract class TabsTrayVisibilityAwareDelegate extends BrowserAppDelegate {
+    private boolean tabsTrayVisible;
+
+    @Override
+    @CallSuper
+    public void onCreate(BrowserApp browserApp, Bundle savedInstanceState) {
+        tabsTrayVisible = false;
+    }
+
+    @Override
+    @CallSuper
+    public void onTabsTrayShown(BrowserApp browserApp, TabsPanel tabsPanel) {
+        tabsTrayVisible = true;
+    }
+
+    @Override
+    @CallSuper
+    public void onTabsTrayHidden(BrowserApp browserApp, TabsPanel tabsPanel) {
+        tabsTrayVisible = false;
+    }
+
+    protected boolean isTabsTrayVisible() {
+        return tabsTrayVisible;
+    }
+}
--- a/mobile/android/base/java/org/mozilla/gecko/promotion/AddToHomeScreenPromotion.java
+++ b/mobile/android/base/java/org/mozilla/gecko/promotion/AddToHomeScreenPromotion.java
@@ -12,35 +12,34 @@ import android.os.Bundle;
 import android.util.Log;
 
 import com.keepsafe.switchboard.SwitchBoard;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.mozilla.gecko.AboutPages;
 import org.mozilla.gecko.BrowserApp;
-import org.mozilla.gecko.delegates.BrowserAppDelegate;
 import org.mozilla.gecko.GeckoProfile;
 import org.mozilla.gecko.Tab;
 import org.mozilla.gecko.Tabs;
 import org.mozilla.gecko.db.BrowserContract;
 import org.mozilla.gecko.db.BrowserDB;
 import org.mozilla.gecko.db.UrlAnnotations;
-import org.mozilla.gecko.tabs.TabsPanel;
+import org.mozilla.gecko.delegates.ForegroundAwareDelegate;
 import org.mozilla.gecko.util.Experiments;
 import org.mozilla.gecko.util.ThreadUtils;
 
 import java.lang.ref.WeakReference;
 
 import ch.boye.httpclientandroidlib.util.TextUtils;
 
 /**
  * Promote "Add to home screen" if user visits website often.
  */
-public class AddToHomeScreenPromotion extends BrowserAppDelegate implements Tabs.OnTabsChangedListener {
+public class AddToHomeScreenPromotion extends ForegroundAwareDelegate implements Tabs.OnTabsChangedListener {
     private static class URLHistory {
         public final long visits;
         public final long lastVisit;
 
         private URLHistory(long visits, long lastVisit) {
             this.visits = visits;
             this.lastVisit = lastVisit;
         }
@@ -49,49 +48,38 @@ public class AddToHomeScreenPromotion ex
     private static final String LOGTAG = "GeckoPromoteShortcut";
 
     private static final String EXPERIMENT_MINIMUM_TOTAL_VISITS = "minimumTotalVisits";
     private static final String EXPERIMENT_LAST_VISIT_MINIMUM_AGE = "lastVisitMinimumAgeMs";
     private static final String EXPERIMENT_LAST_VISIT_MAXIMUM_AGE = "lastVisitMaximumAgeMs";
 
     private WeakReference<Activity> activityReference;
     private boolean isEnabled;
-    private boolean isInForeground;
     private int minimumVisits;
     private int lastVisitMinimumAgeMs;
     private int lastVisitMaximumAgeMs;
 
     @Override
     public void onCreate(BrowserApp browserApp, Bundle savedInstanceState) {
+        super.onCreate(browserApp, savedInstanceState);
         activityReference = new WeakReference<Activity>(browserApp);
-        isInForeground = true;
 
         initializeExperiment(browserApp);
     }
 
     @Override
     public void onResume(BrowserApp browserApp) {
         Tabs.registerOnTabsChangedListener(this);
     }
 
     @Override
     public void onPause(BrowserApp browserApp) {
         Tabs.unregisterOnTabsChangedListener(this);
     }
 
-    @Override
-    public void onTabsTrayShown(BrowserApp browserApp, TabsPanel tabsPanel) {
-        isInForeground = false;
-    }
-
-    @Override
-    public void onTabsTrayHidden(BrowserApp browserApp, TabsPanel tabsPanel) {
-        isInForeground = true;
-    }
-
     private void initializeExperiment(Context context) {
         if (!SwitchBoard.isInExperiment(context, Experiments.PROMOTE_ADD_TO_HOMESCREEN)) {
             Log.v(LOGTAG, "Experiment not enabled");
             // Experiment is not enabled. No need to try to read values.
             return;
         }
 
         JSONObject values = SwitchBoard.getExperimentValuesFromJson(context, Experiments.PROMOTE_ADD_TO_HOMESCREEN);
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -252,16 +252,17 @@ gbjar.sources += ['java/org/mozilla/geck
     'db/TabsProvider.java',
     'db/UrlAnnotations.java',
     'db/URLMetadata.java',
     'db/URLMetadataTable.java',
     'delegates/BookmarkStateChangeDelegate.java',
     'delegates/BrowserAppDelegate.java',
     'delegates/BrowserAppDelegateWithReference.java',
     'delegates/ScreenshotDelegate.java',
+    'delegates/TabsTrayVisibilityAwareDelegate.java',
     'DevToolsAuthHelper.java',
     'distribution/Distribution.java',
     'distribution/DistributionStoreCallback.java',
     'distribution/ReferrerDescriptor.java',
     'distribution/ReferrerReceiver.java',
     'dlc/BaseAction.java',
     'dlc/catalog/DownloadContent.java',
     'dlc/catalog/DownloadContentBootstrap.java',