From e3c50970354baa26643524c7d5503da0ae431135 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 29 Mar 2021 11:43:16 +0530 Subject: [PATCH] app: start qualifying infra for hottest posts Signed-off-by: Harsh Shandilya --- ...rsPagingSource.kt => HottestPostsPagingSource.kt} | 4 ++-- .../lobsters/data/repo/LobstersRepository.kt | 2 +- .../dev/msfjarvis/lobsters/ui/main/LobstersApp.kt | 5 +++-- .../lobsters/ui/viewmodel/LobstersViewModel.kt | 12 ++++++------ 4 files changed, 12 insertions(+), 11 deletions(-) rename app/src/main/java/dev/msfjarvis/lobsters/data/remote/{LobstersPagingSource.kt => HottestPostsPagingSource.kt} (90%) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/data/remote/LobstersPagingSource.kt b/app/src/main/java/dev/msfjarvis/lobsters/data/remote/HottestPostsPagingSource.kt similarity index 90% rename from app/src/main/java/dev/msfjarvis/lobsters/data/remote/LobstersPagingSource.kt rename to app/src/main/java/dev/msfjarvis/lobsters/data/remote/HottestPostsPagingSource.kt index 813936b6..d8d5c911 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/data/remote/LobstersPagingSource.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/data/remote/HottestPostsPagingSource.kt @@ -5,7 +5,7 @@ import androidx.paging.PagingState import dev.msfjarvis.lobsters.data.repo.LobstersRepository import dev.msfjarvis.lobsters.model.LobstersPost -class LobstersPagingSource constructor( +class HottestPostsPagingSource constructor( private val lobstersRepository: LobstersRepository, ) : PagingSource() { @@ -15,7 +15,7 @@ class LobstersPagingSource constructor( // Update cache before fetching a list. // This is done to make sure that we can update the isSaved status of incoming posts. lobstersRepository.updateCache() - val posts = lobstersRepository.fetchPosts(page) + val posts = lobstersRepository.fetchHottestPosts(page) LoadResult.Page( data = posts, diff --git a/app/src/main/java/dev/msfjarvis/lobsters/data/repo/LobstersRepository.kt b/app/src/main/java/dev/msfjarvis/lobsters/data/repo/LobstersRepository.kt index e6333056..5a1a112b 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/data/repo/LobstersRepository.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/data/repo/LobstersRepository.kt @@ -26,7 +26,7 @@ class LobstersRepository constructor( return savedPostsCache.values.toList() } - suspend fun fetchPosts(page: Int): List = withContext(Dispatchers.IO) { + suspend fun fetchHottestPosts(page: Int): List = withContext(Dispatchers.IO) { return@withContext lobstersApi.getHottestPosts(page) } diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt index 99a8902e..f4239958 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt @@ -33,7 +33,8 @@ import kotlinx.coroutines.launch fun LobstersApp() { val viewModel: LobstersViewModel = viewModel() val navController = rememberNavController() - val hottestPosts = viewModel.posts.collectAsLazyPagingItems() + val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems() + val savedPosts by viewModel.savedPosts.collectAsState() val hottestPostsListState = rememberLazyListState() @@ -76,7 +77,7 @@ fun LobstersApp() { modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()), isPostSaved = viewModel::isPostSaved, saveAction = viewModel::toggleSave, - refreshAction = viewModel::reloadPosts, + refreshAction = viewModel::reloadHottestPosts, ) } composable(Destination.Saved.route) { diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt index 04b65958..c0bd5f69 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt @@ -8,7 +8,7 @@ import androidx.paging.cachedIn import dagger.hilt.android.lifecycle.HiltViewModel import dev.msfjarvis.lobsters.data.local.SavedPost import dev.msfjarvis.lobsters.data.preferences.ClawPreferences -import dev.msfjarvis.lobsters.data.remote.LobstersPagingSource +import dev.msfjarvis.lobsters.data.remote.HottestPostsPagingSource import dev.msfjarvis.lobsters.data.repo.LobstersRepository import javax.inject.Inject import kotlinx.coroutines.flow.Flow @@ -25,10 +25,10 @@ class LobstersViewModel @Inject constructor( ) : ViewModel() { private val _savedPosts = MutableStateFlow>(emptyList()) val savedPosts = _savedPosts.asStateFlow() - val posts = Pager(PagingConfig(25)) { - LobstersPagingSource(lobstersRepository).also { pagingSource = it } + val hottestPosts = Pager(PagingConfig(25)) { + HottestPostsPagingSource(lobstersRepository).also { hottestPostsPagingSource = it } }.flow.cachedIn(viewModelScope) - private var pagingSource: LobstersPagingSource? = null + private var hottestPostsPagingSource: HottestPostsPagingSource? = null init { lobstersRepository.isCacheReady.onEach { ready -> @@ -46,8 +46,8 @@ class LobstersViewModel @Inject constructor( clawPreferences.toggleSortingOrder() } - fun reloadPosts() { - pagingSource?.invalidate() + fun reloadHottestPosts() { + hottestPostsPagingSource?.invalidate() } fun toggleSave(post: SavedPost) {