Skip to content

Commit 51399d4

Browse files
authored
apply draft text when canceling Input Screen action while on SERP (#6527)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1208671518894266/task/1210964284781033?focus=true ### Description Ensures that Input Screen behavior when it comes to canceling draft text while on SERP is consistent with production. ### Steps to test this PR - [x] Search for anything. - [x] On SERP, open the Input Screen. - [x] Type a new text into the input field and back out. - [x] Verify that the drafted text replaced the previous search query in the omnibar.
1 parent 62875f5 commit 51399d4

File tree

5 files changed

+64
-7
lines changed

5 files changed

+64
-7
lines changed

app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,7 @@ class BrowserTabFragment :
921921

922922
RESULT_CANCELED -> {
923923
data.getStringExtra(InputScreenActivityResultParams.CANCELED_DRAFT_PARAM)?.let { query ->
924-
omnibar.setDraftTextIfNtp(query)
924+
omnibar.setDraftTextIfNtpOrSerp(query)
925925
}
926926
}
927927
}

app/src/main/java/com/duckduckgo/app/browser/omnibar/Omnibar.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ class Omnibar(
463463
newOmnibar.decorate(Decoration.NewTabScrollingState(canScrollUp, canScrollDown, topOfPage))
464464
}
465465

466-
fun setDraftTextIfNtp(query: String) {
467-
newOmnibar.setDraftTextIfNtp(query)
466+
fun setDraftTextIfNtpOrSerp(query: String) {
467+
newOmnibar.setDraftTextIfNtpOrSerp(query)
468468
}
469469
}

app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayout.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,8 +1038,8 @@ open class OmnibarLayout @JvmOverloads constructor(
10381038
omnibarTextListener?.onTrackersCountFinished()
10391039
}
10401040

1041-
fun setDraftTextIfNtp(query: String) {
1042-
viewModel.setDraftTextIfNtp(query)
1041+
fun setDraftTextIfNtpOrSerp(query: String) {
1042+
viewModel.setDraftTextIfNtpOrSerp(query)
10431043
}
10441044

10451045
private fun enableTextInputClickCatcher(enabled: Boolean) {

app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -841,8 +841,10 @@ class OmnibarLayoutViewModel @Inject constructor(
841841
// }
842842
}
843843

844-
fun setDraftTextIfNtp(query: String) {
845-
if (_viewState.value.viewMode is NewTab) {
844+
fun setDraftTextIfNtpOrSerp(query: String) {
845+
val isNtp = _viewState.value.viewMode is NewTab
846+
val isSerp = _viewState.value.viewMode is Browser && duckDuckGoUrlDetector.isDuckDuckGoQueryUrl(_viewState.value.url)
847+
if (isNtp || isSerp) {
846848
_viewState.update {
847849
it.copy(
848850
omnibarText = query,

app/src/test/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModelTest.kt

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,6 +1628,61 @@ class OmnibarLayoutViewModelTest {
16281628
}
16291629
}
16301630

1631+
@Test
1632+
fun `when set draft and current state is NTP, then draft text applied`() = runTest {
1633+
testee.onViewModeChanged(ViewMode.NewTab)
1634+
val expected = "test"
1635+
testee.setDraftTextIfNtpOrSerp(expected)
1636+
1637+
testee.viewState.test {
1638+
val viewState = awaitItem()
1639+
assertEquals(expected, viewState.omnibarText)
1640+
assertTrue(viewState.updateOmnibarText)
1641+
}
1642+
}
1643+
1644+
@Test
1645+
fun `when set draft and current state is SERP, then draft text applied`() = runTest {
1646+
givenSiteLoaded(SERP_URL)
1647+
val expected = "test"
1648+
testee.setDraftTextIfNtpOrSerp(expected)
1649+
1650+
testee.viewState.test {
1651+
val viewState = awaitItem()
1652+
assertEquals(expected, viewState.omnibarText)
1653+
assertTrue(viewState.updateOmnibarText)
1654+
}
1655+
}
1656+
1657+
@Test
1658+
fun `when set draft and current state is a web page, then draft text not applied`() = runTest {
1659+
val omnibarState = OmnibarViewState(
1660+
navigationChange = false,
1661+
omnibarText = RANDOM_URL,
1662+
forceExpand = false,
1663+
)
1664+
testee.onExternalStateChange(StateChange.OmnibarStateChange(omnibarState))
1665+
testee.onExternalStateChange(
1666+
StateChange.LoadingStateChange(
1667+
LoadingViewState(
1668+
isLoading = true,
1669+
trackersAnimationEnabled = true,
1670+
progress = 100,
1671+
url = RANDOM_URL,
1672+
),
1673+
),
1674+
)
1675+
1676+
val expected = RANDOM_URL
1677+
testee.setDraftTextIfNtpOrSerp("some draft text")
1678+
1679+
testee.viewState.test {
1680+
val viewState = awaitItem()
1681+
assertEquals(expected, viewState.omnibarText)
1682+
assertTrue(viewState.updateOmnibarText)
1683+
}
1684+
}
1685+
16311686
private fun givenSiteLoaded(loadedUrl: String) {
16321687
testee.onViewModeChanged(ViewMode.Browser(loadedUrl))
16331688
testee.onExternalStateChange(

0 commit comments

Comments
 (0)