diff options
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/Experiments.java')
-rw-r--r-- | mobile/android/base/java/org/mozilla/gecko/Experiments.java | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/Experiments.java b/mobile/android/base/java/org/mozilla/gecko/Experiments.java new file mode 100644 index 000000000..e71bb4c52 --- /dev/null +++ b/mobile/android/base/java/org/mozilla/gecko/Experiments.java @@ -0,0 +1,119 @@ +/* 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; + +import android.content.Context; + +import android.util.Log; +import android.text.TextUtils; + +import com.keepsafe.switchboard.Preferences; +import com.keepsafe.switchboard.SwitchBoard; + +import java.util.LinkedList; +import java.util.List; + +/** + * This class should reflect the experiment names found in the Switchboard experiments config here: + * https://github.com/mozilla-services/switchboard-experiments + */ +public class Experiments { + private static final String LOGTAG = "GeckoExperiments"; + + // Show a system notification linking to a "What's New" page on app update. + public static final String WHATSNEW_NOTIFICATION = "whatsnew-notification"; + + // Subscribe to known, bookmarked sites and show a notification if new content is available. + public static final String CONTENT_NOTIFICATIONS_12HRS = "content-notifications-12hrs"; + public static final String CONTENT_NOTIFICATIONS_8AM = "content-notifications-8am"; + public static final String CONTENT_NOTIFICATIONS_5PM = "content-notifications-5pm"; + + // Onboarding: "Features and Story". These experiments are determined + // on the client, they are not part of the server config. + public static final String ONBOARDING3_A = "onboarding3-a"; // Control: No first run + public static final String ONBOARDING3_B = "onboarding3-b"; // 4 static Feature + 1 dynamic slides + public static final String ONBOARDING3_C = "onboarding3-c"; // Differentiating features slides + + // Synchronizing the catalog of downloadable content from Kinto + public static final String DOWNLOAD_CONTENT_CATALOG_SYNC = "download-content-catalog-sync"; + + // Promotion for "Add to homescreen" + public static final String PROMOTE_ADD_TO_HOMESCREEN = "promote-add-to-homescreen"; + + 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"; + + // Only show origin in URL bar instead of full URL (Bug 1236431) + public static final String URLBAR_SHOW_ORIGIN_ONLY = "urlbar-show-origin-only"; + + // Show name of organization (EV cert) instead of full URL in URL bar (Bug 1249594). + public static final String URLBAR_SHOW_EV_CERT_OWNER = "urlbar-show-ev-cert-owner"; + + // Play HLS videos in a VideoView (Bug 1313391) + public static final String HLS_VIDEO_PLAYBACK = "hls-video-playback"; + + // Make new activity stream panel available (to replace top sites) (Bug 1313316) + public static final String ACTIVITY_STREAM = "activity-stream"; + + /** + * Returns if a user is in certain local experiment. + * @param experiment Name of experiment to look up + * @return returns value for experiment or false if experiment does not exist. + */ + public static boolean isInExperimentLocal(Context context, String experiment) { + if (SwitchBoard.isInBucket(context, 0, 20)) { + return Experiments.ONBOARDING3_A.equals(experiment); + } else if (SwitchBoard.isInBucket(context, 20, 60)) { + return Experiments.ONBOARDING3_B.equals(experiment); + } else if (SwitchBoard.isInBucket(context, 60, 100)) { + return Experiments.ONBOARDING3_C.equals(experiment); + } else { + return false; + } + } + + /** + * Returns list of all active experiments, remote and local. + * @return List of experiment names Strings + */ + public static List<String> getActiveExperiments(Context c) { + final List<String> experiments = new LinkedList<>(); + experiments.addAll(SwitchBoard.getActiveExperiments(c)); + + // Add onboarding version. + final String onboardingExperiment = GeckoSharedPrefs.forProfile(c).getString(Experiments.PREF_ONBOARDING_VERSION, null); + if (!TextUtils.isEmpty(onboardingExperiment)) { + experiments.add(onboardingExperiment); + } + + return experiments; + } + + /** + * Sets an override to force an experiment to be enabled or disabled. This value + * will be read and used before reading the switchboard server configuration. + * + * @param c Context + * @param experimentName Experiment name + * @param isEnabled Whether or not the experiment should be enabled + */ + public static void setOverride(Context c, String experimentName, boolean isEnabled) { + Log.d(LOGTAG, "setOverride: " + experimentName + " = " + isEnabled); + Preferences.setOverrideValue(c, experimentName, isEnabled); + } + + /** + * Clears the override value for an experiment. + * + * @param c Context + * @param experimentName Experiment name + */ + public static void clearOverride(Context c, String experimentName) { + Log.d(LOGTAG, "clearOverride: " + experimentName); + Preferences.clearOverrideValue(c, experimentName); + } +} |