diff --git a/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt index 5f716afd9095..964324f62c36 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt @@ -8,6 +8,7 @@ import android.os.Bundle import android.view.View import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs import mozilla.components.support.ktx.android.view.hideKeyboard import org.mozilla.fenix.R import org.mozilla.fenix.SecureFragment @@ -26,6 +27,13 @@ class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) { private lateinit var addressEditorView: AddressEditorView private lateinit var interactor: AddressEditorInteractor + private val args by navArgs() + + /** + * Returns true if an existing address is being edited, and false otherwise. + */ + private val isEditing: Boolean + get() = args.address != null override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -42,13 +50,17 @@ class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) { val binding = FragmentAddressEditorBinding.bind(view) - addressEditorView = AddressEditorView(binding, interactor) + addressEditorView = AddressEditorView(binding, interactor, args.address) addressEditorView.bind() } override fun onResume() { super.onResume() - showToolbar(getString(R.string.addresses_add_address)) + if (isEditing) { + showToolbar(getString(R.string.addresses_edit_address)) + } else { + showToolbar(getString(R.string.addresses_add_address)) + } } override fun onStop() { 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 2e69e49c4b42..f7fe27223c96 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 @@ -28,6 +28,11 @@ interface AddressEditorController { * @see [AddressEditorInteractor.onSaveAddress] */ fun handleSaveAddress(addressFields: UpdatableAddressFields) + + /** + * @see [AddressEditorInteractor.onUpdateAddress] + */ + fun handleUpdateAddress(guid: String, addressFields: UpdatableAddressFields) } /** @@ -57,4 +62,14 @@ class DefaultAddressEditorController( } } } + + override fun handleUpdateAddress(guid: String, addressFields: UpdatableAddressFields) { + lifecycleScope.launch { + storage.updateAddress(guid, addressFields) + + lifecycleScope.launch(Dispatchers.Main) { + navController.popBackStack() + } + } + } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/address/controller/AddressManagementController.kt b/app/src/main/java/org/mozilla/fenix/settings/address/controller/AddressManagementController.kt index b7ef02c40d20..cbf87b532faa 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/address/controller/AddressManagementController.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/address/controller/AddressManagementController.kt @@ -37,17 +37,19 @@ class DefaultAddressManagementController( ) : AddressManagementController { override fun handleAddressClicked(address: Address) { - navigateToAddressEditor() + navigateToAddressEditor(address) } override fun handleAddAddressButtonClicked() { navigateToAddressEditor() } - private fun navigateToAddressEditor() { + private fun navigateToAddressEditor(address: Address? = null) { navController.navigate( AddressManagementFragmentDirections - .actionAddressManagementFragmentToAddressEditorFragment() + .actionAddressManagementFragmentToAddressEditorFragment( + address = address + ) ) } } 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 17c30ea95b8b..942c0c72d338 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 @@ -25,6 +25,14 @@ interface AddressEditorInteractor { * @param addressFields A [UpdatableAddressFields] record to add. */ fun onSaveAddress(addressFields: UpdatableAddressFields) + + /** + * Updates the provided address in the autofill storage. Called when a user + * taps on the update menu item or "Update" button. + * + * @param addressFields A [UpdatableAddressFields] record to add. + */ + fun onUpdateAddress(guid: String, addressFields: UpdatableAddressFields) } /** @@ -44,4 +52,8 @@ class DefaultAddressEditorInteractor( override fun onSaveAddress(addressFields: UpdatableAddressFields) { controller.handleSaveAddress(addressFields) } + + 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 fe2363b4f73f..d24d7af24953 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 @@ -4,9 +4,15 @@ package org.mozilla.fenix.settings.address.view +import android.content.Context +import android.content.DialogInterface +import androidx.appcompat.app.AlertDialog +import androidx.core.view.isVisible +import mozilla.components.concept.storage.Address import mozilla.components.concept.storage.UpdatableAddressFields import mozilla.components.support.ktx.android.view.hideKeyboard import mozilla.components.support.ktx.android.view.showKeyboard +import org.mozilla.fenix.R import org.mozilla.fenix.databinding.FragmentAddressEditorBinding import org.mozilla.fenix.ext.placeCursorAtEnd import org.mozilla.fenix.settings.address.interactor.AddressEditorInteractor @@ -16,7 +22,8 @@ import org.mozilla.fenix.settings.address.interactor.AddressEditorInteractor */ class AddressEditorView( private val binding: FragmentAddressEditorBinding, - private val interactor: AddressEditorInteractor + private val interactor: AddressEditorInteractor, + private val address: Address? = null ) { /** @@ -36,26 +43,36 @@ class AddressEditorView( binding.saveButton.setOnClickListener { saveAddress() } + + address?.let { address -> + binding.emailInput.setText(address.email) + binding.phoneInput.setText(address.tel) + binding.fullNameInput.setText(address.givenName) + } } internal fun saveAddress() { binding.root.hideKeyboard() - interactor.onSaveAddress( - UpdatableAddressFields( - givenName = binding.firstNameInput.text.toString(), - additionalName = binding.middleNameInput.text.toString(), - familyName = binding.lastNameInput.text.toString(), - organization = "", - streetAddress = binding.streetAddressInput.text.toString(), - addressLevel3 = "", - addressLevel2 = "", - addressLevel1 = "", - postalCode = binding.zipInput.text.toString(), - country = "", - tel = binding.phoneInput.text.toString(), - email = binding.emailInput.text.toString() - ) + val addressFields = UpdatableAddressFields( + givenName = binding.firstNameInput.text.toString(), + additionalName = binding.middleNameInput.text.toString(), + familyName = binding.lastNameInput.text.toString(), + organization = "", + streetAddress = binding.streetAddressInput.text.toString(), + addressLevel3 = "", + addressLevel2 = "", + addressLevel1 = "", + postalCode = binding.zipInput.text.toString(), + country = "", + tel = binding.phoneInput.text.toString(), + email = binding.emailInput.text.toString() ) + + if (address != null) { + interactor.onUpdateAddress(address.guid, addressFields) + } else { + interactor.onSaveAddress(addressFields) + } } } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index c594faa2b685..cee405acc40e 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -1258,7 +1258,13 @@ + android:label="@string/addresses_add_address" > + +