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(