Bug 1246238 - Show helper UI first time a reader view page is bookmarked r?sebastian draft
authorAndrzej Hunt <ahunt@mozilla.com>
Wed, 20 Apr 2016 21:27:30 +0200
changeset 354571 5f1412096f86ac6f3ae6cd9579d0159b3b10b65f
parent 354570 0b8ef72dc63c9c6be37e39a794102ea0356e5e8e
child 354594 f6c6fcd7ce7614eb92448270682fb97004552c9d
push id16125
push userahunt@mozilla.com
push dateThu, 21 Apr 2016 09:08:44 +0000
reviewerssebastian
bugs1246238
milestone48.0a1
Bug 1246238 - Show helper UI first time a reader view page is bookmarked r?sebastian MozReview-Commit-ID: JeHr7eZTKc
mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
mobile/android/base/java/org/mozilla/gecko/promotion/SimpleHelperUI.java
mobile/android/base/locales/en-US/android_strings.dtd
mobile/android/base/resources/drawable-hdpi/helper_first_readerview_bookmark.png
mobile/android/base/resources/drawable-xhdpi/helper_first_readerview_bookmark.png
mobile/android/base/resources/drawable-xxhdpi/helper_first_readerview_bookmark.png
mobile/android/base/strings.xml.in
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -53,16 +53,17 @@ import org.mozilla.gecko.menu.GeckoMenu;
 import org.mozilla.gecko.menu.GeckoMenuItem;
 import org.mozilla.gecko.mozglue.ContextUtils;
 import org.mozilla.gecko.mozglue.ContextUtils.SafeIntent;
 import org.mozilla.gecko.overlays.ui.ShareDialog;
 import org.mozilla.gecko.permissions.Permissions;
 import org.mozilla.gecko.preferences.ClearOnShutdownPref;
 import org.mozilla.gecko.preferences.GeckoPreferences;
 import org.mozilla.gecko.promotion.AddToHomeScreenPromotion;
+import org.mozilla.gecko.promotion.SimpleHelperUI;
 import org.mozilla.gecko.prompts.Prompt;
 import org.mozilla.gecko.prompts.PromptListItem;
 import org.mozilla.gecko.reader.SavedReaderViewHelper;
 import org.mozilla.gecko.reader.ReaderModeUtils;
 import org.mozilla.gecko.reader.ReadingListHelper;
 import org.mozilla.gecko.restrictions.Restrictable;
 import org.mozilla.gecko.restrictions.RestrictedProfileConfiguration;
 import org.mozilla.gecko.restrictions.Restrictions;
@@ -205,16 +206,19 @@ public class BrowserApp extends GeckoApp
 
     private static final String STATE_ABOUT_HOME_TOP_PADDING = "abouthome_top_padding";
 
     private static final String BROWSER_SEARCH_TAG = "browser_search";
 
     // Request ID for startActivityForResult.
     private static final int ACTIVITY_REQUEST_PREFERENCES = 1001;
     private static final int ACTIVITY_REQUEST_TAB_QUEUE = 2001;
+    private static final int ACTIVITY_REQUEST_FIRST_READERVIEW_BOOKMARK = 3001;
+    private static final int ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_GOTO_BOOKMARKS = 3002;
+    private static final int ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_IGNORE = 3003;
 
     public static final String ACTION_VIEW_MULTIPLE = AppConstants.ANDROID_PACKAGE_NAME + ".action.VIEW_MULTIPLE";
 
     @RobocopTarget
     public static final String EXTRA_SKIP_STARTPANE = "skipstartpane";
     private static final String EOL_NOTIFIED = "eol_notified";
 
     private BrowserSearch mBrowserSearch;
@@ -366,17 +370,36 @@ public class BrowserApp extends GeckoApp
             case BOOKMARK_ADDED:
                 // We always show the special offline snackbar whenever we bookmark a reader page.
                 // It's possible that the page is already stored offline, however this is highly
                 // unlikely, and even so it is probably nicer to show the same offline notification
                 // every time we bookmark an about:reader page.
                 if (!AboutPages.isAboutReader(tab.getURL())) {
                     showBookmarkAddedSnackbar();
                 } else {
-                    showReaderModeBookmarkAddedSnackbar();
+                    final SharedPreferences prefs = GeckoSharedPrefs.forProfile(this);
+
+                    final boolean hasFirstReaderViewPromptBeenShownBefore = prefs.getBoolean(SimpleHelperUI.PREF_FIRST_RVBP_SHOWN, false);
+
+                    if (hasFirstReaderViewPromptBeenShownBefore) {
+                        showReaderModeBookmarkAddedSnackbar();
+                    } else {
+                        SimpleHelperUI.show(this,
+                                SimpleHelperUI.FIRST_RVBP_SHOWN_TELEMETRYEXTRA,
+                                ACTIVITY_REQUEST_FIRST_READERVIEW_BOOKMARK,
+                                R.string.helper_first_offline_bookmark_title, R.string.helper_first_offline_bookmark_message,
+                                R.drawable.helper_first_readerview_bookmark, R.string.helper_first_offline_bookmark_button,
+                                ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_GOTO_BOOKMARKS,
+                                ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_IGNORE);
+
+                        GeckoSharedPrefs.forProfile(this)
+                                .edit()
+                                .putBoolean(SimpleHelperUI.PREF_FIRST_RVBP_SHOWN, true)
+                                .apply();
+                    }
                 }
                 break;
             case BOOKMARK_REMOVED:
                 showBookmarkRemovedSnackbar();
                 break;
 
             case UNSELECTED:
                 // We receive UNSELECTED immediately after the SELECTED listeners run
@@ -2646,16 +2669,24 @@ public class BrowserApp extends GeckoApp
                     }
                 });
                 break;
 
             case ACTIVITY_REQUEST_TAB_QUEUE:
                 TabQueueHelper.processTabQueuePromptResponse(resultCode, this);
                 break;
 
+            case ACTIVITY_REQUEST_FIRST_READERVIEW_BOOKMARK:
+                if (resultCode == ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_GOTO_BOOKMARKS) {
+                    openUrlAndStopEditing("about:home?panel=" + HomeConfig.getIdForBuiltinPanelType(PanelType.BOOKMARKS));
+                } else if (resultCode == ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_IGNORE){
+                    showReaderModeBookmarkAddedSnackbar();
+                }
+                break;
+
             default:
                 super.onActivityResult(requestCode, resultCode, data);
         }
     }
 
     private void showFirstrunPager() {
         if (mFirstrunAnimationContainer == null) {
             final ViewStub firstrunPagerStub = (ViewStub) findViewById(R.id.firstrun_pager_stub);
--- a/mobile/android/base/java/org/mozilla/gecko/promotion/SimpleHelperUI.java
+++ b/mobile/android/base/java/org/mozilla/gecko/promotion/SimpleHelperUI.java
@@ -26,16 +26,19 @@ import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
 
 /**
  * Generic HelperUI (prompt) that can be populated with an image, title, message and action button.
  * See show() for usage. This is run as an Activity, results must be handled in the parent Activities
  * onActivityResult().
  */
 public class SimpleHelperUI extends Locales.LocaleAwareActivity {
+    public static final String PREF_FIRST_RVBP_SHOWN = "first_reader_view_bookmark_prompt_shown";
+    public static final String FIRST_RVBP_SHOWN_TELEMETRYEXTRA = "first_readerview_bookmark_prompt";
+
     private View containerView;
 
     private boolean isAnimating;
 
     private String mTelemetryExtra;
 
     private static final String EXTRA_TELEMETRYEXTRA = "telemetryextra";
     private static final String EXTRA_TITLE = "title";
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -780,8 +780,12 @@ just addresses the organization to follo
 <!ENTITY eol_notification_summary "Tap to learn more">
 
 <!-- LOCALIZATION NOTE (whatsnew_notification_title, whatsnew_notification_summary): These strings
      are used for a system notification that's shown to users after the app updates. -->
 <!ENTITY whatsnew_notification_title "&brandShortName; is up to date">
 <!ENTITY whatsnew_notification_summary "Find out what\'s new in this version">
 
 <!ENTITY promotion_add_to_homescreen "Add to home screen">
+
+<!ENTITY helper_first_offline_bookmark_title "Read offline">
+<!ENTITY helper_first_offline_bookmark_message "Find your Reader View items in Bookmarks, even offline.">
+<!ENTITY helper_first_offline_bookmark_button "Go to Bookmarks">
new file mode 100644
index 0000000000000000000000000000000000000000..3b5cadd521042cdfde1af2e4c51ffa21ac66364a
GIT binary patch
literal 2836
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
new file mode 100644
index 0000000000000000000000000000000000000000..1a4fdeb2d991e284548549e8baccc94867f40ad9
GIT binary patch
literal 3797
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
LNkvXXu0mjff*K}Y
new file mode 100644
index 0000000000000000000000000000000000000000..a88a39a3b76db8360687dbe00d9cea4a31c4f064
GIT binary patch
literal 5944
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
B@vHy<
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -610,9 +610,14 @@
   <string name="eol_notification_url">https://support.mozilla.org/1/mobile/&formatS1;/&formatS2;/&formatS3;/unsupported-version</string>
 
   <string name="whatsnew_notification_title">&whatsnew_notification_title;</string>
   <string name="whatsnew_notification_summary">&whatsnew_notification_summary;</string>
   <!-- https://support.mozilla.org/1/mobile/%VERSION%/%OS%/%LOCALE%/new-android -->
   <string name="whatsnew_notification_url">https://support.mozilla.org/1/mobile/&formatS1;/&formatS2;/&formatS3;/new-android</string>
 
   <string name="promotion_add_to_homescreen">&promotion_add_to_homescreen;</string>
+
+  <string name="helper_first_offline_bookmark_title">&helper_first_offline_bookmark_title;</string>
+  <string name="helper_first_offline_bookmark_message">&helper_first_offline_bookmark_message;</string>
+  <string name="helper_first_offline_bookmark_button">&helper_first_offline_bookmark_button;</string>
+
 </resources>