tor-browser

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

commit 4bb0da661fc2eae340c5a7954676d168fc117c9e
parent e81a40f142ee502ff91a553012b1fbef3b5fe108
Author: Gabriel Luong <gabriel.luong@gmail.com>
Date:   Tue,  2 Dec 2025 07:24:57 +0000

Bug 1993368 - Part 32: Migrate Dropdown to use M3 color tokens r=android-reviewers,007

- This does not migrate Dropdown to the M3 specs. This is a simple M3 color tokens refactor with no changes to the HorizontalDivider.

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

Diffstat:
Mmobile/android/android-components/components/compose/base/src/main/java/mozilla/components/compose/base/Dropdown.kt | 165+++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 82 insertions(+), 83 deletions(-)

diff --git a/mobile/android/android-components/components/compose/base/src/main/java/mozilla/components/compose/base/Dropdown.kt b/mobile/android/android-components/components/compose/base/src/main/java/mozilla/components/compose/base/Dropdown.kt @@ -4,7 +4,6 @@ package mozilla.components.compose.base -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -20,6 +19,7 @@ import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf @@ -96,80 +96,79 @@ fun Dropdown( var measuredDropdownMenuWidthDp by remember { mutableStateOf(0.dp) } - Column( - modifier = modifier - .clickable { - expanded = true - } - .semantics { role = Role.DropdownList }, - ) { - Text( - text = label, - modifier = Modifier - .wrapContentSize() - .defaultMinSize(minHeight = 16.dp) - .wrapContentHeight(), - color = AcornTheme.colors.textPrimary, - style = AcornTheme.typography.caption, - ) - - Spacer(modifier = Modifier.height(4.dp)) + Surface { + Column( + modifier = modifier + .clickable { + expanded = true + } + .semantics { role = Role.DropdownList }, + ) { + Text( + text = label, + modifier = Modifier + .wrapContentSize() + .defaultMinSize(minHeight = 16.dp) + .wrapContentHeight(), + style = AcornTheme.typography.caption, + ) - val placeholderText = checkedItemText?.value ?: placeholder + Spacer(modifier = Modifier.height(4.dp)) - Box { - Row { - Text( - text = placeholderText, - modifier = Modifier.weight(1f), - color = AcornTheme.colors.textPrimary, - style = AcornTheme.typography.subtitle1, - ) + val placeholderText = checkedItemText?.value ?: placeholder - Spacer(modifier = Modifier.width(10.dp)) + Box { + Row { + Text( + text = placeholderText, + modifier = Modifier.weight(1f), + style = AcornTheme.typography.subtitle1, + ) - Icon( - painter = painterResource(id = iconsR.drawable.mozac_ic_dropdown_arrow), - contentDescription = null, - tint = AcornTheme.colors.iconPrimary, - ) - } + Spacer(modifier = Modifier.width(10.dp)) - Box(modifier = Modifier.align(Alignment.TopEnd)) { - val widthModifier = if (dropdownMenuWidth == null) { - Modifier - } else { - Modifier.width(width = dropdownMenuWidth) + Icon( + painter = painterResource(id = iconsR.drawable.mozac_ic_dropdown_arrow), + contentDescription = null, + ) } - DropdownMenu( - menuItems = dropdownItems, - expanded = expanded, - modifier = Modifier - .onGloballyPositioned { coordinates -> - measuredDropdownMenuWidthDp = with(density) { - coordinates.size.width.toDp() - } - } - .requiredSizeIn(maxHeight = DropdownMenuMaxHeight) - .then(widthModifier), - offset = if (isInLandscapeMode) { - DpOffset( - -measuredDropdownMenuWidthDp, - IconSize, - ) + Box(modifier = Modifier.align(Alignment.TopEnd)) { + val widthModifier = if (dropdownMenuWidth == null) { + Modifier } else { - DpOffset( - 0.dp, - IconSize, - ) - }, - onDismissRequest = { expanded = false }, - ) + Modifier.width(width = dropdownMenuWidth) + } + + DropdownMenu( + menuItems = dropdownItems, + expanded = expanded, + modifier = Modifier + .onGloballyPositioned { coordinates -> + measuredDropdownMenuWidthDp = with(density) { + coordinates.size.width.toDp() + } + } + .requiredSizeIn(maxHeight = DropdownMenuMaxHeight) + .then(widthModifier), + offset = if (isInLandscapeMode) { + DpOffset( + -measuredDropdownMenuWidthDp, + IconSize, + ) + } else { + DpOffset( + 0.dp, + IconSize, + ) + }, + onDismissRequest = { expanded = false }, + ) + } } - } - HorizontalDivider(color = AcornTheme.colors.formDefault) + HorizontalDivider(color = AcornTheme.colors.formDefault) + } } } @@ -228,26 +227,26 @@ private fun getSelectedDropdownItems(): List<MenuItem.CheckableItem> = @Composable private fun DropdownPreview() { AcornTheme { - Column( - modifier = Modifier - .fillMaxSize() - .background(color = AcornTheme.colors.layer1), - ) { - Dropdown( - label = "Placeholder and nothing selected", - dropdownItems = getDropdownItems(), - placeholder = "Placeholder", - modifier = Modifier.fillMaxWidth(), - ) + Surface { + Column( + modifier = Modifier.fillMaxSize(), + ) { + Dropdown( + label = "Placeholder and nothing selected", + dropdownItems = getDropdownItems(), + placeholder = "Placeholder", + modifier = Modifier.fillMaxWidth(), + ) - Spacer(modifier = Modifier.height(AcornTheme.layout.space.dynamic150)) + Spacer(modifier = Modifier.height(AcornTheme.layout.space.dynamic150)) - Dropdown( - label = "Placeholder and item selected", - placeholder = "Placeholder", - dropdownItems = getSelectedDropdownItems(), - modifier = Modifier.fillMaxWidth(), - ) + Dropdown( + label = "Placeholder and item selected", + placeholder = "Placeholder", + dropdownItems = getSelectedDropdownItems(), + modifier = Modifier.fillMaxWidth(), + ) + } } } }