@@ -23,28 +23,27 @@ import android.view.animation.OvershootInterpolator
23
23
import androidx.core.content.ContextCompat
24
24
import androidx.core.view.isVisible
25
25
import androidx.lifecycle.ViewModelProvider
26
+ import androidx.lifecycle.lifecycleScope
26
27
import androidx.recyclerview.widget.LinearLayoutManager
27
28
import com.duckduckgo.anvil.annotations.InjectWith
28
29
import com.duckduckgo.browser.api.ui.BrowserScreens.PrivateSearchScreenNoParams
29
30
import com.duckduckgo.common.ui.DuckDuckGoFragment
30
- import com.duckduckgo.common.ui.view.gone
31
- import com.duckduckgo.common.ui.view.show
32
31
import com.duckduckgo.common.ui.viewbinding.viewBinding
33
32
import com.duckduckgo.common.utils.FragmentViewModelFactory
34
33
import com.duckduckgo.di.scopes.FragmentScope
35
34
import com.duckduckgo.duckchat.impl.R
36
35
import com.duckduckgo.duckchat.impl.databinding.FragmentSearchTabBinding
37
- import com.duckduckgo.duckchat.impl.inputscreen.autocomplete.AutoCompleteViewState
38
36
import com.duckduckgo.duckchat.impl.inputscreen.autocomplete.BrowserAutoCompleteSuggestionsAdapter
39
37
import com.duckduckgo.duckchat.impl.inputscreen.autocomplete.OmnibarPosition.TOP
40
38
import com.duckduckgo.duckchat.impl.inputscreen.autocomplete.SuggestionItemDecoration
41
- import com.duckduckgo.duckchat.impl.inputscreen.ui.util.renderIfChanged
42
39
import com.duckduckgo.duckchat.impl.inputscreen.ui.viewmodel.InputScreenViewModel
43
40
import com.duckduckgo.navigation.api.GlobalActivityStarter
44
41
import com.duckduckgo.savedsites.api.views.FavoritesGridConfig
45
42
import com.duckduckgo.savedsites.api.views.FavoritesPlacement
46
43
import com.duckduckgo.savedsites.api.views.SavedSitesViewsProvider
47
44
import javax.inject.Inject
45
+ import kotlinx.coroutines.flow.launchIn
46
+ import kotlinx.coroutines.flow.onEach
48
47
49
48
@InjectWith(FragmentScope ::class )
50
49
class SearchTabFragment : DuckDuckGoFragment (R .layout.fragment_search_tab) {
@@ -60,18 +59,11 @@ class SearchTabFragment : DuckDuckGoFragment(R.layout.fragment_search_tab) {
60
59
ViewModelProvider (requireParentFragment(), viewModelFactory)[InputScreenViewModel ::class .java]
61
60
}
62
61
63
- private lateinit var renderer: SearchInterstitialFragmentRenderer
64
-
65
62
private lateinit var autoCompleteSuggestionsAdapter: BrowserAutoCompleteSuggestionsAdapter
66
63
67
64
private val binding: FragmentSearchTabBinding by viewBinding()
68
65
private lateinit var favoritesView: View
69
66
70
- override fun onCreate (savedInstanceState : Bundle ? ) {
71
- super .onCreate(savedInstanceState)
72
- renderer = SearchInterstitialFragmentRenderer ()
73
- }
74
-
75
67
override fun onViewCreated (
76
68
view : View ,
77
69
savedInstanceState : Bundle ? ,
@@ -154,40 +146,17 @@ class SearchTabFragment : DuckDuckGoFragment(R.layout.fragment_search_tab) {
154
146
)
155
147
}
156
148
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()
181
154
}
182
- }
183
- }
155
+ }.launchIn(lifecycleScope)
184
156
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)
191
160
}
192
161
193
162
companion object {
0 commit comments