Skip to content

Commit f301fc5

Browse files
authored
Merge pull request #1259 from android/tm/fix-search
Fix search flickering
2 parents 19f6f9e + aa15e65 commit f301fc5

File tree

1 file changed

+10
-13
lines changed
  • feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search

1 file changed

+10
-13
lines changed

feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRep
2626
import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase
2727
import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase
2828
import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase
29-
import com.google.samples.apps.nowinandroid.core.result.Result
30-
import com.google.samples.apps.nowinandroid.core.result.asResult
29+
import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult
3130
import dagger.hilt.android.lifecycle.HiltViewModel
3231
import kotlinx.coroutines.flow.SharingStarted
3332
import kotlinx.coroutines.flow.StateFlow
33+
import kotlinx.coroutines.flow.catch
3434
import kotlinx.coroutines.flow.flatMapLatest
3535
import kotlinx.coroutines.flow.flowOf
3636
import kotlinx.coroutines.flow.map
@@ -61,18 +61,15 @@ class SearchViewModel @Inject constructor(
6161
flowOf(SearchResultUiState.EmptyQuery)
6262
} else {
6363
getSearchContentsUseCase(query)
64-
.asResult()
65-
.map { result ->
66-
when (result) {
67-
is Result.Success -> SearchResultUiState.Success(
68-
topics = result.data.topics,
69-
newsResources = result.data.newsResources,
70-
)
71-
72-
is Result.Loading -> SearchResultUiState.Loading
73-
is Result.Error -> SearchResultUiState.LoadFailed
74-
}
64+
// Not using .asResult() here, because it emits Loading state every
65+
// time the user types a letter in the search box, which flickers the screen.
66+
.map<UserSearchResult, SearchResultUiState> { data ->
67+
SearchResultUiState.Success(
68+
topics = data.topics,
69+
newsResources = data.newsResources,
70+
)
7571
}
72+
.catch { emit(SearchResultUiState.LoadFailed) }
7673
}
7774
}
7875
}

0 commit comments

Comments
 (0)