From c4c8a29d624cf02172c933d29dc431bfbd23bf61 Mon Sep 17 00:00:00 2001 From: Minecon724 Date: Fri, 9 May 2025 16:15:08 +0200 Subject: [PATCH] Create error button --- .../pojavbackup/core/backup/BackupWorker.kt | 21 +++++-- .../pojavbackup/settings/SettingsActivity.kt | 10 ++- .../settings/screen/options/OptionsScreen.kt | 62 +++++++++++++++++++ .../screen/options/OptionsScreenUiState.kt | 3 +- .../screen/options/OptionsScreenViewModel.kt | 4 +- app/src/main/res/values/strings.xml | 1 + 6 files changed, 90 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/eu/m724/pojavbackup/core/backup/BackupWorker.kt b/app/src/main/java/eu/m724/pojavbackup/core/backup/BackupWorker.kt index 6d5059a..db66168 100644 --- a/app/src/main/java/eu/m724/pojavbackup/core/backup/BackupWorker.kt +++ b/app/src/main/java/eu/m724/pojavbackup/core/backup/BackupWorker.kt @@ -48,11 +48,14 @@ class BackupWorker @AssistedInject constructor( backupRepository.completeBackup(backup, BackupStatus.SUCCESS) return Result.success(statusData(backup.id, "Backup completed successfully")) } catch (cause: Throwable) { - val e = throw BackupFailedException(backup, cause) - // TODO raise this error + val data = statusData( + uuid = backup.id, + status = "Backup failed", + error = BackupFailedException(backup, cause) + ) backupRepository.completeBackup(backup, BackupStatus.FAILURE) - return Result.failure(statusData(backup.id, "Backup failed")) + return Result.failure(data) } } @@ -132,14 +135,22 @@ class BackupWorker @AssistedInject constructor( return destination } - private fun statusData(uuid: UUID, status: String): Data { + private fun statusData( + uuid: UUID, + status: String, + error: Throwable? = null + ): Data { return Data.Builder() .putUuid("uuid", uuid) .putString("status", status) + .putString("error", error?.stackTraceToString()) .build() } - private suspend fun updateStatus(uuid: UUID, status: String) { + private suspend fun updateStatus( + uuid: UUID, + status: String + ) { setForeground(createForegroundInfo(status)) val data = statusData(uuid, status) diff --git a/app/src/main/java/eu/m724/pojavbackup/settings/SettingsActivity.kt b/app/src/main/java/eu/m724/pojavbackup/settings/SettingsActivity.kt index 81f5cd1..f97d255 100644 --- a/app/src/main/java/eu/m724/pojavbackup/settings/SettingsActivity.kt +++ b/app/src/main/java/eu/m724/pojavbackup/settings/SettingsActivity.kt @@ -125,13 +125,17 @@ class SettingsActivity : ComponentActivity() { } ) { composable { - OptionsScreen(navController) + OptionsScreen( + navController = navController + ) } composable { - ContentScreen(navController) + ContentScreen() } composable { - DestinationScreen(navController, onAddDestination = { onAddDestination() }) + DestinationScreen( + onAddDestination = { onAddDestination() } + ) } // Add more destinations similarly. } diff --git a/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreen.kt b/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreen.kt index bb2749e..4f27273 100644 --- a/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreen.kt +++ b/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreen.kt @@ -3,18 +3,32 @@ package eu.m724.pojavbackup.settings.screen.options import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.Button +import androidx.compose.material3.Card +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.DialogProperties import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController import eu.m724.pojavbackup.R +@OptIn(ExperimentalMaterial3Api::class) @Composable fun OptionsScreen( navController: NavController, @@ -39,5 +53,53 @@ fun OptionsScreen( Text(uiState.backupStatusHeader) Text(uiState.backupStatusDetails) + + val openAlertDialog = remember { mutableStateOf(false) } + + when { + openAlertDialog.value -> { + BasicAlertDialog( + onDismissRequest = { openAlertDialog.value = false }, + properties = DialogProperties( + dialogContentTitle = "Stacktrace" + ) + ) { + Card( + modifier = Modifier + .fillMaxWidth() + .height(300.dp) + .padding(16.dp) + .verticalScroll(rememberScrollState()), + shape = RoundedCornerShape(16.dp), + ) { + Text( + text = uiState.backupStacktrace.toString() + ) + } + } + } + } + + if (uiState.backupStacktrace != null) { + Button( + onClick = { + openAlertDialog.value = true + } + ) { + Text( + text = stringResource(R.string.button_show_error) + ) + } + } } +} + +@Composable +fun BasicAlertDialog( + onDismissRequest: () -> Unit, + modifier: Modifier, + properties: DialogProperties, + content: @Composable () -> Unit +) { + TODO("Not yet implemented") } \ No newline at end of file diff --git a/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreenUiState.kt b/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreenUiState.kt index 8ca699b..012c14f 100644 --- a/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreenUiState.kt +++ b/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreenUiState.kt @@ -2,5 +2,6 @@ package eu.m724.pojavbackup.settings.screen.options data class OptionsScreenUiState( val backupStatusHeader: String = "", - val backupStatusDetails: String = "" + val backupStatusDetails: String = "", + val backupStacktrace: String? = null ) diff --git a/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreenViewModel.kt b/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreenViewModel.kt index 825f3c8..e931381 100644 --- a/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreenViewModel.kt +++ b/app/src/main/java/eu/m724/pojavbackup/settings/screen/options/OptionsScreenViewModel.kt @@ -57,9 +57,9 @@ class OptionsScreenViewModel @Inject constructor( _uiState.update { it.copy( - backupStatusHeader = workInfo?.state?.toString() + " " + data?.getString("status").toString(), - backupStatusDetails = uuid.toString() + backupStatusDetails = uuid.toString(), + backupStacktrace = data?.getString("error") ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c642710..72b363e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,4 +25,5 @@ Health Worlds Go to %1$s + Show error \ No newline at end of file