Commit cefd7e5a authored by Fabio Tirelo's avatar Fabio Tirelo Committed by Commit Bot

[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/1199684Reviewed-by: default avatarMathieu Perreault <mathp@chromium.org>
Reviewed-by: default avatarTheresa <twellington@chromium.org>
Commit-Queue: Fabio Tirelo <ftirelo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589156}
parent 19eaae68
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<org.chromium.chrome.browser.preferences.ChromeBasePreference <org.chromium.chrome.browser.preferences.ChromeBasePreference
android:title="@string/autofill_payment_methods" 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" /> android:key="autofill_payment_methods" />
</PreferenceScreen> </PreferenceScreen>
\ No newline at end of file
...@@ -10,7 +10,7 @@ import android.content.Intent; ...@@ -10,7 +10,7 @@ import android.content.Intent;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative; 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.autofill.AutofillProfilesFragment;
import org.chromium.chrome.browser.preferences.password.SavePasswordsPreferences; import org.chromium.chrome.browser.preferences.password.SavePasswordsPreferences;
import org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment; import org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment;
...@@ -72,7 +72,7 @@ public class PreferencesLauncher { ...@@ -72,7 +72,7 @@ public class PreferencesLauncher {
@CalledByNative @CalledByNative
private static void showAutofillCreditCardSettings(WebContents webContents) { private static void showAutofillCreditCardSettings(WebContents webContents) {
showSettingSubpage(webContents, AutofillCreditCardsFragment.class.getName()); showSettingSubpage(webContents, AutofillPaymentMethodsFragment.class.getName());
} }
@CalledByNative @CalledByNative
......
...@@ -9,17 +9,14 @@ import android.preference.Preference; ...@@ -9,17 +9,14 @@ import android.preference.Preference;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import org.chromium.chrome.R; 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;
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.ChromeBasePreference;
import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegate; import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegate;
import org.chromium.chrome.browser.preferences.PreferenceUtils; import org.chromium.chrome.browser.preferences.PreferenceUtils;
/** /**
* Autofill and payments settings fragment, which allows the user to edit autofill and credit card * 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 class AutofillAndPaymentsPreferences extends PreferenceFragment {
public static final String AUTOFILL_GUID = "guid"; public static final String AUTOFILL_GUID = "guid";
...@@ -29,7 +26,6 @@ public class AutofillAndPaymentsPreferences extends PreferenceFragment { ...@@ -29,7 +26,6 @@ public class AutofillAndPaymentsPreferences extends PreferenceFragment {
public static final String SETTINGS_ORIGIN = "Chrome settings"; public static final String SETTINGS_ORIGIN = "Chrome settings";
private static final String AUTOFILL_ADDRESSES = "autofill_addresses"; private static final String AUTOFILL_ADDRESSES = "autofill_addresses";
private static final String AUTOFILL_PAYMENT_METHODS = "autofill_payment_methods"; private static final String AUTOFILL_PAYMENT_METHODS = "autofill_payment_methods";
private static final String PREF_PAYMENT_APPS = "payment_apps";
private final ManagedPreferenceDelegate mManagedPreferenceDelegate; private final ManagedPreferenceDelegate mManagedPreferenceDelegate;
...@@ -43,16 +39,6 @@ public class AutofillAndPaymentsPreferences extends PreferenceFragment { ...@@ -43,16 +39,6 @@ public class AutofillAndPaymentsPreferences extends PreferenceFragment {
PreferenceUtils.addPreferencesFromResource(this, R.xml.autofill_and_payments_preferences); PreferenceUtils.addPreferencesFromResource(this, R.xml.autofill_and_payments_preferences);
getActivity().setTitle(R.string.prefs_autofill_and_payments); 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)) ((ChromeBasePreference) findPreference(AUTOFILL_ADDRESSES))
.setManagedPreferenceDelegate(mManagedPreferenceDelegate); .setManagedPreferenceDelegate(mManagedPreferenceDelegate);
((ChromeBasePreference) findPreference(AUTOFILL_PAYMENT_METHODS)) ((ChromeBasePreference) findPreference(AUTOFILL_PAYMENT_METHODS))
...@@ -62,38 +48,6 @@ public class AutofillAndPaymentsPreferences extends PreferenceFragment { ...@@ -62,38 +48,6 @@ public class AutofillAndPaymentsPreferences extends PreferenceFragment {
@Override @Override
public void onResume() { public void onResume() {
super.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() { ManagedPreferenceDelegate getManagedPreferenceDelegateForTest() {
...@@ -119,6 +73,8 @@ public class AutofillAndPaymentsPreferences extends PreferenceFragment { ...@@ -119,6 +73,8 @@ public class AutofillAndPaymentsPreferences extends PreferenceFragment {
return PersonalDataManager.isAutofillProfileManaged() return PersonalDataManager.isAutofillProfileManaged()
&& !PersonalDataManager.isAutofillProfileEnabled(); && !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())) { if (AUTOFILL_PAYMENT_METHODS.equals(preference.getKey())) {
return PersonalDataManager.isAutofillCreditCardManaged() return PersonalDataManager.isAutofillCreditCardManaged()
&& !PersonalDataManager.isAutofillCreditCardEnabled(); && !PersonalDataManager.isAutofillCreditCardEnabled();
......
...@@ -14,19 +14,25 @@ import android.support.v7.content.res.AppCompatResources; ...@@ -14,19 +14,25 @@ import android.support.v7.content.res.AppCompatResources;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R; 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;
import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard; 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.ChromeSwitchPreference;
import org.chromium.chrome.browser.preferences.PreferenceUtils; import org.chromium.chrome.browser.preferences.PreferenceUtils;
/** /**
* Autofill credit cards fragment, which allows the user to edit credit cards. * Autofill credit cards fragment, which allows the user to edit credit cards and control
* payment apps.
*/ */
public class AutofillCreditCardsFragment public class AutofillPaymentMethodsFragment
extends PreferenceFragment implements PersonalDataManager.PersonalDataManagerObserver { extends PreferenceFragment implements PersonalDataManager.PersonalDataManagerObserver {
private static final String PREF_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL = private static final String PREF_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL =
"autofill_enable_credit_cards_toggle_label"; "autofill_enable_credit_cards_toggle_label";
private static final String PREF_PAYMENT_APPS = "payment_apps";
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -41,10 +47,10 @@ public class AutofillCreditCardsFragment ...@@ -41,10 +47,10 @@ public class AutofillCreditCardsFragment
// Always rebuild our list of credit cards. Although we could detect if credit cards are // 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 // added or deleted, the credit card summary (number) might be different. To be safe, we
// update all. // update all.
rebuildCreditCardList(); rebuildPage();
} }
private void rebuildCreditCardList() { private void rebuildPage() {
getPreferenceScreen().removeAll(); getPreferenceScreen().removeAll();
getPreferenceScreen().setOrderingAsAdded(true); getPreferenceScreen().setOrderingAsAdded(true);
...@@ -65,42 +71,82 @@ public class AutofillCreditCardsFragment ...@@ -65,42 +71,82 @@ public class AutofillCreditCardsFragment
for (CreditCard card : PersonalDataManager.getInstance().getCreditCardsForSettings()) { for (CreditCard card : PersonalDataManager.getInstance().getCreditCardsForSettings()) {
// Add a preference for the credit card. // Add a preference for the credit card.
Preference pref = new Preference(getActivity()); Preference card_pref = new Preference(getActivity());
pref.setTitle(card.getObfuscatedNumber()); card_pref.setTitle(card.getObfuscatedNumber());
pref.setSummary(card.getFormattedExpirationDate(getActivity())); card_pref.setSummary(card.getFormattedExpirationDate(getActivity()));
pref.setIcon( card_pref.setIcon(
AppCompatResources.getDrawable(getActivity(), card.getIssuerIconDrawableId())); AppCompatResources.getDrawable(getActivity(), card.getIssuerIconDrawableId()));
if (card.getIsLocal()) { if (card.getIsLocal()) {
pref.setFragment(AutofillLocalCardEditor.class.getName()); card_pref.setFragment(AutofillLocalCardEditor.class.getName());
} else { } else {
pref.setFragment(AutofillServerCardEditor.class.getName()); card_pref.setFragment(AutofillServerCardEditor.class.getName());
pref.setWidgetLayoutResource(R.layout.autofill_server_data_label); card_pref.setWidgetLayoutResource(R.layout.autofill_server_data_label);
} }
Bundle args = pref.getExtras(); Bundle args = card_pref.getExtras();
args.putString(AutofillAndPaymentsPreferences.AUTOFILL_GUID, card.getGUID()); args.putString(AutofillAndPaymentsPreferences.AUTOFILL_GUID, card.getGUID());
getPreferenceScreen().addPreference(pref); getPreferenceScreen().addPreference(card_pref);
} }
// Add 'Add credit card' button. Tap of it brings up card editor which allows users type in // Add 'Add credit card' button. Tap of it brings up card editor which allows users type in
// new credit cards. // new credit cards.
Preference pref = new Preference(getActivity()); Preference add_card_pref = new Preference(getActivity());
Drawable plusIcon = ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.plus); Drawable plusIcon = ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.plus);
plusIcon.mutate(); plusIcon.mutate();
plusIcon.setColorFilter( plusIcon.setColorFilter(
ApiCompatibilityUtils.getColor(getResources(), R.color.pref_accent_color), ApiCompatibilityUtils.getColor(getResources(), R.color.pref_accent_color),
PorterDuff.Mode.SRC_IN); PorterDuff.Mode.SRC_IN);
pref.setIcon(plusIcon); add_card_pref.setIcon(plusIcon);
pref.setTitle(R.string.autofill_create_credit_card); add_card_pref.setTitle(R.string.autofill_create_credit_card);
pref.setFragment(AutofillLocalCardEditor.class.getName()); add_card_pref.setFragment(AutofillLocalCardEditor.class.getName());
pref.setEnabled(PersonalDataManager.isAutofillCreditCardEnabled()); add_card_pref.setEnabled(PersonalDataManager.isAutofillCreditCardEnabled());
getPreferenceScreen().addPreference(pref); 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 @Override
public void onPersonalDataChanged() { public void onPersonalDataChanged() {
rebuildCreditCardList(); rebuildPage();
} }
@Override @Override
......
...@@ -1172,7 +1172,7 @@ chrome_java_sources = [ ...@@ -1172,7 +1172,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/preferences/autofill/AndroidPaymentAppPreference.java", "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/AndroidPaymentAppsFragment.java",
"java/src/org/chromium/chrome/browser/preferences/autofill/AutofillAndPaymentsPreferences.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/AutofillCreditCardEditor.java",
"java/src/org/chromium/chrome/browser/preferences/autofill/AutofillEditorBase.java", "java/src/org/chromium/chrome/browser/preferences/autofill/AutofillEditorBase.java",
"java/src/org/chromium/chrome/browser/preferences/autofill/AutofillLocalCardEditor.java", "java/src/org/chromium/chrome/browser/preferences/autofill/AutofillLocalCardEditor.java",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment