Skip to content

Commit 654a314

Browse files
authored
Clean up input screen autocomplete integration (#6358)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1208671518894266/task/1210740194621787?focus=true ### Description Cleans up unused variables and code copied from integration with the browser tab fragment. ### Steps to test this PR - [ ] Verify no changes to autocomplete behavior.
1 parent 5f5a90e commit 654a314

File tree

6 files changed

+53
-174
lines changed

6 files changed

+53
-174
lines changed

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/autocomplete/AutoCompleteViewState.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,8 @@
1717
package com.duckduckgo.duckchat.impl.inputscreen.autocomplete
1818

1919
import com.duckduckgo.browser.api.autocomplete.AutoComplete
20-
import com.duckduckgo.savedsites.api.models.SavedSite.Favorite
2120

2221
data class AutoCompleteViewState(
2322
val showSuggestions: Boolean = false,
24-
val showFavorites: Boolean = false,
2523
val searchResults: AutoComplete.AutoCompleteResult = AutoComplete.AutoCompleteResult("", emptyList()),
26-
val favorites: List<Favorite> = emptyList(),
2724
)

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenFragment.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ class InputScreenFragment : DuckDuckGoFragment(R.layout.fragment_input_screen) {
179179
binding.actionSend.icon = AppCompatResources.getDrawable(context, com.duckduckgo.mobile.android.R.drawable.ic_find_search_24)
180180
binding.viewPager.setCurrentItem(0, true)
181181
viewModel.onSearchSelected()
182+
viewModel.onSearchInputTextChanged(binding.inputModeWidget.text)
182183
}
183184
onChatSelected = {
184185
binding.actionSend.icon = AppCompatResources.getDrawable(context, R.drawable.ic_arrow_up_24)
@@ -187,7 +188,9 @@ class InputScreenFragment : DuckDuckGoFragment(R.layout.fragment_input_screen) {
187188
}
188189
onSendMessageAvailable = { isAvailable ->
189190
binding.actionSend.isVisible = isAvailable
190-
viewModel.triggerAutocomplete(binding.inputModeWidget.text, true, true)
191+
if (binding.viewPager.currentItem == 0) {
192+
viewModel.onSearchInputTextChanged(binding.inputModeWidget.text)
193+
}
191194
}
192195
onVoiceInputAllowed = { isAllowed ->
193196
viewModel.onVoiceInputAllowedChange(isAllowed)
@@ -229,7 +232,5 @@ class InputScreenFragment : DuckDuckGoFragment(R.layout.fragment_input_screen) {
229232
override fun onResume() {
230233
super.onResume()
231234
viewModel.onActivityResume()
232-
// TODO: This should be triggered via Flow
233-
viewModel.triggerAutocomplete(binding.inputModeWidget.text, true, true)
234235
}
235236
}

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/state/InputScreenVisibilityState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ package com.duckduckgo.duckchat.impl.inputscreen.ui.state
1919
data class InputScreenVisibilityState(
2020
val voiceInputButtonVisible: Boolean,
2121
val forceWebSearchButtonVisible: Boolean,
22+
val autoCompleteSuggestionsVisible: Boolean,
2223
)

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/tabs/SearchTabFragment.kt

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,28 +23,27 @@ import android.view.animation.OvershootInterpolator
2323
import androidx.core.content.ContextCompat
2424
import androidx.core.view.isVisible
2525
import androidx.lifecycle.ViewModelProvider
26+
import androidx.lifecycle.lifecycleScope
2627
import androidx.recyclerview.widget.LinearLayoutManager
2728
import com.duckduckgo.anvil.annotations.InjectWith
2829
import com.duckduckgo.browser.api.ui.BrowserScreens.PrivateSearchScreenNoParams
2930
import com.duckduckgo.common.ui.DuckDuckGoFragment
30-
import com.duckduckgo.common.ui.view.gone
31-
import com.duckduckgo.common.ui.view.show
3231
import com.duckduckgo.common.ui.viewbinding.viewBinding
3332
import com.duckduckgo.common.utils.FragmentViewModelFactory
3433
import com.duckduckgo.di.scopes.FragmentScope
3534
import com.duckduckgo.duckchat.impl.R
3635
import com.duckduckgo.duckchat.impl.databinding.FragmentSearchTabBinding
37-
import com.duckduckgo.duckchat.impl.inputscreen.autocomplete.AutoCompleteViewState
3836
import com.duckduckgo.duckchat.impl.inputscreen.autocomplete.BrowserAutoCompleteSuggestionsAdapter
3937
import com.duckduckgo.duckchat.impl.inputscreen.autocomplete.OmnibarPosition.TOP
4038
import com.duckduckgo.duckchat.impl.inputscreen.autocomplete.SuggestionItemDecoration
41-
import com.duckduckgo.duckchat.impl.inputscreen.ui.util.renderIfChanged
4239
import com.duckduckgo.duckchat.impl.inputscreen.ui.viewmodel.InputScreenViewModel
4340
import com.duckduckgo.navigation.api.GlobalActivityStarter
4441
import com.duckduckgo.savedsites.api.views.FavoritesGridConfig
4542
import com.duckduckgo.savedsites.api.views.FavoritesPlacement
4643
import com.duckduckgo.savedsites.api.views.SavedSitesViewsProvider
4744
import javax.inject.Inject
45+
import kotlinx.coroutines.flow.launchIn
46+
import kotlinx.coroutines.flow.onEach
4847

4948
@InjectWith(FragmentScope::class)
5049
class SearchTabFragment : DuckDuckGoFragment(R.layout.fragment_search_tab) {
@@ -60,18 +59,11 @@ class SearchTabFragment : DuckDuckGoFragment(R.layout.fragment_search_tab) {
6059
ViewModelProvider(requireParentFragment(), viewModelFactory)[InputScreenViewModel::class.java]
6160
}
6261

63-
private lateinit var renderer: SearchInterstitialFragmentRenderer
64-
6562
private lateinit var autoCompleteSuggestionsAdapter: BrowserAutoCompleteSuggestionsAdapter
6663

6764
private val binding: FragmentSearchTabBinding by viewBinding()
6865
private lateinit var favoritesView: View
6966

70-
override fun onCreate(savedInstanceState: Bundle?) {
71-
super.onCreate(savedInstanceState)
72-
renderer = SearchInterstitialFragmentRenderer()
73-
}
74-
7567
override fun onViewCreated(
7668
view: View,
7769
savedInstanceState: Bundle?,
@@ -154,40 +146,17 @@ class SearchTabFragment : DuckDuckGoFragment(R.layout.fragment_search_tab) {
154146
)
155147
}
156148

157-
inner class SearchInterstitialFragmentRenderer {
158-
159-
private var lastSeenAutoCompleteViewState: AutoCompleteViewState? = null
160-
161-
fun renderAutocomplete(viewState: AutoCompleteViewState) {
162-
renderIfChanged(viewState, lastSeenAutoCompleteViewState) {
163-
lastSeenAutoCompleteViewState = viewState
164-
165-
if (viewState.showSuggestions || viewState.showFavorites) {
166-
if (viewState.favorites.isNotEmpty() && viewState.showFavorites) {
167-
if (binding.autoCompleteSuggestionsList.isVisible) {
168-
viewModel.autoCompleteSuggestionsGone()
169-
}
170-
binding.autoCompleteSuggestionsList.gone()
171-
} else {
172-
binding.autoCompleteSuggestionsList.show()
173-
autoCompleteSuggestionsAdapter.updateData(viewState.searchResults.query, viewState.searchResults.suggestions)
174-
}
175-
} else {
176-
if (binding.autoCompleteSuggestionsList.isVisible) {
177-
viewModel.autoCompleteSuggestionsGone()
178-
}
179-
binding.autoCompleteSuggestionsList.gone()
180-
}
149+
private fun configureObservers() {
150+
viewModel.visibilityState.onEach {
151+
binding.autoCompleteSuggestionsList.isVisible = it.autoCompleteSuggestionsVisible
152+
if (!it.autoCompleteSuggestionsVisible) {
153+
viewModel.autoCompleteSuggestionsGone()
181154
}
182-
}
183-
}
155+
}.launchIn(lifecycleScope)
184156

185-
private fun configureObservers() {
186-
viewModel.autoCompleteViewState.observe(
187-
viewLifecycleOwner,
188-
) {
189-
it?.let { renderer.renderAutocomplete(it) }
190-
}
157+
viewModel.autoCompleteSuggestionResults.onEach {
158+
autoCompleteSuggestionsAdapter.updateData(it.query, it.suggestions)
159+
}.launchIn(lifecycleScope)
191160
}
192161

193162
companion object {

0 commit comments

Comments
 (0)