Index: chrome/android/java/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarController.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarController.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarController.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..19a646cd011a3daab33cb96956df083f5351a9cf |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarController.java |
@@ -0,0 +1,122 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.snackbar; |
+ |
+import android.content.Context; |
+import android.content.Intent; |
+import android.text.format.Formatter; |
+ |
+import org.chromium.base.CommandLine; |
+import org.chromium.chrome.R; |
+import org.chromium.chrome.browser.preferences.PreferencesLauncher; |
+import org.chromium.chrome.browser.preferences.datareduction.DataReductionPreferences; |
+import org.chromium.chrome.browser.preferences.datareduction.DataReductionPromoUtils; |
+import org.chromium.chrome.browser.preferences.datareduction.DataReductionProxyUma; |
+import org.chromium.components.variations.VariationsAssociatedData; |
+ |
+/** |
+ * The controller for the Data Reduction Proxy promo that lets users of the proxy know when Chrome |
+ * has saved a given amount of data. |
+ */ |
+public class DataReductionPromoSnackbarController implements SnackbarManager.SnackbarController { |
+ public static final String FROM_PROMO = "FromPromo"; |
+ public static final String PROMO_FIELD_TRIAL_NAME = "DataCompressionProxyPromoVisibility"; |
+ // A semi-colon delimited list various data saving values in mb that the promo should be shown |
+ // for. |
gone
2016/10/13 01:03:11
Sentence needs to be reworked, too.
megjablon
2016/10/24 23:59:00
Done.
|
+ public static final String PROMO_PARAM_NAME = "snackbar_promo_data_savings_in_megabytes"; |
+ |
+ private static final String CLEAR_DATA_REDUCITON_PROXY_DATA_SAVINGS_SWITCH = |
+ "clear-data-reduction-proxy-data-savings"; |
+ private static final int BYTES_IN_MB = 1024 * 1024; |
+ |
+ private final SnackbarManager mSnackbarManager; |
+ private final Context mContext; |
+ private final int[] mPromoDataSavingsMB; |
gone
2016/10/13 01:03:11
nit: newline here
megjablon
2016/10/24 23:59:00
Done.
|
+ /** |
+ * Creates an instance of a {@link DataReductionPromoSnackbarController}. |
+ * |
+ * @param context The {@link Context} in which snackbar is shown. |
+ * @param snackbarManager The manager that helps to show the snackbar. |
+ */ |
+ public DataReductionPromoSnackbarController(Context context, SnackbarManager snackbarManager) { |
+ mSnackbarManager = snackbarManager; |
+ mContext = context; |
+ |
+ String variationParamValue = VariationsAssociatedData |
+ .getVariationParamValue(PROMO_FIELD_TRIAL_NAME, PROMO_PARAM_NAME); |
+ |
+ if (variationParamValue.isEmpty()) { |
+ mPromoDataSavingsMB = new int[0]; |
+ } else { |
+ variationParamValue = variationParamValue.replace(" ", ""); |
+ String[] promoDataSavingStrings = variationParamValue.split(";"); |
+ mPromoDataSavingsMB = new int[promoDataSavingStrings.length]; |
+ |
+ for (int i = 0; i < promoDataSavingStrings.length; i++) { |
+ try { |
+ mPromoDataSavingsMB[i] = Integer.parseInt(promoDataSavingStrings[i]); |
+ } catch (NumberFormatException e) { |
+ mPromoDataSavingsMB[i] = -1; |
+ } |
+ } |
+ } |
+ |
+ if (CommandLine.getInstance().hasSwitch(CLEAR_DATA_REDUCITON_PROXY_DATA_SAVINGS_SWITCH)) { |
+ DataReductionPromoUtils.saveSnackbarPromoDisplayed(0); |
+ } |
+ } |
+ |
+ /** |
+ * Shows the Data Reduction Proxy promo snackbar if the current data savings are over |
+ * specific thresholds set by finch and the snackbar has not been shown for that |
+ * |
+ * @param dataSavingInBytes The amount of data the Data Reduction Proxy has saved in bytes. |
+ */ |
+ public void maybeShowDataReductionPromoSnackbar(long dataSavingInBytes) { |
+ // Prevents users who upgrade and have already saved mPromoDataSavingsInMB from seeing the |
+ // promo. |
+ if (!DataReductionPromoUtils.hasSnackbarPromoBeenInitWithStartingContentLength()) { |
+ DataReductionPromoUtils.saveSnackbarPromoInitWithStartingContentLength( |
+ dataSavingInBytes); |
+ return; |
+ } |
+ |
+ for (int promoDataSavingMB : mPromoDataSavingsMB) { |
+ if (dataSavingInBytes > 0 && dataSavingInBytes >= promoDataSavingMB * BYTES_IN_MB |
+ && DataReductionPromoUtils |
+ .getDisplayedSnackbarPromoContentLength() < promoDataSavingMB |
+ * BYTES_IN_MB) { |
+ String dataSavedString = Formatter.formatShortFileSize(mContext, |
+ promoDataSavingMB * BYTES_IN_MB).replace(".0", "\u00A0"); |
gone
2016/10/13 01:03:11
What's this unicode character for?
megjablon
2016/10/24 23:59:00
Removed. Fixed using the templated strings.
|
+ mSnackbarManager.showSnackbar(Snackbar |
+ .make(mContext.getString(R.string.data_reduction_promo_snackbar_text) |
+ .concat(" ").concat(dataSavedString), |
gone
2016/10/13 01:03:11
You can't just concatenate these two strings becau
megjablon
2016/10/24 23:59:00
Ah thank you so much for this. Fixed.
|
+ this, |
+ Snackbar.TYPE_NOTIFICATION, Snackbar.UMA_DATA_REDUCTION_PROMO) |
+ .setAction( |
+ mContext.getString(R.string.data_reduction_promo_snackbar_button), |
+ null)); |
+ DataReductionProxyUma.dataReductionProxySnackbarPromo(promoDataSavingMB); |
+ DataReductionPromoUtils.saveSnackbarPromoDisplayed(dataSavingInBytes); |
+ break; |
+ } |
+ } |
+ } |
+ |
+ @Override |
+ public void onAction(Object actionData) { |
+ assert mContext != null; |
+ Intent intent = PreferencesLauncher.createIntentForSettingsPage( |
+ mContext, DataReductionPreferences.class.getName()); |
+ intent.putExtra(FROM_PROMO, true); |
+ mContext.startActivity(intent); |
+ } |
+ |
+ @Override |
+ public void onDismissNoAction(Object actionData) { |
+ DataReductionProxyUma.dataReductionProxyUIAction( |
+ DataReductionProxyUma.ACTION_SNACKBAR_DISMISSED); |
+ } |
+} |