commit d92d2a6aaa1ed6d67663473fe255060992621c88 parent 920ab7c1733347ebb766e3ab38653c03e5da7f85 Author: Harrison Oglesby <oglesby.harrison@gmail.com> Date: Tue, 4 Nov 2025 23:44:42 +0000 Bug 1994285 - Change divider and hint text for Settings Search bar. Fix Landscape padding. r=android-reviewers,android-l10n-reviewers,delphine,petru Differential Revision: https://phabricator.services.mozilla.com/D269687 Diffstat:
6 files changed, 42 insertions(+), 34 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchBar.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchBar.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.settings.settingssearch import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.height import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.TopAppBar @@ -16,11 +16,13 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import mozilla.components.compose.base.button.IconButton import mozilla.components.compose.base.textfield.TextField +import mozilla.components.compose.base.textfield.TextFieldColors import mozilla.components.lib.state.ext.observeAsComposableState import org.mozilla.fenix.R import org.mozilla.fenix.theme.FirefoxTheme @@ -42,6 +44,8 @@ fun SettingsSearchBar( var searchQuery by remember { mutableStateOf(state.searchQuery) } TopAppBar( + modifier = Modifier + .height(72.dp), title = { TextField( value = searchQuery, @@ -50,11 +54,15 @@ fun SettingsSearchBar( store.dispatch(SettingsSearchAction.SearchQueryUpdated(value)) }, modifier = Modifier - .fillMaxWidth() - .padding(end = 8.dp), + .fillMaxWidth(), placeholder = stringResource(R.string.settings_search_title), singleLine = true, errorText = stringResource(R.string.settings_search_error_message), + colors = TextFieldColors.default( + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + errorIndicatorColor = Color.Transparent, + ), trailingIcons = { when (state) { is SettingsSearchState.SearchInProgress, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchScreen.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchScreen.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.settings.settingssearch import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn @@ -13,6 +14,7 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -36,24 +38,31 @@ fun SettingsSearchScreen( val state by store.observeAsComposableState { it } Scaffold( topBar = { - SettingsSearchBar( - store = store, - onBackClick = onBackClick, - ) + Column { + SettingsSearchBar( + store = store, + onBackClick = onBackClick, + ) + HorizontalDivider() + } }, ) { paddingValues -> + val topPadding = remember(paddingValues) { + paddingValues.calculateTopPadding() + } + when (state) { is SettingsSearchState.Default -> { SettingsSearchMessageContent( modifier = Modifier - .padding(paddingValues) + .padding(top = topPadding) .fillMaxSize(), ) } is SettingsSearchState.NoSearchResults -> { SettingsSearchMessageContent( modifier = Modifier - .padding(paddingValues) + .padding(top = topPadding) .fillMaxSize(), currentUserQuery = state.searchQuery, ) @@ -61,7 +70,7 @@ fun SettingsSearchScreen( is SettingsSearchState.SearchInProgress -> { LazyColumn( modifier = Modifier - .padding(paddingValues) + .padding(top = topPadding) .fillMaxSize(), ) { items(state.searchResults.size) { index -> @@ -96,7 +105,7 @@ private fun SettingsSearchMessageContent( stringResource(R.string.settings_search_empty_query_placeholder) } else { stringResource( - R.string.setttings_search_no_results_found_message, + R.string.settings_search_no_results_found_message, currentUserQuery, ) } diff --git a/mobile/android/fenix/app/src/main/res/values/static_strings.xml b/mobile/android/fenix/app/src/main/res/values/static_strings.xml @@ -251,19 +251,4 @@ <!-- Label for enabling Relay email masks --> <string name="preferences_enable_relay_email_masks">Enable Relay email masks</string> - - <!-- Settings Search Strings --> - <!-- Title of Settings Search --> - <string name="settings_search_title">Settings Search</string> - <!-- Content description (not visible, for screen readers etc.): "Clear search field button for settings search" --> - <string name="content_description_settings_search_clear_search">Clear Search</string> - <!-- Content description (not visible, for screen readers etc.): "Navigate back button for settings search" --> - <string name="content_description_settings_search_navigate_back">Navigate Back</string> - <!-- Message displayed when the search field in the Settings Search screen is empty --> - <string name="settings_search_empty_query_placeholder">Search for settings</string> - <!-- Message when error happens with Settings Search --> - <string name="settings_search_error_message">Error occurred.</string> - <!-- Message displayed when the search field is not empty but search results is empty. - %s will be replaced by user query in search field. --> - <string name="setttings_search_no_results_found_message">No results found for %s</string> </resources> diff --git a/mobile/android/fenix/app/src/main/res/values/strings.xml b/mobile/android/fenix/app/src/main/res/values/strings.xml @@ -3542,6 +3542,20 @@ <!-- Label for a button opening a feedback forum --> <string name="review_prompt_feedback_button">Leave feedback</string> + <!-- Settings Search Strings --> + <!-- Title of Settings Search. "Search" is a verb here--> + <string name="settings_search_title">Search Settings</string> + <!-- Content description (not visible, for screen readers etc.) for the button to clear the search field for settings search --> + <string name="content_description_settings_search_clear_search">Clear Search</string> + <!-- Content description (not visible, for screen readers etc.) for the button to navigate back to the Settings page from the Settings Search screen. --> + <string name="content_description_settings_search_navigate_back">Navigate Back</string> + <!-- Message displayed when the search field in the Settings Search screen is empty --> + <string name="settings_search_empty_query_placeholder">No recent searches</string> + <!-- Message when error happens with Settings Search --> + <string name="settings_search_error_message">An error has occurred</string> + <!-- Message title displayed when the search field is not empty but search results is empty. --> + <string name="settings_search_no_results_found_message">Nothing turned up</string> + <!-- Terms of use pop up prompt --> <!-- Title for the pop up prompt --> <string name="terms_of_use_prompt_title">We’ve got an update</string> diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchMiddlewareTest.kt @@ -4,16 +4,13 @@ package org.mozilla.fenix.settings.settingssearch -import android.content.Context import androidx.navigation.NavController import androidx.test.ext.junit.runners.AndroidJUnit4 import io.mockk.mockk import kotlinx.coroutines.ExperimentalCoroutinesApi import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.middleware.CaptureActionsMiddleware -import mozilla.components.support.test.mock import mozilla.components.support.test.rule.MainCoroutineRule -import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchStoreTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchStoreTest.kt @@ -4,14 +4,9 @@ package org.mozilla.fenix.settings.settingssearch -import android.content.Context import androidx.test.ext.junit.runners.AndroidJUnit4 import kotlinx.coroutines.ExperimentalCoroutinesApi import mozilla.components.support.test.libstate.ext.waitUntilIdle -import mozilla.components.support.test.mock -import mozilla.components.support.test.rule.MainCoroutineRule -import org.junit.Before -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith