Skip to content
This repository has been archived by the owner on Nov 1, 2022. It is now read-only.

Commit

Permalink
For #12257 - Add LoginDelegate and CreditCardDelegate to replace Prom…
Browse files Browse the repository at this point in the history
…ptFeature parameters
  • Loading branch information
Alexandru2909 authored and mergify[bot] committed Jun 15, 2022
1 parent a76c3fc commit bae083e
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,12 @@ import mozilla.components.concept.engine.prompt.PromptRequest.TextPrompt
import mozilla.components.concept.engine.prompt.PromptRequest.TimeSelection
import mozilla.components.concept.storage.CreditCardEntry
import mozilla.components.concept.storage.CreditCardValidationDelegate
import mozilla.components.concept.storage.Login
import mozilla.components.concept.storage.LoginEntry
import mozilla.components.concept.storage.LoginValidationDelegate
import mozilla.components.feature.prompts.address.AddressDelegate
import mozilla.components.feature.prompts.address.AddressPicker
import mozilla.components.feature.prompts.address.DefaultAddressDelegate
import mozilla.components.feature.prompts.concept.SelectablePromptView
import mozilla.components.feature.prompts.creditcard.CreditCardDelegate
import mozilla.components.feature.prompts.creditcard.CreditCardPicker
import mozilla.components.feature.prompts.creditcard.CreditCardSaveDialogFragment
import mozilla.components.feature.prompts.dialog.AlertDialogFragment
Expand All @@ -70,6 +69,7 @@ import mozilla.components.feature.prompts.dialog.TimePickerDialogFragment
import mozilla.components.feature.prompts.facts.emitSuccessfulAddressAutofillFormDetectedFact
import mozilla.components.feature.prompts.facts.emitSuccessfulCreditCardAutofillFormDetectedFact
import mozilla.components.feature.prompts.file.FilePicker
import mozilla.components.feature.prompts.login.LoginDelegate
import mozilla.components.feature.prompts.login.LoginExceptions
import mozilla.components.feature.prompts.login.LoginPicker
import mozilla.components.feature.prompts.share.DefaultShareDelegate
Expand Down Expand Up @@ -126,16 +126,8 @@ internal const val FRAGMENT_TAG = "mozac_feature_prompt_dialog"
* will be shown.
* @property loginExceptionStorage An implementation of [LoginExceptions] that saves and checks origins
* the user does not want to see a save login dialog for.
* @property loginPickerView The [SelectablePromptView] used for [LoginPicker] to display a
* selectable prompt list of login options.
* @property onManageLogins A callback invoked when a user selects "manage logins" from the
* select login prompt.
* @property creditCardPickerView The [SelectablePromptView] used for [CreditCardPicker] to display
* a selectable prompt list of credit card options.
* @property onManageCreditCards A callback invoked when a user selects "Manage credit cards" from
* the select credit card prompt.
* @property onSelectCreditCard A callback invoked when a user selects a credit card from the
* select credit card prompt.
* @property loginDelegate Delegate for login picker.
* @property creditCardDelegate Delegate for credit card picker.
* @property addressDelegate Delegate for address picker.
* @property onNeedToRequestPermissions A callback invoked when permissions
* need to be requested before a prompt (e.g. a file picker) can be displayed.
Expand All @@ -154,11 +146,8 @@ class PromptFeature private constructor(
private val isCreditCardAutofillEnabled: () -> Boolean = { false },
private val isAddressAutofillEnabled: () -> Boolean = { false },
override val loginExceptionStorage: LoginExceptions? = null,
private val loginPickerView: SelectablePromptView<Login>? = null,
private val onManageLogins: () -> Unit = {},
private val creditCardPickerView: SelectablePromptView<CreditCardEntry>? = null,
private val onManageCreditCards: () -> Unit = {},
private val onSelectCreditCard: () -> Unit = {},
private val loginDelegate: LoginDelegate = object : LoginDelegate {},
private val creditCardDelegate: CreditCardDelegate = object : CreditCardDelegate {},
private val addressDelegate: AddressDelegate = DefaultAddressDelegate(),
onNeedToRequestPermissions: OnNeedToRequestPermissions
) : LifecycleAwareFeature,
Expand Down Expand Up @@ -195,11 +184,8 @@ class PromptFeature private constructor(
isCreditCardAutofillEnabled: () -> Boolean = { false },
isAddressAutofillEnabled: () -> Boolean = { false },
loginExceptionStorage: LoginExceptions? = null,
loginPickerView: SelectablePromptView<Login>? = null,
onManageLogins: () -> Unit = {},
creditCardPickerView: SelectablePromptView<CreditCardEntry>? = null,
onManageCreditCards: () -> Unit = {},
onSelectCreditCard: () -> Unit = {},
loginDelegate: LoginDelegate = object : LoginDelegate {},
creditCardDelegate: CreditCardDelegate = object : CreditCardDelegate {},
addressDelegate: AddressDelegate = DefaultAddressDelegate(),
onNeedToRequestPermissions: OnNeedToRequestPermissions
) : this(
Expand All @@ -215,11 +201,8 @@ class PromptFeature private constructor(
isAddressAutofillEnabled = isAddressAutofillEnabled,
loginExceptionStorage = loginExceptionStorage,
onNeedToRequestPermissions = onNeedToRequestPermissions,
loginPickerView = loginPickerView,
onManageLogins = onManageLogins,
creditCardPickerView = creditCardPickerView,
onManageCreditCards = onManageCreditCards,
onSelectCreditCard = onSelectCreditCard,
loginDelegate = loginDelegate,
creditCardDelegate = creditCardDelegate,
addressDelegate = addressDelegate
)

Expand All @@ -235,11 +218,8 @@ class PromptFeature private constructor(
isCreditCardAutofillEnabled: () -> Boolean = { false },
isAddressAutofillEnabled: () -> Boolean = { false },
loginExceptionStorage: LoginExceptions? = null,
loginPickerView: SelectablePromptView<Login>? = null,
onManageLogins: () -> Unit = {},
creditCardPickerView: SelectablePromptView<CreditCardEntry>? = null,
onManageCreditCards: () -> Unit = {},
onSelectCreditCard: () -> Unit = {},
loginDelegate: LoginDelegate = object : LoginDelegate {},
creditCardDelegate: CreditCardDelegate = object : CreditCardDelegate {},
addressDelegate: AddressDelegate = DefaultAddressDelegate(),
onNeedToRequestPermissions: OnNeedToRequestPermissions
) : this(
Expand All @@ -255,30 +235,33 @@ class PromptFeature private constructor(
isAddressAutofillEnabled = isAddressAutofillEnabled,
loginExceptionStorage = loginExceptionStorage,
onNeedToRequestPermissions = onNeedToRequestPermissions,
loginPickerView = loginPickerView,
onManageLogins = onManageLogins,
creditCardPickerView = creditCardPickerView,
onManageCreditCards = onManageCreditCards,
onSelectCreditCard = onSelectCreditCard,
loginDelegate = loginDelegate,
creditCardDelegate = creditCardDelegate,
addressDelegate = addressDelegate
)

private val filePicker = FilePicker(container, store, customTabId, onNeedToRequestPermissions)

@VisibleForTesting(otherwise = PRIVATE)
internal var loginPicker =
loginPickerView?.let { LoginPicker(store, it, onManageLogins, customTabId) }
with(loginDelegate) {
loginPickerView?.let {
LoginPicker(store, it, onManageLogins, customTabId)
}
}

@VisibleForTesting(otherwise = PRIVATE)
internal var creditCardPicker =
creditCardPickerView?.let {
CreditCardPicker(
store = store,
creditCardSelectBar = it,
manageCreditCardsCallback = onManageCreditCards,
selectCreditCardCallback = onSelectCreditCard,
sessionId = customTabId
)
with(creditCardDelegate) {
creditCardPickerView?.let {
CreditCardPicker(
store = store,
creditCardSelectBar = it,
manageCreditCardsCallback = onManageCreditCards,
selectCreditCardCallback = onSelectCreditCard,
sessionId = customTabId
)
}
}

@VisibleForTesting(otherwise = PRIVATE)
Expand Down Expand Up @@ -922,7 +905,7 @@ class PromptFeature private constructor(

(activePromptRequest as? SelectLoginPrompt)?.let { selectLoginPrompt ->
loginPicker?.let { loginPicker ->
if (loginPickerView?.asView()?.isVisible == true) {
if (loginDelegate.loginPickerView?.asView()?.isVisible == true) {
loginPicker.dismissCurrentLoginSelect(selectLoginPrompt)
result = true
}
Expand All @@ -931,7 +914,7 @@ class PromptFeature private constructor(

(activePromptRequest as? SelectCreditCard)?.let { selectCreditCardPrompt ->
creditCardPicker?.let { creditCardPicker ->
if (creditCardPickerView?.asView()?.isVisible == true) {
if (creditCardDelegate.creditCardPickerView?.asView()?.isVisible == true) {
creditCardPicker.dismissSelectCreditCardRequest(selectCreditCardPrompt)
result = true
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

package mozilla.components.feature.prompts.creditcard

import mozilla.components.concept.storage.CreditCardEntry
import mozilla.components.feature.prompts.concept.SelectablePromptView

/**
* Delegate for credit card picker and related callbacks
*/
interface CreditCardDelegate {
/**
* The [SelectablePromptView] used for [CreditCardPicker] to display a
* selectable prompt list of credit cards.
*/
val creditCardPickerView: SelectablePromptView<CreditCardEntry>?
get() = null

/**
* Callback invoked when a user selects "Manage credit cards"
* from the select credit card prompt.
*/
val onManageCreditCards: () -> Unit
get() = {}

/**
* Callback invoked when a user selects a credit card option
* from the select credit card prompt
*/
val onSelectCreditCard: () -> Unit
get() = {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

package mozilla.components.feature.prompts.login

import mozilla.components.concept.storage.Login
import mozilla.components.feature.prompts.concept.SelectablePromptView

/**
* Delegate to display the login select prompt and related callbacks
*/
interface LoginDelegate {
/**
* The [SelectablePromptView] used for [LoginPicker] to display a
* selectable prompt list of logins.
*/
val loginPickerView: SelectablePromptView<Login>?
get() = null

/**
* Callback invoked when a user selects "Manage logins"
* from the select login prompt.
*/
val onManageLogins: () -> Unit
get() = {}
}
Loading

0 comments on commit bae083e

Please sign in to comment.