Skip to content

Commit 352c6f8

Browse files
committed
pref: resetScroll
1 parent 22fc681 commit 352c6f8

File tree

2 files changed

+31
-30
lines changed

2 files changed

+31
-30
lines changed

app/src/main/kotlin/li/songe/gkd/data/AppVisitLog.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import li.songe.gkd.util.systemUiAppId
1717
tableName = "app_visit_log",
1818
)
1919
data class AppVisitLog(
20-
@PrimaryKey() @ColumnInfo(name = "id") val id: String,
20+
@PrimaryKey @ColumnInfo(name = "id") val id: String,
2121
@ColumnInfo(name = "mtime") val mtime: Long,
2222
) {
2323
@Dao
@@ -59,7 +59,8 @@ data class AppVisitLog(
5959
}
6060

6161
private fun fixAppVisitTime(appId: String, t: Long): Long = when (appId) {
62-
META.appId, launcherAppId, systemUiAppId -> t - 60_000
62+
META.appId -> t - 120_000
63+
launcherAppId, systemUiAppId -> t - 60_000
6364
else -> t
6465
}
6566

app/src/main/kotlin/li/songe/gkd/ui/component/Hooks.kt

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,21 @@ package li.songe.gkd.ui.component
22

33
import androidx.compose.animation.core.AnimationConstants.DefaultDurationMillis
44
import androidx.compose.foundation.ScrollState
5-
import androidx.compose.foundation.gestures.ScrollableState
65
import androidx.compose.foundation.layout.height
76
import androidx.compose.foundation.layout.width
87
import androidx.compose.foundation.lazy.LazyListState
9-
import androidx.compose.foundation.lazy.rememberLazyListState
10-
import androidx.compose.foundation.rememberScrollState
118
import androidx.compose.material3.LocalTextStyle
129
import androidx.compose.material3.TopAppBarDefaults
1310
import androidx.compose.material3.TopAppBarScrollBehavior
11+
import androidx.compose.material3.TopAppBarState
1412
import androidx.compose.runtime.Composable
1513
import androidx.compose.runtime.LaunchedEffect
1614
import androidx.compose.runtime.ReadOnlyComposable
1715
import androidx.compose.runtime.collectAsState
1816
import androidx.compose.runtime.derivedStateOf
1917
import androidx.compose.runtime.remember
2018
import androidx.compose.runtime.rememberCoroutineScope
19+
import androidx.compose.runtime.saveable.rememberSaveable
2120
import androidx.compose.ui.Modifier
2221
import androidx.compose.ui.focus.FocusRequester
2322
import androidx.compose.ui.focus.focusRequester
@@ -81,46 +80,47 @@ fun useListScrollState(
8180
v3: Any? = null,
8281
canScroll: () -> Boolean = { true },
8382
): Pair<TopAppBarScrollBehavior, LazyListState> {
84-
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(canScroll = canScroll)
85-
val scrollState = rememberLazyListState()
86-
LaunchedEffect(getCompatStateValue(v1), getCompatStateValue(v2), getCompatStateValue(v3)) {
87-
resetScroll(scrollBehavior, scrollState)
83+
val x1 = getCompatStateValue(v1)
84+
val x2 = getCompatStateValue(v2)
85+
val x3 = getCompatStateValue(v3)
86+
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(
87+
state = rememberSaveable(x1, x2, x3, saver = TopAppBarState.Saver) {
88+
TopAppBarState(-Float.MAX_VALUE, 0f, 0f)
89+
},
90+
canScroll = canScroll
91+
)
92+
val scrollState = rememberSaveable(x1, x2, x3, saver = LazyListState.Saver) {
93+
LazyListState(0, 0)
8894
}
8995
return scrollBehavior to scrollState
9096
}
9197

9298
@Composable
9399
fun usePinnedScrollBehaviorState(v1: Any?): Pair<TopAppBarScrollBehavior, LazyListState> {
94-
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
95-
val scrollState = rememberLazyListState()
96-
LaunchedEffect(getCompatStateValue(v1)) {
97-
resetScroll(scrollBehavior, scrollState)
100+
val x1 = getCompatStateValue(v1)
101+
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(
102+
state = rememberSaveable(x1, saver = TopAppBarState.Saver) {
103+
TopAppBarState(-Float.MAX_VALUE, 0f, 0f)
104+
},
105+
)
106+
val scrollState = rememberSaveable(x1, saver = LazyListState.Saver) {
107+
LazyListState(0, 0)
98108
}
99109
return scrollBehavior to scrollState
100110
}
101111

102112
@Composable
103113
fun useScrollBehaviorState(v1: Any?): Pair<TopAppBarScrollBehavior, ScrollState> {
104-
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
105-
val scrollState = rememberScrollState()
106-
LaunchedEffect(getCompatStateValue(v1)) {
107-
resetScroll(scrollBehavior, scrollState)
108-
}
114+
val x1 = getCompatStateValue(v1)
115+
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(
116+
state = rememberSaveable(x1, saver = TopAppBarState.Saver) {
117+
TopAppBarState(-Float.MAX_VALUE, 0f, 0f)
118+
},
119+
)
120+
val scrollState = rememberSaveable(x1, saver = ScrollState.Saver) { ScrollState(initial = 0) }
109121
return scrollBehavior to scrollState
110122
}
111123

112-
private suspend fun resetScroll(
113-
scrollBehavior: TopAppBarScrollBehavior,
114-
scrollState: ScrollableState,
115-
) {
116-
when (scrollState) {
117-
is LazyListState -> scrollState.scrollToItem(0)
118-
is ScrollState -> scrollState.scrollTo(0)
119-
}
120-
scrollBehavior.state.heightOffset = 0f
121-
scrollBehavior.state.contentOffset = 0f
122-
}
123-
124124
@Composable
125125
fun LazyListState.isAtBottom(): androidx.compose.runtime.State<Boolean> = remember(this) {
126126
derivedStateOf {

0 commit comments

Comments
 (0)