summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java b/mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java
new file mode 100644
index 000000000..db5a531c6
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/promotion/ReaderViewBookmarkPromotion.java
@@ -0,0 +1,103 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; 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.promotion;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+
+import com.keepsafe.switchboard.SwitchBoard;
+
+import org.mozilla.gecko.BrowserApp;
+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.Experiments;
+
+public class ReaderViewBookmarkPromotion extends BrowserAppDelegateWithReference implements Tabs.OnTabsChangedListener {
+ private static final String PREF_FIRST_RV_HINT_SHOWN = "first_reader_view_hint_shown";
+ private static final String FIRST_READERVIEW_OPEN_TELEMETRYEXTRA = "first_readerview_open_prompt";
+
+ private boolean hasEnteredReaderMode = false;
+
+ @Override
+ public void onResume(BrowserApp browserApp) {
+ Tabs.registerOnTabsChangedListener(this);
+ }
+
+ @Override
+ public void onPause(BrowserApp browserApp) {
+ Tabs.unregisterOnTabsChangedListener(this);
+ }
+
+ @Override
+ public void onTabChanged(Tab tab, Tabs.TabEvents msg, String data) {
+ switch (msg) {
+ case LOCATION_CHANGE:
+ // old url: data
+ // new url: tab.getURL()
+ final boolean enteringReaderMode = ReaderModeUtils.isEnteringReaderMode(data, tab.getURL());
+
+ if (!hasEnteredReaderMode && enteringReaderMode) {
+ hasEnteredReaderMode = true;
+ promoteBookmarking();
+ }
+
+ break;
+ }
+ }
+
+ @Override
+ public void onActivityResult(BrowserApp browserApp, int requestCode, int resultCode, Intent data) {
+ switch (requestCode) {
+ case BrowserApp.ACTIVITY_REQUEST_TRIPLE_READERVIEW:
+ if (resultCode == BrowserApp.ACTIVITY_RESULT_TRIPLE_READERVIEW_ADD_BOOKMARK) {
+ final Tab tab = Tabs.getInstance().getSelectedTab();
+ if (tab != null) {
+ tab.addBookmark();
+ }
+ } 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 = getBrowserApp();
+ if (browserApp == null) {
+ return;
+ }
+
+ final SharedPreferences prefs = GeckoSharedPrefs.forProfile(browserApp);
+ final boolean isEnabled = SwitchBoard.isInExperiment(browserApp, Experiments.TRIPLE_READERVIEW_BOOKMARK_PROMPT);
+
+ // 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
+ // functionality).
+ if (!isEnabled || prefs.getBoolean(PREF_FIRST_RV_HINT_SHOWN, false)) {
+ return;
+ }
+
+ SimpleHelperUI.show(browserApp,
+ FIRST_READERVIEW_OPEN_TELEMETRYEXTRA,
+ BrowserApp.ACTIVITY_REQUEST_TRIPLE_READERVIEW,
+ R.string.helper_triple_readerview_open_title,
+ R.string.helper_triple_readerview_open_message,
+ R.drawable.helper_readerview_bookmark, // We share the icon with the usual helper UI
+ R.string.helper_triple_readerview_open_button,
+ BrowserApp.ACTIVITY_RESULT_TRIPLE_READERVIEW_ADD_BOOKMARK,
+ BrowserApp.ACTIVITY_RESULT_TRIPLE_READERVIEW_IGNORE);
+
+ prefs
+ .edit()
+ .putBoolean(PREF_FIRST_RV_HINT_SHOWN, true)
+ .apply();
+ }
+
+}