mirror of
https://mirror.skon.top/github.com/gkd-kit/gkd
synced 2026-04-20 21:00:12 +08:00
pref: resetScroll
This commit is contained in:
@@ -17,7 +17,7 @@ import li.songe.gkd.util.systemUiAppId
|
||||
tableName = "app_visit_log",
|
||||
)
|
||||
data class AppVisitLog(
|
||||
@PrimaryKey() @ColumnInfo(name = "id") val id: String,
|
||||
@PrimaryKey @ColumnInfo(name = "id") val id: String,
|
||||
@ColumnInfo(name = "mtime") val mtime: Long,
|
||||
) {
|
||||
@Dao
|
||||
@@ -59,7 +59,8 @@ data class AppVisitLog(
|
||||
}
|
||||
|
||||
private fun fixAppVisitTime(appId: String, t: Long): Long = when (appId) {
|
||||
META.appId, launcherAppId, systemUiAppId -> t - 60_000
|
||||
META.appId -> t - 120_000
|
||||
launcherAppId, systemUiAppId -> t - 60_000
|
||||
else -> t
|
||||
}
|
||||
|
||||
|
||||
@@ -2,15 +2,13 @@ package li.songe.gkd.ui.component
|
||||
|
||||
import androidx.compose.animation.core.AnimationConstants.DefaultDurationMillis
|
||||
import androidx.compose.foundation.ScrollState
|
||||
import androidx.compose.foundation.gestures.ScrollableState
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.material3.LocalTextStyle
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||
import androidx.compose.material3.TopAppBarState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.ReadOnlyComposable
|
||||
@@ -18,6 +16,7 @@ import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.focus.focusRequester
|
||||
@@ -81,46 +80,47 @@ fun useListScrollState(
|
||||
v3: Any? = null,
|
||||
canScroll: () -> Boolean = { true },
|
||||
): Pair<TopAppBarScrollBehavior, LazyListState> {
|
||||
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(canScroll = canScroll)
|
||||
val scrollState = rememberLazyListState()
|
||||
LaunchedEffect(getCompatStateValue(v1), getCompatStateValue(v2), getCompatStateValue(v3)) {
|
||||
resetScroll(scrollBehavior, scrollState)
|
||||
val x1 = getCompatStateValue(v1)
|
||||
val x2 = getCompatStateValue(v2)
|
||||
val x3 = getCompatStateValue(v3)
|
||||
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(
|
||||
state = rememberSaveable(x1, x2, x3, saver = TopAppBarState.Saver) {
|
||||
TopAppBarState(-Float.MAX_VALUE, 0f, 0f)
|
||||
},
|
||||
canScroll = canScroll
|
||||
)
|
||||
val scrollState = rememberSaveable(x1, x2, x3, saver = LazyListState.Saver) {
|
||||
LazyListState(0, 0)
|
||||
}
|
||||
return scrollBehavior to scrollState
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun usePinnedScrollBehaviorState(v1: Any?): Pair<TopAppBarScrollBehavior, LazyListState> {
|
||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
|
||||
val scrollState = rememberLazyListState()
|
||||
LaunchedEffect(getCompatStateValue(v1)) {
|
||||
resetScroll(scrollBehavior, scrollState)
|
||||
val x1 = getCompatStateValue(v1)
|
||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(
|
||||
state = rememberSaveable(x1, saver = TopAppBarState.Saver) {
|
||||
TopAppBarState(-Float.MAX_VALUE, 0f, 0f)
|
||||
},
|
||||
)
|
||||
val scrollState = rememberSaveable(x1, saver = LazyListState.Saver) {
|
||||
LazyListState(0, 0)
|
||||
}
|
||||
return scrollBehavior to scrollState
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun useScrollBehaviorState(v1: Any?): Pair<TopAppBarScrollBehavior, ScrollState> {
|
||||
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
|
||||
val scrollState = rememberScrollState()
|
||||
LaunchedEffect(getCompatStateValue(v1)) {
|
||||
resetScroll(scrollBehavior, scrollState)
|
||||
}
|
||||
val x1 = getCompatStateValue(v1)
|
||||
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(
|
||||
state = rememberSaveable(x1, saver = TopAppBarState.Saver) {
|
||||
TopAppBarState(-Float.MAX_VALUE, 0f, 0f)
|
||||
},
|
||||
)
|
||||
val scrollState = rememberSaveable(x1, saver = ScrollState.Saver) { ScrollState(initial = 0) }
|
||||
return scrollBehavior to scrollState
|
||||
}
|
||||
|
||||
private suspend fun resetScroll(
|
||||
scrollBehavior: TopAppBarScrollBehavior,
|
||||
scrollState: ScrollableState,
|
||||
) {
|
||||
when (scrollState) {
|
||||
is LazyListState -> scrollState.scrollToItem(0)
|
||||
is ScrollState -> scrollState.scrollTo(0)
|
||||
}
|
||||
scrollBehavior.state.heightOffset = 0f
|
||||
scrollBehavior.state.contentOffset = 0f
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun LazyListState.isAtBottom(): androidx.compose.runtime.State<Boolean> = remember(this) {
|
||||
derivedStateOf {
|
||||
|
||||
Reference in New Issue
Block a user