From bd8facb02525c801bdf6181387a098ae65ec8d6f Mon Sep 17 00:00:00 2001 From: Mugurell Date: Tue, 25 May 2021 18:55:05 +0300 Subject: [PATCH] For #18263 - Allow dynamically toggling credit cards autofill --- .../org/mozilla/fenix/browser/BaseBrowserFragment.kt | 3 +++ .../java/org/mozilla/fenix/gecko/GeckoProvider.kt | 5 ++++- .../creditcards/CreditCardsSettingFragment.kt | 8 ++++++++ app/src/main/java/org/mozilla/fenix/utils/Settings.kt | 11 +++++++++++ buildSrc/src/main/java/AndroidComponents.kt | 2 +- 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index 7d97b2167..9a363167a 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -545,6 +545,9 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit isSaveLoginEnabled = { context.settings().shouldPromptToSaveLogins }, + isCreditCardAutofillEnabled = { + context.settings().shouldAutofillCreditCardDetails + }, loginExceptionStorage = context.components.core.loginExceptionStorage, shareDelegate = object : ShareDelegate { override fun showShareSheet( diff --git a/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt b/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt index ef3a1f711..efec1dc26 100644 --- a/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt +++ b/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt @@ -16,6 +16,7 @@ import mozilla.components.service.sync.autofill.GeckoCreditCardsAddressesStorage import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate import org.mozilla.fenix.Config import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.settings import org.mozilla.geckoview.ContentBlocking import org.mozilla.geckoview.ContentBlocking.SafeBrowsingProvider import org.mozilla.geckoview.GeckoRuntime @@ -91,7 +92,9 @@ object GeckoProvider { val geckoRuntime = GeckoRuntime.create(context, runtimeSettings) geckoRuntime.autocompleteStorageDelegate = GeckoAutocompleteStorageDelegate( - GeckoCreditCardsAddressesStorageDelegate(autofillStorage), + GeckoCreditCardsAddressesStorageDelegate(autofillStorage) { + context.settings().shouldAutofillCreditCardDetails + }, GeckoLoginStorageDelegate(loginStorage) ) diff --git a/app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardsSettingFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardsSettingFragment.kt index 63ea6ea3b..b1a85d243 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardsSettingFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardsSettingFragment.kt @@ -14,6 +14,7 @@ import androidx.navigation.NavController import androidx.navigation.fragment.findNavController import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import androidx.preference.SwitchPreference import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.launch @@ -23,7 +24,9 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.StoreProvider import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph import org.mozilla.fenix.ext.requireComponents +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar +import org.mozilla.fenix.settings.SharedPreferenceUpdater import org.mozilla.fenix.settings.SyncPreferenceView import org.mozilla.fenix.settings.requirePreference @@ -46,6 +49,11 @@ class CreditCardsSettingFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.credit_cards_preferences, rootKey) + + requirePreference(R.string.pref_key_credit_cards_save_and_autofill_cards).apply { + isChecked = context.settings().shouldAutofillCreditCardDetails + onPreferenceChangeListener = SharedPreferenceUpdater() + } } override fun onCreateView( diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index adc206736..5fd04cbc4 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -1061,4 +1061,15 @@ class Settings(private val appContext: Context) : PreferencesHolder { appContext.getPreferenceKey(R.string.pref_key_fxa_signed_in), default = false ) + + /** + * Storing the user choice from the "Credit cards" settings for whether save and autofill cards + * should be enabled or not. + * If set to `true` when the user focuses on credit card fields in the webpage an Android prompt letting her + * select the card details to be automatically filled will appear. + */ + var shouldAutofillCreditCardDetails by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_credit_cards_save_and_autofill_cards), + default = true + ) } diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 234cdb42f..66cfa38de 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "90.0.20210525143110" + const val VERSION = "90.0.20210526143122" }