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() {
+10
View File
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M240,720L240,240L320,240L320,720L240,720ZM400,720L800,480L400,240L400,720ZM480,579L480,381L645,480L480,579ZM480,480L480,480L480,480Z"/>
</vector>
+3
View File
@@ -56,10 +56,13 @@
<string name="launcher_downloading_update">Downloading update…</string>
<string name="launcher_downloading_update_details">(%1$s/%2$s)</string>
<string name="launcher_cancelled_manual">Launch cancelled.</string>
<string name="launcher_cancelled_navigated_away">Launch paused.</string>
<string name="launcher_cancelled_crash">Launch paused due to a crash.</string>
<string name="launcher_cancelled_error">Could not start Geode.</string>
<string name="launcher_cancelled_outdated">A Geometry Dash update is required.</string>
<string name="launcher_cancelled_restart">Restart</string>
<string name="launcher_cancelled_resume">Resume</string>
<string name="launcher_cancelled_retry">Retry</string>
<string name="launcher_in_safe_mode">Starting in safe mode…</string>
<!-- Updater strings -->