tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 3567e06b2e81e5b0acbb9015a2a94391ea0e79c6
parent 9d1b7dbacd89d1dfcecca4630676eb63b81eff90
Author: Gabriel Luong <gabriel.luong@gmail.com>
Date:   Thu, 20 Nov 2025 08:12:38 +0000

Bug 1998092 - Part 14: Migrate EditAddressScreen to M3 Acorn color tokens r=android-reviewers,007

- Fixed the previews to display the address structure with add and edit mode.
- Migrated EditAddressScreen to M3 Acorn color tokens. This was mostly removing unnecessary colors to use the default parameters in the design components. This does not align screen with the updated M3 specs beyond colors.
- Figma: https://www.figma.com/design/ctk1Pw1TBxUwVgTTOvjHb4/2025-Android-Fundamentals?node-id=990-28370&m=dev

Differential Revision: https://phabricator.services.mozilla.com/D272201

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressState.kt | 2+-
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/ui/edit/EditAddressScreen.kt | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
Amobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/utils/AddressUtils.kt | 36++++++++++++++++++++++++++++++++++++
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/address/ext/AddressTest.kt | 31+------------------------------
4 files changed, 106 insertions(+), 37 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressState.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressState.kt @@ -81,7 +81,7 @@ data class AddressState( fun initial( region: RegionState? = null, address: Address? = null, - ): AddressState { + ): AddressState { // We want to use the country unless it is empty, we fall back to the users region unless // it hasn't loaded yet meaning that we will have the Default value of XX falling back to // DEFAULT_COUNTRY. diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/ui/edit/EditAddressScreen.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/ui/edit/EditAddressScreen.kt @@ -25,7 +25,9 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import mozilla.components.browser.state.search.RegionState import mozilla.components.compose.base.Dropdown import mozilla.components.compose.base.annotation.FlexibleWindowLightDarkPreview import mozilla.components.compose.base.button.DestructiveButton @@ -34,8 +36,8 @@ import mozilla.components.compose.base.button.OutlinedButton import mozilla.components.compose.base.menu.MenuItem import mozilla.components.compose.base.modifier.thenConditional import mozilla.components.compose.base.textfield.TextField -import mozilla.components.compose.base.textfield.TextFieldColors import mozilla.components.concept.engine.autofill.AddressStructure +import mozilla.components.concept.storage.Address import mozilla.components.concept.storage.UpdatableAddressFields import mozilla.components.lib.state.ext.observeAsState import org.mozilla.fenix.R @@ -48,7 +50,9 @@ import org.mozilla.fenix.settings.address.store.FormChange import org.mozilla.fenix.settings.address.store.SaveTapped import org.mozilla.fenix.settings.address.store.ViewAppeared import org.mozilla.fenix.settings.address.store.isEditing +import org.mozilla.fenix.settings.address.utils.generateAddress import org.mozilla.fenix.theme.FirefoxTheme +import org.mozilla.fenix.theme.Theme import mozilla.components.compose.base.text.Text as DropdownText /** @@ -62,7 +66,6 @@ fun EditAddressScreen(store: AddressStore) { topBar = { EditAddressTopBar(store) }, - containerColor = FirefoxTheme.colors.layer1, ) { paddingValues -> val structureState by store.observeAsState(store.state.structureState) { it.structureState } var hasRequestedFocus by remember { mutableStateOf(false) } @@ -140,9 +143,6 @@ private fun TextField( errorText = "", modifier = modifier.testTag(field.id.testTag), label = field.localizationKey.localizedString(), - colors = TextFieldColors.default( - placeholderColor = FirefoxTheme.colors.textPrimary, - ), ) } @@ -285,11 +285,73 @@ private fun AddressStructure.Field.LocalizationKey.localizedString() = when (thi is AddressStructure.Field.LocalizationKey.Unknown -> key } +private fun createStore( + region: RegionState? = null, + address: Address? = null, +) = AddressStore( + initialState = AddressState.initial(region = region, address = address).copy( + structureState = AddressStructureState.Loaded( + structure = AddressStructure( + fields = listOf( + AddressStructure.Field.TextField( + AddressStructure.Field.ID.Name, + AddressStructure.Field.LocalizationKey.Name, + ), + AddressStructure.Field.TextField( + AddressStructure.Field.ID.Organization, + AddressStructure.Field.LocalizationKey.Organization, + ), + AddressStructure.Field.TextField( + AddressStructure.Field.ID.StreetAddress, + AddressStructure.Field.LocalizationKey.StreetAddress, + ), + ), + ), + ), + ), + listOf(), +).also { it.dispatch(ViewAppeared) } + +@FlexibleWindowLightDarkPreview +@Composable +private fun AddAddressPreview() { + val store = createStore() + + FirefoxTheme { + EditAddressScreen(store) + } +} + +@Preview +@Composable +private fun AddAddressPrivatePreview() { + val store = createStore() + + FirefoxTheme(theme = Theme.Private) { + EditAddressScreen(store) + } +} + @FlexibleWindowLightDarkPreview @Composable private fun EditAddressPreview() { - val store = AddressStore(AddressState.initial(), listOf()).also { it.dispatch(ViewAppeared) } + val store = createStore( + address = generateAddress(), + ) + FirefoxTheme { EditAddressScreen(store) } } + +@Preview +@Composable +private fun EditAddressPrivatePreview() { + val store = createStore( + address = generateAddress(), + ) + + FirefoxTheme(theme = Theme.Private) { + EditAddressScreen(store) + } +} diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/utils/AddressUtils.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/utils/AddressUtils.kt @@ -0,0 +1,36 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.settings.address.utils + +import mozilla.components.concept.storage.Address + +internal fun generateAddress( + name: String = "Firefox The Browser", + organization: String = "Mozilla", + streetAddress: String = "street", + addressLevel3: String = "3", + addressLevel2: String = "2", + addressLevel1: String = "1", + postalCode: String = "code", + country: String = "country", + tel: String = "tel", + email: String = "email", +) = Address( + guid = "", + name = name, + organization = organization, + streetAddress = streetAddress, + addressLevel3 = addressLevel3, + addressLevel2 = addressLevel2, + addressLevel1 = addressLevel1, + postalCode = postalCode, + country = country, + tel = tel, + email = email, + timeCreated = 1, + timeLastUsed = 1, + timeLastModified = 1, + timesUsed = 1, +) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/address/ext/AddressTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/address/ext/AddressTest.kt @@ -4,9 +4,9 @@ package org.mozilla.fenix.settings.address.ext -import mozilla.components.concept.storage.Address import org.junit.Assert.assertEquals import org.junit.Test +import org.mozilla.fenix.settings.address.utils.generateAddress class AddressTest { @@ -70,33 +70,4 @@ class AddressTest { assertEquals("line1 line2 line3", result) } - - private fun generateAddress( - name: String = "Firefox The Browser", - organization: String = "Mozilla", - streetAddress: String = "street", - addressLevel3: String = "3", - addressLevel2: String = "2", - addressLevel1: String = "1", - postalCode: String = "code", - country: String = "country", - tel: String = "tel", - email: String = "email", - ) = Address( - guid = "", - name = name, - organization = organization, - streetAddress = streetAddress, - addressLevel3 = addressLevel3, - addressLevel2 = addressLevel2, - addressLevel1 = addressLevel1, - postalCode = postalCode, - country = country, - tel = tel, - email = email, - timeCreated = 1, - timeLastUsed = 1, - timeLastModified = 1, - timesUsed = 1, - ) }