Stacktrace in error dialog is hidden by default

This commit is contained in:
Abdelilah El Aissaoui 2024-05-28 22:36:17 +02:00
parent f2df70124b
commit 995a29db52
No known key found for this signature in database
GPG Key ID: 7587FC860F594869

View File

@ -15,6 +15,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.jetpackduba.gitnuro.AppIcons import com.jetpackduba.gitnuro.AppIcons
import com.jetpackduba.gitnuro.extensions.handOnHover import com.jetpackduba.gitnuro.extensions.handOnHover
import com.jetpackduba.gitnuro.extensions.onDoubleClick
import com.jetpackduba.gitnuro.managers.Error import com.jetpackduba.gitnuro.managers.Error
import com.jetpackduba.gitnuro.theme.secondarySurface import com.jetpackduba.gitnuro.theme.secondarySurface
import com.jetpackduba.gitnuro.ui.components.PrimaryButton import com.jetpackduba.gitnuro.ui.components.PrimaryButton
@ -29,6 +30,7 @@ fun ErrorDialog(
val horizontalScroll = rememberScrollState() val horizontalScroll = rememberScrollState()
val verticalScroll = rememberScrollState() val verticalScroll = rememberScrollState()
val clipboard = LocalClipboardManager.current val clipboard = LocalClipboardManager.current
var showStackTrace by remember { mutableStateOf(false) }
MaterialDialog { MaterialDialog {
Column( Column(
@ -50,6 +52,9 @@ fun ErrorDialog(
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colors.error, tint = MaterialTheme.colors.error,
modifier = Modifier.size(24.dp) modifier = Modifier.size(24.dp)
.onDoubleClick {
showStackTrace = !showStackTrace
}
) )
} }
@ -62,58 +67,60 @@ fun ErrorDialog(
style = MaterialTheme.typography.body2, style = MaterialTheme.typography.body2,
) )
Box( if (showStackTrace) {
modifier = Modifier Box(
.padding(top = 24.dp)
.height(400.dp)
.fillMaxWidth()
) {
OutlinedTextField(
value = error.exception.stackTraceToString(),
onValueChange = {},
readOnly = true,
colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = MaterialTheme.colors.secondarySurface),
textStyle = MaterialTheme.typography.body2,
modifier = Modifier modifier = Modifier
.fillMaxSize() .padding(top = 24.dp)
.horizontalScroll(horizontalScroll) .height(400.dp)
.verticalScroll(verticalScroll),
)
HorizontalScrollbar(
rememberScrollbarAdapter(horizontalScroll),
modifier = Modifier
.align(Alignment.BottomCenter)
.fillMaxWidth() .fillMaxWidth()
)
VerticalScrollbar(
rememberScrollbarAdapter(verticalScroll),
modifier = Modifier
.align(Alignment.CenterEnd)
.fillMaxHeight()
)
InstantTooltip(
"Copy error",
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(end = 16.dp, bottom = 16.dp)
) { ) {
IconButton( OutlinedTextField(
onClick = { value = error.exception.stackTraceToString(),
copyMessageError(clipboard, error.exception) onValueChange = {},
}, readOnly = true,
colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = MaterialTheme.colors.secondarySurface),
textStyle = MaterialTheme.typography.body2,
modifier = Modifier modifier = Modifier
.size(24.dp) .fillMaxSize()
.handOnHover() .horizontalScroll(horizontalScroll)
.background(MaterialTheme.colors.background.copy(alpha = 0.8f)) .verticalScroll(verticalScroll),
)
HorizontalScrollbar(
rememberScrollbarAdapter(horizontalScroll),
modifier = Modifier
.align(Alignment.BottomCenter)
.fillMaxWidth()
)
VerticalScrollbar(
rememberScrollbarAdapter(verticalScroll),
modifier = Modifier
.align(Alignment.CenterEnd)
.fillMaxHeight()
)
InstantTooltip(
"Copy error",
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(end = 16.dp, bottom = 16.dp)
) { ) {
Icon( IconButton(
painter = painterResource(AppIcons.COPY), onClick = {
contentDescription = "Copy stacktrace", copyMessageError(clipboard, error.exception)
tint = MaterialTheme.colors.onSurface, },
) modifier = Modifier
.size(24.dp)
.handOnHover()
.background(MaterialTheme.colors.background.copy(alpha = 0.8f))
) {
Icon(
painter = painterResource(AppIcons.COPY),
contentDescription = "Copy stacktrace",
tint = MaterialTheme.colors.onSurface,
)
}
} }
} }
} }