manager: show loading dialog when collect bugreport

This commit is contained in:
tiann
2023-04-20 11:40:09 +08:00
parent 515a309831
commit 609ea40d1c

View File

@@ -2,20 +2,29 @@ package me.weishu.kernelsu.ui.screen
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color.Companion.White
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview 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 androidx.core.content.FileProvider
import com.alorma.compose.settings.ui.* import com.alorma.compose.settings.ui.*
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import me.weishu.kernelsu.BuildConfig import me.weishu.kernelsu.BuildConfig
import me.weishu.kernelsu.R import me.weishu.kernelsu.R
import me.weishu.kernelsu.ui.component.SimpleDialog 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.LocalDialogHost
import me.weishu.kernelsu.ui.util.getBugreportFile import me.weishu.kernelsu.ui.util.getBugreportFile
/** /**
* @author weishu * @author weishu
* @date 2023/1/1. * @date 2023/1/1.
@@ -45,15 +53,34 @@ fun SettingScreen(navigator: DestinationsNavigator) {
SupportCard() SupportCard()
} }
var showLoadingDialog by remember { mutableStateOf(false) }
LoadingDialog(showLoadingDialog)
Column(modifier = Modifier.padding(paddingValues)) { Column(modifier = Modifier.padding(paddingValues)) {
val context = LocalContext.current val context = LocalContext.current
SettingsMenuLink(title = { val scope = rememberCoroutineScope()
val dialogHost = LocalDialogHost.current
SettingsMenuLink(
title = {
Text(stringResource(id = R.string.send_log)) Text(stringResource(id = R.string.send_log))
}, },
onClick = { onClick = {
val bugreport = getBugreportFile(context) scope.launch {
val uri: Uri = FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.fileprovider", bugreport) showLoadingDialog = true
val bugreport = withContext(Dispatchers.IO) {
getBugreportFile(context)
}
showLoadingDialog = false
val uri: Uri =
FileProvider.getUriForFile(
context,
"${BuildConfig.APPLICATION_ID}.fileprovider",
bugreport
)
val shareIntent = Intent(Intent.ACTION_SEND) val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.putExtra(Intent.EXTRA_STREAM, uri) shareIntent.putExtra(Intent.EXTRA_STREAM, uri)
@@ -67,13 +94,13 @@ fun SettingScreen(navigator: DestinationsNavigator) {
) )
) )
} }
}
) )
val about = stringResource(id = R.string.about) val about = stringResource(id = R.string.about)
val ok = stringResource(id = android.R.string.ok) val ok = stringResource(id = android.R.string.ok)
val scope = rememberCoroutineScope() SettingsMenuLink(
val dialogHost = LocalDialogHost.current title = {
SettingsMenuLink(title = {
Text(about) Text(about)
}, },
onClick = { onClick = {
@@ -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 @Preview
@Composable @Composable
private fun SupportCard() { private fun SupportCard() {