From e8a83b1ac1ecd7a48fd8e854d2916aaf35f4ef1a Mon Sep 17 00:00:00 2001 From: HuanCheng65 <22636177+HuanCheng65@users.noreply.github.com> Date: Fri, 21 Jul 2023 13:47:31 +0800 Subject: [PATCH] =?UTF-8?q?pref:=20=E8=BE=93=E5=85=A5=E6=B3=95=E9=AB=98?= =?UTF-8?q?=E5=BA=A6=E6=8C=81=E4=B9=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/huanchengfly/tieba/post/DataStore.kt | 24 +++++++++++++++++++ .../tieba/post/ui/page/reply/ReplyPage.kt | 13 ++++++++-- .../tieba/post/utils/AppPreferencesUtils.kt | 2 ++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt b/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt index 99410629..4f8a68c4 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt @@ -3,8 +3,13 @@ package com.huanchengfly.tieba.post import android.annotation.SuppressLint import android.content.Context import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState import androidx.compose.runtime.State import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext import androidx.datastore.core.DataMigration import androidx.datastore.core.DataStore import androidx.datastore.preferences.SharedPreferencesMigration @@ -48,6 +53,25 @@ private val dataStoreInstance by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) val Context.dataStore: DataStore by dataStoreInstance +@Composable +fun rememberPreferenceAsMutableState( + key: Preferences.Key, + defaultValue: T +): MutableState { + val dataStore = LocalContext.current.dataStore + val state = remember { mutableStateOf(defaultValue) } + + LaunchedEffect(Unit) { + dataStore.data.map { it[key] ?: defaultValue }.collect { state.value = it } + } + + LaunchedEffect(state.value) { + dataStore.edit { it[key] = state.value } + } + + return state +} + @SuppressLint("FlowOperatorInvokedInComposition") @Composable fun DataStore.collectPreferenceAsState( diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/reply/ReplyPage.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/reply/ReplyPage.kt index 77d57a6f..20e60b59 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/reply/ReplyPage.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/reply/ReplyPage.kt @@ -101,6 +101,7 @@ import com.huanchengfly.tieba.post.utils.Emoticon import com.huanchengfly.tieba.post.utils.EmoticonManager import com.huanchengfly.tieba.post.utils.PickMediasRequest import com.huanchengfly.tieba.post.utils.StringUtil +import com.huanchengfly.tieba.post.utils.appPreferences import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.ramcosta.composedestinations.spec.DestinationStyle @@ -308,11 +309,19 @@ fun ReplyPage( .collect { value = it } } val imeAnimationEnd by remember { derivedStateOf { imeCurrentHeight == imeAnimationTargetHeight } } - val imeVisibleHeight by produceState(initialValue = 0, imeAnimationTargetInset, density) { + val imeVisibleHeight by produceState( + initialValue = remember { context.appPreferences.imeHeight }, + imeAnimationTargetInset, + density + ) { snapshotFlow { imeAnimationTargetInset.getBottom(density) } .filter { it > 0 } .distinctUntilChanged() - .collect { value = it } + .collect { + Log.i("ReplyPage", "imeVisibleHeight: $it") + context.appPreferences.imeHeight = it + value = it + } } val textMeasurer = rememberTextMeasurer() diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt index 84894f6a..b64ae424 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/AppPreferencesUtils.kt @@ -118,6 +118,8 @@ open class AppPreferencesUtils private constructor(ctx: Context) { defaultValue = "0" ) + var imeHeight by DataStoreDelegates.int(defaultValue = 800) + var listItemsBackgroundIntermixed by DataStoreDelegates.boolean(defaultValue = true) var listSingle by DataStoreDelegates.boolean(defaultValue = false)