// Copyright 2015 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.preferences.datareduction; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import org.chromium.chrome.R; import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; import org.chromium.ui.widget.Toast; /** * The promo screen encouraging users to enable Data Saver. */ public class DataReductionPromoScreen extends Dialog implements View.OnClickListener, DialogInterface.OnDismissListener { private int mState; private static View getContentView(Context context) { LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE); return inflater.inflate(R.layout.data_reduction_promo_screen, null); } /** * Launch the data reduction promo, if it needs to be displayed. */ public static void launchDataReductionPromo(Activity parentActivity) { // The promo is displayed if Chrome is launched directly (i.e., not with the intent to // navigate to and view a URL on startup), the instance is part of the field trial, // and the promo has not been displayed before. if (!DataReductionPromoUtils.canShowPromos()) return; if (DataReductionPromoUtils.getDisplayedFreOrSecondRunPromo()) return; // Showing the promo dialog in multiwindow mode is broken on Galaxy Note devices: // http://crbug.com/354696. If we're in multiwindow mode, save the dialog for later. if (MultiWindowUtils.getInstance().isLegacyMultiWindow(parentActivity)) return; DataReductionPromoScreen promoScreen = new DataReductionPromoScreen(parentActivity); promoScreen.setOnDismissListener(promoScreen); promoScreen.show(); } /** * DataReductionPromoScreen constructor. * * @param context An Android context. */ public DataReductionPromoScreen(Context context) { super(context, R.style.DataReductionPromoScreenDialog); setContentView(getContentView(context), new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); // Remove the shadow from the enable button. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Button enableButton = (Button) findViewById(R.id.enable_button); enableButton.setStateListAnimator(null); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Keep the window full screen otherwise the flip animation will frame-skip. getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); addListenerOnButton(); mState = DataReductionProxyUma.ACTION_DISMISSED; } private void addListenerOnButton() { int [] interactiveViewIds = new int[] { R.id.no_thanks_button, R.id.enable_button, R.id.close_button }; for (int interactiveViewId : interactiveViewIds) { findViewById(interactiveViewId).setOnClickListener(this); } } @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.no_thanks_button) { handleCloseButtonPressed(); } else if (id == R.id.enable_button) { mState = DataReductionProxyUma.ACTION_ENABLED; handleEnableButtonPressed(); } else if (id == R.id.close_button) { handleCloseButtonPressed(); } else { assert false : "Unhandled onClick event"; } } @Override public void onDismiss(DialogInterface dialog) { DataReductionPromoUtils.saveFreOrSecondRunPromoDisplayed(); } private void handleEnableButtonPressed() { DataReductionProxySettings.getInstance().setDataReductionProxyEnabled( getContext(), true); dismiss(); Toast.makeText(getContext(), getContext().getString(R.string.data_reduction_enabled_toast), Toast.LENGTH_LONG).show(); } private void handleCloseButtonPressed() { dismiss(); } @Override public void dismiss() { if (mState < DataReductionProxyUma.ACTION_INDEX_BOUNDARY) { DataReductionProxyUma.dataReductionProxyUIAction(mState); mState = DataReductionProxyUma.ACTION_INDEX_BOUNDARY; } super.dismiss(); } }