Skip to content

Commit 418a4a8

Browse files
committed
update to compose 1.7
1 parent 276c933 commit 418a4a8

File tree

5 files changed

+27
-76
lines changed

5 files changed

+27
-76
lines changed

gradle/libs.versions.toml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@ libVersion = "1.6.2"
33
compileSdk = "34"
44
minSdk = "21"
55
java = "11"
6-
androidx-animation = "1.6.8"
7-
androidx-foundation = "1.6.8"
6+
androidx-animation = "1.7.2"
7+
androidx-foundation = "1.7.2"
88
androidx-appcompat = "1.7.0"
99
androidx-coreKtx = "1.13.1"
1010
androidxActivityVer = "1.9.2"
11-
androidGradlePlugin = "8.6.0"
11+
androidGradlePlugin = "8.6.1"
1212
junit = "4.13.2"
1313
junitJupiterEngine = "5.11.0"
1414
junitJupiterApi = "5.11.0"
1515
kotlin = "2.0.0"
16-
lifecycleRuntimeKtx = "2.8.5"
17-
material = "1.6.8"
18-
kotlinxCoroutinesCore = "1.8.1"
16+
lifecycleRuntimeKtx = "2.8.6"
17+
material = "1.7.2"
18+
kotlinxCoroutinesCore = "1.9.0"
1919
moleculeRuntime = "2.0.0"
2020
savedstateKtx = "1.2.1"
2121
spotless = "6.25.0"
22-
jetbrainsComposePlugin = "1.6.11"
22+
jetbrainsComposePlugin = "1.7.0-beta02"
2323
skiko = "0.8.12"
24-
koin = "4.0.0-RC2"
24+
koin = "4.0.0"
2525
uuid = "0.8.4"
2626
webpackCliVersion = "5.1.4"
2727
nodeVersion = "20.14.0"
@@ -48,7 +48,7 @@ molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref
4848
skiko = { module = "org.jetbrains.skiko:skiko", version.ref = "skiko" }
4949
skiko-js = { module = "org.jetbrains.skiko:skiko-js-wasm-runtime", version.ref = "skiko" }
5050
koin = { module = "io.insert-koin:koin-core", version.ref = "koin" }
51-
koin-compose = { module = "io.insert-koin:koin-compose", version = "4.0.0-RC2" }
51+
koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" }
5252
uuid = { module = "com.benasher44:uuid", version.ref = "uuid" }
5353

5454
[plugins]

precompose/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ kotlin {
3030
sourceSetTree.set(KotlinSourceSetTree.test)
3131

3232
dependencies {
33-
androidTestImplementation("androidx.compose.ui:ui-test-junit4-android:1.6.8")
34-
debugImplementation("androidx.compose.ui:ui-test-manifest:1.6.7")
33+
androidTestImplementation("androidx.compose.ui:ui-test-junit4-android:1.7.2")
34+
debugImplementation("androidx.compose.ui:ui-test-manifest:1.7.2")
3535
}
3636
}
3737
}

precompose/src/androidMain/kotlin/moe/tlaster/precompose/PreComposeApp.android.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ actual fun PreComposeApp(
2323
) {
2424
val viewModel = androidx.lifecycle.viewmodel.compose.viewModel<PreComposeViewModel>()
2525

26-
val lifecycle = androidx.compose.ui.platform.LocalLifecycleOwner.current.lifecycle
26+
val lifecycle = androidx.lifecycle.compose.LocalLifecycleOwner.current.lifecycle
2727
val onBackPressedDispatcher = checkNotNull(androidx.activity.compose.LocalOnBackPressedDispatcherOwner.current) {
2828
"No OnBackPressedDispatcherOwner was provided via LocalOnBackPressedDispatcherOwner"
2929
}.onBackPressedDispatcher

precompose/src/commonMain/kotlin/moe/tlaster/precompose/navigation/NavHost.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.animation.core.SeekableTransitionState
99
import androidx.compose.animation.core.rememberTransition
1010
import androidx.compose.animation.core.tween
1111
import androidx.compose.animation.core.updateTransition
12+
import androidx.compose.animation.rememberSplineBasedDecay
1213
import androidx.compose.foundation.ExperimentalFoundationApi
1314
import androidx.compose.foundation.gestures.AnchoredDraggableState
1415
import androidx.compose.foundation.gestures.DraggableAnchors
@@ -140,7 +141,8 @@ fun NavHost(
140141
val state = if (actualSwipeProperties != null) {
141142
val density = LocalDensity.current
142143
val width = constraints.maxWidth.toFloat()
143-
remember {
144+
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
145+
remember(actualSwipeProperties) {
144146
AnchoredDraggableState(
145147
initialValue = DragAnchors.Start,
146148
anchors = DraggableAnchors {
@@ -149,7 +151,8 @@ fun NavHost(
149151
},
150152
positionalThreshold = actualSwipeProperties.positionalThreshold,
151153
velocityThreshold = { actualSwipeProperties.velocityThreshold.invoke(density) },
152-
animationSpec = tween(),
154+
snapAnimationSpec = tween(),
155+
decayAnimationSpec = decayAnimationSpec,
153156
)
154157
}.also { state ->
155158
LaunchedEffect(
@@ -159,13 +162,13 @@ fun NavHost(
159162
if (state.currentValue == DragAnchors.End && !state.isAnimationRunning) {
160163
// play the animation to the end
161164
progress = 1f
162-
state.snapTo(DragAnchors.Start)
163165
}
164166
}
165-
LaunchedEffect(state.progress) {
166-
if (state.progress != 1f) {
167-
inPredictiveBack = state.progress > 0f
168-
progress = state.progress
167+
val stateProgress = state.progress(DragAnchors.Start, DragAnchors.End)
168+
LaunchedEffect(stateProgress) {
169+
if (stateProgress != 1f) {
170+
inPredictiveBack = stateProgress > 0f
171+
progress = stateProgress
169172
} else if (state.currentValue != DragAnchors.End && inPredictiveBack) {
170173
// reset the state to the initial value
171174
progress = -1f
@@ -185,20 +188,21 @@ fun NavHost(
185188
}
186189
val transition = if (showPrev) {
187190
val transitionState by remember(sceneEntry) {
188-
mutableStateOf(SeekableTransitionState(sceneEntry, prevSceneEntry!!))
191+
mutableStateOf(SeekableTransitionState(sceneEntry))
189192
}
190193
LaunchedEffect(progress) {
191194
if (progress == 1f) {
192195
// play the animation to the end
193-
transitionState.animateToTargetState()
196+
transitionState.animateTo(prevSceneEntry!!)
194197
inPredictiveBack = false
195198
navigator.goBack()
196199
progress = 0f
200+
state?.snapTo(DragAnchors.Start)
197201
} else if (progress >= 0) {
198-
transitionState.snapToFraction(progress)
202+
transitionState.seekTo(progress, targetState = prevSceneEntry!!)
199203
} else if (progress == -1f) {
200204
// reset the state to the initial value
201-
transitionState.animateToCurrentState()
205+
transitionState.seekTo(0f, targetState = prevSceneEntry!!)
202206
inPredictiveBack = false
203207
progress = 0f
204208
}

precompose/src/jvmMain/kotlin/moe/tlaster/precompose/PreComposeWindow.kt

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,9 @@ import androidx.compose.runtime.CompositionLocalProvider
55
import androidx.compose.runtime.DisposableEffect
66
import androidx.compose.runtime.remember
77
import androidx.compose.runtime.staticCompositionLocalOf
8-
import androidx.compose.ui.graphics.painter.Painter
9-
import androidx.compose.ui.input.key.KeyEvent
108
import androidx.compose.ui.window.FrameWindowScope
119
import androidx.compose.ui.window.Window
1210
import androidx.compose.ui.window.WindowScope
13-
import androidx.compose.ui.window.WindowState
14-
import androidx.compose.ui.window.rememberWindowState
1511
import moe.tlaster.precompose.lifecycle.Lifecycle
1612
import moe.tlaster.precompose.lifecycle.LifecycleOwner
1713
import moe.tlaster.precompose.lifecycle.LifecycleRegistry
@@ -25,55 +21,6 @@ import java.awt.Window
2521
import java.awt.event.WindowAdapter
2622
import java.awt.event.WindowEvent
2723

28-
@Deprecated(
29-
message = """
30-
Use Window directly instead. And make sure wrap your content with PreComposeApp.
31-
PreComposeWindow will be removed in the future release.
32-
For migration guide, please refer to https://github.com/Tlaster/PreCompose/releases/tag/1.5.5
33-
""",
34-
replaceWith = ReplaceWith("PreComposeWindow"),
35-
)
36-
@Composable
37-
fun PreComposeWindow(
38-
onCloseRequest: () -> Unit,
39-
state: WindowState = rememberWindowState(),
40-
visible: Boolean = true,
41-
title: String = "Untitled",
42-
icon: Painter? = null,
43-
undecorated: Boolean = false,
44-
transparent: Boolean = false,
45-
resizable: Boolean = true,
46-
enabled: Boolean = true,
47-
focusable: Boolean = true,
48-
alwaysOnTop: Boolean = false,
49-
onPreviewKeyEvent: (KeyEvent) -> Boolean = { false },
50-
onKeyEvent: (KeyEvent) -> Boolean = { false },
51-
content: @Composable FrameWindowScope.() -> Unit,
52-
) {
53-
Window(
54-
onCloseRequest = onCloseRequest,
55-
state = state,
56-
visible = visible,
57-
title = title,
58-
icon = icon,
59-
undecorated = undecorated,
60-
transparent = transparent,
61-
resizable = resizable,
62-
enabled = enabled,
63-
focusable = focusable,
64-
alwaysOnTop = alwaysOnTop,
65-
onPreviewKeyEvent = onPreviewKeyEvent,
66-
onKeyEvent = onKeyEvent,
67-
content = {
68-
ProvidePreComposeLocals {
69-
PreComposeApp {
70-
content.invoke(this)
71-
}
72-
}
73-
},
74-
)
75-
}
76-
7724
val LocalWindow = staticCompositionLocalOf<Window> {
7825
error("No Window for PreCompose, please use ProvidePreComposeLocals in WindowScope to setup your desktop project")
7926
}

0 commit comments

Comments
 (0)