commit 60b6a4be0b6a0fe619c9461fb6e1c114373d4faa
parent cd86993b428553439711a286c012444219ac8c79
Author: Gabriel Luong <gabriel.luong@gmail.com>
Date: Thu, 20 Nov 2025 18:36:57 +0000
Bug 1998092 - Part 5: Migrate AddExceptionScreen to M3 Acorn specs r=android-reviewers,007
- No proper Figma for DNS over HTTPs.
- Copied spacing from the Exception Settings screens https://www.figma.com/design/ctk1Pw1TBxUwVgTTOvjHb4/2025-Android-Fundamentals?node-id=989-27404&m=dev
Differential Revision: https://phabricator.services.mozilla.com/D272011
Diffstat:
1 file changed, 54 insertions(+), 32 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/addexception/AddExceptionScreen.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/addexception/AddExceptionScreen.kt
@@ -4,11 +4,13 @@
package org.mozilla.fenix.settings.doh.addexception
-import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -16,6 +18,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import mozilla.components.compose.base.annotation.FlexibleWindowLightDarkPreview
import mozilla.components.compose.base.button.FilledButton
@@ -24,6 +27,7 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.settings.doh.DohSettingsState
import org.mozilla.fenix.settings.doh.ProtectionLevel
import org.mozilla.fenix.theme.FirefoxTheme
+import org.mozilla.fenix.theme.Theme
/**
* Composable function that displays the exceptions list screen of DoH settings.
@@ -37,39 +41,35 @@ internal fun AddExceptionScreen(
onSaveClicked: (String) -> Unit = {},
) {
var urlInput by remember { mutableStateOf("") }
- Column(
- modifier = Modifier
- .fillMaxSize()
- .background(FirefoxTheme.colors.layer1),
- ) {
- TextField(
- value = urlInput,
- onValueChange = {
- urlInput = it
- },
- placeholder = stringResource(R.string.preference_doh_exceptions_add_placeholder),
- errorText = stringResource(R.string.preference_doh_exceptions_add_error),
- label = stringResource(R.string.preference_doh_exceptions_add_site),
- isError = !state.isUserExceptionValid,
- singleLine = true,
- modifier = Modifier
- .fillMaxWidth()
- .padding(
- vertical = 12.dp,
- horizontal = 16.dp,
- ),
- )
- FilledButton(
- text = stringResource(R.string.preference_doh_exceptions_add_save),
+ Surface {
+ Column(
modifier = Modifier
- .fillMaxWidth()
- .padding(
- vertical = 12.dp,
- horizontal = 16.dp,
- ),
- onClick = { onSaveClicked(urlInput) },
- )
+ .fillMaxSize()
+ .padding(horizontal = 16.dp),
+ ) {
+ Spacer(modifier = Modifier.height(8.dp))
+
+ TextField(
+ value = urlInput,
+ onValueChange = {
+ urlInput = it
+ },
+ placeholder = stringResource(R.string.preference_doh_exceptions_add_placeholder),
+ errorText = stringResource(R.string.preference_doh_exceptions_add_error),
+ label = stringResource(R.string.preference_doh_exceptions_add_site),
+ isError = !state.isUserExceptionValid,
+ singleLine = true,
+ )
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ FilledButton(
+ text = stringResource(R.string.preference_doh_exceptions_add_save),
+ modifier = Modifier.fillMaxWidth(),
+ onClick = { onSaveClicked(urlInput) },
+ )
+ }
}
}
@@ -94,3 +94,25 @@ private fun AddExceptionScreenPreview() {
)
}
}
+
+@Composable
+@Preview
+private fun AddExceptionScreenPrivatePreview() {
+ FirefoxTheme(theme = Theme.Private) {
+ AddExceptionScreen(
+ state = DohSettingsState(
+ allProtectionLevels = listOf(
+ ProtectionLevel.Default,
+ ProtectionLevel.Increased,
+ ProtectionLevel.Max,
+ ProtectionLevel.Off,
+ ),
+ selectedProtectionLevel = ProtectionLevel.Off,
+ providers = emptyList(),
+ selectedProvider = null,
+ exceptionsList = emptyList(),
+ isUserExceptionValid = false,
+ ),
+ )
+ }
+}