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() }
+ }
}