| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package com.example.modifier.data
- import android.content.Context
- import androidx.datastore.core.DataStore
- import androidx.datastore.preferences.core.Preferences
- import androidx.datastore.preferences.core.booleanPreferencesKey
- import androidx.datastore.preferences.core.edit
- import androidx.datastore.preferences.core.intPreferencesKey
- import androidx.lifecycle.MutableLiveData
- import androidx.lifecycle.asFlow
- import kotlinx.coroutines.flow.combine
- class AppStateRepository(
- private val dataStore: DataStore<Preferences>,
- private val context: Context
- ) {
- private object PreferencesKeys {
- val SEND = booleanPreferencesKey("send")
- val EXECUTED_NUM = intPreferencesKey("executed_num")
- val SUCCESS_NUM = intPreferencesKey("success_num")
- val REQUESTED_NUM = intPreferencesKey("requested_num")
- }
- private val appRuntimeFlags = MutableLiveData(AppRuntimeFlags())
- val appStateFlow =
- dataStore.data.combine(appRuntimeFlags.asFlow()) { preferences, runtimeFlags ->
- AppState(
- send = preferences[PreferencesKeys.SEND] ?: false,
- executedNum = preferences[PreferencesKeys.EXECUTED_NUM] ?: 0,
- successNum = preferences[PreferencesKeys.SUCCESS_NUM] ?: 0,
- requestedNum = preferences[PreferencesKeys.REQUESTED_NUM] ?: 0,
- running = runtimeFlags.running,
- requesting = runtimeFlags.requesting,
- preparing = runtimeFlags.preparing,
- checkingConnection = runtimeFlags.checkingConnection,
- busy = runtimeFlags.running || runtimeFlags.requesting || runtimeFlags.preparing || runtimeFlags.checkingConnection
- )
- }
- suspend fun incrementExecutedNum(success: Boolean) {
- dataStore.edit { preferences ->
- val executedNum = (preferences[PreferencesKeys.EXECUTED_NUM] ?: 0) + 1
- preferences[PreferencesKeys.EXECUTED_NUM] = executedNum
- if (success) {
- val successNum = (preferences[PreferencesKeys.SUCCESS_NUM] ?: 0) + 1
- preferences[PreferencesKeys.SUCCESS_NUM] = successNum
- }
- }
- }
- suspend fun incrementRequestedNum() {
- dataStore.edit { preferences ->
- val requestedNum = (preferences[PreferencesKeys.REQUESTED_NUM] ?: 0) + 1
- preferences[PreferencesKeys.REQUESTED_NUM] = requestedNum
- }
- }
- suspend fun updateSend(send: Boolean) {
- dataStore.edit { preferences ->
- preferences[PreferencesKeys.SEND] = send
- }
- }
- fun updateRuntimeFlags(
- running: Boolean?,
- requesting: Boolean?,
- preparing: Boolean?,
- checkingConnection: Boolean?
- ) {
- val value = appRuntimeFlags.value ?: AppRuntimeFlags()
- appRuntimeFlags.postValue(
- value.copy(
- running = running ?: value.running,
- requesting = requesting ?: value.requesting,
- preparing = preparing ?: value.preparing,
- checkingConnection = checkingConnection ?: value.checkingConnection
- )
- )
- }
- }
|