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; |
22 import org.chromium.chrome.browser.ntp.ContentSuggestionsNotificationHelper; | |
23 import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsNotificationAc tion; | |
24 import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsNotificationOp tOut; | |
18 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; | 25 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; |
19 import org.chromium.chrome.browser.profiles.Profile; | 26 import org.chromium.chrome.browser.profiles.Profile; |
20 | 27 |
28 import java.lang.annotation.Retention; | |
29 import java.lang.annotation.RetentionPolicy; | |
30 | |
21 /** | 31 /** |
22 * Settings fragment that allows the user to configure content suggestions. | 32 * Settings fragment that allows the user to configure content suggestions. |
23 */ | 33 */ |
24 public class ContentSuggestionsPreferences extends PreferenceFragment { | 34 public class ContentSuggestionsPreferences extends PreferenceFragment { |
25 private static final String PREF_MAIN_SWITCH = "suggestions_switch"; | 35 private static final String PREF_MAIN_SWITCH = "suggestions_switch"; |
26 private static final String PREF_NOTIFICATIONS_SWITCH = "suggestions_notific ations_switch"; | 36 private static final String PREF_NOTIFICATIONS_SWITCH = "suggestions_notific ations_switch"; |
27 private static final String PREF_CAVEATS = "suggestions_caveats"; | 37 private static final String PREF_CAVEATS = "suggestions_caveats"; |
28 private static final String PREF_LEARN_MORE = "suggestions_learn_more"; | 38 private static final String PREF_LEARN_MORE = "suggestions_learn_more"; |
29 | 39 |
40 private static final String LAUNCH_SOURCE_EXTRA = "source"; | |
41 | |
42 @IntDef({LAUNCH_SOURCE_SETTINGS, LAUNCH_SOURCE_NOTIFICATION}) | |
43 @Retention(RetentionPolicy.SOURCE) | |
44 public @interface LaunchSource {} | |
45 public static final int LAUNCH_SOURCE_SETTINGS = 0; | |
46 public static final int LAUNCH_SOURCE_NOTIFICATION = 1; | |
47 | |
30 private boolean mIsEnabled; | 48 private boolean mIsEnabled; |
31 | 49 |
32 // Preferences, modified as the state of the screen changes. | 50 // Preferences, modified as the state of the screen changes. |
33 private ChromeSwitchPreference mFeatureSwitch; | 51 private ChromeSwitchPreference mFeatureSwitch; |
34 private ChromeSwitchPreference mNotificationsSwitch; | 52 private ChromeSwitchPreference mNotificationsSwitch; |
35 private Preference mCaveatsDescription; | 53 private Preference mCaveatsDescription; |
36 private Preference mLearnMoreButton; | 54 private Preference mLearnMoreButton; |
37 | 55 |
56 /** | |
57 * Creates an intent for launching content suggestions settings page. | |
Bernhard Bauer
2017/04/10 23:16:03
Nit: "the content suggestions settings page".
dgn
2017/04/10 23:31:29
Done.
| |
58 * @param context The current Activity, or an application context if no Acti vity is available. | |
59 * @param source Where the intent is going to be launched from. See {@link L aunchSource} | |
60 */ | |
61 public static Intent createLaunchIntent(Context context, @LaunchSource int s ource) { | |
62 Intent intent = PreferencesLauncher.createIntentForSettingsPage( | |
63 context, ContentSuggestionsPreferences.class.getName()); | |
64 intent.putExtra(LAUNCH_SOURCE_EXTRA, source); | |
65 return intent; | |
66 } | |
67 | |
38 @Override | 68 @Override |
39 public void onCreate(Bundle savedInstanceState) { | 69 public void onCreate(Bundle savedInstanceState) { |
40 super.onCreate(savedInstanceState); | 70 super.onCreate(savedInstanceState); |
41 | 71 |
42 addPreferencesFromResource(R.xml.suggestions_preferences); | 72 addPreferencesFromResource(R.xml.suggestions_preferences); |
43 setHasOptionsMenu(true); | 73 setHasOptionsMenu(true); |
44 finishSwitchInitialisation(); | 74 finishSwitchInitialisation(); |
45 | 75 |
46 boolean isEnabled = SnippetsBridge.isRemoteSuggestionsServiceEnabled(); | 76 boolean isEnabled = SnippetsBridge.areRemoteSuggestionsEnabled(); |
47 mIsEnabled = !isEnabled; // Opposite so that we trigger side effects bel ow. | 77 mIsEnabled = !isEnabled; // Opposite so that we trigger side effects bel ow. |
48 updatePreferences(isEnabled); | 78 updatePreferences(isEnabled); |
79 | |
80 @LaunchSource | |
81 int launchSource = | |
82 getActivity().getIntent().getIntExtra(LAUNCH_SOURCE_EXTRA, LAUNC H_SOURCE_SETTINGS); | |
83 if (launchSource == LAUNCH_SOURCE_NOTIFICATION) { | |
84 ContentSuggestionsNotificationHelper.recordNotificationAction( | |
85 ContentSuggestionsNotificationAction.OPEN_SETTINGS); | |
86 } | |
49 } | 87 } |
50 | 88 |
51 @Override | 89 @Override |
52 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { | 90 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { |
53 menu.clear(); | 91 menu.clear(); |
54 MenuItem help = | 92 MenuItem help = |
55 menu.add(Menu.NONE, R.id.menu_id_targeted_help, Menu.NONE, R.str ing.menu_help); | 93 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); | 94 help.setIcon(R.drawable.ic_help_and_feedback); |
57 } | 95 } |
58 | 96 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
95 if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CONTENT_SUGGESTIONS_N OTIFICATIONS)) { | 133 if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CONTENT_SUGGESTIONS_N OTIFICATIONS)) { |
96 return false; | 134 return false; |
97 } | 135 } |
98 return mIsEnabled; | 136 return mIsEnabled; |
99 } | 137 } |
100 | 138 |
101 private void setNotificationsPrefState(boolean visible) { | 139 private void setNotificationsPrefState(boolean visible) { |
102 if (visible) { | 140 if (visible) { |
103 if (findPreference(PREF_NOTIFICATIONS_SWITCH) != null) return; | 141 if (findPreference(PREF_NOTIFICATIONS_SWITCH) != null) return; |
104 getPreferenceScreen().addPreference(mNotificationsSwitch); | 142 getPreferenceScreen().addPreference(mNotificationsSwitch); |
105 | |
106 } else { | 143 } else { |
107 getPreferenceScreen().removePreference(mNotificationsSwitch); | 144 getPreferenceScreen().removePreference(mNotificationsSwitch); |
108 } | 145 } |
109 } | 146 } |
110 | 147 |
111 private void setCaveatsPrefState(boolean visible) { | 148 private void setCaveatsPrefState(boolean visible) { |
112 if (visible) { | 149 if (visible) { |
113 if (findPreference(PREF_CAVEATS) != null) return; | 150 if (findPreference(PREF_CAVEATS) != null) return; |
114 getPreferenceScreen().addPreference(mCaveatsDescription); | 151 getPreferenceScreen().addPreference(mCaveatsDescription); |
115 getPreferenceScreen().addPreference(mLearnMoreButton); | 152 getPreferenceScreen().addPreference(mLearnMoreButton); |
116 } else { | 153 } else { |
117 getPreferenceScreen().removePreference(mCaveatsDescription); | 154 getPreferenceScreen().removePreference(mCaveatsDescription); |
118 getPreferenceScreen().removePreference(mLearnMoreButton); | 155 getPreferenceScreen().removePreference(mLearnMoreButton); |
119 } | 156 } |
120 } | 157 } |
121 | 158 |
122 private void finishSwitchInitialisation() { | 159 private void finishSwitchInitialisation() { |
123 mFeatureSwitch = (ChromeSwitchPreference) findPreference(PREF_MAIN_SWITC H); | 160 mFeatureSwitch = (ChromeSwitchPreference) findPreference(PREF_MAIN_SWITC H); |
124 mNotificationsSwitch = (ChromeSwitchPreference) findPreference(PREF_NOTI FICATIONS_SWITCH); | 161 mNotificationsSwitch = (ChromeSwitchPreference) findPreference(PREF_NOTI FICATIONS_SWITCH); |
125 mCaveatsDescription = findPreference(PREF_CAVEATS); | 162 mCaveatsDescription = findPreference(PREF_CAVEATS); |
126 mLearnMoreButton = findPreference(PREF_LEARN_MORE); | 163 mLearnMoreButton = findPreference(PREF_LEARN_MORE); |
127 | 164 |
128 mFeatureSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListe ner() { | 165 mFeatureSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListe ner() { |
129 @Override | 166 @Override |
130 public boolean onPreferenceChange(Preference preference, Object newV alue) { | 167 public boolean onPreferenceChange(Preference preference, Object newV alue) { |
131 SnippetsBridge.setRemoteSuggestionsServiceEnabled((boolean) newV alue); | 168 boolean isEnabled = (boolean) newValue; |
169 SnippetsBridge.setRemoteSuggestionsEnabled(isEnabled); | |
132 // TODO(dgn): Is there a way to have a visual feedback of when t he remote | 170 // 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? | 171 // suggestions service has completed being turned on or off? |
134 ContentSuggestionsPreferences.this.updatePreferences((boolean) n ewValue); | 172 updatePreferences(isEnabled); |
173 | |
174 if (isEnabled) { | |
175 RecordUserAction.record("ContentSuggestions.RemoteSuggestion sPreferenceOn"); | |
176 } else { | |
177 RecordUserAction.record("ContentSuggestions.RemoteSuggestion sPreferenceOff"); | |
178 } | |
179 | |
135 return true; | 180 return true; |
136 } | 181 } |
137 }); | 182 }); |
138 mFeatureSwitch.setManagedPreferenceDelegate(new ManagedPreferenceDelegat e() { | 183 mFeatureSwitch.setManagedPreferenceDelegate(new ManagedPreferenceDelegat e() { |
139 @Override | 184 @Override |
140 public boolean isPreferenceControlledByPolicy(Preference preference) { | 185 public boolean isPreferenceControlledByPolicy(Preference preference) { |
141 return SnippetsBridge.isRemoteSuggestionsServiceManaged(); | 186 return SnippetsBridge.areRemoteSuggestionsManaged(); |
142 } | 187 } |
143 | 188 |
144 @Override | 189 @Override |
145 public boolean isPreferenceControlledByCustodian(Preference preferen ce) { | 190 public boolean isPreferenceControlledByCustodian(Preference preferen ce) { |
146 return SnippetsBridge.isRemoteSuggestionsServiceManagedByCustodi an(); | 191 return SnippetsBridge.areRemoteSuggestionsManagedByCustodian(); |
147 } | 192 } |
148 }); | 193 }); |
149 | 194 |
150 mNotificationsSwitch.setOnPreferenceChangeListener(new OnPreferenceChang eListener() { | 195 mNotificationsSwitch.setOnPreferenceChangeListener(new OnPreferenceChang eListener() { |
151 @Override | 196 @Override |
152 public boolean onPreferenceChange(Preference preference, Object newV alue) { | 197 public boolean onPreferenceChange(Preference preference, Object newV alue) { |
153 SnippetsBridge.setContentSuggestionsNotificationsEnabled((boolea n) newValue); | 198 boolean isEnabled = (boolean) newValue; |
199 SnippetsBridge.setContentSuggestionsNotificationsEnabled(isEnabl ed); | |
200 | |
201 if (isEnabled) { | |
202 RecordUserAction.record("ContentSuggestions.NotificationsPre ferenceOn"); | |
203 } else { | |
204 RecordUserAction.record("ContentSuggestions.NotificationsPre ferenceOff"); | |
205 ContentSuggestionsNotificationHelper.recordNotificationOptOu t( | |
206 ContentSuggestionsNotificationOptOut.EXPLICIT); | |
207 } | |
208 | |
154 return true; | 209 return true; |
155 } | 210 } |
156 }); | 211 }); |
157 } | 212 } |
158 } | 213 } |
OLD | NEW |