tor-browser

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

commit 38d201b25385de875ef14751ab6dbadbfde08147
parent 16a79f4069c47f6f7f91d399c59a67dd8e236876
Author: Gabriel Luong <gabriel.luong@gmail.com>
Date:   Tue, 18 Nov 2025 21:46:24 +0000

Bug 2000090 - Part 11: Migrate LoginsTools to use M3 color tokens r=android-reviewers,007

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

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/logins/LoginsTools.kt | 117+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
1 file changed, 67 insertions(+), 50 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/logins/LoginsTools.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/logins/LoginsTools.kt @@ -4,8 +4,6 @@ package org.mozilla.fenix.debugsettings.logins -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth @@ -13,6 +11,8 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -24,6 +24,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch @@ -41,7 +42,9 @@ import org.mozilla.fenix.R import org.mozilla.fenix.compose.list.TextListItem import org.mozilla.fenix.debugsettings.ui.DebugDrawer import org.mozilla.fenix.theme.FirefoxTheme +import org.mozilla.fenix.theme.Theme import java.util.UUID +import mozilla.components.ui.icons.R as iconsR /** * Logins UI for [DebugDrawer] that displays existing logins for the current domain and allows @@ -69,33 +72,35 @@ fun LoginsTools( } } - LoginsContent( - origin = origin, - existingLogins = existingLogins, - onAddFakeLogin = { - origin?.let { - scope.launch { - existingLogins += loginsStorage.add( - LoginEntry( - username = "fake_username${existingLogins.size + 1}", - password = "fake_password${existingLogins.size + 1}", - origin = "https://$origin", - formActionOrigin = "https://$origin", - ), - ) + Surface { + LoginsContent( + origin = origin, + existingLogins = existingLogins, + onAddFakeLogin = { + origin?.let { + scope.launch { + existingLogins += loginsStorage.add( + LoginEntry( + username = "fake_username${existingLogins.size + 1}", + password = "fake_password${existingLogins.size + 1}", + origin = "https://$origin", + formActionOrigin = "https://$origin", + ), + ) + } } - } - }, - onDeleteLogin = { entry -> - scope.launch { - loginsStorage.delete(entry.guid).also { isSuccess -> - if (isSuccess) { - existingLogins -= entry + }, + onDeleteLogin = { entry -> + scope.launch { + loginsStorage.delete(entry.guid).also { isSuccess -> + if (isSuccess) { + existingLogins -= entry + } } } - } - }, - ) + }, + ) + } } @Composable @@ -108,16 +113,15 @@ private fun LoginsContent( Column(modifier = Modifier.padding(16.dp)) { Text( text = stringResource(R.string.debug_drawer_logins_title), - color = FirefoxTheme.colors.textPrimary, style = FirefoxTheme.typography.headline5, ) Text( - color = FirefoxTheme.colors.textSecondary, text = stringResource( R.string.debug_drawer_logins_current_domain_label, origin ?: "", ), + color = MaterialTheme.colorScheme.onSurfaceVariant, ) Spacer(modifier = Modifier.height(16.dp)) @@ -133,7 +137,7 @@ private fun LoginsContent( TextListItem( label = login.username, onIconClick = { onDeleteLogin(login) }, - iconPainter = painterResource(R.drawable.ic_delete), + iconPainter = painterResource(iconsR.drawable.mozac_ic_delete_24), iconDescription = stringResource( R.string.debug_drawer_logins_delete_login_button_content_description, login.username, @@ -144,27 +148,6 @@ private fun LoginsContent( } } -@Composable -@PreviewLightDark -private fun LoginsScreenPreview() { - FirefoxTheme { - Box( - modifier = Modifier.background(color = FirefoxTheme.colors.layer1), - ) { - val selectedTab = createTab("https://example.com") - LoginsTools( - browserStore = BrowserStore( - BrowserState( - selectedTabId = selectedTab.id, - tabs = listOf(selectedTab), - ), - ), - loginsStorage = FakeLoginsStorage(), - ) - } - } -} - internal class FakeLoginsStorage : LoginsStorage { private val loginsByGuid = mutableMapOf<String, LoginEntry>() override suspend fun wipeLocal() = Unit @@ -201,3 +184,37 @@ internal class FakeLoginsStorage : LoginsStorage { passwordField = passwordField, ) } + +@Composable +@PreviewLightDark +private fun LoginsScreenPreview() { + FirefoxTheme { + val selectedTab = createTab("https://example.com") + LoginsTools( + browserStore = BrowserStore( + BrowserState( + selectedTabId = selectedTab.id, + tabs = listOf(selectedTab), + ), + ), + loginsStorage = FakeLoginsStorage(), + ) + } +} + +@Composable +@Preview +private fun LoginsScreenPrivatePreview() { + FirefoxTheme(theme = Theme.Private) { + val selectedTab = createTab("https://example.com") + LoginsTools( + browserStore = BrowserStore( + BrowserState( + selectedTabId = selectedTab.id, + tabs = listOf(selectedTab), + ), + ), + loginsStorage = FakeLoginsStorage(), + ) + } +}