Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.preferences; | 5 package org.chromium.chrome.browser.preferences; |
| 6 | 6 |
| 7 import android.content.Context; | |
| 8 import android.content.Intent; | |
| 7 import android.os.Bundle; | 9 import android.os.Bundle; |
| 8 import android.preference.Preference; | 10 import android.preference.Preference; |
| 9 import android.preference.Preference.OnPreferenceChangeListener; | 11 import android.preference.Preference.OnPreferenceChangeListener; |
| 10 import android.preference.PreferenceFragment; | 12 import android.preference.PreferenceFragment; |
| 13 import android.support.annotation.IntDef; | |
| 11 import android.view.Menu; | 14 import android.view.Menu; |
| 12 import android.view.MenuInflater; | 15 import android.view.MenuInflater; |
| 13 import android.view.MenuItem; | 16 import android.view.MenuItem; |
| 14 | 17 |
| 18 import org.chromium.base.metrics.RecordUserAction; | |
| 15 import org.chromium.chrome.R; | 19 import org.chromium.chrome.R; |
| 16 import org.chromium.chrome.browser.ChromeFeatureList; | 20 import org.chromium.chrome.browser.ChromeFeatureList; |
| 17 import org.chromium.chrome.browser.help.HelpAndFeedback; | 21 import org.chromium.chrome.browser.help.HelpAndFeedback; |
| 18 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; | 22 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; |
| 19 import org.chromium.chrome.browser.profiles.Profile; | 23 import org.chromium.chrome.browser.profiles.Profile; |
| 20 | 24 |
| 25 import java.lang.annotation.Retention; | |
| 26 import java.lang.annotation.RetentionPolicy; | |
| 27 | |
| 21 /** | 28 /** |
| 22 * Settings fragment that allows the user to configure content suggestions. | 29 * Settings fragment that allows the user to configure content suggestions. |
| 23 */ | 30 */ |
| 24 public class ContentSuggestionsPreferences extends PreferenceFragment { | 31 public class ContentSuggestionsPreferences extends PreferenceFragment { |
| 25 private static final String PREF_MAIN_SWITCH = "suggestions_switch"; | 32 private static final String PREF_MAIN_SWITCH = "suggestions_switch"; |
| 26 private static final String PREF_NOTIFICATIONS_SWITCH = "suggestions_notific ations_switch"; | 33 private static final String PREF_NOTIFICATIONS_SWITCH = "suggestions_notific ations_switch"; |
| 27 private static final String PREF_CAVEATS = "suggestions_caveats"; | 34 private static final String PREF_CAVEATS = "suggestions_caveats"; |
| 28 private static final String PREF_LEARN_MORE = "suggestions_learn_more"; | 35 private static final String PREF_LEARN_MORE = "suggestions_learn_more"; |
| 29 | 36 |
| 37 private static final String LAUNCH_SOURCE_EXTRA = "source"; | |
| 38 | |
| 39 @IntDef({LAUNCH_SOURCE_SETTINGS, LAUNCH_SOURCE_NOTIFICATION}) | |
| 40 @Retention(RetentionPolicy.SOURCE) | |
| 41 public @interface LaunchSource {} | |
| 42 public static final int LAUNCH_SOURCE_SETTINGS = 0; | |
| 43 public static final int LAUNCH_SOURCE_NOTIFICATION = 1; | |
| 44 | |
| 30 private boolean mIsEnabled; | 45 private boolean mIsEnabled; |
| 31 | 46 |
| 32 // Preferences, modified as the state of the screen changes. | 47 // Preferences, modified as the state of the screen changes. |
| 33 private ChromeSwitchPreference mFeatureSwitch; | 48 private ChromeSwitchPreference mFeatureSwitch; |
| 34 private ChromeSwitchPreference mNotificationsSwitch; | 49 private ChromeSwitchPreference mNotificationsSwitch; |
| 35 private Preference mCaveatsDescription; | 50 private Preference mCaveatsDescription; |
| 36 private Preference mLearnMoreButton; | 51 private Preference mLearnMoreButton; |
| 37 | 52 |
| 53 public static Intent getIntent(Context context, @LaunchSource int source) { | |
|
Michael van Ouwerkerk
2017/04/05 10:27:41
This creates a new intent using createIntentForSet
Michael van Ouwerkerk
2017/04/05 10:27:42
Please add JavaDoc for this public method, probabl
dgn
2017/04/05 13:54:07
Done.
dgn
2017/04/05 13:54:07
Done.
| |
| 54 Intent intent = PreferencesLauncher.createIntentForSettingsPage( | |
| 55 context, ContentSuggestionsPreferences.class.getName()); | |
| 56 intent.putExtra(LAUNCH_SOURCE_EXTRA, source); | |
| 57 return intent; | |
| 58 } | |
| 59 | |
| 38 @Override | 60 @Override |
| 39 public void onCreate(Bundle savedInstanceState) { | 61 public void onCreate(Bundle savedInstanceState) { |
| 40 super.onCreate(savedInstanceState); | 62 super.onCreate(savedInstanceState); |
| 41 | 63 |
| 42 addPreferencesFromResource(R.xml.suggestions_preferences); | 64 addPreferencesFromResource(R.xml.suggestions_preferences); |
| 43 setHasOptionsMenu(true); | 65 setHasOptionsMenu(true); |
| 44 finishSwitchInitialisation(); | 66 finishSwitchInitialisation(); |
| 45 | 67 |
| 46 boolean isEnabled = SnippetsBridge.isRemoteSuggestionsServiceEnabled(); | 68 boolean isEnabled = SnippetsBridge.isRemoteSuggestionsServiceEnabled(); |
| 47 mIsEnabled = !isEnabled; // Opposite so that we trigger side effects bel ow. | 69 mIsEnabled = !isEnabled; // Opposite so that we trigger side effects bel ow. |
| 48 updatePreferences(isEnabled); | 70 updatePreferences(isEnabled); |
| 71 | |
| 72 @LaunchSource | |
| 73 int launchSource = | |
| 74 getActivity().getIntent().getIntExtra(LAUNCH_SOURCE_EXTRA, LAUNC H_SOURCE_SETTINGS); | |
| 75 if (launchSource == LAUNCH_SOURCE_NOTIFICATION) { | |
| 76 RecordUserAction.record("ContentSuggestions.NotificationsAction.Sett ings"); | |
|
Michael van Ouwerkerk
2017/04/05 10:27:41
Should we also record an action for LAUNCH_SOURCE_
dgn
2017/04/05 13:54:07
In that case I would prefer if it was in the conte
| |
| 77 } | |
| 49 } | 78 } |
| 50 | 79 |
| 51 @Override | 80 @Override |
| 52 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { | 81 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { |
| 53 menu.clear(); | 82 menu.clear(); |
| 54 MenuItem help = | 83 MenuItem help = |
| 55 menu.add(Menu.NONE, R.id.menu_id_targeted_help, Menu.NONE, R.str ing.menu_help); | 84 menu.add(Menu.NONE, R.id.menu_id_targeted_help, Menu.NONE, R.str ing.menu_help); |
| 56 help.setIcon(R.drawable.ic_help_and_feedback); | 85 help.setIcon(R.drawable.ic_help_and_feedback); |
| 57 } | 86 } |
| 58 | 87 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 95 if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CONTENT_SUGGESTIONS_N OTIFICATIONS)) { | 124 if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CONTENT_SUGGESTIONS_N OTIFICATIONS)) { |
| 96 return false; | 125 return false; |
| 97 } | 126 } |
| 98 return mIsEnabled; | 127 return mIsEnabled; |
| 99 } | 128 } |
| 100 | 129 |
| 101 private void setNotificationsPrefState(boolean visible) { | 130 private void setNotificationsPrefState(boolean visible) { |
| 102 if (visible) { | 131 if (visible) { |
| 103 if (findPreference(PREF_NOTIFICATIONS_SWITCH) != null) return; | 132 if (findPreference(PREF_NOTIFICATIONS_SWITCH) != null) return; |
| 104 getPreferenceScreen().addPreference(mNotificationsSwitch); | 133 getPreferenceScreen().addPreference(mNotificationsSwitch); |
| 105 | |
| 106 } else { | 134 } else { |
| 107 getPreferenceScreen().removePreference(mNotificationsSwitch); | 135 getPreferenceScreen().removePreference(mNotificationsSwitch); |
| 108 } | 136 } |
| 109 } | 137 } |
| 110 | 138 |
| 111 private void setCaveatsPrefState(boolean visible) { | 139 private void setCaveatsPrefState(boolean visible) { |
| 112 if (visible) { | 140 if (visible) { |
| 113 if (findPreference(PREF_CAVEATS) != null) return; | 141 if (findPreference(PREF_CAVEATS) != null) return; |
| 114 getPreferenceScreen().addPreference(mCaveatsDescription); | 142 getPreferenceScreen().addPreference(mCaveatsDescription); |
| 115 getPreferenceScreen().addPreference(mLearnMoreButton); | 143 getPreferenceScreen().addPreference(mLearnMoreButton); |
| 116 } else { | 144 } else { |
| 117 getPreferenceScreen().removePreference(mCaveatsDescription); | 145 getPreferenceScreen().removePreference(mCaveatsDescription); |
| 118 getPreferenceScreen().removePreference(mLearnMoreButton); | 146 getPreferenceScreen().removePreference(mLearnMoreButton); |
| 119 } | 147 } |
| 120 } | 148 } |
| 121 | 149 |
| 122 private void finishSwitchInitialisation() { | 150 private void finishSwitchInitialisation() { |
| 123 mFeatureSwitch = (ChromeSwitchPreference) findPreference(PREF_MAIN_SWITC H); | 151 mFeatureSwitch = (ChromeSwitchPreference) findPreference(PREF_MAIN_SWITC H); |
| 124 mNotificationsSwitch = (ChromeSwitchPreference) findPreference(PREF_NOTI FICATIONS_SWITCH); | 152 mNotificationsSwitch = (ChromeSwitchPreference) findPreference(PREF_NOTI FICATIONS_SWITCH); |
| 125 mCaveatsDescription = findPreference(PREF_CAVEATS); | 153 mCaveatsDescription = findPreference(PREF_CAVEATS); |
| 126 mLearnMoreButton = findPreference(PREF_LEARN_MORE); | 154 mLearnMoreButton = findPreference(PREF_LEARN_MORE); |
| 127 | 155 |
| 128 mFeatureSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListe ner() { | 156 mFeatureSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListe ner() { |
| 129 @Override | 157 @Override |
| 130 public boolean onPreferenceChange(Preference preference, Object newV alue) { | 158 public boolean onPreferenceChange(Preference preference, Object newV alue) { |
| 131 SnippetsBridge.setRemoteSuggestionsServiceEnabled((boolean) newV alue); | 159 boolean isEnabled = (boolean) newValue; |
| 160 SnippetsBridge.setRemoteSuggestionsServiceEnabled(isEnabled); | |
| 132 // TODO(dgn): Is there a way to have a visual feedback of when t he remote | 161 // TODO(dgn): Is there a way to have a visual feedback of when t he remote |
| 133 // suggestions service has completed being turned on or off? | 162 // suggestions service has completed being turned on or off? |
| 134 ContentSuggestionsPreferences.this.updatePreferences((boolean) n ewValue); | 163 ContentSuggestionsPreferences.this.updatePreferences(isEnabled); |
|
Michael van Ouwerkerk
2017/04/05 10:27:42
Do you need to specify "ContentSuggestionsPreferen
dgn
2017/04/05 13:54:07
Done.
| |
| 164 | |
| 165 if (isEnabled) { | |
| 166 RecordUserAction.record("ContentSuggestions.RemoteSuggestion sPreferenceOn"); | |
| 167 } else { | |
| 168 RecordUserAction.record("ContentSuggestions.RemoteSuggestion sPreferenceOff"); | |
| 169 } | |
| 170 | |
| 135 return true; | 171 return true; |
| 136 } | 172 } |
| 137 }); | 173 }); |
| 138 mFeatureSwitch.setManagedPreferenceDelegate(new ManagedPreferenceDelegat e() { | 174 mFeatureSwitch.setManagedPreferenceDelegate(new ManagedPreferenceDelegat e() { |
| 139 @Override | 175 @Override |
| 140 public boolean isPreferenceControlledByPolicy(Preference preference) { | 176 public boolean isPreferenceControlledByPolicy(Preference preference) { |
| 141 return SnippetsBridge.isRemoteSuggestionsServiceManaged(); | 177 return SnippetsBridge.isRemoteSuggestionsServiceManaged(); |
| 142 } | 178 } |
| 143 | 179 |
| 144 @Override | 180 @Override |
| 145 public boolean isPreferenceControlledByCustodian(Preference preferen ce) { | 181 public boolean isPreferenceControlledByCustodian(Preference preferen ce) { |
| 146 return SnippetsBridge.isRemoteSuggestionsServiceManagedByCustodi an(); | 182 return SnippetsBridge.isRemoteSuggestionsServiceManagedByCustodi an(); |
| 147 } | 183 } |
| 148 }); | 184 }); |
| 149 | 185 |
| 150 mNotificationsSwitch.setOnPreferenceChangeListener(new OnPreferenceChang eListener() { | 186 mNotificationsSwitch.setOnPreferenceChangeListener(new OnPreferenceChang eListener() { |
| 151 @Override | 187 @Override |
| 152 public boolean onPreferenceChange(Preference preference, Object newV alue) { | 188 public boolean onPreferenceChange(Preference preference, Object newV alue) { |
| 153 SnippetsBridge.setContentSuggestionsNotificationsEnabled((boolea n) newValue); | 189 boolean isEnabled = (boolean) newValue; |
| 190 SnippetsBridge.setContentSuggestionsNotificationsEnabled(isEnabl ed); | |
| 191 | |
| 192 if (isEnabled) { | |
| 193 RecordUserAction.record("ContentSuggestions.NotificationsPre ferenceOn"); | |
| 194 } else { | |
| 195 RecordUserAction.record("ContentSuggestions.NotificationsPre ferenceOff"); | |
| 196 } | |
| 197 | |
| 154 return true; | 198 return true; |
| 155 } | 199 } |
| 156 }); | 200 }); |
| 157 } | 201 } |
| 158 } | 202 } |
| OLD | NEW |