mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 22:37:03 +05:30
Introduce and integrate ClawPreferences
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
9e3f718ab9
commit
9bf5ee90ef
3 changed files with 58 additions and 0 deletions
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,9 +7,11 @@ import androidx.paging.PagingConfig
|
||||||
import androidx.paging.cachedIn
|
import androidx.paging.cachedIn
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import dev.msfjarvis.lobsters.data.local.SavedPost
|
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.LobstersPagingSource
|
||||||
import dev.msfjarvis.lobsters.data.repo.LobstersRepository
|
import dev.msfjarvis.lobsters.data.repo.LobstersRepository
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
@ -19,6 +21,7 @@ import kotlinx.coroutines.launch
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class LobstersViewModel @Inject constructor(
|
class LobstersViewModel @Inject constructor(
|
||||||
private val lobstersRepository: LobstersRepository,
|
private val lobstersRepository: LobstersRepository,
|
||||||
|
private val clawPreferences: ClawPreferences,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
private val _savedPosts = MutableStateFlow<List<SavedPost>>(emptyList())
|
private val _savedPosts = MutableStateFlow<List<SavedPost>>(emptyList())
|
||||||
val savedPosts = _savedPosts.asStateFlow()
|
val savedPosts = _savedPosts.asStateFlow()
|
||||||
|
@ -35,6 +38,14 @@ class LobstersViewModel @Inject constructor(
|
||||||
}.launchIn(viewModelScope)
|
}.launchIn(viewModelScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getSortOrder(): Flow<Boolean> {
|
||||||
|
return clawPreferences.sortingOrder
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun toggleSortOrder() {
|
||||||
|
clawPreferences.toggleSortingOrder()
|
||||||
|
}
|
||||||
|
|
||||||
fun reloadPosts() {
|
fun reloadPosts() {
|
||||||
pagingSource?.invalidate()
|
pagingSource?.invalidate()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue