diff --git a/app/src/main/java/org/mozilla/fenix/settings/address/controller/AddressEditorController.kt b/app/src/main/java/org/mozilla/fenix/settings/address/controller/AddressEditorController.kt
index f7fe27223c96..3000ed0da420 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/address/controller/AddressEditorController.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/address/controller/AddressEditorController.kt
@@ -8,6 +8,7 @@ import androidx.navigation.NavController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
+import mozilla.components.concept.storage.Address
import mozilla.components.concept.storage.UpdatableAddressFields
import mozilla.components.service.sync.autofill.AutofillCreditCardsAddressesStorage
import org.mozilla.fenix.settings.address.AddressEditorFragment
@@ -29,6 +30,11 @@ interface AddressEditorController {
*/
fun handleSaveAddress(addressFields: UpdatableAddressFields)
+ /**
+ * @see [AddressEditorInteractor.onDeleteAddress]
+ */
+ fun handleDeleteAddress(address: Address)
+
/**
* @see [AddressEditorInteractor.onUpdateAddress]
*/
@@ -63,6 +69,15 @@ class DefaultAddressEditorController(
}
}
+ override fun handleDeleteAddress(address: Address) {
+ lifecycleScope.launch {
+ storage.deleteAddress(address.guid)
+ lifecycleScope.launch(Dispatchers.Main) {
+ navController.popBackStack()
+ }
+ }
+ }
+
override fun handleUpdateAddress(guid: String, addressFields: UpdatableAddressFields) {
lifecycleScope.launch {
storage.updateAddress(guid, addressFields)
diff --git a/app/src/main/java/org/mozilla/fenix/settings/address/interactor/AddressEditorInteractor.kt b/app/src/main/java/org/mozilla/fenix/settings/address/interactor/AddressEditorInteractor.kt
index 942c0c72d338..c5ed2c1e40f5 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/address/interactor/AddressEditorInteractor.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/address/interactor/AddressEditorInteractor.kt
@@ -4,6 +4,7 @@
package org.mozilla.fenix.settings.address.interactor
+import mozilla.components.concept.storage.Address
import mozilla.components.concept.storage.UpdatableAddressFields
import org.mozilla.fenix.settings.address.controller.AddressEditorController
@@ -26,6 +27,14 @@ interface AddressEditorInteractor {
*/
fun onSaveAddress(addressFields: UpdatableAddressFields)
+ /**
+ * Deletes the provided address from the autofill storage. Called when a user
+ * taps on the save menu item or "Save" button.
+ *
+ * @param address An [Address] record to delete.
+ */
+ fun onDeleteAddress(address: Address)
+
/**
* Updates the provided address in the autofill storage. Called when a user
* taps on the update menu item or "Update" button.
@@ -53,6 +62,10 @@ class DefaultAddressEditorInteractor(
controller.handleSaveAddress(addressFields)
}
+ override fun onDeleteAddress(address: Address) {
+ controller.handleDeleteAddress(address)
+ }
+
override fun onUpdateAddress(guid: String, addressFields: UpdatableAddressFields) {
controller.handleUpdateAddress(guid, addressFields)
}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/address/view/AddressEditorView.kt b/app/src/main/java/org/mozilla/fenix/settings/address/view/AddressEditorView.kt
index 05815472a905..56373c3ff6ca 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/address/view/AddressEditorView.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/address/view/AddressEditorView.kt
@@ -51,6 +51,13 @@ class AddressEditorView(
binding.emailInput.setText(address.email)
binding.phoneInput.setText(address.tel)
binding.fullNameInput.setText(address.givenName)
+
+ binding.deleteButton.apply {
+ isVisible = true
+ setOnClickListener { view ->
+ showConfirmDeleteAddressDialog(view.context, address)
+ }
+ }
}
}
@@ -81,11 +88,11 @@ class AddressEditorView(
private fun showConfirmDeleteAddressDialog(context: Context, address: Address) {
AlertDialog.Builder(context).apply {
- setMessage("Confirm delete")
- setNegativeButton(R.string.delete_browsing_data_prompt_cancel) { dialog: DialogInterface, _ ->
+ setMessage(R.string.addressess_confirm_dialog_message)
+ setNegativeButton(R.string.addressess_confirm_dialog_cancel_button) { dialog: DialogInterface, _ ->
dialog.cancel()
}
- setPositiveButton(R.string.qr_scanner_dialog_invalid_ok) { _, _ ->
+ setPositiveButton(R.string.addressess_confirm_dialog_ok_button) { _, _ ->
interactor.onDeleteAddress(address)
}
create()
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index dc6ebe8a1496..8d7436662dfb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1592,6 +1592,12 @@
Delete address
Update
+
+ Are you sure you want to delete this address?
+
+ Delete
+
+ Cancel
Add search engine