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