Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2992)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ManageSavedPasswordsPreferences.java

Issue 797903002: Upstream save passwords and search engine preferences. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed SearchEnginePreference.java Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ManageSavedPasswordsPreferences.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ManageSavedPasswordsPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ManageSavedPasswordsPreferences.java
new file mode 100644
index 0000000000000000000000000000000000000000..311631e04a74da6fcbc775d05103016851024899
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ManageSavedPasswordsPreferences.java
@@ -0,0 +1,256 @@
+// Copyright 2014 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.password;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceCategory;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceScreen;
+import android.text.SpannableString;
+import android.text.style.ForegroundColorSpan;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.PasswordUIView;
+import org.chromium.chrome.browser.PasswordUIView.PasswordListObserver;
+import org.chromium.chrome.browser.preferences.ChromeBasePreference;
+import org.chromium.chrome.browser.preferences.ChromeSwitchPreference;
+import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegate;
+import org.chromium.chrome.browser.preferences.PrefServiceBridge;
+import org.chromium.chrome.browser.preferences.Preferences;
+import org.chromium.ui.text.SpanApplier;
+
+/**
+ * "Manage Saved Passwords" activity, providing options to delete or
+ * show saved passwords.
+ */
+public class ManageSavedPasswordsPreferences extends PreferenceFragment
+ implements OnPreferenceChangeListener, PasswordListObserver,
+ Preference.OnPreferenceClickListener {
+
+ // Keys for name/password dictionaries.
+ public static final String PASSWORD_LIST_URL = "url";
+ public static final String PASSWORD_LIST_NAME = "name";
+
+ // Used to pass the password id into a new activity.
+ public static final String PASSWORD_LIST_ID = "id";
+
+ public static final String DELETED_ITEM_IS_EXCEPTION = "is_exception";
+ public static final String PASSWORD_LIST_DELETED_ID = "deleted_id";
+
+ public static final String PREF_SAVE_PASSWORDS_SWITCH = "save_passwords_switch";
+
+ private static final String PREF_CATEGORY_SAVED_PASSWORDS = "saved_passwords";
+ private static final String PREF_CATEGORY_EXCEPTIONS = "exceptions";
+
+ public static final int RESULT_DELETE_PASSWORD = 1;
+
+ private final PasswordUIView mPasswordManagerHandler = new PasswordUIView();
+ private TextView mEmptyView;
+ private boolean mNoPasswords;
+ private boolean mNoPasswordExceptions;
+ private Preference mLinkPref;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getActivity().setTitle(R.string.prefs_saved_passwords);
+ setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getActivity()));
+ mPasswordManagerHandler.addObserver(this);
+
+ mEmptyView = new TextView(getActivity(), null);
+ mEmptyView.setText(R.string.saved_passwords_none_text);
+ mEmptyView.setGravity(Gravity.CENTER);
+ mEmptyView.setVisibility(View.GONE);
+ ((ViewGroup) getActivity().findViewById(android.R.id.content)).addView(mEmptyView);
+ }
+
+ /**
+ * Empty screen message when no passwords or exceptions are stored.
+ */
+ private void displayEmptyScreenMessage() {
+ if (mEmptyView != null) {
+ mEmptyView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ rebuildPasswordLists();
+ return true;
+ }
+
+ void rebuildPasswordLists() {
+ mNoPasswords = false;
+ mNoPasswordExceptions = false;
+ getPreferenceScreen().removeAll();
+ mEmptyView.setVisibility(View.GONE);
+ createSavePasswordsSwitch(PrefServiceBridge.getInstance().isRememberPasswordsEnabled());
+ mPasswordManagerHandler.updatePasswordLists();
+ }
+
+ @Override
+ public void passwordListAvailable(int count) {
+ mNoPasswords = count == 0;
+ if (mNoPasswords) {
+ if (mNoPasswordExceptions) displayEmptyScreenMessage();
+ return;
+ }
+
+ if (PasswordUIView.shouldDisplayManageAccountLink()) {
+ ForegroundColorSpan colorSpan = new ForegroundColorSpan(
+ getResources().getColor(R.color.pref_accent_color));
+ SpannableString title = SpanApplier.applySpans(
+ getString(R.string.manage_passwords_text),
+ new SpanApplier.SpanInfo("<link>", "</link>", colorSpan));
+ mLinkPref = new ChromeBasePreference(getActivity());
+ mLinkPref.setTitle(title);
+ mLinkPref.setOnPreferenceClickListener(this);
+ getPreferenceScreen().addPreference(mLinkPref);
+ }
+
+ PreferenceCategory profileCategory = new PreferenceCategory(getActivity());
+ profileCategory.setKey(PREF_CATEGORY_SAVED_PASSWORDS);
+ profileCategory.setTitle(R.string.section_saved_passwords);
+ getPreferenceScreen().addPreference(profileCategory);
+ for (int i = 0; i < count; i++) {
+ PasswordUIView.SavedPasswordEntry saved =
+ mPasswordManagerHandler.getSavedPasswordEntry(i);
+ PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity());
+ String url = saved.getUrl();
+ String name = saved.getUserName();
+ screen.setTitle(url);
+ screen.setOnPreferenceClickListener(this);
+ screen.setSummary(name);
+ Bundle args = screen.getExtras();
+ args.putString(PASSWORD_LIST_NAME, name);
+ args.putString(PASSWORD_LIST_URL, url);
+ args.putInt(PASSWORD_LIST_ID, i);
+ profileCategory.addPreference(screen);
+ }
+ }
+
+ @Override
+ public void passwordExceptionListAvailable(int count) {
+ mNoPasswordExceptions = count == 0;
+ if (mNoPasswordExceptions) {
+ if (mNoPasswords) displayEmptyScreenMessage();
+ return;
+ }
+
+ PreferenceCategory profileCategory = new PreferenceCategory(getActivity());
+ profileCategory.setKey(PREF_CATEGORY_EXCEPTIONS);
+ profileCategory.setTitle(R.string.section_saved_passwords_exceptions);
+ getPreferenceScreen().addPreference(profileCategory);
+ for (int i = 0; i < count; i++) {
+ String exception = mPasswordManagerHandler.getSavedPasswordException(i);
+ PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity());
+ screen.setTitle(exception);
+ screen.setOnPreferenceClickListener(this);
+ Bundle args = screen.getExtras();
+ args.putString(PASSWORD_LIST_URL, exception);
+ args.putInt(PASSWORD_LIST_ID, i);
+ profileCategory.addPreference(screen);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ rebuildPasswordLists();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mPasswordManagerHandler.destroy();
+ }
+
+ /**
+ * Preference was clicked. Either navigate to manage account site or launch the PasswordEditor
+ * depending on which preference it was.
+ */
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if (preference == mLinkPref) {
+ Intent intent = new Intent(
+ Intent.ACTION_VIEW,
+ Uri.parse(PasswordUIView.getAccountDashboardURL()));
+ intent.setPackage(getActivity().getPackageName());
+ getActivity().startActivity(intent);
+ } else {
+ // Launch preference activity with PasswordEntryEditor fragment with
+ // intent extras specifying the object.
+ Intent intent = new Intent();
+ intent.setClassName(getActivity(), getActivity().getClass().getName());
+ intent.putExtra(Preferences.EXTRA_SHOW_FRAGMENT,
+ PasswordEntryEditor.class.getName());
+ intent.putExtra(Preferences.EXTRA_SHOW_FRAGMENT_ARGUMENTS,
+ preference.getExtras());
+ startActivityForResult(intent, RESULT_DELETE_PASSWORD);
+ }
+ return true;
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == RESULT_DELETE_PASSWORD && data != null) {
+ deletePassword(data);
+ }
+ }
+
+ /**
+ * Called when a Password is deleted from PasswordEntryEditor.
+ * @param data Intent with extras containing the index of deleted password.
+ */
+ private void deletePassword(Intent data) {
+ if (data != null && data.hasExtra(PASSWORD_LIST_DELETED_ID)) {
+ int deletedId = data.getIntExtra(PASSWORD_LIST_DELETED_ID, -1);
+ boolean isException = data.getBooleanExtra(DELETED_ITEM_IS_EXCEPTION, false);
+ if (isException) {
+ mPasswordManagerHandler.removeSavedPasswordException(deletedId);
+ } else {
+ mPasswordManagerHandler.removeSavedPasswordEntry(deletedId);
+ }
+ }
+ }
+
+ private void createSavePasswordsSwitch(boolean isEnabled) {
+ ChromeSwitchPreference savePasswordsSwitch =
+ new ChromeSwitchPreference(getActivity(), null);
+ savePasswordsSwitch.setKey(PREF_SAVE_PASSWORDS_SWITCH);
+ savePasswordsSwitch.setSummaryOn(R.string.text_on);
+ savePasswordsSwitch.setSummaryOff(R.string.text_off);
+ savePasswordsSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ PrefServiceBridge.getInstance().setRememberPasswordsEnabled((boolean) newValue);
+ return true;
+ }
+ });
+
+ savePasswordsSwitch.setManagedPreferenceDelegate(new ManagedPreferenceDelegate() {
+ @Override
+ public boolean isPreferenceControlledByPolicy(Preference preference) {
+ return PrefServiceBridge.getInstance().isRememberPasswordsManaged();
+ }
+ });
+
+ getPreferenceScreen().addPreference(savePasswordsSwitch);
+
+ // Note: setting the switch state before the preference is added to the screen results in
+ // some odd behavior where the switch state doesn't always match the internal enabled state
+ // (e.g. the switch will say "On" when save passwords is really turned off), so
+ // .setChecked() should be called after .addPreference()
+ savePasswordsSwitch.setChecked(isEnabled);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698