Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3312)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/datausage/DataUseTabUIManager.java

Issue 1418473005: Add a dialog UI for Data Use accounting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@freighterSnackbar
Patch Set: adding OWNERS back Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/datausage/DataUseTabUIManager.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/datausage/DataUseTabUIManager.java b/chrome/android/java/src/org/chromium/chrome/browser/datausage/DataUseTabUIManager.java
index a19d99f923cc48b05c0d84925e14b692b49a620d..be21e42ecdb815d5418855a1ff41dbe78537207a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/datausage/DataUseTabUIManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/datausage/DataUseTabUIManager.java
@@ -4,37 +4,143 @@
package org.chromium.chrome.browser.datausage;
+import android.app.Activity;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.preference.PreferenceManager;
+import android.support.v7.app.AlertDialog;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.CheckBox;
+
+import org.chromium.chrome.R;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.sessions.SessionTabHelper;
import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.content_public.browser.LoadUrlParams;
+import org.chromium.content_public.common.Referrer;
/**
* Entry point to manage all UI details for measuring data use within a Tab.
*/
public class DataUseTabUIManager {
+ private static final String SHARED_PREF_DATA_USE_DIALOG_OPT_OUT = "data_use_dialog_opt_out";
+
/**
- * Returns true if data use tracking has started within a Tab.
+ * Returns true if data use tracking has started within a Tab. When data use tracking has
+ * started, returns true only once to signify the started event.
*
- * @param tab The tab to see if tracking has started in.
- * @return If data use tracking has started.
+ * @param tab The tab that may have started tracking data use.
+ * @return true If data use tracking has indeed started.
*/
- public static boolean hasDataUseTrackingStarted(Tab tab) {
- return nativeHasDataUseTrackingStarted(
+ public static boolean checkDataUseTrackingStarted(Tab tab) {
+ return nativeCheckDataUseTrackingStarted(
SessionTabHelper.sessionIdForTab(tab.getWebContents()), tab.getProfile());
}
/**
- * Returns true if data use tracking has ended within a Tab.
+ * Returns true if data use tracking has ended within a Tab. When data use tracking has
+ * ended, returns true only once to signify the ended event.
*
- * @param tab The tab to see if tracking has ended in.
- * @return If data use tracking has ended.
+ * @param tab The tab that may have ended tracking data use.
+ * @return true If data use tracking has indeed ended.
*/
- public static boolean hasDataUseTrackingEnded(Tab tab) {
- return nativeHasDataUseTrackingEnded(
+ public static boolean checkDataUseTrackingEnded(Tab tab) {
+ return nativeCheckDataUseTrackingEnded(
SessionTabHelper.sessionIdForTab(tab.getWebContents()), tab.getProfile());
}
- private static native boolean nativeHasDataUseTrackingStarted(int tabId, Profile profile);
- private static native boolean nativeHasDataUseTrackingEnded(int tabId, Profile profile);
+ /**
+ * Returns whether a navigation should be paused to show a dialog telling the user that data use
+ * tracking has ended within a Tab. If the navigation should be paused, shows a dialog with the
+ * option to cancel the navigation or continue.
+ *
+ * @param activity Current activity.
+ * @param tab The tab to see if tracking has ended in.
+ * @param url URL that is pending.
+ * @param pageTransitionType The type of transition. see
+ * {@link org.chromium.content.browser.PageTransition} for valid values.
+ * @param referrerUrl URL for the referrer.
+ * @return true If the URL loading should be overriden.
+ */
+ public static boolean shouldOverrideUrlLoading(Activity activity,
+ final Tab tab, final String url, final int pageTransitionType,
+ final String referrerUrl) {
+ if (!getOptedOutOfDataUseDialog(activity) && checkDataUseTrackingEnded(tab)) {
+ startDataUseDialog(activity, tab, url, pageTransitionType, referrerUrl);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Shows a dialog with the option to cancel the navigation or continue. Also allows the user to
+ * opt out of seeing this dialog again.
+ *
+ * @param activity Current activity.
+ * @param tab The tab loading the url.
+ * @param url URL that is pending.
+ * @param pageTransitionType The type of transition. see
+ * {@link org.chromium.content.browser.PageTransition} for valid values.
+ * @param referrerUrl URL for the referrer.
+ */
+ private static void startDataUseDialog(final Activity activity, final Tab tab,
+ final String url, final int pageTransitionType, final String referrerUrl) {
+ View checkBoxView = View.inflate(activity, R.layout.data_use_dialog, null);
+ final CheckBox checkBox = (CheckBox) checkBoxView.findViewById(R.id.data_use_checkbox);
+ new AlertDialog.Builder(activity, R.style.AlertDialogTheme)
+ .setTitle(R.string.data_use_tracking_ended_title)
+ .setMessage(R.string.data_use_tracking_ended_message)
+ .setView(checkBoxView)
+ .setPositiveButton(R.string.data_use_tracking_ended_continue,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ setOptedOutOfDataUseDialog(activity, checkBox.isChecked());
+ LoadUrlParams loadUrlParams = new LoadUrlParams(url,
+ pageTransitionType);
+ if (!TextUtils.isEmpty(referrerUrl)) {
+ Referrer referrer = new Referrer(referrerUrl,
+ Referrer.REFERRER_POLICY_ALWAYS);
+ loadUrlParams.setReferrer(referrer);
+ }
+ tab.loadUrl(loadUrlParams);
+ }
+ })
+ .setNegativeButton(R.string.cancel, new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ setOptedOutOfDataUseDialog(activity, checkBox.isChecked());
+ }
+ })
+ .show();
+ }
+
+ /**
+ * Returns true if the user has opted out of seeing the data use dialog.
+ *
+ * @param context An Android context.
+ * @return true If the user has opted out of seeing the data use dialog.
+ */
+ public static boolean getOptedOutOfDataUseDialog(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
+ SHARED_PREF_DATA_USE_DIALOG_OPT_OUT, false);
+ }
+
+ /**
+ * Sets whether the user has opted out of seeing the data use dialog.
+ *
+ * @param context An Android context.
+ * @param optedOut Whether the user has opted out of seeing the data use dialog.
+ */
+ private static void setOptedOutOfDataUseDialog(Context context, boolean optedOut) {
+ PreferenceManager.getDefaultSharedPreferences(context).edit()
+ .putBoolean(SHARED_PREF_DATA_USE_DIALOG_OPT_OUT, optedOut)
+ .apply();
+ }
+
+ private static native boolean nativeCheckDataUseTrackingStarted(int tabId, Profile profile);
+ private static native boolean nativeCheckDataUseTrackingEnded(int tabId, Profile profile);
}

Powered by Google App Engine
This is Rietveld 408576698