compose: Extract force restart dialog logic into separate file

We also require users to force restart on applying proxy. This logic can be reused
there when migrated to compose.

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2026-05-05 11:47:58 +08:00
parent 33752d0a4f
commit afb301d3ce
2 changed files with 56 additions and 24 deletions

View File

@@ -0,0 +1,43 @@
/*
* SPDX-FileCopyrightText: 2026 Aurora OSS
* SPDX-FileCopyrightText: 2026 The Calyx Institute
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.aurora.store.compose.ui.commons
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewWrapper
import com.aurora.store.R
import com.aurora.store.compose.preview.ThemePreviewProvider
/**
* Dialog for prompting users to restart Aurora Store
* @param onConfirm Callback on confirmation
* @param onDismiss Callback on dismissal
*/
@Composable
fun ForceRestartDialog(onConfirm: () -> Unit = {}, onDismiss: () -> Unit = {}) {
AlertDialog(
title = { Text(text = stringResource(R.string.force_restart_title)) },
text = { Text(text = stringResource(R.string.force_restart_summary)) },
onDismissRequest = onDismiss,
confirmButton = {
TextButton(onClick = onConfirm) {
Text(text = stringResource(R.string.action_restart))
}
}
)
}
@PreviewWrapper(ThemePreviewProvider::class)
@Preview
@Composable
private fun ForceRestartDialogPreview() {
ForceRestartDialog()
}

View File

@@ -20,11 +20,8 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Icon
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.adaptive.WindowAdaptiveInfo
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.material3.adaptive.layout.AdaptStrategy
@@ -73,6 +70,7 @@ import com.aurora.store.compose.composable.app.LargeAppListItem
import com.aurora.store.compose.navigation.Screen
import com.aurora.store.compose.preview.AppPreviewProvider
import com.aurora.store.compose.preview.ThemePreviewProvider
import com.aurora.store.compose.ui.commons.ForceRestartDialog
import com.aurora.store.compose.ui.commons.PermissionRationaleScreen
import com.aurora.store.compose.ui.details.composable.Actions
import com.aurora.store.compose.ui.details.composable.Changelog
@@ -171,7 +169,12 @@ fun AppDetailsScreen(
onTestingSubscriptionChange = { subscribe ->
viewModel.updateTestingProgramStatus(packageName, subscribe)
},
forceSinglePane = forceSinglePane
forceSinglePane = forceSinglePane,
onForceRestart = {
val intent = Intent(context, ComposeActivity::class.java)
.putExtra("packageName", packageName)
ProcessPhoenix.triggerRebirth(context, intent)
}
)
}
}
@@ -235,7 +238,8 @@ private fun ScreenContentApp(
onOpen: () -> Unit = {},
onTestingSubscriptionChange: (subscribe: Boolean) -> Unit = {},
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(),
forceSinglePane: Boolean = false
forceSinglePane: Boolean = false,
onForceRestart: () -> Unit = {}
) {
val context = LocalContext.current
var scaffoldDirective = calculatePaneScaffoldDirective(windowAdaptiveInfo)
@@ -255,6 +259,10 @@ private fun ScreenContentApp(
.scaffoldValue[SupportingPaneScaffoldRole.Supporting] == PaneAdaptedValue.Hidden
var showRestartDialog by remember { mutableStateOf(false) }
if (showRestartDialog) {
ForceRestartDialog(onConfirm = onForceRestart)
}
fun onNavigateBack() {
coroutineScope.launch {
scaffoldNavigator.navigateBack()
@@ -583,25 +591,6 @@ private fun ScreenContentApp(
}
}
)
if (showRestartDialog) {
AlertDialog(
onDismissRequest = {},
title = { Text(text = stringResource(R.string.force_restart_title)) },
text = { Text(text = stringResource(R.string.force_restart_summary)) },
confirmButton = {
TextButton(
onClick = {
val intent = Intent(context, ComposeActivity::class.java)
.putExtra("packageName", app.packageName)
ProcessPhoenix.triggerRebirth(context, intent)
}
) {
Text(text = stringResource(R.string.action_restart))
}
}
)
}
}
@PreviewWrapper(ThemePreviewProvider::class)