| // Copyright 2017 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.autofill; |
| |
| import android.os.Bundle; |
| import android.preference.Preference; |
| import android.preference.PreferenceFragment; |
| |
| import org.chromium.chrome.R; |
| import org.chromium.chrome.browser.autofill.PersonalDataManager; |
| import org.chromium.chrome.browser.preferences.ChromeBasePreference; |
| import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegate; |
| import org.chromium.chrome.browser.preferences.PreferenceUtils; |
| |
| /** |
| * Autofill and payments settings fragment, which allows the user to edit autofill and credit card |
| * profiles. |
| */ |
| public class AutofillAndPaymentsPreferences extends PreferenceFragment { |
| public static final String AUTOFILL_GUID = "guid"; |
| |
| // Needs to be in sync with kSettingsOrigin[] in |
| // chrome/browser/ui/webui/options/autofill_options_handler.cc |
| public static final String SETTINGS_ORIGIN = "Chrome settings"; |
| private static final String AUTOFILL_ADDRESSES = "autofill_addresses"; |
| private static final String AUTOFILL_PAYMENT_METHODS = "autofill_payment_methods"; |
| |
| private final ManagedPreferenceDelegate mManagedPreferenceDelegate; |
| |
| public AutofillAndPaymentsPreferences() { |
| mManagedPreferenceDelegate = createManagedPreferenceDelegate(); |
| } |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| PreferenceUtils.addPreferencesFromResource(this, R.xml.autofill_and_payments_preferences); |
| getActivity().setTitle(R.string.prefs_autofill_and_payments); |
| |
| ((ChromeBasePreference) findPreference(AUTOFILL_ADDRESSES)) |
| .setManagedPreferenceDelegate(mManagedPreferenceDelegate); |
| ((ChromeBasePreference) findPreference(AUTOFILL_PAYMENT_METHODS)) |
| .setManagedPreferenceDelegate(mManagedPreferenceDelegate); |
| } |
| |
| @Override |
| public void onResume() { |
| super.onResume(); |
| } |
| |
| ManagedPreferenceDelegate getManagedPreferenceDelegateForTest() { |
| return mManagedPreferenceDelegate; |
| } |
| |
| private ManagedPreferenceDelegate createManagedPreferenceDelegate() { |
| return new ManagedPreferenceDelegate() { |
| @Override |
| public boolean isPreferenceControlledByPolicy(Preference preference) { |
| if (AUTOFILL_ADDRESSES.equals(preference.getKey())) { |
| return PersonalDataManager.isAutofillProfileManaged(); |
| } |
| if (AUTOFILL_PAYMENT_METHODS.equals(preference.getKey())) { |
| return PersonalDataManager.isAutofillCreditCardManaged(); |
| } |
| return false; |
| } |
| |
| @Override |
| public boolean isPreferenceClickDisabledByPolicy(Preference preference) { |
| if (AUTOFILL_ADDRESSES.equals(preference.getKey())) { |
| return PersonalDataManager.isAutofillProfileManaged() |
| && !PersonalDataManager.isAutofillProfileEnabled(); |
| } |
| // TODO(crbug.com/860526): Change this to allow access to payment apps even if cards |
| // autofill is disabled by policy. |
| if (AUTOFILL_PAYMENT_METHODS.equals(preference.getKey())) { |
| return PersonalDataManager.isAutofillCreditCardManaged() |
| && !PersonalDataManager.isAutofillCreditCardEnabled(); |
| } |
| return isPreferenceControlledByPolicy(preference) |
| || isPreferenceControlledByCustodian(preference); |
| } |
| }; |
| } |
| } |