Index: chrome/android/java_staging/src/org/chromium/chrome/browser/preferences/MainPreferences.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/preferences/MainPreferences.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/preferences/MainPreferences.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..50e4d829d4b6ca1e3f06f69419f51b6f6c047a63 |
--- /dev/null |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/preferences/MainPreferences.java |
@@ -0,0 +1,253 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.preferences; |
+ |
+import android.content.Context; |
+import android.os.Handler; |
+import android.preference.Preference; |
+import android.preference.Preference.OnPreferenceClickListener; |
+import android.preference.PreferenceFragment; |
+import android.view.Menu; |
+import android.view.MenuInflater; |
+import android.view.MenuItem; |
+ |
+import com.google.android.apps.chrome.R; |
+ |
+import org.chromium.chrome.browser.PasswordUIView; |
+import org.chromium.chrome.browser.autofill.PersonalDataManager; |
+import org.chromium.chrome.browser.bookmarkimport.AndroidBrowserImporter; |
+import org.chromium.chrome.browser.bookmarkimport.ImportBookmarksAlertDialog; |
+import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
+import org.chromium.chrome.browser.partnercustomizations.HomepageManager; |
+import org.chromium.chrome.browser.preferences.bandwidth.BandwidthReductionPreferences; |
+import org.chromium.chrome.browser.signin.AccountAdder; |
+import org.chromium.chrome.browser.signin.AddGoogleAccountDialogFragment; |
+import org.chromium.chrome.browser.signin.AddGoogleAccountDialogFragment.AddGoogleAccountListener; |
+import org.chromium.chrome.browser.signin.SigninManager; |
+import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; |
+import org.chromium.chrome.browser.sync.ui.ChooseAccountFragment; |
+import org.chromium.chrome.browser.util.FeatureUtilities; |
+import org.chromium.sync.signin.AccountManagerHelper; |
+import org.chromium.sync.signin.ChromeSigninController; |
+ |
+/** |
+ * The main settings screen, shown when the user first opens Settings. |
+ */ |
+public class MainPreferences extends PreferenceFragment implements SignInStateObserver { |
+ |
+ public static final String PREF_SIGN_IN = "sign_in"; |
+ public static final String PREF_DOCUMENT_MODE = "document_mode"; |
+ public static final String PREF_AUTOFILL_SETTINGS = "autofill_settings"; |
+ public static final String PREF_SAVED_PASSWORDS = "saved_passwords"; |
+ public static final String PREF_HOMEPAGE = "homepage"; |
+ public static final String PREF_REDUCE_DATA_USAGE = "reduce_data_usage"; |
+ |
+ public static final String ACCOUNT_PICKER_DIALOG_TAG = "account_picker_dialog_tag"; |
+ |
+ private SignInPreference mSignInPreference; |
+ private ManagedPreferenceDelegate mManagedPreferenceDelegate; |
+ |
+ public MainPreferences() { |
+ setHasOptionsMenu(true); |
+ mManagedPreferenceDelegate = createManagedPreferenceDelegate(); |
+ } |
+ |
+ @Override |
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { |
+ if (getActivity() == null) return; |
+ |
+ AndroidBrowserImporter androidBrowserImporter = new AndroidBrowserImporter(getActivity()); |
+ if (androidBrowserImporter.areBookmarksAccessible()) { |
+ menu.add(Menu.NONE, R.id.menu_id_import_bookmarks, Menu.NONE, |
+ R.string.import_bookmarks); |
+ } |
+ } |
+ |
+ @Override |
+ public boolean onOptionsItemSelected(MenuItem item) { |
+ if (item.getItemId() == R.id.menu_id_import_bookmarks) { |
+ ImportBookmarksAlertDialog importBookmarksFragment = |
+ new ImportBookmarksAlertDialog(); |
+ importBookmarksFragment.show(getFragmentManager(), null); |
+ return true; |
+ } |
+ return false; |
+ } |
+ |
+ @Override |
+ public void onResume() { |
+ super.onResume(); |
+ SigninManager.get(getActivity()).addSignInStateObserver(this); |
+ updatePreferences(); |
+ } |
+ |
+ @Override |
+ public void onPause() { |
+ super.onPause(); |
+ SigninManager.get(getActivity()).removeSignInStateObserver(this); |
+ unregisterSignInPref(); |
+ } |
+ |
+ private void updatePreferences() { |
+ if (getPreferenceScreen() != null) getPreferenceScreen().removeAll(); |
+ addPreferencesFromResource(R.xml.main_preferences); |
+ |
+ registerSignInPref(); |
+ mSignInPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { |
+ @Override |
+ public boolean onPreferenceClick(Preference preference) { |
+ if (!ChromeSigninController.get(getActivity()).isSignedIn()) { |
+ displayAccountPicker(); |
+ return true; |
+ } |
+ return false; |
+ } |
+ }); |
+ |
+ Preference documentMode = findPreference(PREF_DOCUMENT_MODE); |
+ if (FeatureUtilities.isDocumentModeEligible(getActivity())) { |
+ setOnOffSummary(documentMode, |
+ !DocumentModeManager.getInstance(getActivity()).isOptedOutOfDocumentMode()); |
+ } else { |
+ getPreferenceScreen().removePreference(documentMode); |
+ } |
+ |
+ ChromeBasePreference autofillPref = |
+ (ChromeBasePreference) findPreference(PREF_AUTOFILL_SETTINGS); |
+ setOnOffSummary(autofillPref, PersonalDataManager.isAutofillEnabled()); |
+ autofillPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); |
+ |
+ ChromeBasePreference passwordsPref = |
+ (ChromeBasePreference) findPreference(PREF_SAVED_PASSWORDS); |
+ if (PasswordUIView.shouldUseSmartLockBranding()) { |
+ passwordsPref.setTitle(getResources().getString( |
+ R.string.prefs_smart_lock_for_passwords)); |
+ } |
+ setOnOffSummary(passwordsPref, |
+ PrefServiceBridge.getInstance().isRememberPasswordsEnabled()); |
+ passwordsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); |
+ |
+ Preference homepagePref = findPreference(PREF_HOMEPAGE); |
+ if (HomepageManager.shouldShowHomepageSetting()) { |
+ setOnOffSummary(homepagePref, |
+ HomepageManager.getInstance(getActivity()).getPrefHomepageEnabled()); |
+ } else { |
+ getPreferenceScreen().removePreference(homepagePref); |
+ } |
+ |
+ ChromeBasePreference bandwidthReduction = |
+ (ChromeBasePreference) findPreference(PREF_REDUCE_DATA_USAGE); |
+ if (DataReductionProxySettings.getInstance().isDataReductionProxyAllowed()) { |
+ bandwidthReduction.setSummary( |
+ BandwidthReductionPreferences.generateSummary(getResources())); |
+ bandwidthReduction.setManagedPreferenceDelegate(mManagedPreferenceDelegate); |
+ } else { |
+ getPreferenceScreen().removePreference(bandwidthReduction); |
+ } |
+ } |
+ |
+ private void setOnOffSummary(Preference pref, boolean isOn) { |
+ pref.setSummary(getResources().getString(isOn ? R.string.text_on : R.string.text_off)); |
+ } |
+ |
+ private void registerSignInPref() { |
+ unregisterSignInPref(); |
+ mSignInPreference = (SignInPreference) findPreference(PREF_SIGN_IN); |
+ mSignInPreference.registerForUpdates(); |
+ } |
+ |
+ private void unregisterSignInPref() { |
+ if (mSignInPreference != null) { |
+ mSignInPreference.unregisterForUpdates(); |
+ mSignInPreference = null; |
+ } |
+ } |
+ |
+ /** |
+ * Displays the account picker or the add account dialog and signs the user in. |
+ */ |
+ private void displayAccountPicker() { |
+ Context context = getActivity(); |
+ if (context == null) return; |
+ |
+ if (!SigninManager.get(context).isSignInAllowed()) { |
+ if (SigninManager.get(context).isSigninDisabledByPolicy()) { |
+ ManagedPreferencesUtils.showManagedByAdministratorToast(context); |
+ } |
+ return; |
+ } |
+ |
+ if (AccountManagerHelper.get(context).hasGoogleAccounts()) { |
+ ChooseAccountFragment chooserFragment = new ChooseAccountFragment(); |
+ chooserFragment.show(getFragmentManager(), ACCOUNT_PICKER_DIALOG_TAG); |
+ } else { |
+ AddGoogleAccountDialogFragment dialog = new AddGoogleAccountDialogFragment(); |
+ dialog.setListener(new AddGoogleAccountListener() { |
+ @Override |
+ public void onAddAccountClicked() { |
+ AccountAdder.getInstance().addAccount(MainPreferences.this, |
+ AccountAdder.ADD_ACCOUNT_RESULT); |
+ } |
+ }); |
+ dialog.show(getFragmentManager(), null); |
+ } |
+ } |
+ |
+ // SignInStateObserver |
+ |
+ @Override |
+ public void onSignedIn() { |
+ // After signing in or out of a managed account, preferences may change or become enabled |
+ // or disabled. |
+ new Handler().post(new Runnable() { |
+ @Override |
+ public void run() { |
+ updatePreferences(); |
+ } |
+ }); |
+ } |
+ |
+ @Override |
+ public void onSignedOut() { |
+ updatePreferences(); |
+ } |
+ |
+ private ManagedPreferenceDelegate createManagedPreferenceDelegate() { |
+ return new ManagedPreferenceDelegate() { |
+ @Override |
+ public boolean isPreferenceControlledByPolicy(Preference preference) { |
+ if (PREF_AUTOFILL_SETTINGS.equals(preference.getKey())) { |
+ return PersonalDataManager.isAutofillManaged(); |
+ } |
+ if (PREF_SAVED_PASSWORDS.equals(preference.getKey())) { |
+ return PrefServiceBridge.getInstance().isRememberPasswordsManaged(); |
+ } |
+ if (PREF_REDUCE_DATA_USAGE.equals(preference.getKey())) { |
+ return DataReductionProxySettings.getInstance().isDataReductionProxyManaged(); |
+ } |
+ return false; |
+ } |
+ |
+ @Override |
+ public boolean isPreferenceClickDisabledByPolicy(Preference preference) { |
+ if (PREF_AUTOFILL_SETTINGS.equals(preference.getKey())) { |
+ return PersonalDataManager.isAutofillManaged() |
+ && !PersonalDataManager.isAutofillEnabled(); |
+ } |
+ if (PREF_SAVED_PASSWORDS.equals(preference.getKey())) { |
+ PrefServiceBridge prefs = PrefServiceBridge.getInstance(); |
+ return prefs.isRememberPasswordsManaged() |
+ && !prefs.isRememberPasswordsEnabled(); |
+ } |
+ if (PREF_REDUCE_DATA_USAGE.equals(preference.getKey())) { |
+ DataReductionProxySettings settings = DataReductionProxySettings.getInstance(); |
+ return settings.isDataReductionProxyManaged() |
+ && !settings.isDataReductionProxyEnabled(); |
+ } |
+ return super.isPreferenceClickDisabledByPolicy(preference); |
+ } |
+ }; |
+ } |
+} |