diff options
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.java | 103 |
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(); + } + +} |