OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 package org.chromium.chrome.browser.preferences; |
| 6 |
| 7 import android.content.Context; |
| 8 import android.os.Handler; |
| 9 import android.preference.Preference; |
| 10 import android.preference.Preference.OnPreferenceClickListener; |
| 11 import android.preference.PreferenceFragment; |
| 12 import android.view.Menu; |
| 13 import android.view.MenuInflater; |
| 14 import android.view.MenuItem; |
| 15 |
| 16 import com.google.android.apps.chrome.R; |
| 17 |
| 18 import org.chromium.chrome.browser.PasswordUIView; |
| 19 import org.chromium.chrome.browser.autofill.PersonalDataManager; |
| 20 import org.chromium.chrome.browser.bookmarkimport.AndroidBrowserImporter; |
| 21 import org.chromium.chrome.browser.bookmarkimport.ImportBookmarksAlertDialog; |
| 22 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
| 23 import org.chromium.chrome.browser.partnercustomizations.HomepageManager; |
| 24 import org.chromium.chrome.browser.preferences.bandwidth.BandwidthReductionPrefe
rences; |
| 25 import org.chromium.chrome.browser.signin.AccountAdder; |
| 26 import org.chromium.chrome.browser.signin.AddGoogleAccountDialogFragment; |
| 27 import org.chromium.chrome.browser.signin.AddGoogleAccountDialogFragment.AddGoog
leAccountListener; |
| 28 import org.chromium.chrome.browser.signin.SigninManager; |
| 29 import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; |
| 30 import org.chromium.chrome.browser.sync.ui.ChooseAccountFragment; |
| 31 import org.chromium.chrome.browser.util.FeatureUtilities; |
| 32 import org.chromium.sync.signin.AccountManagerHelper; |
| 33 import org.chromium.sync.signin.ChromeSigninController; |
| 34 |
| 35 /** |
| 36 * The main settings screen, shown when the user first opens Settings. |
| 37 */ |
| 38 public class MainPreferences extends PreferenceFragment implements SignInStateOb
server { |
| 39 |
| 40 public static final String PREF_SIGN_IN = "sign_in"; |
| 41 public static final String PREF_DOCUMENT_MODE = "document_mode"; |
| 42 public static final String PREF_AUTOFILL_SETTINGS = "autofill_settings"; |
| 43 public static final String PREF_SAVED_PASSWORDS = "saved_passwords"; |
| 44 public static final String PREF_HOMEPAGE = "homepage"; |
| 45 public static final String PREF_REDUCE_DATA_USAGE = "reduce_data_usage"; |
| 46 |
| 47 public static final String ACCOUNT_PICKER_DIALOG_TAG = "account_picker_dialo
g_tag"; |
| 48 |
| 49 private SignInPreference mSignInPreference; |
| 50 private ManagedPreferenceDelegate mManagedPreferenceDelegate; |
| 51 |
| 52 public MainPreferences() { |
| 53 setHasOptionsMenu(true); |
| 54 mManagedPreferenceDelegate = createManagedPreferenceDelegate(); |
| 55 } |
| 56 |
| 57 @Override |
| 58 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { |
| 59 if (getActivity() == null) return; |
| 60 |
| 61 AndroidBrowserImporter androidBrowserImporter = new AndroidBrowserImport
er(getActivity()); |
| 62 if (androidBrowserImporter.areBookmarksAccessible()) { |
| 63 menu.add(Menu.NONE, R.id.menu_id_import_bookmarks, Menu.NONE, |
| 64 R.string.import_bookmarks); |
| 65 } |
| 66 } |
| 67 |
| 68 @Override |
| 69 public boolean onOptionsItemSelected(MenuItem item) { |
| 70 if (item.getItemId() == R.id.menu_id_import_bookmarks) { |
| 71 ImportBookmarksAlertDialog importBookmarksFragment = |
| 72 new ImportBookmarksAlertDialog(); |
| 73 importBookmarksFragment.show(getFragmentManager(), null); |
| 74 return true; |
| 75 } |
| 76 return false; |
| 77 } |
| 78 |
| 79 @Override |
| 80 public void onResume() { |
| 81 super.onResume(); |
| 82 SigninManager.get(getActivity()).addSignInStateObserver(this); |
| 83 updatePreferences(); |
| 84 } |
| 85 |
| 86 @Override |
| 87 public void onPause() { |
| 88 super.onPause(); |
| 89 SigninManager.get(getActivity()).removeSignInStateObserver(this); |
| 90 unregisterSignInPref(); |
| 91 } |
| 92 |
| 93 private void updatePreferences() { |
| 94 if (getPreferenceScreen() != null) getPreferenceScreen().removeAll(); |
| 95 addPreferencesFromResource(R.xml.main_preferences); |
| 96 |
| 97 registerSignInPref(); |
| 98 mSignInPreference.setOnPreferenceClickListener(new OnPreferenceClickList
ener() { |
| 99 @Override |
| 100 public boolean onPreferenceClick(Preference preference) { |
| 101 if (!ChromeSigninController.get(getActivity()).isSignedIn()) { |
| 102 displayAccountPicker(); |
| 103 return true; |
| 104 } |
| 105 return false; |
| 106 } |
| 107 }); |
| 108 |
| 109 Preference documentMode = findPreference(PREF_DOCUMENT_MODE); |
| 110 if (FeatureUtilities.isDocumentModeEligible(getActivity())) { |
| 111 setOnOffSummary(documentMode, |
| 112 !DocumentModeManager.getInstance(getActivity()).isOptedOutOf
DocumentMode()); |
| 113 } else { |
| 114 getPreferenceScreen().removePreference(documentMode); |
| 115 } |
| 116 |
| 117 ChromeBasePreference autofillPref = |
| 118 (ChromeBasePreference) findPreference(PREF_AUTOFILL_SETTINGS); |
| 119 setOnOffSummary(autofillPref, PersonalDataManager.isAutofillEnabled()); |
| 120 autofillPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); |
| 121 |
| 122 ChromeBasePreference passwordsPref = |
| 123 (ChromeBasePreference) findPreference(PREF_SAVED_PASSWORDS); |
| 124 if (PasswordUIView.shouldUseSmartLockBranding()) { |
| 125 passwordsPref.setTitle(getResources().getString( |
| 126 R.string.prefs_smart_lock_for_passwords)); |
| 127 } |
| 128 setOnOffSummary(passwordsPref, |
| 129 PrefServiceBridge.getInstance().isRememberPasswordsEnabled()); |
| 130 passwordsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); |
| 131 |
| 132 Preference homepagePref = findPreference(PREF_HOMEPAGE); |
| 133 if (HomepageManager.shouldShowHomepageSetting()) { |
| 134 setOnOffSummary(homepagePref, |
| 135 HomepageManager.getInstance(getActivity()).getPrefHomepageEn
abled()); |
| 136 } else { |
| 137 getPreferenceScreen().removePreference(homepagePref); |
| 138 } |
| 139 |
| 140 ChromeBasePreference bandwidthReduction = |
| 141 (ChromeBasePreference) findPreference(PREF_REDUCE_DATA_USAGE); |
| 142 if (DataReductionProxySettings.getInstance().isDataReductionProxyAllowed
()) { |
| 143 bandwidthReduction.setSummary( |
| 144 BandwidthReductionPreferences.generateSummary(getResources()
)); |
| 145 bandwidthReduction.setManagedPreferenceDelegate(mManagedPreferenceDe
legate); |
| 146 } else { |
| 147 getPreferenceScreen().removePreference(bandwidthReduction); |
| 148 } |
| 149 } |
| 150 |
| 151 private void setOnOffSummary(Preference pref, boolean isOn) { |
| 152 pref.setSummary(getResources().getString(isOn ? R.string.text_on : R.str
ing.text_off)); |
| 153 } |
| 154 |
| 155 private void registerSignInPref() { |
| 156 unregisterSignInPref(); |
| 157 mSignInPreference = (SignInPreference) findPreference(PREF_SIGN_IN); |
| 158 mSignInPreference.registerForUpdates(); |
| 159 } |
| 160 |
| 161 private void unregisterSignInPref() { |
| 162 if (mSignInPreference != null) { |
| 163 mSignInPreference.unregisterForUpdates(); |
| 164 mSignInPreference = null; |
| 165 } |
| 166 } |
| 167 |
| 168 /** |
| 169 * Displays the account picker or the add account dialog and signs the user
in. |
| 170 */ |
| 171 private void displayAccountPicker() { |
| 172 Context context = getActivity(); |
| 173 if (context == null) return; |
| 174 |
| 175 if (!SigninManager.get(context).isSignInAllowed()) { |
| 176 if (SigninManager.get(context).isSigninDisabledByPolicy()) { |
| 177 ManagedPreferencesUtils.showManagedByAdministratorToast(context)
; |
| 178 } |
| 179 return; |
| 180 } |
| 181 |
| 182 if (AccountManagerHelper.get(context).hasGoogleAccounts()) { |
| 183 ChooseAccountFragment chooserFragment = new ChooseAccountFragment(); |
| 184 chooserFragment.show(getFragmentManager(), ACCOUNT_PICKER_DIALOG_TAG
); |
| 185 } else { |
| 186 AddGoogleAccountDialogFragment dialog = new AddGoogleAccountDialogFr
agment(); |
| 187 dialog.setListener(new AddGoogleAccountListener() { |
| 188 @Override |
| 189 public void onAddAccountClicked() { |
| 190 AccountAdder.getInstance().addAccount(MainPreferences.this, |
| 191 AccountAdder.ADD_ACCOUNT_RESULT); |
| 192 } |
| 193 }); |
| 194 dialog.show(getFragmentManager(), null); |
| 195 } |
| 196 } |
| 197 |
| 198 // SignInStateObserver |
| 199 |
| 200 @Override |
| 201 public void onSignedIn() { |
| 202 // After signing in or out of a managed account, preferences may change
or become enabled |
| 203 // or disabled. |
| 204 new Handler().post(new Runnable() { |
| 205 @Override |
| 206 public void run() { |
| 207 updatePreferences(); |
| 208 } |
| 209 }); |
| 210 } |
| 211 |
| 212 @Override |
| 213 public void onSignedOut() { |
| 214 updatePreferences(); |
| 215 } |
| 216 |
| 217 private ManagedPreferenceDelegate createManagedPreferenceDelegate() { |
| 218 return new ManagedPreferenceDelegate() { |
| 219 @Override |
| 220 public boolean isPreferenceControlledByPolicy(Preference preference)
{ |
| 221 if (PREF_AUTOFILL_SETTINGS.equals(preference.getKey())) { |
| 222 return PersonalDataManager.isAutofillManaged(); |
| 223 } |
| 224 if (PREF_SAVED_PASSWORDS.equals(preference.getKey())) { |
| 225 return PrefServiceBridge.getInstance().isRememberPasswordsMa
naged(); |
| 226 } |
| 227 if (PREF_REDUCE_DATA_USAGE.equals(preference.getKey())) { |
| 228 return DataReductionProxySettings.getInstance().isDataReduct
ionProxyManaged(); |
| 229 } |
| 230 return false; |
| 231 } |
| 232 |
| 233 @Override |
| 234 public boolean isPreferenceClickDisabledByPolicy(Preference preferen
ce) { |
| 235 if (PREF_AUTOFILL_SETTINGS.equals(preference.getKey())) { |
| 236 return PersonalDataManager.isAutofillManaged() |
| 237 && !PersonalDataManager.isAutofillEnabled(); |
| 238 } |
| 239 if (PREF_SAVED_PASSWORDS.equals(preference.getKey())) { |
| 240 PrefServiceBridge prefs = PrefServiceBridge.getInstance(); |
| 241 return prefs.isRememberPasswordsManaged() |
| 242 && !prefs.isRememberPasswordsEnabled(); |
| 243 } |
| 244 if (PREF_REDUCE_DATA_USAGE.equals(preference.getKey())) { |
| 245 DataReductionProxySettings settings = DataReductionProxySett
ings.getInstance(); |
| 246 return settings.isDataReductionProxyManaged() |
| 247 && !settings.isDataReductionProxyEnabled(); |
| 248 } |
| 249 return super.isPreferenceClickDisabledByPolicy(preference); |
| 250 } |
| 251 }; |
| 252 } |
| 253 } |
OLD | NEW |