Introduce and integrate ClawPreferences

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-03-23 16:57:12 +05:30
parent 9e3f718ab9
commit 9bf5ee90ef
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
3 changed files with 58 additions and 0 deletions

View file

@ -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<Preferences>,
) {
private val sortKey = booleanPreferencesKey("post_sorting_order")
val sortingOrder: Flow<Boolean>
get() = dataStore.data.map { preferences -> preferences[sortKey] ?: false }
suspend fun toggleSortingOrder() {
dataStore.edit { preferences ->
preferences[sortKey] = (preferences[sortKey] ?: false).not()
}
}
}

View file

@ -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<Preferences>,
): ClawPreferences {
return ClawPreferences(dataStore)
}
}

View file

@ -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<List<SavedPost>>(emptyList())
val savedPosts = _savedPosts.asStateFlow()
@ -35,6 +38,14 @@ class LobstersViewModel @Inject constructor(
}.launchIn(viewModelScope)
}
fun getSortOrder(): Flow<Boolean> {
return clawPreferences.sortingOrder
}
suspend fun toggleSortOrder() {
clawPreferences.toggleSortingOrder()
}
fun reloadPosts() {
pagingSource?.invalidate()
}