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..295a17b3e4dd791d2b0920a4a0862ebba20b620d |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarController.java |
@@ -0,0 +1,137 @@ |
+// 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 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 { |
+ /** |
+ * A semi-colon delimited list of data saving values in MB that the promo should be shown |
+ * for. |
+ */ |
+ public static final String PROMO_PARAM_NAME = "snackbar_promo_data_savings_in_megabytes"; |
+ |
+ public static final String FROM_PROMO = "FromPromo"; |
+ public static final String PROMO_FIELD_TRIAL_NAME = "DataCompressionProxyPromoVisibility"; |
+ private static final String CLEAR_DATA_REDUCITON_PROXY_DATA_SAVINGS_SWITCH = |
tbansal1
2016/10/25 23:15:13
"REDUCITON"
typo
megjablon
2016/10/25 23:49:57
Done.
|
+ "clear-data-reduction-proxy-data-savings"; |
+ private static final long BYTES_PER_MEGABYTE = 1024 * 1024; |
+ private static final long BYTES_PER_GIGABYTE = 1024 * 1024 * 1024; |
+ |
+ private final SnackbarManager mSnackbarManager; |
+ private final Context mContext; |
+ private final int[] mPromoDataSavingsMB; |
+ |
+ /** |
+ * 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(" ", ""); |
tbansal1
2016/10/25 23:15:13
I wish most of this code was in C++ (except may be
megjablon
2016/10/25 23:49:57
I think right now it makes the most sense to have
tbansal1
2016/10/26 00:09:30
Acknowledged.
|
+ 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()) { |
tbansal1
2016/10/25 23:15:13
IIUC, here we should be comparing the saved bytes
megjablon
2016/10/25 23:49:57
That is done below. Initializing the pref here pre
|
+ DataReductionPromoUtils.saveSnackbarPromoInitWithStartingContentLength( |
+ dataSavingInBytes); |
+ return; |
+ } |
+ |
+ for (int promoDataSavingMB : mPromoDataSavingsMB) { |
+ long promoDataSavingBytes = promoDataSavingMB * BYTES_PER_MEGABYTE; |
+ if (promoDataSavingMB > 0 && dataSavingInBytes >= promoDataSavingBytes |
+ && DataReductionPromoUtils |
+ .getDisplayedSnackbarPromoContentLength() < promoDataSavingBytes) { |
+ mSnackbarManager.showSnackbar(Snackbar |
+ .make(getStringForBytes(promoDataSavingBytes), |
+ 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; |
+ } |
+ } |
+ } |
+ |
+ private String getStringForBytes(long bytes) { |
+ int resourceId; |
+ int bytesInCorrectUnits; |
+ |
+ if (bytes < BYTES_PER_GIGABYTE) { |
+ resourceId = R.string.data_reduction_promo_snackbar_text_mb; |
+ bytesInCorrectUnits = (int) (bytes / BYTES_PER_MEGABYTE); |
+ } else { |
+ resourceId = R.string.data_reduction_promo_snackbar_text_gb; |
+ bytesInCorrectUnits = (int) (bytes / BYTES_PER_GIGABYTE); |
+ } |
+ |
+ return mContext.getResources().getString(resourceId, bytesInCorrectUnits); |
+ } |
+ |
+ @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); |
+ } |
+} |