From 609ea40d1cbe6547d136a63f245ff84fdeb2b4fc Mon Sep 17 00:00:00 2001 From: tiann Date: Thu, 20 Apr 2023 11:40:09 +0800 Subject: [PATCH] manager: show loading dialog when collect bugreport --- .../me/weishu/kernelsu/ui/screen/Settings.kt | 88 ++++++++++++++----- 1 file changed, 68 insertions(+), 20 deletions(-) diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt index 0d0b4e26..88ce0c3d 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt @@ -2,20 +2,29 @@ package me.weishu.kernelsu.ui.screen import android.content.Intent import android.net.Uri +import androidx.compose.foundation.background import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color.Companion.White import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties import androidx.core.content.FileProvider import com.alorma.compose.settings.ui.* import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import me.weishu.kernelsu.BuildConfig import me.weishu.kernelsu.R import me.weishu.kernelsu.ui.component.SimpleDialog @@ -23,7 +32,6 @@ import me.weishu.kernelsu.ui.util.LinkifyText import me.weishu.kernelsu.ui.util.LocalDialogHost import me.weishu.kernelsu.ui.util.getBugreportFile - /** * @author weishu * @date 2023/1/1. @@ -45,37 +53,56 @@ fun SettingScreen(navigator: DestinationsNavigator) { SupportCard() } + var showLoadingDialog by remember { mutableStateOf(false) } + LoadingDialog(showLoadingDialog) + Column(modifier = Modifier.padding(paddingValues)) { val context = LocalContext.current - SettingsMenuLink(title = { - Text(stringResource(id = R.string.send_log)) - }, + val scope = rememberCoroutineScope() + val dialogHost = LocalDialogHost.current + SettingsMenuLink( + title = { + Text(stringResource(id = R.string.send_log)) + }, onClick = { - val bugreport = getBugreportFile(context) - val uri: Uri = FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.fileprovider", bugreport) + scope.launch { + showLoadingDialog = true - val shareIntent = Intent(Intent.ACTION_SEND) - shareIntent.putExtra(Intent.EXTRA_STREAM, uri) - shareIntent.setDataAndType(uri, "application/zip") - shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + val bugreport = withContext(Dispatchers.IO) { + getBugreportFile(context) + } - context.startActivity( - Intent.createChooser( - shareIntent, - context.getString(R.string.send_log) + showLoadingDialog = false + + val uri: Uri = + FileProvider.getUriForFile( + context, + "${BuildConfig.APPLICATION_ID}.fileprovider", + bugreport + ) + + val shareIntent = Intent(Intent.ACTION_SEND) + shareIntent.putExtra(Intent.EXTRA_STREAM, uri) + shareIntent.setDataAndType(uri, "application/zip") + shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + + context.startActivity( + Intent.createChooser( + shareIntent, + context.getString(R.string.send_log) + ) ) - ) + } } ) val about = stringResource(id = R.string.about) val ok = stringResource(id = android.R.string.ok) - val scope = rememberCoroutineScope() - val dialogHost = LocalDialogHost.current - SettingsMenuLink(title = { - Text(about) - }, + SettingsMenuLink( + title = { + Text(about) + }, onClick = { scope.launch { dialogHost.showDialog(about, content = "unused", confirm = ok) @@ -99,6 +126,27 @@ private fun TopBar(onBack: () -> Unit = {}) { ) } +@Composable +fun LoadingDialog(showLoadingDialog: Boolean) { + if (!showLoadingDialog) { + return + } + + Dialog( + onDismissRequest = { }, + DialogProperties(dismissOnBackPress = false, dismissOnClickOutside = false) + ) { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .size(100.dp) + .background(White, shape = RoundedCornerShape(8.dp)) + ) { + CircularProgressIndicator() + } + } +} + @Preview @Composable private fun SupportCard() {