Chromium Code Reviews| 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); |
| + } |
| +} |