diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 55a7e45e5..7e4914c7a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -23,8 +23,8 @@ android { targetSdk = libs.versions.android.targetSdk.get().toInt() applicationId = "li.songe.gkd" - versionCode = 9 - versionName = "1.4.1" + versionCode = 11 + versionName = "1.5.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/li/songe/gkd/ui/HomePageVm.kt b/app/src/main/java/li/songe/gkd/ui/HomePageVm.kt index 7ee358b18..ca17cb9cc 100644 --- a/app/src/main/java/li/songe/gkd/ui/HomePageVm.kt +++ b/app/src/main/java/li/songe/gkd/ui/HomePageVm.kt @@ -29,6 +29,7 @@ import li.songe.gkd.util.LoadStatus import li.songe.gkd.util.checkUpdate import li.songe.gkd.util.client import li.songe.gkd.util.dbFolder +import li.songe.gkd.util.initFolder import li.songe.gkd.util.json import li.songe.gkd.util.launchTry import li.songe.gkd.util.storeFlow @@ -86,6 +87,12 @@ class HomePageVm @Inject constructor() : ViewModel() { } } } + + viewModelScope.launchTry(Dispatchers.IO) { + // 在某些机型由于未知原因创建失败 + // 在此保证每次重新打开APP都能重新检测创建 + initFolder() + } } val uploadStatusFlow = MutableStateFlow?>(null) @@ -105,10 +112,10 @@ class HomePageVm @Inject constructor() : ViewModel() { onUpload { bytesSentTotal, contentLength -> if (uploadStatusFlow.value is LoadStatus.Loading) { uploadStatusFlow.value = - LoadStatus.Loading(bytesSentTotal / contentLength.toFloat()) + LoadStatus.Loading(bytesSentTotal / contentLength.toFloat()) + } } } - } if (response.headers["X_RPC_OK"] == "true") { val policiesAsset = response.body() uploadStatusFlow.value = LoadStatus.Success(policiesAsset) diff --git a/app/src/main/java/li/songe/gkd/util/ProfileTransitions.kt b/app/src/main/java/li/songe/gkd/util/ProfileTransitions.kt index b9723e0ea..8860743c3 100644 --- a/app/src/main/java/li/songe/gkd/util/ProfileTransitions.kt +++ b/app/src/main/java/li/songe/gkd/util/ProfileTransitions.kt @@ -4,26 +4,37 @@ import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition import androidx.compose.animation.core.tween -import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInHorizontally import androidx.compose.animation.slideOutHorizontally import androidx.navigation.NavBackStackEntry +import com.blankj.utilcode.util.ScreenUtils import com.ramcosta.composedestinations.spec.DestinationStyle object ProfileTransitions : DestinationStyle.Animated { + private const val durationMillis = 400 override fun AnimatedContentTransitionScope.enterTransition(): EnterTransition? { - return slideInHorizontally(tween()) { it } + return slideInHorizontally( + initialOffsetX = { ScreenUtils.getScreenWidth() }, animationSpec = tween(durationMillis) + ) } override fun AnimatedContentTransitionScope.exitTransition(): ExitTransition? { - return slideOutHorizontally(tween()) { -it } + fadeOut(tween()) + return slideOutHorizontally( + targetOffsetX = { -ScreenUtils.getScreenWidth() / 2 }, + animationSpec = tween(durationMillis) + ) } override fun AnimatedContentTransitionScope.popEnterTransition(): EnterTransition? { - return slideInHorizontally(tween()) { -it } + return slideInHorizontally( + initialOffsetX = { -ScreenUtils.getScreenWidth() / 2 }, + animationSpec = tween(durationMillis) + ) } override fun AnimatedContentTransitionScope.popExitTransition(): ExitTransition? { - return slideOutHorizontally(tween()) { it } + return slideOutHorizontally( + targetOffsetX = { ScreenUtils.getScreenWidth() }, animationSpec = tween(durationMillis) + ) } } \ No newline at end of file