Bug 1880075 - Use single name field for addresses

fenix/125.0
Issam Mani 4 months ago committed by mergify[bot]
parent cc83d5c472
commit e4af8643e1

@ -24,9 +24,7 @@ class AddressAutofillTest : TestSetup() {
var navigateToAutofillSettings = true var navigateToAutofillSettings = true
var isAddressAutofillEnabled = true var isAddressAutofillEnabled = true
var userHasSavedAddress = false var userHasSavedAddress = false
var firstName = "Mozilla" var name = "Mozilla Fenix Firefox"
var middleName = "Fenix"
var lastName = "Firefox"
var streetAddress = "Harrison Street" var streetAddress = "Harrison Street"
var city = "San Francisco" var city = "San Francisco"
var state = "Alaska" var state = "Alaska"
@ -38,9 +36,7 @@ class AddressAutofillTest : TestSetup() {
object SecondAddressAutofillDetails { object SecondAddressAutofillDetails {
var navigateToAutofillSettings = false var navigateToAutofillSettings = false
var firstName = "Android" var name = "Android Test Name"
var middleName = "Test"
var lastName = "Name"
var streetAddress = "Fort Street" var streetAddress = "Fort Street"
var city = "San Jose" var city = "San Jose"
var state = "Arizona" var state = "Arizona"
@ -65,9 +61,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,
@ -102,9 +96,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,
@ -145,9 +137,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,
@ -173,9 +163,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,
@ -219,9 +207,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,
@ -256,9 +242,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,
@ -271,9 +255,7 @@ class AddressAutofillTest : TestSetup() {
clickAddAddressButton() clickAddAddressButton()
fillAndSaveAddress( fillAndSaveAddress(
navigateToAutofillSettings = SecondAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = SecondAddressAutofillDetails.navigateToAutofillSettings,
firstName = SecondAddressAutofillDetails.firstName, name = SecondAddressAutofillDetails.name,
middleName = SecondAddressAutofillDetails.middleName,
lastName = SecondAddressAutofillDetails.lastName,
streetAddress = SecondAddressAutofillDetails.streetAddress, streetAddress = SecondAddressAutofillDetails.streetAddress,
city = SecondAddressAutofillDetails.city, city = SecondAddressAutofillDetails.city,
state = SecondAddressAutofillDetails.state, state = SecondAddressAutofillDetails.state,
@ -319,9 +301,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,
@ -334,9 +314,7 @@ class AddressAutofillTest : TestSetup() {
clickSavedAddress("Mozilla") clickSavedAddress("Mozilla")
fillAndSaveAddress( fillAndSaveAddress(
navigateToAutofillSettings = SecondAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = SecondAddressAutofillDetails.navigateToAutofillSettings,
firstName = SecondAddressAutofillDetails.firstName, name = SecondAddressAutofillDetails.name,
middleName = SecondAddressAutofillDetails.middleName,
lastName = SecondAddressAutofillDetails.lastName,
streetAddress = SecondAddressAutofillDetails.streetAddress, streetAddress = SecondAddressAutofillDetails.streetAddress,
city = SecondAddressAutofillDetails.city, city = SecondAddressAutofillDetails.city,
state = SecondAddressAutofillDetails.state, state = SecondAddressAutofillDetails.state,
@ -377,9 +355,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,
@ -416,9 +392,7 @@ class AddressAutofillTest : TestSetup() {
navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings, navigateToAutofillSettings = FirstAddressAutofillDetails.navigateToAutofillSettings,
isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled, isAddressAutofillEnabled = FirstAddressAutofillDetails.isAddressAutofillEnabled,
userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress, userHasSavedAddress = FirstAddressAutofillDetails.userHasSavedAddress,
firstName = FirstAddressAutofillDetails.firstName, name = FirstAddressAutofillDetails.name,
middleName = FirstAddressAutofillDetails.middleName,
lastName = FirstAddressAutofillDetails.lastName,
streetAddress = FirstAddressAutofillDetails.streetAddress, streetAddress = FirstAddressAutofillDetails.streetAddress,
city = FirstAddressAutofillDetails.city, city = FirstAddressAutofillDetails.city,
state = FirstAddressAutofillDetails.state, state = FirstAddressAutofillDetails.state,

@ -153,12 +153,10 @@ class SettingsSubMenuAutofillRobot {
addAddressToolbarTitle(), addAddressToolbarTitle(),
navigateBackButton(), navigateBackButton(),
toolbarCheckmarkButton(), toolbarCheckmarkButton(),
firstNameTextInput(), nameTextInput(),
middleNameTextInput(),
) )
scrollToElementByText(getStringResource(R.string.addresses_street_address)) scrollToElementByText(getStringResource(R.string.addresses_street_address))
assertUIObjectExists( assertUIObjectExists(
lastNameTextInput(),
streetAddressTextInput(), streetAddressTextInput(),
) )
scrollToElementByText(getStringResource(R.string.addresses_country)) scrollToElementByText(getStringResource(R.string.addresses_country))
@ -215,12 +213,10 @@ class SettingsSubMenuAutofillRobot {
navigateBackButton(), navigateBackButton(),
toolbarDeleteAddressButton(), toolbarDeleteAddressButton(),
toolbarCheckmarkButton(), toolbarCheckmarkButton(),
firstNameTextInput(), nameTextInput(),
middleNameTextInput(),
) )
scrollToElementByText(getStringResource(R.string.addresses_street_address)) scrollToElementByText(getStringResource(R.string.addresses_street_address))
assertUIObjectExists( assertUIObjectExists(
lastNameTextInput(),
streetAddressTextInput(), streetAddressTextInput(),
) )
scrollToElementByText(getStringResource(R.string.addresses_country)) scrollToElementByText(getStringResource(R.string.addresses_country))
@ -257,10 +253,10 @@ class SettingsSubMenuAutofillRobot {
manageAddressesButton().click() manageAddressesButton().click()
Log.i(TAG, "clickManageAddressesButton: Clicked the \"Manage addresses\" button") Log.i(TAG, "clickManageAddressesButton: Clicked the \"Manage addresses\" button")
} }
fun clickSavedAddress(firstName: String) { fun clickSavedAddress(name: String) {
Log.i(TAG, "clickSavedAddress: Trying to click the $firstName saved address and and wait for $waitingTime ms for a new window") Log.i(TAG, "clickSavedAddress: Trying to click the $name saved address and and wait for $waitingTime ms for a new window")
savedAddress(firstName).clickAndWaitForNewWindow(waitingTime) savedAddress(name).clickAndWaitForNewWindow(waitingTime)
Log.i(TAG, "clickSavedAddress: Clicked the $firstName saved address and and waited for $waitingTime ms for a new window") Log.i(TAG, "clickSavedAddress: Clicked the $name saved address and and waited for $waitingTime ms for a new window")
} }
fun clickDeleteAddressButton() { fun clickDeleteAddressButton() {
Log.i(TAG, "clickDeleteAddressButton: Waiting for $waitingTime ms for the delete address toolbar button to exist") Log.i(TAG, "clickDeleteAddressButton: Waiting for $waitingTime ms for the delete address toolbar button to exist")
@ -307,9 +303,7 @@ class SettingsSubMenuAutofillRobot {
navigateToAutofillSettings: Boolean, navigateToAutofillSettings: Boolean,
isAddressAutofillEnabled: Boolean = true, isAddressAutofillEnabled: Boolean = true,
userHasSavedAddress: Boolean = false, userHasSavedAddress: Boolean = false,
firstName: String, name: String,
middleName: String,
lastName: String,
streetAddress: String, streetAddress: String,
city: String, city: String,
state: String, state: String,
@ -327,21 +321,15 @@ class SettingsSubMenuAutofillRobot {
clickAddAddressButton() clickAddAddressButton()
} }
} }
Log.i(TAG, "fillAndSaveAddress: Waiting for $waitingTime ms for \"First Name\" text field to exist") Log.i(TAG, "fillAndSaveAddress: Waiting for $waitingTime ms for \"Name\" text field to exist")
firstNameTextInput().waitForExists(waitingTime) nameTextInput().waitForExists(waitingTime)
Log.i(TAG, "fillAndSaveAddress: Waited for $waitingTime ms for \"First Name\" text field to exist") Log.i(TAG, "fillAndSaveAddress: Waited for $waitingTime ms for \"Name\" text field to exist")
Log.i(TAG, "fillAndSaveAddress: Trying to click device back button to dismiss keyboard using device back button") Log.i(TAG, "fillAndSaveAddress: Trying to click device back button to dismiss keyboard using device back button")
mDevice.pressBack() mDevice.pressBack()
Log.i(TAG, "fillAndSaveAddress: Clicked device back button to dismiss keyboard using device back button") Log.i(TAG, "fillAndSaveAddress: Clicked device back button to dismiss keyboard using device back button")
Log.i(TAG, "fillAndSaveAddress: Trying to set \"First Name\" to $firstName") Log.i(TAG, "fillAndSaveAddress: Trying to set \"Name\" to $name")
firstNameTextInput().setText(firstName) nameTextInput().setText(name)
Log.i(TAG, "fillAndSaveAddress: \"First Name\" was set to $firstName") Log.i(TAG, "fillAndSaveAddress: \"Name\" was set to $name")
Log.i(TAG, "fillAndSaveAddress: Trying to set \"Middle Name\" to $middleName")
middleNameTextInput().setText(middleName)
Log.i(TAG, "fillAndSaveAddress: \"Middle Name\" was set to $middleName")
Log.i(TAG, "fillAndSaveAddress: Trying to set \"Last Name\" to $lastName")
lastNameTextInput().setText(lastName)
Log.i(TAG, "fillAndSaveAddress: \"Last Name\" was set to $lastName")
Log.i(TAG, "fillAndSaveAddress: Trying to set \"Street Address\" to $streetAddress") Log.i(TAG, "fillAndSaveAddress: Trying to set \"Street Address\" to $streetAddress")
streetAddressTextInput().setText(streetAddress) streetAddressTextInput().setText(streetAddress)
Log.i(TAG, "fillAndSaveAddress: \"Street Address\" was set to $streetAddress") Log.i(TAG, "fillAndSaveAddress: \"Street Address\" was set to $streetAddress")
@ -616,13 +604,12 @@ private fun manageAddressesButton() =
.resourceId("android:id/title") .resourceId("android:id/title")
.text(getStringResource(R.string.preferences_addresses_manage_addresses)), .text(getStringResource(R.string.preferences_addresses_manage_addresses)),
) )
private fun addAddressToolbarTitle() = itemContainingText(getStringResource(R.string.addresses_add_address)) private fun addAddressToolbarTitle() = itemContainingText(getStringResource(R.string.addresses_add_address))
private fun editAddressToolbarTitle() = itemContainingText(getStringResource(R.string.addresses_edit_address)) private fun editAddressToolbarTitle() = itemContainingText(getStringResource(R.string.addresses_edit_address))
private fun toolbarCheckmarkButton() = itemWithResId("$packageName:id/save_address_button") private fun toolbarCheckmarkButton() = itemWithResId("$packageName:id/save_address_button")
private fun navigateBackButton() = itemWithDescription(getStringResource(R.string.action_bar_up_description)) private fun navigateBackButton() = itemWithDescription(getStringResource(R.string.action_bar_up_description))
private fun firstNameTextInput() = itemWithResId("$packageName:id/first_name_input") private fun nameTextInput() = itemWithResId("$packageName:id/name_input")
private fun middleNameTextInput() = itemWithResId("$packageName:id/middle_name_input")
private fun lastNameTextInput() = itemWithResId("$packageName:id/last_name_input")
private fun streetAddressTextInput() = itemWithResId("$packageName:id/street_address_input") private fun streetAddressTextInput() = itemWithResId("$packageName:id/street_address_input")
private fun cityTextInput() = itemWithResId("$packageName:id/city_input") private fun cityTextInput() = itemWithResId("$packageName:id/city_input")
private fun subRegionDropDown() = itemWithResId("$packageName:id/subregion_drop_down") private fun subRegionDropDown() = itemWithResId("$packageName:id/subregion_drop_down")
@ -657,7 +644,7 @@ private fun confirmDeleteCreditCardButton() = onView(withId(android.R.id.button1
private fun cancelDeleteCreditCardButton() = onView(withId(android.R.id.button2)).inRoot(RootMatchers.isDialog()) private fun cancelDeleteCreditCardButton() = onView(withId(android.R.id.button2)).inRoot(RootMatchers.isDialog())
private fun securedCreditCardsLaterButton() = onView(withId(android.R.id.button2)).inRoot(RootMatchers.isDialog()) private fun securedCreditCardsLaterButton() = onView(withId(android.R.id.button2)).inRoot(RootMatchers.isDialog())
private fun savedAddress(firstName: String) = mDevice.findObject(UiSelector().textContains(firstName)) private fun savedAddress(name: String) = mDevice.findObject(UiSelector().textContains(name))
private fun subRegionOption(subRegion: String) = mDevice.findObject(UiSelector().textContains(subRegion)) private fun subRegionOption(subRegion: String) = mDevice.findObject(UiSelector().textContains(subRegion))
private fun countryOption(country: String) = mDevice.findObject(UiSelector().textContains(country)) private fun countryOption(country: String) = mDevice.findObject(UiSelector().textContains(country))

@ -7,15 +7,6 @@ package org.mozilla.fenix.settings.address.ext
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import mozilla.components.concept.storage.Address import mozilla.components.concept.storage.Address
/**
* Generate a label item text for an [Address]. The combination of names is based on desktop code
* found here:
* https://searchfox.org/mozilla-central/rev/d989c65584ded72c2de85cb40bede7ac2f176387/toolkit/components/formautofill/FormAutofillNameUtils.jsm#400
*/
fun Address.getFullName(): String = listOf(givenName, additionalName, familyName)
.filter { it.isNotEmpty() }
.joinToString(" ")
/** /**
* Generate a description item text for an [Address]. The element ordering is based on the * Generate a description item text for an [Address]. The element ordering is based on the
* priorities defined by the desktop code found here: * priorities defined by the desktop code found here:

@ -47,7 +47,7 @@ class AddressEditorView(
* Binds the view in the [AddressEditorFragment], using the current [Address] if available. * Binds the view in the [AddressEditorFragment], using the current [Address] if available.
*/ */
fun bind() { fun bind() {
binding.firstNameInput.apply { binding.nameInput.apply {
requestFocus() requestFocus()
placeCursorAtEnd() placeCursorAtEnd()
showKeyboard() showKeyboard()
@ -64,11 +64,7 @@ class AddressEditorView(
address?.let { address -> address?.let { address ->
binding.emailInput.setText(address.email) binding.emailInput.setText(address.email)
binding.phoneInput.setText(address.tel) binding.phoneInput.setText(address.tel)
binding.nameInput.setText(address.name)
binding.firstNameInput.setText(address.givenName)
binding.middleNameInput.setText(address.additionalName)
binding.lastNameInput.setText(address.familyName)
binding.streetAddressInput.setText(address.streetAddress) binding.streetAddressInput.setText(address.streetAddress)
binding.cityInput.setText(address.addressLevel2) binding.cityInput.setText(address.addressLevel2)
binding.zipInput.setText(address.postalCode) binding.zipInput.setText(address.postalCode)
@ -88,9 +84,7 @@ class AddressEditorView(
binding.root.hideKeyboard() binding.root.hideKeyboard()
val addressFields = UpdatableAddressFields( val addressFields = UpdatableAddressFields(
givenName = binding.firstNameInput.text.toString(), name = binding.nameInput.text.toString(),
additionalName = binding.middleNameInput.text.toString(),
familyName = binding.lastNameInput.text.toString(),
organization = "", organization = "",
streetAddress = binding.streetAddressInput.text.toString(), streetAddress = binding.streetAddressInput.text.toString(),
addressLevel3 = "", addressLevel3 = "",

@ -20,7 +20,6 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.compose.list.IconListItem import org.mozilla.fenix.compose.list.IconListItem
import org.mozilla.fenix.compose.list.TextListItem import org.mozilla.fenix.compose.list.TextListItem
import org.mozilla.fenix.settings.address.ext.getAddressLabel import org.mozilla.fenix.settings.address.ext.getAddressLabel
import org.mozilla.fenix.settings.address.ext.getFullName
import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.FirefoxTheme
/** /**
@ -39,7 +38,7 @@ fun AddressList(
LazyColumn { LazyColumn {
items(addresses) { address -> items(addresses) { address ->
TextListItem( TextListItem(
label = address.getFullName(), label = address.name,
modifier = Modifier.padding(start = 56.dp), modifier = Modifier.padding(start = 56.dp),
description = address.getAddressLabel(), description = address.getAddressLabel(),
maxDescriptionLines = 2, maxDescriptionLines = 2,
@ -66,9 +65,7 @@ private fun AddressListPreview() {
addresses = listOf( addresses = listOf(
Address( Address(
guid = "1", guid = "1",
givenName = "Banana", name = "Banana Apple",
additionalName = "",
familyName = "Apple",
organization = "Mozilla", organization = "Mozilla",
streetAddress = "123 Sesame Street", streetAddress = "123 Sesame Street",
addressLevel3 = "", addressLevel3 = "",

@ -14,24 +14,24 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp"> android:layout_margin="16dp">
<!-- First Name --> <!-- A person's full name, typically made up of a first, middle and last name, e.g. John Joe Doe. -->
<TextView <TextView
android:id="@+id/first_name_title" android:id="@+id/name_title"
style="@style/CaptionTextStyle" style="@style/CaptionTextStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical" android:gravity="center_vertical"
android:labelFor="@id/first_name_input" android:labelFor="@id/name_input"
android:letterSpacing="0.05" android:letterSpacing="0.05"
android:paddingStart="3dp" android:paddingStart="3dp"
android:paddingEnd="0dp" android:paddingEnd="0dp"
android:text="@string/addresses_first_name" android:text="@string/addresses_name"
android:textColor="?attr/textPrimary" android:textColor="?attr/textPrimary"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/first_name_layout" android:id="@+id/name_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="?attr/textPrimary" android:textColor="?attr/textPrimary"
@ -39,96 +39,10 @@
app:hintEnabled="false" app:hintEnabled="false"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/first_name_title"> app:layout_constraintTop_toBottomOf="@+id/name_title">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/first_name_input" android:id="@+id/name_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:fontFamily="sans-serif"
android:imeOptions="flagNoExtractUi"
android:letterSpacing="0.01"
android:lineSpacingExtra="8sp"
android:maxLines="1"
android:singleLine="true"
android:textColor="?attr/textPrimary"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Middle Name -->
<TextView
android:id="@+id/middle_name_title"
style="@style/CaptionTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:labelFor="@id/middle_name_input"
android:letterSpacing="0.05"
android:paddingStart="3dp"
android:paddingEnd="0dp"
android:text="@string/addresses_middle_name"
android:textColor="?attr/textPrimary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/first_name_layout" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/middle_name_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/textPrimary"
app:errorEnabled="true"
app:hintEnabled="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/middle_name_title">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/middle_name_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:fontFamily="sans-serif"
android:imeOptions="flagNoExtractUi"
android:letterSpacing="0.01"
android:lineSpacingExtra="8sp"
android:maxLines="1"
android:singleLine="true"
android:textColor="?attr/textPrimary"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Last Name -->
<TextView
android:id="@+id/last_name_title"
style="@style/CaptionTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:labelFor="@id/last_name_input"
android:letterSpacing="0.05"
android:paddingStart="3dp"
android:paddingEnd="0dp"
android:text="@string/addresses_last_name"
android:textColor="?attr/textPrimary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/middle_name_layout" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/last_name_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/textPrimary"
app:errorEnabled="true"
app:hintEnabled="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/last_name_title">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/last_name_input"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end" android:ellipsize="end"
@ -158,7 +72,7 @@
android:textColor="?attr/textPrimary" android:textColor="?attr/textPrimary"
android:labelFor="@id/street_address_input" android:labelFor="@id/street_address_input"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/last_name_layout" /> app:layout_constraintTop_toBottomOf="@+id/name_layout" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/street_address_layout" android:id="@+id/street_address_layout"

@ -1844,11 +1844,13 @@
<!-- Title of the "Manage addresses" screen --> <!-- Title of the "Manage addresses" screen -->
<string name="addresses_manage_addresses">Manage addresses</string> <string name="addresses_manage_addresses">Manage addresses</string>
<!-- The header for the first name of an address --> <!-- The header for the first name of an address -->
<string name="addresses_first_name">First Name</string> <string name="addresses_first_name" moz:removedIn="124" tools:ignore="UnusedResources">First Name</string>
<!-- The header for the middle name of an address --> <!-- The header for the middle name of an address -->
<string name="addresses_middle_name">Middle Name</string> <string name="addresses_middle_name" moz:removedIn="124" tools:ignore="UnusedResources">Middle Name</string>
<!-- The header for the last name of an address --> <!-- The header for the last name of an address -->
<string name="addresses_last_name">Last Name</string> <string name="addresses_last_name" moz:removedIn="124" tools:ignore="UnusedResources">Last Name</string>
<!-- The header for the name of an address. Name represents a person's full name, typically made up of a first, middle and last name, e.g. John Joe Doe. -->
<string name="addresses_name">Name</string>
<!-- The header for the street address of an address --> <!-- The header for the street address of an address -->
<string name="addresses_street_address">Street Address</string> <string name="addresses_street_address">Street Address</string>
<!-- The header for the city of an address --> <!-- The header for the city of an address -->

@ -68,9 +68,7 @@ class AddressEditorViewTest {
addressEditorView.saveAddress() addressEditorView.saveAddress()
val expected = UpdatableAddressFields( val expected = UpdatableAddressFields(
givenName = address.givenName, name = address.name,
additionalName = address.additionalName,
familyName = address.familyName,
organization = "", organization = "",
streetAddress = address.streetAddress, streetAddress = address.streetAddress,
addressLevel3 = "", addressLevel3 = "",
@ -95,9 +93,7 @@ class AddressEditorViewTest {
addressEditorView.saveAddress() addressEditorView.saveAddress()
val expected = UpdatableAddressFields( val expected = UpdatableAddressFields(
givenName = "", name = "",
additionalName = "",
familyName = "",
organization = "", organization = "",
streetAddress = "", streetAddress = "",
addressLevel3 = "", addressLevel3 = "",
@ -137,9 +133,7 @@ class AddressEditorViewTest {
assertEquals(address.addressLevel1, binding.subregionDropDown.selectedItem.toString()) assertEquals(address.addressLevel1, binding.subregionDropDown.selectedItem.toString())
assertEquals("City", binding.cityInput.text.toString()) assertEquals("City", binding.cityInput.text.toString())
assertEquals("Street", binding.streetAddressInput.text.toString()) assertEquals("Street", binding.streetAddressInput.text.toString())
assertEquals("Family", binding.lastNameInput.text.toString()) assertEquals("Name", binding.nameInput.text.toString())
assertEquals("Given", binding.firstNameInput.text.toString())
assertEquals("Additional", binding.middleNameInput.text.toString())
assertEquals("email@mozilla.com", binding.emailInput.text.toString()) assertEquals("email@mozilla.com", binding.emailInput.text.toString())
assertEquals("Telephone", binding.phoneInput.text.toString()) assertEquals("Telephone", binding.phoneInput.text.toString())
} }
@ -334,9 +328,7 @@ class AddressEditorViewTest {
private fun generateAddress(country: String = "US", addressLevel1: String = "Oregon") = Address( private fun generateAddress(country: String = "US", addressLevel1: String = "Oregon") = Address(
guid = "123", guid = "123",
givenName = "Given", name = "Name",
additionalName = "Additional",
familyName = "Family",
organization = "Organization", organization = "Organization",
streetAddress = "Street", streetAddress = "Street",
addressLevel3 = "Suburb", addressLevel3 = "Suburb",

@ -53,9 +53,7 @@ class DefaultAddressEditorControllerTest {
@Test @Test
fun `GIVEN a new address record WHEN save address is called THEN save the new address record to storage`() = runTestOnMain { fun `GIVEN a new address record WHEN save address is called THEN save the new address record to storage`() = runTestOnMain {
val addressFields = UpdatableAddressFields( val addressFields = UpdatableAddressFields(
givenName = "John", name = "John Smith",
additionalName = "",
familyName = "Smith",
organization = "Mozilla", organization = "Mozilla",
streetAddress = "123 Sesame Street", streetAddress = "123 Sesame Street",
addressLevel3 = "", addressLevel3 = "",

@ -9,41 +9,6 @@ import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test
class AddressTest { class AddressTest {
@Test
fun `WHEN all names are populated THEN label includes all names`() {
val addr = generateAddress()
val label = addr.getFullName()
assertEquals("${addr.givenName} ${addr.additionalName} ${addr.familyName}", label)
}
@Test
fun `WHEN middle name is missing THEN label is given and family combined`() {
val addr = generateAddress(additionalName = "")
val label = addr.getFullName()
assertEquals("${addr.givenName} ${addr.familyName}", label)
}
@Test
fun `WHEN only family and middle name are available THEN label is middle and family combined`() {
val addr = generateAddress(givenName = "")
val label = addr.getFullName()
assertEquals("${addr.additionalName} ${addr.familyName}", label)
}
@Test
fun `WHEN only family name is available THEN label is family name`() {
val addr = generateAddress(givenName = "", additionalName = "")
val label = addr.getFullName()
assertEquals(addr.familyName, label)
}
@Test @Test
fun `WHEN all properties are present THEN all properties present in description`() { fun `WHEN all properties are present THEN all properties present in description`() {
@ -76,9 +41,7 @@ class AddressTest {
@Test @Test
fun `WHEN everything is missing THEN description is empty`() { fun `WHEN everything is missing THEN description is empty`() {
val addr = generateAddress( val addr = generateAddress(
givenName = "", name = "",
additionalName = "",
familyName = "",
organization = "", organization = "",
streetAddress = "", streetAddress = "",
addressLevel3 = "", addressLevel3 = "",
@ -109,9 +72,7 @@ class AddressTest {
} }
private fun generateAddress( private fun generateAddress(
givenName: String = "Firefox", name: String = "Firefox The Browser",
additionalName: String = "The",
familyName: String = "Browser",
organization: String = "Mozilla", organization: String = "Mozilla",
streetAddress: String = "street", streetAddress: String = "street",
addressLevel3: String = "3", addressLevel3: String = "3",
@ -123,9 +84,7 @@ class AddressTest {
email: String = "email", email: String = "email",
) = Address( ) = Address(
guid = "", guid = "",
givenName = givenName, name = name,
additionalName = additionalName,
familyName = familyName,
organization = organization, organization = organization,
streetAddress = streetAddress, streetAddress = streetAddress,
addressLevel3 = addressLevel3, addressLevel3 = addressLevel3,

@ -31,9 +31,7 @@ class DefaultAddressEditorInteractorTest {
@Test @Test
fun `WHEN save button is clicked THEN forward to controller handler`() { fun `WHEN save button is clicked THEN forward to controller handler`() {
val addressFields = UpdatableAddressFields( val addressFields = UpdatableAddressFields(
givenName = "John", name = "John Smith",
additionalName = "",
familyName = "Smith",
organization = "Mozilla", organization = "Mozilla",
streetAddress = "123 Sesame Street", streetAddress = "123 Sesame Street",
addressLevel3 = "", addressLevel3 = "",

Loading…
Cancel
Save