Skip to content

Commit 4745d57

Browse files
committed
perf: AppOpsAllowPage
1 parent 3fdf635 commit 4745d57

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

app/src/main/kotlin/li/songe/gkd/ui/AboutPage.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ import kotlinx.coroutines.isActive
6060
import li.songe.gkd.META
6161
import li.songe.gkd.MainActivity
6262
import li.songe.gkd.R
63-
import li.songe.gkd.app
6463
import li.songe.gkd.store.storeFlow
6564
import li.songe.gkd.ui.component.PerfIcon
6665
import li.songe.gkd.ui.component.PerfIconButton
@@ -84,15 +83,14 @@ import li.songe.gkd.util.UpdateChannelOption
8483
import li.songe.gkd.util.buildLogFile
8584
import li.songe.gkd.util.findOption
8685
import li.songe.gkd.util.format
86+
import li.songe.gkd.util.getShareApkFile
8787
import li.songe.gkd.util.launchAsFn
8888
import li.songe.gkd.util.launchTry
8989
import li.songe.gkd.util.openUri
9090
import li.songe.gkd.util.saveFileToDownloads
9191
import li.songe.gkd.util.shareFile
92-
import li.songe.gkd.util.sharedDir
9392
import li.songe.gkd.util.throttle
9493
import li.songe.gkd.util.toast
95-
import java.io.File
9694

9795
@Destination<RootGraph>(style = ProfileTransitions::class)
9896
@Composable
@@ -465,12 +463,6 @@ private fun exportPlayTipTemplate(): AnnotatedString {
465463
}
466464
}
467465

468-
private fun getShareApkFile(): File {
469-
return sharedDir.resolve("gkd-v${META.versionName}.apk").apply {
470-
File(app.packageCodePath).copyTo(this, overwrite = true)
471-
}
472-
}
473-
474466
@Composable
475467
private fun AnimatedLogoIcon(
476468
modifier: Modifier = Modifier

app/src/main/kotlin/li/songe/gkd/ui/AppOpsAllowPage.kt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package li.songe.gkd.ui
22

3+
import androidx.activity.compose.LocalActivity
34
import androidx.compose.foundation.background
45
import androidx.compose.foundation.layout.Arrangement
56
import androidx.compose.foundation.layout.Column
@@ -31,6 +32,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
3132
import com.ramcosta.composedestinations.annotation.Destination
3233
import com.ramcosta.composedestinations.annotation.RootGraph
3334
import kotlinx.coroutines.Dispatchers
35+
import li.songe.gkd.MainActivity
3436
import li.songe.gkd.permission.PermissionState
3537
import li.songe.gkd.permission.appOpsRestrictStateList
3638
import li.songe.gkd.ui.component.AuthButtonGroup
@@ -39,17 +41,22 @@ import li.songe.gkd.ui.component.ManualAuthDialog
3941
import li.songe.gkd.ui.component.PerfIcon
4042
import li.songe.gkd.ui.component.PerfIconButton
4143
import li.songe.gkd.ui.component.PerfTopAppBar
44+
import li.songe.gkd.ui.component.updateDialogOptions
4245
import li.songe.gkd.ui.share.LocalMainViewModel
4346
import li.songe.gkd.ui.style.EmptyHeight
4447
import li.songe.gkd.ui.style.ProfileTransitions
4548
import li.songe.gkd.ui.style.itemHorizontalPadding
49+
import li.songe.gkd.util.getShareApkFile
4650
import li.songe.gkd.util.launchAsFn
51+
import li.songe.gkd.util.launchTry
52+
import li.songe.gkd.util.saveFileToDownloads
4753
import li.songe.gkd.util.toast
4854

4955
@Destination<RootGraph>(style = ProfileTransitions::class)
5056
@Composable
5157
fun AppOpsAllowPage() {
5258
val mainVm = LocalMainViewModel.current
59+
val context = LocalActivity.current as MainActivity
5360
val vm = viewModel<AppOpsAllowVm>()
5461
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
5562
val appOpsRestricted by mainVm.appOpsRestrictedFlow.collectAsState()
@@ -75,11 +82,12 @@ fun AppOpsAllowPage() {
7582
.fillMaxWidth(),
7683
) {
7784
Text(
78-
text = "下列权限应默认授予,但可能因某些操作被限制",
85+
text = "下列权限应默认授予,但可能因某些操作如系统升级,备份迁移等被限制",
7986
style = MaterialTheme.typography.bodyMedium,
8087
)
8188
Spacer(modifier = Modifier.height(24.dp))
8289
Column(
90+
modifier = Modifier.padding(horizontal = 8.dp),
8391
verticalArrangement = Arrangement.spacedBy(12.dp),
8492
) {
8593
appOpsRestrictStateList.forEach { RestrictItem(it) }
@@ -95,6 +103,19 @@ fun AppOpsAllowPage() {
95103
"外部授权" to {
96104
vm.showCopyDlgFlow.value = true
97105
},
106+
"卸载重装" to {
107+
mainVm.dialogFlow.updateDialogOptions(
108+
title = "卸载重装",
109+
text = "卸载后重新安装可让应用权限回归初始状态解除限制,先点击下方「导出应用」可将应用提前保存至下载,然后卸载应用,到文件管理中重新安装即可\n\n注意:卸载会删除所有数据,请自行备份数据",
110+
dismissText = "导出应用",
111+
dismissAction = {
112+
mainVm.viewModelScope.launchTry(Dispatchers.IO) {
113+
context.saveFileToDownloads(getShareApkFile())
114+
}
115+
},
116+
confirmText = "关闭",
117+
)
118+
}
98119
)
99120
)
100121
}

app/src/main/kotlin/li/songe/gkd/util/Others.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import li.songe.gkd.app
3131
import li.songe.json5.Json5
3232
import li.songe.json5.Json5EncoderConfig
3333
import li.songe.json5.encodeToJson5String
34+
import java.io.File
3435
import kotlin.reflect.KClass
3536
import kotlin.reflect.jvm.jvmName
3637

@@ -239,3 +240,9 @@ fun runMainPost(delayMillis: Long = 0L, r: Runnable) {
239240
}
240241
Handler(Looper.getMainLooper()).postDelayed(r, delayMillis)
241242
}
243+
244+
fun getShareApkFile(): File {
245+
return sharedDir.resolve("gkd-v${META.versionName}.apk").apply {
246+
File(app.packageCodePath).copyTo(this, overwrite = true)
247+
}
248+
}

0 commit comments

Comments
 (0)