Bug 1247689 - Experiment: show prompt on third opening of reader view r=sebastian

MozReview-Commit-ID: CMxdWuFIe5e

--HG--
rename : mobile/android/base/resources/drawable-hdpi/helper_first_readerview_bookmark.png => mobile/android/base/resources/drawable-hdpi/helper_readerview_bookmark.png
rename : mobile/android/base/resources/drawable-xhdpi/helper_first_readerview_bookmark.png => mobile/android/base/resources/drawable-xhdpi/helper_readerview_bookmark.png
rename : mobile/android/base/resources/drawable-xxhdpi/helper_first_readerview_bookmark.png => mobile/android/base/resources/drawable-xxhdpi/helper_readerview_bookmark.png
extra : rebase_source : c4af4f89f1a936ffd172139018e3243c25f30084
extra : histedit_source : b116221400c9b7cc0a758f43d32283661f2c82cd
This commit is contained in:
Andrzej Hunt 2016-05-02 10:00:52 -07:00
Родитель 91e91a144c
Коммит d7ff8e459f
11 изменённых файлов: 136 добавлений и 2 удалений

Просмотреть файл

@ -59,6 +59,7 @@ import org.mozilla.gecko.preferences.ClearOnShutdownPref;
import org.mozilla.gecko.preferences.GeckoPreferences;
import org.mozilla.gecko.promotion.AddToHomeScreenPromotion;
import org.mozilla.gecko.promotion.BookmarkStateChangeDelegate;
import org.mozilla.gecko.promotion.ReaderViewBookmarkPromotion;
import org.mozilla.gecko.prompts.Prompt;
import org.mozilla.gecko.prompts.PromptListItem;
import org.mozilla.gecko.reader.SavedReaderViewHelper;
@ -215,6 +216,9 @@ public class BrowserApp extends GeckoApp
public static final int ACTIVITY_REQUEST_FIRST_READERVIEW_BOOKMARK = 3001;
public static final int ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_GOTO_BOOKMARKS = 3002;
public static final int ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_IGNORE = 3003;
public static final int ACTIVITY_REQUEST_TRIPLE_READERVIEW = 4001;
public static final int ACTIVITY_RESULT_TRIPLE_READERVIEW_ADD_BOOKMARK = 4002;
public static final int ACTIVITY_RESULT_TRIPLE_READERVIEW_IGNORE = 4003;
public static final String ACTION_VIEW_MULTIPLE = AppConstants.ANDROID_PACKAGE_NAME + ".action.VIEW_MULTIPLE";
@ -306,7 +310,8 @@ public class BrowserApp extends GeckoApp
private final List<BrowserAppDelegate> delegates = Collections.unmodifiableList(Arrays.asList(
(BrowserAppDelegate) new AddToHomeScreenPromotion(),
(BrowserAppDelegate) new ScreenshotDelegate(),
(BrowserAppDelegate) new BookmarkStateChangeDelegate()
(BrowserAppDelegate) new BookmarkStateChangeDelegate(),
(BrowserAppDelegate) new ReaderViewBookmarkPromotion()
));
@NonNull

Просмотреть файл

@ -117,7 +117,7 @@ public class BookmarkStateChangeDelegate extends BrowserAppDelegate implements T
SimpleHelperUI.FIRST_RVBP_SHOWN_TELEMETRYEXTRA,
BrowserApp.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,
R.drawable.helper_readerview_bookmark, R.string.helper_first_offline_bookmark_button,
BrowserApp.ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_GOTO_BOOKMARKS,
BrowserApp.ACTIVITY_RESULT_FIRST_READERVIEW_BOOKMARKS_IGNORE);

Просмотреть файл

@ -0,0 +1,115 @@
/* -*- 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 android.os.Bundle;
import com.keepsafe.switchboard.SwitchBoard;
import org.mozilla.gecko.BrowserApp;
import org.mozilla.gecko.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.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;
private int mTimesEnteredReaderMode;
private boolean mExperimentEnabled;
@Override
public void onCreate(BrowserApp browserApp, Bundle savedInstanceState) {
mBrowserApp = new WeakReference<>(browserApp);
mExperimentEnabled = SwitchBoard.isInExperiment(browserApp, Experiments.TRIPLE_READERVIEW_BOOKMARK_PROMPT);
}
@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(tab.getURL(), data);
if (mTimesEnteredReaderMode < 4 && enteringReaderMode) {
mTimesEnteredReaderMode++;
}
if (mTimesEnteredReaderMode == 3) {
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 = mBrowserApp.get();
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
// functionality).
if (!mExperimentEnabled || prefs.getBoolean(SimpleHelperUI.PREF_FIRST_RVBP_SHOWN, false)) {
return;
}
SimpleHelperUI.show(browserApp,
SimpleHelperUI.TRIPLE_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);
GeckoSharedPrefs.forProfile(browserApp)
.edit()
.putBoolean(SimpleHelperUI.PREF_FIRST_RVBP_SHOWN, true)
.apply();
}
}

Просмотреть файл

@ -33,6 +33,7 @@ import org.mozilla.gecko.TelemetryContract;
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";
public static final String TRIPLE_READERVIEW_OPEN_TELEMETRYEXTRA = "third_readerview_open_prompt";
private View containerView;

Просмотреть файл

@ -47,6 +47,9 @@ public class Experiments {
public static final String PREF_ONBOARDING_VERSION = "onboarding_version";
// Promotion to bookmark reader-view items after entering reader view three times (Bug 1247689)
public static final String TRIPLE_READERVIEW_BOOKMARK_PROMPT = "triple-readerview-bookmark-prompt";
private static volatile Boolean disabled = null;
/**

Просмотреть файл

@ -778,3 +778,8 @@ just addresses the organization to follow, e.g. "This site is run by " -->
<!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">
<!ENTITY helper_triple_readerview_open_title "Available offline">
<!ENTITY helper_triple_readerview_open_message "Bookmark Reader View items to read them offline.">
<!ENTITY helper_triple_readerview_open_button "Add to Bookmarks">

Просмотреть файл

@ -509,6 +509,7 @@ gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
'promotion/AddToHomeScreenPromotion.java',
'promotion/BookmarkStateChangeDelegate.java',
'promotion/HomeScreenPrompt.java',
'promotion/ReaderViewBookmarkPromotion.java',
'promotion/SimpleHelperUI.java',
'prompts/ColorPickerInput.java',
'prompts/IconGridInput.java',

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 2.8 KiB

После

Ширина:  |  Высота:  |  Размер: 2.8 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 3.9 KiB

После

Ширина:  |  Высота:  |  Размер: 3.9 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 5.9 KiB

После

Ширина:  |  Высота:  |  Размер: 5.9 KiB

Просмотреть файл

@ -611,4 +611,8 @@
<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>
<string name="helper_triple_readerview_open_title">&helper_triple_readerview_open_title;</string>
<string name="helper_triple_readerview_open_message">&helper_triple_readerview_open_message;</string>
<string name="helper_triple_readerview_open_button">&helper_triple_readerview_open_button;</string>
</resources>