From 0a226962bbd74b61f35c0892415f264f37b0e67e Mon Sep 17 00:00:00 2001 From: Ionut Cristian Bedregeanu Date: Tue, 25 May 2021 15:09:46 +0300 Subject: [PATCH] For #18881 - Create a new layout for 'Add credit card' button Add functionality for 'Add credit card' button Add unit tests for 'Add credit card' functionality --- .../CreditCardsManagementController.kt | 13 +++++++ .../CreditCardsManagementInteractor.kt | 10 ++++++ .../view/CreditCardsManagementView.kt | 2 ++ .../res/layout/component_credit_cards.xml | 24 ++++++++++--- .../res/layout/layout_add_credit_card.xml | 36 +++++++++++++++++++ ...aultCreditCardsManagementControllerTest.kt | 11 ++++++ ...aultCreditCardsManagementInteractorTest.kt | 6 ++++ 7 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/layout/layout_add_credit_card.xml diff --git a/app/src/main/java/org/mozilla/fenix/settings/creditcards/controller/CreditCardsManagementController.kt b/app/src/main/java/org/mozilla/fenix/settings/creditcards/controller/CreditCardsManagementController.kt index bcc0906a0..17bd3d046 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/creditcards/controller/CreditCardsManagementController.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/creditcards/controller/CreditCardsManagementController.kt @@ -21,6 +21,11 @@ interface CreditCardsManagementController { * @see [CreditCardsManagementInteractor.onSelectCreditCard] */ fun handleCreditCardClicked(creditCard: CreditCard) + + /** + * @see [CreditCardsManagementInteractor.onClickAddCreditCard] + */ + fun handleAddCreditCard() } /** @@ -31,6 +36,14 @@ class DefaultCreditCardsManagementController( ) : CreditCardsManagementController { override fun handleCreditCardClicked(creditCard: CreditCard) { + navigateToCreditCardEditor(creditCard) + } + + override fun handleAddCreditCard() { + navigateToCreditCardEditor() + } + + private fun navigateToCreditCardEditor(creditCard: CreditCard? = null) { navController.navigateBlockingForAsyncNavGraph( CreditCardsManagementFragmentDirections .actionCreditCardsManagementFragmentToCreditCardEditorFragment( diff --git a/app/src/main/java/org/mozilla/fenix/settings/creditcards/interactor/CreditCardsManagementInteractor.kt b/app/src/main/java/org/mozilla/fenix/settings/creditcards/interactor/CreditCardsManagementInteractor.kt index 251d9de8c..41f24d4b3 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/creditcards/interactor/CreditCardsManagementInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/creditcards/interactor/CreditCardsManagementInteractor.kt @@ -19,6 +19,12 @@ interface CreditCardsManagementInteractor { * @param creditCard The selected [CreditCard] to edit. */ fun onSelectCreditCard(creditCard: CreditCard) + + /** + * Navigates to the credit card editor to add a new credit card. Called when a user + * taps on 'Add credit card' button. + */ + fun onClickAddCreditCard() } /** @@ -34,4 +40,8 @@ class DefaultCreditCardsManagementInteractor( override fun onSelectCreditCard(creditCard: CreditCard) { controller.handleCreditCardClicked(creditCard) } + + override fun onClickAddCreditCard() { + controller.handleAddCreditCard() + } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/creditcards/view/CreditCardsManagementView.kt b/app/src/main/java/org/mozilla/fenix/settings/creditcards/view/CreditCardsManagementView.kt index 8bc175076..c219ca690 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/creditcards/view/CreditCardsManagementView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/creditcards/view/CreditCardsManagementView.kt @@ -31,6 +31,8 @@ class CreditCardsManagementView( adapter = creditCardsAdapter layoutManager = LinearLayoutManager(containerView.context) } + + add_credit_card_button.setOnClickListener { interactor.onClickAddCreditCard() } } /** diff --git a/app/src/main/res/layout/component_credit_cards.xml b/app/src/main/res/layout/component_credit_cards.xml index 34471f4b5..0e791b496 100644 --- a/app/src/main/res/layout/component_credit_cards.xml +++ b/app/src/main/res/layout/component_credit_cards.xml @@ -2,12 +2,12 @@ - + android:layout_height="wrap_content"> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> + app:layout_constrainedHeight="true" + tools:listitem="@layout/credit_card_list_item" + app:layout_constraintTop_toBottomOf="@id/progress_bar" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintBottom_toTopOf="@id/add_credit_card_button"/> - + + + diff --git a/app/src/main/res/layout/layout_add_credit_card.xml b/app/src/main/res/layout/layout_add_credit_card.xml new file mode 100644 index 000000000..ecf271d03 --- /dev/null +++ b/app/src/main/res/layout/layout_add_credit_card.xml @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementControllerTest.kt index 6ca354e4e..f788e26fb 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementControllerTest.kt @@ -61,4 +61,15 @@ class DefaultCreditCardsManagementControllerTest { ) } } + + @Test + fun handleAddCreditCardClicked() { + controller.handleAddCreditCard() + + verify { + navController.navigate( + CreditCardsManagementFragmentDirections.actionCreditCardsManagementFragmentToCreditCardEditorFragment() + ) + } + } } diff --git a/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementInteractorTest.kt index c6883f7f0..4b344a901 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementInteractorTest.kt @@ -29,4 +29,10 @@ class DefaultCreditCardsManagementInteractorTest { interactor.onSelectCreditCard(creditCard) verify { controller.handleCreditCardClicked(creditCard) } } + + @Test + fun onClickAddCreditCard() { + interactor.onClickAddCreditCard() + verify { controller.handleAddCreditCard() } + } }