Skip to content

Commit

Permalink
perf: navigation, image
Browse files Browse the repository at this point in the history
  • Loading branch information
lisonge committed Sep 13, 2024
1 parent 757193d commit a9dc129
Show file tree
Hide file tree
Showing 32 changed files with 230 additions and 289 deletions.
3 changes: 1 addition & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeFeatureFlag
import java.io.ByteArrayOutputStream

fun String.runCommand(currentWorkingDir: File = file("./")): String {
Expand Down Expand Up @@ -175,7 +174,7 @@ configurations.configureEach {
}

composeCompiler {
featureFlags.addAll(ComposeFeatureFlag.StrongSkipping)
// featureFlags.addAll(ComposeFeatureFlag.StrongSkipping) // default StrongSkipping
reportsDestination = layout.buildDirectory.dir("compose_compiler")
stabilityConfigurationFile = rootProject.layout.projectDirectory.file("stability_config.conf")
}
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/kotlin/li/songe/gkd/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import com.blankj.utilcode.util.ServiceUtils
import com.dylanc.activityresult.launcher.PickContentLauncher
import com.dylanc.activityresult.launcher.StartActivityLauncher
import com.ramcosta.composedestinations.DestinationsNavHost
import com.ramcosta.composedestinations.generated.NavGraphs
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
Expand All @@ -40,7 +41,6 @@ import li.songe.gkd.service.GkdAbService
import li.songe.gkd.service.ManageService
import li.songe.gkd.service.fixRestartService
import li.songe.gkd.service.updateLauncherAppId
import li.songe.gkd.ui.NavGraphs
import li.songe.gkd.ui.component.BuildDialog
import li.songe.gkd.ui.theme.AppTheme
import li.songe.gkd.util.LocalNavController
Expand Down Expand Up @@ -86,8 +86,8 @@ class MainActivity : ComponentActivity() {
LocalNavController provides navController
) {
DestinationsNavHost(
navGraph = NavGraphs.root,
navController = navController
navController = navController,
navGraph = NavGraphs.root
)
ShizukuErrorDialog(mainVm.shizukuErrorFlow)
AuthDialog(mainVm.authReasonFlow)
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/kotlin/li/songe/gkd/ui/AboutPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.annotation.RootGraph
import li.songe.gkd.META
import li.songe.gkd.ui.style.EmptyHeight
import li.songe.gkd.ui.style.itemPadding
Expand All @@ -32,8 +32,7 @@ import li.songe.gkd.util.REPOSITORY_URL
import li.songe.gkd.util.format
import li.songe.gkd.util.openUri

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun AboutPage() {
val navController = LocalNavController.current
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/kotlin/li/songe/gkd/ui/ActivityLogPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.annotation.RootGraph
import li.songe.gkd.MainActivity
import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.component.EmptyText
Expand All @@ -46,8 +46,7 @@ import li.songe.gkd.util.appInfoCacheFlow
import li.songe.gkd.util.launchAsFn
import li.songe.gkd.util.throttle

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun ActivityLogPage() {
val context = LocalContext.current as MainActivity
Expand Down
15 changes: 7 additions & 8 deletions app/src/main/kotlin/li/songe/gkd/ui/AdvancedPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,10 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.blankj.utilcode.util.LogUtils
import com.dylanc.activityresult.launcher.launchForResult
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.navigation.navigate
import com.ramcosta.composedestinations.annotation.RootGraph
import com.ramcosta.composedestinations.generated.destinations.ActivityLogPageDestination
import com.ramcosta.composedestinations.generated.destinations.SnapshotPageDestination
import com.ramcosta.composedestinations.utils.toDestinationsNavigator
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.update
import li.songe.gkd.MainActivity
Expand All @@ -80,8 +82,6 @@ import li.songe.gkd.ui.component.AuthCard
import li.songe.gkd.ui.component.SettingItem
import li.songe.gkd.ui.component.TextSwitch
import li.songe.gkd.ui.component.updateDialogOptions
import li.songe.gkd.ui.destinations.ActivityLogPageDestination
import li.songe.gkd.ui.destinations.SnapshotPageDestination
import li.songe.gkd.ui.style.EmptyHeight
import li.songe.gkd.ui.style.itemPadding
import li.songe.gkd.ui.style.titleItemPadding
Expand All @@ -100,8 +100,7 @@ import li.songe.gkd.util.throttle
import li.songe.gkd.util.toast
import rikka.shizuku.Shizuku

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun AdvancedPage() {
val context = LocalContext.current as MainActivity
Expand Down Expand Up @@ -420,7 +419,7 @@ fun AdvancedPage() {
SettingItem(
title = "快照记录" + (if (snapshotCount > 0) "-$snapshotCount" else ""),
onClick = {
navController.navigate(SnapshotPageDestination)
navController.toDestinationsNavigator().navigate(SnapshotPageDestination)
}
)

Expand Down Expand Up @@ -543,7 +542,7 @@ fun AdvancedPage() {
SettingItem(
title = "界面记录",
onClick = {
navController.navigate(ActivityLogPageDestination)
navController.toDestinationsNavigator().navigate(ActivityLogPageDestination)
}
)

Expand Down
17 changes: 8 additions & 9 deletions app/src/main/kotlin/li/songe/gkd/ui/AppConfigPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,10 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.navigation.navigate
import com.ramcosta.composedestinations.annotation.RootGraph
import com.ramcosta.composedestinations.generated.destinations.AppItemPageDestination
import com.ramcosta.composedestinations.generated.destinations.GlobalRulePageDestination
import com.ramcosta.composedestinations.utils.toDestinationsNavigator
import kotlinx.coroutines.flow.update
import li.songe.gkd.MainActivity
import li.songe.gkd.data.ExcludeData
Expand All @@ -60,8 +62,6 @@ import li.songe.gkd.data.stringify
import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.component.EmptyText
import li.songe.gkd.ui.component.updateDialogOptions
import li.songe.gkd.ui.destinations.AppItemPageDestination
import li.songe.gkd.ui.destinations.GlobalRulePageDestination
import li.songe.gkd.ui.style.EmptyHeight
import li.songe.gkd.ui.style.itemPadding
import li.songe.gkd.ui.style.itemVerticalPadding
Expand All @@ -76,8 +76,7 @@ import li.songe.gkd.util.appInfoCacheFlow
import li.songe.gkd.util.launchTry
import li.songe.gkd.util.throttle

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun AppConfigPage(appId: String) {
val navController = LocalNavController.current
Expand Down Expand Up @@ -165,7 +164,7 @@ fun AppConfigPage(appId: String) {
floatingActionButton = {
FloatingActionButton(
onClick = throttle {
navController.navigate(AppItemPageDestination(LOCAL_SUBS_ID, appId))
navController.toDestinationsNavigator().navigate(AppItemPageDestination(LOCAL_SUBS_ID, appId))
},
content = {
Icon(
Expand All @@ -190,7 +189,7 @@ fun AppConfigPage(appId: String) {
group = g.group,
checked = checked,
onClick = throttle {
navController.navigate(
navController.toDestinationsNavigator().navigate(
GlobalRulePageDestination(
g.subsItem.id,
g.group.key
Expand Down Expand Up @@ -229,7 +228,7 @@ fun AppConfigPage(appId: String) {
group = g.group,
checked = g.enable,
onClick = {
navController.navigate(
navController.toDestinationsNavigator().navigate(
AppItemPageDestination(
g.subsItem.id,
appId,
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/kotlin/li/songe/gkd/ui/AppConfigVm.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package li.songe.gkd.ui
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.ramcosta.composedestinations.generated.destinations.AppConfigPageDestination
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.combine
Expand All @@ -11,7 +12,6 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import li.songe.gkd.data.SubsConfig
import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.destinations.AppConfigPageDestination
import li.songe.gkd.util.ResolvedAppGroup
import li.songe.gkd.util.ResolvedGlobalGroup
import li.songe.gkd.util.RuleSortOption
Expand Down
18 changes: 8 additions & 10 deletions app/src/main/kotlin/li/songe/gkd/ui/AppItemPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,9 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.blankj.utilcode.util.ClipboardUtils
import com.blankj.utilcode.util.LogUtils
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.navigation.navigate
import com.ramcosta.composedestinations.annotation.RootGraph
import com.ramcosta.composedestinations.generated.destinations.ImagePreviewPageDestination
import com.ramcosta.composedestinations.utils.toDestinationsNavigator
import kotlinx.coroutines.Dispatchers
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.jsonObject
Expand All @@ -70,7 +71,6 @@ import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.component.EmptyText
import li.songe.gkd.ui.component.TowLineText
import li.songe.gkd.ui.component.waitResult
import li.songe.gkd.ui.destinations.GroupImagePageDestination
import li.songe.gkd.ui.style.EmptyHeight
import li.songe.gkd.ui.style.itemPadding
import li.songe.gkd.util.LocalNavController
Expand All @@ -86,8 +86,7 @@ import li.songe.gkd.util.updateSubscription
import li.songe.json5.Json5
import li.songe.json5.encodeToJson5String

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun AppItemPage(
subsItemId: Long,
Expand Down Expand Up @@ -371,11 +370,10 @@ fun AppItemPage(
if (showGroupItemVal.allExampleUrls.isNotEmpty()) {
TextButton(onClick = throttle {
setShowGroupItem(null)
navController.navigate(
GroupImagePageDestination(
subsInt = subsItemId,
groupKey = showGroupItemVal.key,
appId = appId,
navController.toDestinationsNavigator().navigate(
ImagePreviewPageDestination(
title = showGroupItemVal.name,
uris = showGroupItemVal.allExampleUrls.toTypedArray()
)
)
}) {
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/kotlin/li/songe/gkd/ui/AppItemVm.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package li.songe.gkd.ui
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.ramcosta.composedestinations.generated.destinations.AppItemPageDestination
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import li.songe.gkd.data.RawSubscription
import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.destinations.AppItemPageDestination
import li.songe.gkd.util.map
import li.songe.gkd.util.subsIdToRawFlow
import li.songe.gkd.util.subsItemsFlow
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/kotlin/li/songe/gkd/ui/AuthA11yPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.blankj.utilcode.util.ClipboardUtils
import com.blankj.utilcode.util.LogUtils
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.annotation.RootGraph
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import li.songe.gkd.META
Expand All @@ -58,8 +58,7 @@ import li.songe.gkd.util.toast
import rikka.shizuku.Shizuku
import java.io.DataOutputStream

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun AuthA11yPage() {
val context = LocalContext.current as MainActivity
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/kotlin/li/songe/gkd/ui/CategoryPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.annotation.RootGraph
import kotlinx.coroutines.Dispatchers
import li.songe.gkd.MainActivity
import li.songe.gkd.data.CategoryConfig
Expand All @@ -66,8 +66,7 @@ import li.songe.gkd.util.throttle
import li.songe.gkd.util.toast
import li.songe.gkd.util.updateSubscription

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun CategoryPage(subsItemId: Long) {
val context = LocalContext.current as MainActivity
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/kotlin/li/songe/gkd/ui/CategoryVm.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ package li.songe.gkd.ui
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.ramcosta.composedestinations.generated.destinations.CategoryPageDestination
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.stateIn
import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.destinations.CategoryPageDestination
import li.songe.gkd.util.map
import li.songe.gkd.util.subsIdToRawFlow
import li.songe.gkd.util.subsItemsFlow
Expand Down
15 changes: 7 additions & 8 deletions app/src/main/kotlin/li/songe/gkd/ui/ClickLogPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,10 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.navigation.navigate
import com.ramcosta.composedestinations.annotation.RootGraph
import com.ramcosta.composedestinations.generated.destinations.AppItemPageDestination
import com.ramcosta.composedestinations.generated.destinations.GlobalRulePageDestination
import com.ramcosta.composedestinations.utils.toDestinationsNavigator
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
Expand All @@ -60,8 +62,6 @@ import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.component.EmptyText
import li.songe.gkd.ui.component.StartEllipsisText
import li.songe.gkd.ui.component.waitResult
import li.songe.gkd.ui.destinations.AppItemPageDestination
import li.songe.gkd.ui.destinations.GlobalRulePageDestination
import li.songe.gkd.ui.style.EmptyHeight
import li.songe.gkd.util.LocalNavController
import li.songe.gkd.util.ProfileTransitions
Expand All @@ -71,8 +71,7 @@ import li.songe.gkd.util.subsIdToRawFlow
import li.songe.gkd.util.throttle
import li.songe.gkd.util.toast

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun ClickLogPage() {
val context = LocalContext.current as MainActivity
Expand Down Expand Up @@ -221,13 +220,13 @@ fun ClickLogPage() {
.clickable(onClick = throttle {
clickLog.appId ?: return@throttle
if (clickLog.groupType == SubsConfig.AppGroupType) {
navController.navigate(
navController.toDestinationsNavigator().navigate(
AppItemPageDestination(
clickLog.subsId, clickLog.appId, clickLog.groupKey
)
)
} else if (clickLog.groupType == SubsConfig.GlobalGroupType) {
navController.navigate(
navController.toDestinationsNavigator().navigate(
GlobalRulePageDestination(
clickLog.subsId, clickLog.groupKey
)
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/kotlin/li/songe/gkd/ui/GlobalRuleExcludePage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.accompanist.drawablepainter.rememberDrawablePainter
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.annotation.RootGraph
import li.songe.gkd.data.AppInfo
import li.songe.gkd.data.ExcludeData
import li.songe.gkd.data.RawSubscription
Expand All @@ -81,8 +81,7 @@ import li.songe.gkd.util.SortTypeOption
import li.songe.gkd.util.launchTry
import li.songe.gkd.util.toast

@RootNavGraph
@Destination(style = ProfileTransitions::class)
@Destination<RootGraph>(style = ProfileTransitions::class)
@Composable
fun GlobalRuleExcludePage(subsItemId: Long, groupKey: Int) {
val navController = LocalNavController.current
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/kotlin/li/songe/gkd/ui/GlobalRuleExcludeVm.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package li.songe.gkd.ui
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.ramcosta.composedestinations.generated.destinations.GlobalRuleExcludePageDestination
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.combine
Expand All @@ -11,7 +12,6 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import li.songe.gkd.data.ExcludeData
import li.songe.gkd.db.DbSet
import li.songe.gkd.ui.destinations.GlobalRuleExcludePageDestination
import li.songe.gkd.util.SortTypeOption
import li.songe.gkd.util.map
import li.songe.gkd.util.orderedAppInfosFlow
Expand Down
Loading

0 comments on commit a9dc129

Please sign in to comment.