[AF] Move "Payment apps" into "Payment methods" on Android Settings
A follow-up CL will delete the "Autofill and payments" page and move
"Addresses and more" and "Payment methods" into the main Settings page.
Moving "Payment apps" into the "Payment methods" as a separate step
to make CLs easier to review.
Screenshots (Googlers only): https://drive.google.com/open?id=1QMBcQKZ_O2aaxLs5OFf3zfyY7JSgcxgX
Bug: 860526
Change-Id: I57a107a15a7f8aab94a1125e79e6616957eaa49a
Reviewed-on: https://chromium-review.googlesource.com/1199684
Reviewed-by: Mathieu Perreault <mathp@chromium.org>
Reviewed-by: Theresa <twellington@chromium.org>
Commit-Queue: Fabio Tirelo <ftirelo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589156}
diff --git a/chrome/android/java/res/xml/autofill_and_payments_preferences.xml b/chrome/android/java/res/xml/autofill_and_payments_preferences.xml
index 07091ff..6a3b326 100644
--- a/chrome/android/java/res/xml/autofill_and_payments_preferences.xml
+++ b/chrome/android/java/res/xml/autofill_and_payments_preferences.xml
@@ -12,7 +12,7 @@
<org.chromium.chrome.browser.preferences.ChromeBasePreference
android:title="@string/autofill_payment_methods"
- android:fragment="org.chromium.chrome.browser.preferences.autofill.AutofillCreditCardsFragment"
+ android:fragment="org.chromium.chrome.browser.preferences.autofill.AutofillPaymentMethodsFragment"
android:key="autofill_payment_methods" />
</PreferenceScreen>
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java
index d0c04ad..f2399d5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/PreferencesLauncher.java
@@ -10,7 +10,7 @@
import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative;
-import org.chromium.chrome.browser.preferences.autofill.AutofillCreditCardsFragment;
+import org.chromium.chrome.browser.preferences.autofill.AutofillPaymentMethodsFragment;
import org.chromium.chrome.browser.preferences.autofill.AutofillProfilesFragment;
import org.chromium.chrome.browser.preferences.password.SavePasswordsPreferences;
import org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment;
@@ -72,7 +72,7 @@
@CalledByNative
private static void showAutofillCreditCardSettings(WebContents webContents) {
- showSettingSubpage(webContents, AutofillCreditCardsFragment.class.getName());
+ showSettingSubpage(webContents, AutofillPaymentMethodsFragment.class.getName());
}
@CalledByNative
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillAndPaymentsPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillAndPaymentsPreferences.java
index af0176da..f92aa26 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillAndPaymentsPreferences.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillAndPaymentsPreferences.java
@@ -9,17 +9,14 @@
import android.preference.PreferenceFragment;
import org.chromium.chrome.R;
-import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.autofill.PersonalDataManager;
-import org.chromium.chrome.browser.payments.AndroidPaymentAppFactory;
-import org.chromium.chrome.browser.payments.ServiceWorkerPaymentAppBridge;
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 and control payment apps.
+ * profiles.
*/
public class AutofillAndPaymentsPreferences extends PreferenceFragment {
public static final String AUTOFILL_GUID = "guid";
@@ -29,7 +26,6 @@
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 static final String PREF_PAYMENT_APPS = "payment_apps";
private final ManagedPreferenceDelegate mManagedPreferenceDelegate;
@@ -43,16 +39,6 @@
PreferenceUtils.addPreferencesFromResource(this, R.xml.autofill_and_payments_preferences);
getActivity().setTitle(R.string.prefs_autofill_and_payments);
- if (ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_PAYMENT_APPS)
- || ChromeFeatureList.isEnabled(ChromeFeatureList.SERVICE_WORKER_PAYMENT_APPS)) {
- Preference pref = new Preference(getActivity());
- pref.setTitle(getActivity().getString(R.string.payment_apps_title));
- pref.setFragment(AndroidPaymentAppsFragment.class.getCanonicalName());
- pref.setShouldDisableView(true);
- pref.setKey(PREF_PAYMENT_APPS);
- getPreferenceScreen().addPreference(pref);
- }
-
((ChromeBasePreference) findPreference(AUTOFILL_ADDRESSES))
.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
((ChromeBasePreference) findPreference(AUTOFILL_PAYMENT_METHODS))
@@ -62,38 +48,6 @@
@Override
public void onResume() {
super.onResume();
- Preference pref = findPreference(PREF_PAYMENT_APPS);
- if (pref != null) {
- refreshPaymentAppsPrefForAndroidPaymentApps(pref);
- }
- }
-
- private void refreshPaymentAppsPrefForAndroidPaymentApps(Preference pref) {
- if (AndroidPaymentAppFactory.hasAndroidPaymentApps()) {
- setPaymentAppsPrefStatus(pref, true);
- } else {
- refreshPaymentAppsPrefForServiceWorkerPaymentApps(pref);
- }
- }
-
- private void refreshPaymentAppsPrefForServiceWorkerPaymentApps(Preference pref) {
- ServiceWorkerPaymentAppBridge.hasServiceWorkerPaymentApps(
- new ServiceWorkerPaymentAppBridge.HasServiceWorkerPaymentAppsCallback() {
- @Override
- public void onHasServiceWorkerPaymentAppsResponse(boolean hasPaymentApps) {
- setPaymentAppsPrefStatus(pref, hasPaymentApps);
- }
- });
- }
-
- private void setPaymentAppsPrefStatus(Preference pref, boolean enabled) {
- if (enabled) {
- pref.setSummary(null);
- pref.setEnabled(true);
- } else {
- pref.setSummary(getActivity().getString(R.string.payment_no_apps_summary));
- pref.setEnabled(false);
- }
}
ManagedPreferenceDelegate getManagedPreferenceDelegateForTest() {
@@ -119,6 +73,8 @@
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();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillCreditCardsFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillCreditCardsFragment.java
deleted file mode 100644
index 00b3f43..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillCreditCardsFragment.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// 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.graphics.PorterDuff;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.PreferenceFragment;
-import android.support.v7.content.res.AppCompatResources;
-
-import org.chromium.base.ApiCompatibilityUtils;
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.autofill.PersonalDataManager;
-import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
-import org.chromium.chrome.browser.preferences.ChromeSwitchPreference;
-import org.chromium.chrome.browser.preferences.PreferenceUtils;
-
-/**
- * Autofill credit cards fragment, which allows the user to edit credit cards.
- */
-public class AutofillCreditCardsFragment
- extends PreferenceFragment implements PersonalDataManager.PersonalDataManagerObserver {
- private static final String PREF_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL =
- "autofill_enable_credit_cards_toggle_label";
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- PreferenceUtils.addPreferencesFromResource(
- this, R.xml.autofill_and_payments_preference_fragment_screen);
- getActivity().setTitle(R.string.autofill_payment_methods);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- // Always rebuild our list of credit cards. Although we could detect if credit cards are
- // added or deleted, the credit card summary (number) might be different. To be safe, we
- // update all.
- rebuildCreditCardList();
- }
-
- private void rebuildCreditCardList() {
- getPreferenceScreen().removeAll();
- getPreferenceScreen().setOrderingAsAdded(true);
-
- ChromeSwitchPreference autofillSwitch = new ChromeSwitchPreference(getActivity(), null);
- autofillSwitch.setTitle(R.string.autofill_enable_credit_cards_toggle_label);
- autofillSwitch.setSummary(
- getActivity().getString(R.string.autofill_enable_credit_cards_toggle_sublabel));
- autofillSwitch.setKey(PREF_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL); // For testing.
- autofillSwitch.setChecked(PersonalDataManager.isAutofillCreditCardEnabled());
- autofillSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- PersonalDataManager.setAutofillCreditCardEnabled((boolean) newValue);
- return true;
- }
- });
- getPreferenceScreen().addPreference(autofillSwitch);
-
- for (CreditCard card : PersonalDataManager.getInstance().getCreditCardsForSettings()) {
- // Add a preference for the credit card.
- Preference pref = new Preference(getActivity());
- pref.setTitle(card.getObfuscatedNumber());
- pref.setSummary(card.getFormattedExpirationDate(getActivity()));
- pref.setIcon(
- AppCompatResources.getDrawable(getActivity(), card.getIssuerIconDrawableId()));
-
- if (card.getIsLocal()) {
- pref.setFragment(AutofillLocalCardEditor.class.getName());
- } else {
- pref.setFragment(AutofillServerCardEditor.class.getName());
- pref.setWidgetLayoutResource(R.layout.autofill_server_data_label);
- }
-
- Bundle args = pref.getExtras();
- args.putString(AutofillAndPaymentsPreferences.AUTOFILL_GUID, card.getGUID());
- getPreferenceScreen().addPreference(pref);
- }
-
- // Add 'Add credit card' button. Tap of it brings up card editor which allows users type in
- // new credit cards.
- Preference pref = new Preference(getActivity());
- Drawable plusIcon = ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.plus);
- plusIcon.mutate();
- plusIcon.setColorFilter(
- ApiCompatibilityUtils.getColor(getResources(), R.color.pref_accent_color),
- PorterDuff.Mode.SRC_IN);
- pref.setIcon(plusIcon);
- pref.setTitle(R.string.autofill_create_credit_card);
- pref.setFragment(AutofillLocalCardEditor.class.getName());
- pref.setEnabled(PersonalDataManager.isAutofillCreditCardEnabled());
- getPreferenceScreen().addPreference(pref);
- }
-
- @Override
- public void onPersonalDataChanged() {
- rebuildCreditCardList();
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- PersonalDataManager.getInstance().registerDataObserver(this);
- }
-
- @Override
- public void onDestroyView() {
- PersonalDataManager.getInstance().unregisterDataObserver(this);
- super.onDestroyView();
- }
-}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillPaymentMethodsFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillPaymentMethodsFragment.java
new file mode 100644
index 0000000..e148288
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/autofill/AutofillPaymentMethodsFragment.java
@@ -0,0 +1,163 @@
+// 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.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceFragment;
+import android.support.v7.content.res.AppCompatResources;
+
+import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ChromeFeatureList;
+import org.chromium.chrome.browser.autofill.PersonalDataManager;
+import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
+import org.chromium.chrome.browser.payments.AndroidPaymentAppFactory;
+import org.chromium.chrome.browser.payments.ServiceWorkerPaymentAppBridge;
+import org.chromium.chrome.browser.preferences.ChromeSwitchPreference;
+import org.chromium.chrome.browser.preferences.PreferenceUtils;
+
+/**
+ * Autofill credit cards fragment, which allows the user to edit credit cards and control
+ * payment apps.
+ */
+public class AutofillPaymentMethodsFragment
+ extends PreferenceFragment implements PersonalDataManager.PersonalDataManagerObserver {
+ private static final String PREF_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL =
+ "autofill_enable_credit_cards_toggle_label";
+
+ private static final String PREF_PAYMENT_APPS = "payment_apps";
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ PreferenceUtils.addPreferencesFromResource(
+ this, R.xml.autofill_and_payments_preference_fragment_screen);
+ getActivity().setTitle(R.string.autofill_payment_methods);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ // Always rebuild our list of credit cards. Although we could detect if credit cards are
+ // added or deleted, the credit card summary (number) might be different. To be safe, we
+ // update all.
+ rebuildPage();
+ }
+
+ private void rebuildPage() {
+ getPreferenceScreen().removeAll();
+ getPreferenceScreen().setOrderingAsAdded(true);
+
+ ChromeSwitchPreference autofillSwitch = new ChromeSwitchPreference(getActivity(), null);
+ autofillSwitch.setTitle(R.string.autofill_enable_credit_cards_toggle_label);
+ autofillSwitch.setSummary(
+ getActivity().getString(R.string.autofill_enable_credit_cards_toggle_sublabel));
+ autofillSwitch.setKey(PREF_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL); // For testing.
+ autofillSwitch.setChecked(PersonalDataManager.isAutofillCreditCardEnabled());
+ autofillSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ PersonalDataManager.setAutofillCreditCardEnabled((boolean) newValue);
+ return true;
+ }
+ });
+ getPreferenceScreen().addPreference(autofillSwitch);
+
+ for (CreditCard card : PersonalDataManager.getInstance().getCreditCardsForSettings()) {
+ // Add a preference for the credit card.
+ Preference card_pref = new Preference(getActivity());
+ card_pref.setTitle(card.getObfuscatedNumber());
+ card_pref.setSummary(card.getFormattedExpirationDate(getActivity()));
+ card_pref.setIcon(
+ AppCompatResources.getDrawable(getActivity(), card.getIssuerIconDrawableId()));
+
+ if (card.getIsLocal()) {
+ card_pref.setFragment(AutofillLocalCardEditor.class.getName());
+ } else {
+ card_pref.setFragment(AutofillServerCardEditor.class.getName());
+ card_pref.setWidgetLayoutResource(R.layout.autofill_server_data_label);
+ }
+
+ Bundle args = card_pref.getExtras();
+ args.putString(AutofillAndPaymentsPreferences.AUTOFILL_GUID, card.getGUID());
+ getPreferenceScreen().addPreference(card_pref);
+ }
+
+ // Add 'Add credit card' button. Tap of it brings up card editor which allows users type in
+ // new credit cards.
+ Preference add_card_pref = new Preference(getActivity());
+ Drawable plusIcon = ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.plus);
+ plusIcon.mutate();
+ plusIcon.setColorFilter(
+ ApiCompatibilityUtils.getColor(getResources(), R.color.pref_accent_color),
+ PorterDuff.Mode.SRC_IN);
+ add_card_pref.setIcon(plusIcon);
+ add_card_pref.setTitle(R.string.autofill_create_credit_card);
+ add_card_pref.setFragment(AutofillLocalCardEditor.class.getName());
+ add_card_pref.setEnabled(PersonalDataManager.isAutofillCreditCardEnabled());
+ getPreferenceScreen().addPreference(add_card_pref);
+
+ // Add the link to payment apps only after the credit card list is rebuilt.
+ if (ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_PAYMENT_APPS)
+ || ChromeFeatureList.isEnabled(ChromeFeatureList.SERVICE_WORKER_PAYMENT_APPS)) {
+ Preference payment_apps_pref = new Preference(getActivity());
+ payment_apps_pref.setTitle(getActivity().getString(R.string.payment_apps_title));
+ payment_apps_pref.setFragment(AndroidPaymentAppsFragment.class.getCanonicalName());
+ payment_apps_pref.setShouldDisableView(true);
+ payment_apps_pref.setKey(PREF_PAYMENT_APPS);
+ getPreferenceScreen().addPreference(payment_apps_pref);
+ refreshPaymentAppsPrefForAndroidPaymentApps(payment_apps_pref);
+ }
+ }
+
+ private void refreshPaymentAppsPrefForAndroidPaymentApps(Preference pref) {
+ if (AndroidPaymentAppFactory.hasAndroidPaymentApps()) {
+ setPaymentAppsPrefStatus(pref, true);
+ } else {
+ refreshPaymentAppsPrefForServiceWorkerPaymentApps(pref);
+ }
+ }
+
+ private void refreshPaymentAppsPrefForServiceWorkerPaymentApps(Preference pref) {
+ ServiceWorkerPaymentAppBridge.hasServiceWorkerPaymentApps(
+ new ServiceWorkerPaymentAppBridge.HasServiceWorkerPaymentAppsCallback() {
+ @Override
+ public void onHasServiceWorkerPaymentAppsResponse(boolean hasPaymentApps) {
+ setPaymentAppsPrefStatus(pref, hasPaymentApps);
+ }
+ });
+ }
+
+ private void setPaymentAppsPrefStatus(Preference pref, boolean enabled) {
+ if (enabled) {
+ pref.setSummary(null);
+ pref.setEnabled(true);
+ } else {
+ pref.setSummary(getActivity().getString(R.string.payment_no_apps_summary));
+ pref.setEnabled(false);
+ }
+ }
+
+ @Override
+ public void onPersonalDataChanged() {
+ rebuildPage();
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ PersonalDataManager.getInstance().registerDataObserver(this);
+ }
+
+ @Override
+ public void onDestroyView() {
+ PersonalDataManager.getInstance().unregisterDataObserver(this);
+ super.onDestroyView();
+ }
+}
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index 3c2e083..e24bb04 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -1172,7 +1172,7 @@
"java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppPreference.java",
"java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppsFragment.java",
"java/src/org/chromium/chrome/browser/preferences/autofill/AutofillAndPaymentsPreferences.java",
- "java/src/org/chromium/chrome/browser/preferences/autofill/AutofillCreditCardsFragment.java",
+ "java/src/org/chromium/chrome/browser/preferences/autofill/AutofillPaymentMethodsFragment.java",
"java/src/org/chromium/chrome/browser/preferences/autofill/AutofillCreditCardEditor.java",
"java/src/org/chromium/chrome/browser/preferences/autofill/AutofillEditorBase.java",
"java/src/org/chromium/chrome/browser/preferences/autofill/AutofillLocalCardEditor.java",