| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/ContentSuggestionsPreferences.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ContentSuggestionsPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ContentSuggestionsPreferences.java
|
| index 0e88b81d6fc9b69bec646d3d50171d8f08746671..239ca60723f035a7ce4a3c501bc4a0d426ff50a6 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ContentSuggestionsPreferences.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ContentSuggestionsPreferences.java
|
| @@ -4,20 +4,30 @@
|
|
|
| package org.chromium.chrome.browser.preferences;
|
|
|
| +import android.content.Context;
|
| +import android.content.Intent;
|
| import android.os.Bundle;
|
| import android.preference.Preference;
|
| import android.preference.Preference.OnPreferenceChangeListener;
|
| import android.preference.PreferenceFragment;
|
| +import android.support.annotation.IntDef;
|
| import android.view.Menu;
|
| import android.view.MenuInflater;
|
| import android.view.MenuItem;
|
|
|
| +import org.chromium.base.metrics.RecordUserAction;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.ChromeFeatureList;
|
| import org.chromium.chrome.browser.help.HelpAndFeedback;
|
| +import org.chromium.chrome.browser.ntp.ContentSuggestionsNotificationHelper;
|
| +import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsNotificationAction;
|
| +import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsNotificationOptOut;
|
| import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge;
|
| import org.chromium.chrome.browser.profiles.Profile;
|
|
|
| +import java.lang.annotation.Retention;
|
| +import java.lang.annotation.RetentionPolicy;
|
| +
|
| /**
|
| * Settings fragment that allows the user to configure content suggestions.
|
| */
|
| @@ -27,6 +37,14 @@
|
| private static final String PREF_CAVEATS = "suggestions_caveats";
|
| private static final String PREF_LEARN_MORE = "suggestions_learn_more";
|
|
|
| + private static final String LAUNCH_SOURCE_EXTRA = "source";
|
| +
|
| + @IntDef({LAUNCH_SOURCE_SETTINGS, LAUNCH_SOURCE_NOTIFICATION})
|
| + @Retention(RetentionPolicy.SOURCE)
|
| + public @interface LaunchSource {}
|
| + public static final int LAUNCH_SOURCE_SETTINGS = 0;
|
| + public static final int LAUNCH_SOURCE_NOTIFICATION = 1;
|
| +
|
| private boolean mIsEnabled;
|
|
|
| // Preferences, modified as the state of the screen changes.
|
| @@ -35,6 +53,18 @@
|
| private Preference mCaveatsDescription;
|
| private Preference mLearnMoreButton;
|
|
|
| + /**
|
| + * Creates an intent for launching the content suggestions settings page.
|
| + * @param context The current Activity, or an application context if no Activity is available.
|
| + * @param source Where the intent is going to be launched from. See {@link LaunchSource}
|
| + */
|
| + public static Intent createLaunchIntent(Context context, @LaunchSource int source) {
|
| + Intent intent = PreferencesLauncher.createIntentForSettingsPage(
|
| + context, ContentSuggestionsPreferences.class.getName());
|
| + intent.putExtra(LAUNCH_SOURCE_EXTRA, source);
|
| + return intent;
|
| + }
|
| +
|
| @Override
|
| public void onCreate(Bundle savedInstanceState) {
|
| super.onCreate(savedInstanceState);
|
| @@ -43,9 +73,17 @@ public void onCreate(Bundle savedInstanceState) {
|
| setHasOptionsMenu(true);
|
| finishSwitchInitialisation();
|
|
|
| - boolean isEnabled = SnippetsBridge.isRemoteSuggestionsServiceEnabled();
|
| + boolean isEnabled = SnippetsBridge.areRemoteSuggestionsEnabled();
|
| mIsEnabled = !isEnabled; // Opposite so that we trigger side effects below.
|
| updatePreferences(isEnabled);
|
| +
|
| + @LaunchSource
|
| + int launchSource =
|
| + getActivity().getIntent().getIntExtra(LAUNCH_SOURCE_EXTRA, LAUNCH_SOURCE_SETTINGS);
|
| + if (launchSource == LAUNCH_SOURCE_NOTIFICATION) {
|
| + ContentSuggestionsNotificationHelper.recordNotificationAction(
|
| + ContentSuggestionsNotificationAction.OPEN_SETTINGS);
|
| + }
|
| }
|
|
|
| @Override
|
| @@ -102,7 +140,6 @@ private void setNotificationsPrefState(boolean visible) {
|
| if (visible) {
|
| if (findPreference(PREF_NOTIFICATIONS_SWITCH) != null) return;
|
| getPreferenceScreen().addPreference(mNotificationsSwitch);
|
| -
|
| } else {
|
| getPreferenceScreen().removePreference(mNotificationsSwitch);
|
| }
|
| @@ -128,29 +165,47 @@ private void finishSwitchInitialisation() {
|
| mFeatureSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
| @Override
|
| public boolean onPreferenceChange(Preference preference, Object newValue) {
|
| - SnippetsBridge.setRemoteSuggestionsServiceEnabled((boolean) newValue);
|
| + boolean isEnabled = (boolean) newValue;
|
| + SnippetsBridge.setRemoteSuggestionsEnabled(isEnabled);
|
| // TODO(dgn): Is there a way to have a visual feedback of when the remote
|
| // suggestions service has completed being turned on or off?
|
| - ContentSuggestionsPreferences.this.updatePreferences((boolean) newValue);
|
| + updatePreferences(isEnabled);
|
| +
|
| + if (isEnabled) {
|
| + RecordUserAction.record("ContentSuggestions.RemoteSuggestionsPreferenceOn");
|
| + } else {
|
| + RecordUserAction.record("ContentSuggestions.RemoteSuggestionsPreferenceOff");
|
| + }
|
| +
|
| return true;
|
| }
|
| });
|
| mFeatureSwitch.setManagedPreferenceDelegate(new ManagedPreferenceDelegate() {
|
| @Override
|
| public boolean isPreferenceControlledByPolicy(Preference preference) {
|
| - return SnippetsBridge.isRemoteSuggestionsServiceManaged();
|
| + return SnippetsBridge.areRemoteSuggestionsManaged();
|
| }
|
|
|
| @Override
|
| public boolean isPreferenceControlledByCustodian(Preference preference) {
|
| - return SnippetsBridge.isRemoteSuggestionsServiceManagedByCustodian();
|
| + return SnippetsBridge.areRemoteSuggestionsManagedByCustodian();
|
| }
|
| });
|
|
|
| mNotificationsSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
| @Override
|
| public boolean onPreferenceChange(Preference preference, Object newValue) {
|
| - SnippetsBridge.setContentSuggestionsNotificationsEnabled((boolean) newValue);
|
| + boolean isEnabled = (boolean) newValue;
|
| + SnippetsBridge.setContentSuggestionsNotificationsEnabled(isEnabled);
|
| +
|
| + if (isEnabled) {
|
| + RecordUserAction.record("ContentSuggestions.NotificationsPreferenceOn");
|
| + } else {
|
| + RecordUserAction.record("ContentSuggestions.NotificationsPreferenceOff");
|
| + ContentSuggestionsNotificationHelper.recordNotificationOptOut(
|
| + ContentSuggestionsNotificationOptOut.EXPLICIT);
|
| + }
|
| +
|
| return true;
|
| }
|
| });
|
|
|