tor-browser

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

commit 07e4f06bf778367c47f61c5e03fef2a57f19e98c
parent bd71d9a75c3b86425a20a5d57f630be0ceeca0af
Author: Mugurell <Mugurell@users.noreply.github.com>
Date:   Tue, 28 Oct 2025 18:43:52 +0000

Bug 1994004 - Show the given hints in the new input composable r=android-reviewers,Roger

When there is no input query.

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

Diffstat:
Mmobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/InlineAutocompleteTextField.kt | 30+++++++++++++++++++++++++++++-
Mmobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/ui/InlineAutocompleteTextFieldTest.kt | 33+++++++++++++++++++++++++++++++++
Mmobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTestCompose.kt | 10+++++-----
Mmobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt | 15++++++++-------
4 files changed, 75 insertions(+), 13 deletions(-)

diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/InlineAutocompleteTextField.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/InlineAutocompleteTextField.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect @@ -250,6 +251,15 @@ internal fun InlineAutocompleteTextField( LayoutDirection.Rtl -> Alignment.CenterEnd }, ) { + if (textFieldValue.text.isEmpty()) { + Text( + text = hint, + style = TextStyle( + fontSize = TEXT_SIZE.sp, + color = AcornTheme.colors.textSecondary, + ), + ) + } innerTextField() } }, @@ -332,7 +342,7 @@ private fun InlineAutocompleteTextFieldWithSuggestion() { ) { InlineAutocompleteTextField( query = "wiki", - hint = "preview", + hint = "hint", showQueryAsPreselected = false, usePrivateModeQueries = false, suggestion = AutocompleteResult( @@ -346,3 +356,21 @@ private fun InlineAutocompleteTextFieldWithSuggestion() { } } } + +@PreviewLightDark +@Composable +private fun InlineAutocompleteTextFieldWithNoQuery() { + AcornTheme { + Box( + Modifier.background(AcornTheme.colors.layer1), + ) { + InlineAutocompleteTextField( + query = "", + hint = "hint", + showQueryAsPreselected = false, + usePrivateModeQueries = false, + suggestion = null, + ) + } + } +} diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/ui/InlineAutocompleteTextFieldTest.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/ui/InlineAutocompleteTextFieldTest.kt @@ -6,6 +6,7 @@ package mozilla.components.compose.browser.toolbar.ui import android.view.inputmethod.EditorInfo import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.assertTextEquals import androidx.compose.ui.test.click import androidx.compose.ui.test.junit4.createComposeRule @@ -145,6 +146,38 @@ class InlineAutocompleteTextFieldTest { } @Test + fun `WHEN query is empty THE the hint is displayed`() { + composeTestRule.setContent { + InlineAutocompleteTextField( + query = "", + hint = "Search or enter address", + suggestion = null, + showQueryAsPreselected = false, + usePrivateModeQueries = false, + onUrlEdit = { }, + ) + } + + composeTestRule.onNodeWithText("Search or enter address").assertIsDisplayed() + } + + @Test + fun `WHEN query is not empty THE the hint is not displayed`() { + composeTestRule.setContent { + InlineAutocompleteTextField( + query = "test", + hint = "Search or enter address", + suggestion = null, + showQueryAsPreselected = false, + usePrivateModeQueries = false, + onUrlEdit = { }, + ) + } + + composeTestRule.onNodeWithText("Search or enter address").assertIsNotDisplayed() + } + + @Test fun `WHEN disabling personalized learning for the IME THEN set the right ime option`() { val editorInfo = EditorInfo() diff --git a/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTestCompose.kt b/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTestCompose.kt @@ -833,7 +833,7 @@ class NavigationToolbarTestCompose : TestSetup() { }.openSearchWithComposableToolbar(composeTestRule) { typeSearchWithComposableToolbar(composeTestRule, queryString) clickClearButtonWithComposableToolbar(composeTestRule) -// verifySearchBarPlaceholderWithComposableToolbar("Search or enter address") + verifySearchBarPlaceholderWithComposableToolbar(composeTestRule, "Search or enter address") } } } @@ -883,7 +883,7 @@ class NavigationToolbarTestCompose : TestSetup() { typeSearchWithComposableToolbar(composeTestRule, searchTerm = "Mozilla") verifySuggestionsAreNotDisplayed(rule = composeTestRule, "Mozilla") clickClearButtonWithComposableToolbar(composeTestRule) -// verifySearchBarPlaceholderWithComposableToolbar("Search history") + verifySearchBarPlaceholderWithComposableToolbar(composeTestRule, "Search history") } } } @@ -903,7 +903,7 @@ class NavigationToolbarTestCompose : TestSetup() { verifyKeyboardVisibility(isExpectedToBeVisible = true) verifyScanButtonWithComposableToolbar(composeTestRule, isDisplayed = true) verifyVoiceSearchButtonVisibility(enabled = true) -// verifySearchBarPlaceholderWithComposableToolbar("Search or enter address") + verifySearchBarPlaceholderWithComposableToolbar(composeTestRule, "Search or enter address") typeSearchWithComposableToolbar(composeTestRule, "mozilla ") verifyScanButtonWithComposableToolbar(composeTestRule, isDisplayed = false) verifyVoiceSearchButtonVisibility(enabled = true) @@ -943,7 +943,7 @@ class NavigationToolbarTestCompose : TestSetup() { clickSearchSelectorButtonWithComposableToolbar(composeTestRule) selectTemporarySearchMethodWithComposableToolbar(composeTestRule, "Tabs") verifyVoiceSearchButtonWithComposableToolbar(composeTestRule, isDisplayed = true) -// verifySearchBarPlaceholderWithComposableToolbar("Search tabs") + verifySearchBarPlaceholderWithComposableToolbar(composeTestRule, "Search tabs") verifyScanButtonWithComposableToolbar(composeTestRule, isDisplayed = false) } } @@ -961,7 +961,7 @@ class NavigationToolbarTestCompose : TestSetup() { clickSearchSelectorButtonWithComposableToolbar(composeTestRule) selectTemporarySearchMethodWithComposableToolbar(composeTestRule, "History") verifyVoiceSearchButtonWithComposableToolbar(composeTestRule, isDisplayed = true) -// verifySearchBarPlaceholderWithComposableToolbar("Search history") + verifySearchBarPlaceholderWithComposableToolbar(composeTestRule, "Search history") verifyScanButtonWithComposableToolbar(composeTestRule, isDisplayed = false) } } diff --git a/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt b/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt @@ -54,7 +54,6 @@ import org.mozilla.fenix.helpers.MatcherHelper.assertUIObjectIsGone import org.mozilla.fenix.helpers.MatcherHelper.itemWithDescription import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText -import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdContainingText import org.mozilla.fenix.helpers.MatcherHelper.itemWithText import org.mozilla.fenix.helpers.SessionLoadedIdlingResource import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime @@ -376,13 +375,15 @@ class SearchRobot { assertItemTextEquals(browserToolbarEditView(), expectedText = text) } - fun verifySearchBarPlaceholderWithComposableToolbar(searchHint: String) { - assertUIObjectExists( - itemWithResIdContainingText( - "$packageName:id/mozac_addressbar_search_query_input", - searchHint, - ), + fun verifySearchBarPlaceholderWithComposableToolbar( + composeTestRule: ComposeTestRule, searchHint: String, + ) { + Log.i(TAG, "verifySearchBarPlaceholderWithComposableToolbar: Verify hint is $searchHint") + composeTestRule.onNode( + hasTestTag(ADDRESSBAR_SEARCH_BOX) and hasText(searchHint), + useUnmergedTree = true, ) + Log.i(TAG, "verifySearchBarPlaceholderWithComposableToolbar: Verification successful") } fun verifySearchShortcutListContains(vararg searchEngineName: String, shouldExist: Boolean = true) {