From 9bf5ee90efaaef45fe6062cf7a3118d72fe5d4a8 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Tue, 23 Mar 2021 16:57:12 +0530 Subject: [PATCH] Introduce and integrate ClawPreferences Signed-off-by: Harsh Shandilya --- .../data/preferences/ClawPreferences.kt | 24 +++++++++++++++++++ .../lobsters/injection/PreferenceModule.kt | 23 ++++++++++++++++++ .../ui/viewmodel/LobstersViewModel.kt | 11 +++++++++ 3 files changed, 58 insertions(+) create mode 100644 app/src/main/java/dev/msfjarvis/lobsters/data/preferences/ClawPreferences.kt create mode 100644 app/src/main/java/dev/msfjarvis/lobsters/injection/PreferenceModule.kt diff --git a/app/src/main/java/dev/msfjarvis/lobsters/data/preferences/ClawPreferences.kt b/app/src/main/java/dev/msfjarvis/lobsters/data/preferences/ClawPreferences.kt new file mode 100644 index 00000000..4eb62aac --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/lobsters/data/preferences/ClawPreferences.kt @@ -0,0 +1,24 @@ +package dev.msfjarvis.lobsters.data.preferences + +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.booleanPreferencesKey +import androidx.datastore.preferences.core.edit +import javax.inject.Inject +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +class ClawPreferences @Inject constructor( + private val dataStore: DataStore, +) { + private val sortKey = booleanPreferencesKey("post_sorting_order") + + val sortingOrder: Flow + get() = dataStore.data.map { preferences -> preferences[sortKey] ?: false } + + suspend fun toggleSortingOrder() { + dataStore.edit { preferences -> + preferences[sortKey] = (preferences[sortKey] ?: false).not() + } + } +} diff --git a/app/src/main/java/dev/msfjarvis/lobsters/injection/PreferenceModule.kt b/app/src/main/java/dev/msfjarvis/lobsters/injection/PreferenceModule.kt new file mode 100644 index 00000000..68cb3e94 --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/lobsters/injection/PreferenceModule.kt @@ -0,0 +1,23 @@ +package dev.msfjarvis.lobsters.injection + +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import dev.msfjarvis.lobsters.data.preferences.ClawPreferences +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object PreferenceModule { + + @Provides + @Singleton + fun provideClawPreferences( + dataStore: DataStore, + ): ClawPreferences { + return ClawPreferences(dataStore) + } +} 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 ffbf6e3b..04b65958 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 @@ -7,9 +7,11 @@ import androidx.paging.PagingConfig 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.repo.LobstersRepository import javax.inject.Inject +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.launchIn @@ -19,6 +21,7 @@ import kotlinx.coroutines.launch @HiltViewModel class LobstersViewModel @Inject constructor( private val lobstersRepository: LobstersRepository, + private val clawPreferences: ClawPreferences, ) : ViewModel() { private val _savedPosts = MutableStateFlow>(emptyList()) val savedPosts = _savedPosts.asStateFlow() @@ -35,6 +38,14 @@ class LobstersViewModel @Inject constructor( }.launchIn(viewModelScope) } + fun getSortOrder(): Flow { + return clawPreferences.sortingOrder + } + + suspend fun toggleSortOrder() { + clawPreferences.toggleSortingOrder() + } + fun reloadPosts() { pagingSource?.invalidate() }