From f11ee11b5f40b47977e21ecc631d7a23703c9c4e Mon Sep 17 00:00:00 2001 From: wingio Date: Tue, 21 Mar 2023 18:19:45 -0400 Subject: [PATCH] Feat: Improved updater --- .gitignore | 1 + .idea/.name | 1 - .idea/GradleUpdaterPlugin.xml | 6 --- .idea/compiler.xml | 6 --- .idea/discord.xml | 7 --- .idea/jarRepositories.xml | 35 -------------- .idea/kotlinc.xml | 6 --- .idea/misc.xml | 5 -- app/.gitignore | 3 +- app/build.gradle.kts | 4 +- app/release/output-metadata.json | 20 -------- .../manager/ui/screen/main/MainScreen.kt | 11 +++-- .../ui/viewmodel/main/MainViewModel.kt | 11 +++++ .../ui/widgets/updater/UpdateDialog.kt | 48 +++++++++++++++++-- 14 files changed, 67 insertions(+), 97 deletions(-) delete mode 100644 .idea/.name delete mode 100644 .idea/GradleUpdaterPlugin.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/discord.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/kotlinc.xml delete mode 100644 .idea/misc.xml delete mode 100644 app/release/output-metadata.json diff --git a/.gitignore b/.gitignore index 56cc642..e0e88fe 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ captures/ # IntelliJ *.iml +.idea .idea/workspace.xml .idea/tasks.xml .idea/gradle.xml diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index fe8a779..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Vendetta Manager \ No newline at end of file diff --git a/.idea/GradleUpdaterPlugin.xml b/.idea/GradleUpdaterPlugin.xml deleted file mode 100644 index e359d57..0000000 --- a/.idea/GradleUpdaterPlugin.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index b589d56..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml deleted file mode 100644 index d8e9561..0000000 --- a/.idea/discord.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index 644debd..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml deleted file mode 100644 index e1eea1d..0000000 --- a/.idea/kotlinc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index f5db383..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore index 42afabf..956c004 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,2 @@ -/build \ No newline at end of file +/build +/release \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ece5cac..807f8cf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "dev.beefers.vendetta.manager" minSdk = 24 targetSdk = 33 - versionCode = 1030 - versionName = "1.0.3" + versionCode = 1040 + versionName = "1.0.4" buildConfigField("String", "GIT_BRANCH", "\"${getCurrentBranch()}\"") buildConfigField("String", "GIT_COMMIT", "\"${getLatestCommit()}\"") diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json deleted file mode 100644 index 71917e3..0000000 --- a/app/release/output-metadata.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": 3, - "artifactType": { - "type": "APK", - "kind": "Directory" - }, - "applicationId": "dev.beefers.vendetta.manager", - "variantName": "release", - "elements": [ - { - "type": "SINGLE", - "filters": [], - "attributes": [], - "versionCode": 1030, - "versionName": "1.0.3", - "outputFile": "app-release.apk" - } - ], - "elementType": "File" -} \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/main/MainScreen.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/main/MainScreen.kt index 7649203..71d9d42 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/main/MainScreen.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/main/MainScreen.kt @@ -42,12 +42,15 @@ class MainScreen : Screen { topBar = { TitleBar() }, modifier = Modifier.fillMaxSize() ) { pv -> - viewModel.release?.let { - if (it.tagName.toInt() > BuildConfig.VERSION_CODE) { - UpdateDialog(release = it) { + if (viewModel.showUpdateDialog && viewModel.release != null) { + UpdateDialog( + release = viewModel.release!!, + isUpdating = viewModel.isUpdating, + onDismiss = { viewModel.showUpdateDialog = false }, + onConfirm = { viewModel.downloadAndInstallUpdate() } - } + ) } HorizontalPager( diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/main/MainViewModel.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/main/MainViewModel.kt index 212eea1..0a56aeb 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/main/MainViewModel.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/main/MainViewModel.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.coroutineScope +import dev.beefers.vendetta.manager.BuildConfig import dev.beefers.vendetta.manager.domain.manager.DownloadManager import dev.beefers.vendetta.manager.domain.manager.PreferenceManager import dev.beefers.vendetta.manager.domain.repository.RestRepository @@ -26,6 +27,10 @@ class MainViewModel( var release by mutableStateOf(null) private set + var showUpdateDialog by mutableStateOf(false) + + var isUpdating by mutableStateOf(false) + init { checkForUpdate() } @@ -33,6 +38,9 @@ class MainViewModel( private fun checkForUpdate() { coroutineScope.launch { release = repo.getLatestRelease("VendettaManager").dataOrNull + release?.let { + showUpdateDialog = it.tagName.toInt() > BuildConfig.VERSION_CODE + } repo.getLatestRelease("VendettaXposed").ifSuccessful { if (preferenceManager.moduleVersion != it.tagName) { preferenceManager.moduleVersion = it.tagName @@ -46,7 +54,10 @@ class MainViewModel( fun downloadAndInstallUpdate() { coroutineScope.launch { val update = File(cacheDir, "update.apk") + if(update.exists()) update.delete() + isUpdating = true downloadManager.downloadUpdate(update) + isUpdating = false context.installApks(false, update) } } diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/updater/UpdateDialog.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/updater/UpdateDialog.kt index 1c0c543..b927a70 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/updater/UpdateDialog.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/updater/UpdateDialog.kt @@ -1,33 +1,73 @@ package dev.beefers.vendetta.manager.ui.widgets.updater +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.SystemUpdate import androidx.compose.material3.AlertDialog +import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.DialogProperties import dev.beefers.vendetta.manager.R import dev.beefers.vendetta.manager.network.dto.Release @Composable fun UpdateDialog( release: Release, + isUpdating: Boolean, + onDismiss: () -> Unit, onConfirm: () -> Unit ) { AlertDialog( - onDismissRequest = {}, + properties = DialogProperties( + dismissOnBackPress = true, + dismissOnClickOutside = true + ), + onDismissRequest = { + onDismiss() + }, confirmButton = { - FilledTonalButton(onClick = onConfirm) { - Text(stringResource(R.string.action_start_update)) + FilledTonalButton( + onClick = onConfirm, + enabled = !isUpdating + ) { + Box { + Text( + text = stringResource(R.string.action_start_update), + color = if(isUpdating) Color.Transparent else LocalContentColor.current + ) + if(isUpdating) { + CircularProgressIndicator( + strokeWidth = 3.dp, + modifier = Modifier + .size(24.dp) + .align(Alignment.Center) + ) + } + } + } }, title = { Text(stringResource(R.string.title_update)) }, text = { - Text(stringResource(R.string.update_description, release.versionName)) + Text( + text = stringResource(R.string.update_description, release.versionName), + textAlign = TextAlign.Center + ) }, icon = { Icon(