context aware restart button

This commit is contained in:
qimiko committed 2024-06-16 04:08:03 -07:00
1 parent 044af3d50b
commit 4d189f44a9
4 files changed
+59 -11

No files matched your search

@@ -151,6 +151,9 @@ fun mapCancelReasonToInfo(cancelReason: LaunchViewModel.LaunchCancelReason): Lau
title = stringResource(R.string.launcher_cancelled_error),
details = stringResource(R.string.launcher_cancelled_outdated)
)
LaunchViewModel.LaunchCancelReason.AUTOMATIC -> LaunchStatusInfo(
title = stringResource(R.string.launcher_cancelled_navigated_away)
)
else -> LaunchStatusInfo(
title = stringResource(R.string.launcher_cancelled_manual)
)
@@ -251,6 +254,40 @@ fun LaunchProgressBody(statusInfo: LaunchStatusInfo, modifier: Modifier = Modifi
}
}
@Composable
fun RetryButtonContents(reason: LaunchViewModel.LaunchCancelReason) {
when (reason) {
LaunchViewModel.LaunchCancelReason.MANUAL -> {
Icon(
Icons.Filled.Refresh,
contentDescription = null
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text(stringResource(R.string.launcher_cancelled_restart))
}
LaunchViewModel.LaunchCancelReason.LAST_LAUNCH_CRASHED,
LaunchViewModel.LaunchCancelReason.AUTOMATIC -> {
Icon(
painterResource(R.drawable.icon_resume),
contentDescription = null
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text(stringResource(R.string.launcher_cancelled_resume))
}
LaunchViewModel.LaunchCancelReason.GEODE_NOT_FOUND -> {
Icon(
Icons.Filled.Refresh,
contentDescription = null
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text(stringResource(R.string.launcher_cancelled_retry))
}
// these shouldn't be allowing retries anyways
LaunchViewModel.LaunchCancelReason.GAME_MISSING,
LaunchViewModel.LaunchCancelReason.GAME_OUTDATED -> {}
}
}
@Composable
fun LaunchProgressCard(
uiState: LaunchViewModel.LaunchUIState,
@@ -278,12 +315,7 @@ fun LaunchProgressCard(
LongPressButton(onClick = { onResume(false) }, onLongPress = {
showSafeModeDialog = true
}) {
Icon(
Icons.Filled.Refresh,
contentDescription = null
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text(stringResource(R.string.launcher_cancelled_restart))
RetryButtonContents(uiState.reason)
}
}
@@ -401,7 +433,7 @@ fun AltMainScreen(
Button(
onClick = {
coroutineScope.launch {
launchViewModel.cancelLaunch()
launchViewModel.cancelLaunch(true)
}
onSettings(context)
@@ -55,10 +55,11 @@ class LaunchViewModel(private val application: Application): ViewModel() {
}
enum class LaunchCancelReason {
MANUAL, LAST_LAUNCH_CRASHED, GEODE_NOT_FOUND, GAME_MISSING, GAME_OUTDATED;
MANUAL, AUTOMATIC, LAST_LAUNCH_CRASHED, GEODE_NOT_FOUND, GAME_MISSING, GAME_OUTDATED;
fun allowsRetry() = when (this) {
MANUAL,
AUTOMATIC,
LAST_LAUNCH_CRASHED,
GEODE_NOT_FOUND -> true
GAME_MISSING,
@@ -178,21 +179,23 @@ class LaunchViewModel(private val application: Application): ViewModel() {
preReadyCheck()
}
suspend fun cancelLaunch() {
suspend fun cancelLaunch(isAutomatic: Boolean = false) {
// no need to double cancel
if (_uiState.value is LaunchUIState.Cancelled) {
return
}
val reason = if (isAutomatic) LaunchCancelReason.AUTOMATIC else LaunchCancelReason.MANUAL
isCancelling = true
_uiState.emit(LaunchUIState.Cancelled(LaunchCancelReason.MANUAL, true))
_uiState.emit(LaunchUIState.Cancelled(reason, true))
val releaseManager = ReleaseManager.get(application)
if (releaseManager.isInUpdate) {
releaseManager.cancelUpdate()
}
_uiState.emit(LaunchUIState.Cancelled(LaunchCancelReason.MANUAL, false))
_uiState.emit(LaunchUIState.Cancelled(reason, false))
}
override fun onCleared() {