Skip to content

Commit 0d8a04a

Browse files
committed
feat(InstallScreen): prevent autoclosing if interacted with
1 parent 1b1316d commit 0d8a04a

File tree

3 files changed

+50
-17
lines changed

3 files changed

+50
-17
lines changed

app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallModel.kt

+13-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class InstallModel(
3131
) : StateScreenModel<InstallScreenState>(InstallScreenState.Pending) {
3232
private lateinit var startTime: Date
3333
private var installJob: Job? = null
34+
private var autocloseCancelled: Boolean = false
3435

3536
var installSteps by mutableStateOf<ImmutableMap<StepGroup, ImmutableList<Step>>?>(null)
3637
private set
@@ -63,6 +64,13 @@ class InstallModel(
6364
application.showToast(R.string.action_cleared_cache)
6465
}
6566

67+
/**
68+
* Cancel the screen auto-close once installation was completed
69+
*/
70+
fun cancelAutoclose() {
71+
autocloseCancelled = true
72+
}
73+
6674
fun restart() {
6775
installJob?.cancel("Manual cancellation")
6876
installSteps = null
@@ -92,10 +100,13 @@ class InstallModel(
92100
// At this point, the installation has successfully completed
93101
else {
94102
mutableState.value = InstallScreenState.Success
103+
autocloseCancelled = false
95104

96-
// Wait 20s before returning to Home
105+
// Wait 5s before returning to Home if screen hasn't been clicked
97106
delay(5000)
98-
mutableState.value = InstallScreenState.CloseScreen
107+
if (!autocloseCancelled) {
108+
mutableState.value = InstallScreenState.CloseScreen
109+
}
99110
}
100111
}
101112

app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallScreen.kt

+13-15
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package com.aliucord.manager.ui.screens.install
77

88
import androidx.activity.compose.BackHandler
99
import androidx.compose.foundation.*
10+
import androidx.compose.foundation.interaction.MutableInteractionSource
1011
import androidx.compose.foundation.layout.*
1112
import androidx.compose.foundation.shape.RoundedCornerShape
1213
import androidx.compose.foundation.text.selection.SelectionContainer
@@ -15,7 +16,6 @@ import androidx.compose.runtime.*
1516
import androidx.compose.ui.Alignment
1617
import androidx.compose.ui.Modifier
1718
import androidx.compose.ui.draw.clip
18-
import androidx.compose.ui.res.painterResource
1919
import androidx.compose.ui.res.stringResource
2020
import androidx.compose.ui.text.font.FontFamily
2121
import androidx.compose.ui.unit.dp
@@ -28,6 +28,7 @@ import com.aliucord.manager.installer.steps.StepGroup
2828
import com.aliucord.manager.ui.components.Wakelock
2929
import com.aliucord.manager.ui.components.back
3030
import com.aliucord.manager.ui.components.dialogs.InstallerAbortDialog
31+
import com.aliucord.manager.ui.screens.install.components.InstallAppBar
3132
import com.aliucord.manager.ui.screens.install.components.StepGroupCard
3233
import com.aliucord.manager.ui.screens.installopts.InstallOptions
3334
import org.koin.core.parameter.parametersOf
@@ -76,19 +77,13 @@ class InstallScreen(private val data: InstallOptions) : Screen {
7677
}
7778

7879
Scaffold(
79-
topBar = {
80-
TopAppBar(
81-
title = { Text(stringResource(R.string.installer)) },
82-
navigationIcon = {
83-
IconButton(onClick = onTryExit) {
84-
Icon(
85-
painter = painterResource(R.drawable.ic_back),
86-
contentDescription = stringResource(R.string.navigation_back),
87-
)
88-
}
89-
}
90-
)
91-
}
80+
topBar = { InstallAppBar(onTryExit) },
81+
modifier = Modifier
82+
.clickable(
83+
indication = null,
84+
onClick = model::cancelAutoclose,
85+
interactionSource = remember(::MutableInteractionSource),
86+
),
9287
) { paddingValues ->
9388
Column(Modifier.padding(paddingValues)) {
9489
if (state.value is InstallScreenState.Working) {
@@ -121,7 +116,10 @@ class InstallScreen(private val data: InstallOptions) : Screen {
121116
name = stringResource(group.localizedName),
122117
subSteps = steps,
123118
isExpanded = expandedGroup == group,
124-
onExpand = { expandedGroup = group },
119+
onExpand = {
120+
model.cancelAutoclose()
121+
expandedGroup = group
122+
},
125123
)
126124
}
127125
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.aliucord.manager.ui.screens.install.components
2+
3+
import androidx.compose.material3.*
4+
import androidx.compose.runtime.Composable
5+
import androidx.compose.ui.res.painterResource
6+
import androidx.compose.ui.res.stringResource
7+
import com.aliucord.manager.R
8+
9+
@Composable
10+
fun InstallAppBar(
11+
onTryExit: () -> Unit,
12+
) {
13+
TopAppBar(
14+
title = { Text(stringResource(R.string.installer)) },
15+
navigationIcon = {
16+
IconButton(onClick = onTryExit) {
17+
Icon(
18+
painter = painterResource(R.drawable.ic_back),
19+
contentDescription = stringResource(R.string.navigation_back),
20+
)
21+
}
22+
}
23+
)
24+
}

0 commit comments

Comments
 (0)