Skip to content

Commit 18efd27

Browse files
feat(ui): Add KPM config dialog and optimize extra items style (#1341)
* feat(ui): Add KPM configuration dialog and optimize the style of extra items - Add a configuration dialog for KPM extra items, supporting the editing of events and parameters - Remove the original inline editing function and adopt the dialog mode instead - Adjust the background transparency of extra item cards to be opaque
1 parent acfb4cf commit 18efd27

File tree

1 file changed

+95
-41
lines changed
  • app/src/main/java/me/bmax/apatch/ui/screen

1 file changed

+95
-41
lines changed

app/src/main/java/me/bmax/apatch/ui/screen/Patches.kt

Lines changed: 95 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,18 @@ import androidx.compose.material.icons.filled.Delete
3131
import androidx.compose.material.icons.filled.Refresh
3232
import androidx.compose.material.icons.filled.Visibility
3333
import androidx.compose.material.icons.filled.VisibilityOff
34+
import androidx.compose.material.icons.filled.Settings
35+
import androidx.compose.foundation.layout.PaddingValues
36+
import androidx.compose.foundation.layout.width
37+
import androidx.compose.foundation.layout.wrapContentHeight
38+
import androidx.compose.material3.AlertDialogDefaults
39+
import androidx.compose.material3.BasicAlertDialog
40+
import androidx.compose.material3.Surface
41+
import androidx.compose.material3.TextButton
42+
import androidx.compose.ui.platform.LocalView
43+
import androidx.compose.ui.window.DialogProperties
44+
import androidx.compose.ui.window.DialogWindowProvider
45+
import me.bmax.apatch.util.ui.APDialogBlurBehindUtils
3446
import androidx.compose.material3.Button
3547
import androidx.compose.material3.CardDefaults
3648
import androidx.compose.material3.CircularProgressIndicator
@@ -268,11 +280,84 @@ private fun StartButton(text: String, onClick: () -> Unit) {
268280
}
269281
}
270282

283+
@OptIn(ExperimentalMaterial3Api::class)
284+
@Composable
285+
private fun ExtraConfigDialog(kpmInfo: KPModel.KPMInfo, onDismiss: () -> Unit) {
286+
var event by remember { mutableStateOf(kpmInfo.event) }
287+
var args by remember { mutableStateOf(kpmInfo.args) }
288+
289+
BasicAlertDialog(
290+
onDismissRequest = onDismiss,
291+
properties = DialogProperties(
292+
decorFitsSystemWindows = true,
293+
usePlatformDefaultWidth = false,
294+
)
295+
) {
296+
Surface(
297+
modifier = Modifier
298+
.width(310.dp)
299+
.wrapContentHeight(),
300+
shape = RoundedCornerShape(30.dp),
301+
tonalElevation = AlertDialogDefaults.TonalElevation,
302+
color = AlertDialogDefaults.containerColor,
303+
) {
304+
Column(modifier = Modifier.padding(PaddingValues(all = 24.dp))) {
305+
Text(
306+
text = stringResource(id = R.string.kpm_control_dialog_title),
307+
style = MaterialTheme.typography.headlineSmall,
308+
modifier = Modifier.padding(bottom = 16.dp)
309+
)
310+
311+
OutlinedTextField(
312+
value = event,
313+
onValueChange = {
314+
event = it
315+
kpmInfo.event = it
316+
},
317+
label = { Text(stringResource(id = R.string.patch_item_extra_event)) },
318+
modifier = Modifier.fillMaxWidth()
319+
)
320+
321+
Spacer(modifier = Modifier.height(16.dp))
322+
323+
OutlinedTextField(
324+
value = args,
325+
onValueChange = {
326+
args = it
327+
kpmInfo.args = it
328+
},
329+
label = { Text(stringResource(id = R.string.patch_item_extra_args)) },
330+
modifier = Modifier.fillMaxWidth()
331+
)
332+
333+
Spacer(modifier = Modifier.height(24.dp))
334+
335+
Row(
336+
modifier = Modifier.fillMaxWidth(),
337+
horizontalArrangement = Arrangement.End
338+
) {
339+
TextButton(onClick = onDismiss) {
340+
Text(stringResource(id = android.R.string.ok))
341+
}
342+
}
343+
}
344+
}
345+
val dialogWindowProvider = LocalView.current.parent as DialogWindowProvider
346+
APDialogBlurBehindUtils.setupWindowBlurListener(dialogWindowProvider.window)
347+
}
348+
}
349+
271350
@Composable
272351
private fun ExtraItem(extra: KPModel.IExtraInfo, existed: Boolean, onDelete: () -> Unit) {
352+
var showConfigDialog by remember { mutableStateOf(false) }
353+
354+
if (showConfigDialog && extra is KPModel.KPMInfo) {
355+
ExtraConfigDialog(extra, onDismiss = { showConfigDialog = false })
356+
}
357+
273358
ElevatedCard(
274359
colors = CardDefaults.elevatedCardColors(containerColor = run {
275-
MaterialTheme.colorScheme.secondaryContainer
360+
MaterialTheme.colorScheme.secondaryContainer.copy(alpha = 1f)
276361
}),
277362
) {
278363
Column(
@@ -292,6 +377,15 @@ private fun ExtraItem(extra: KPModel.IExtraInfo, existed: Boolean, onDelete: ()
292377
.weight(1f)
293378
.wrapContentWidth(Alignment.CenterHorizontally)
294379
)
380+
if (extra.type == KPModel.ExtraType.KPM) {
381+
Icon(
382+
imageVector = Icons.Default.Settings,
383+
contentDescription = "Config",
384+
modifier = Modifier
385+
.padding(end = 8.dp)
386+
.clickable { showConfigDialog = true }
387+
)
388+
}
295389
Icon(
296390
imageVector = Icons.Default.Delete,
297391
contentDescription = "Delete",
@@ -321,46 +415,6 @@ private fun ExtraItem(extra: KPModel.IExtraInfo, existed: Boolean, onDelete: ()
321415
text = "${stringResource(id = R.string.patch_item_extra_kpm_desciption) + " "} ${kpmInfo.description}",
322416
style = MaterialTheme.typography.bodyMedium
323417
)
324-
var event by remember { mutableStateOf(kpmInfo.event) }
325-
Row(
326-
modifier = Modifier
327-
.fillMaxWidth()
328-
.background(Color.LightGray)
329-
) {
330-
Text(
331-
text = stringResource(id = R.string.patch_item_extra_event) + " ",
332-
style = MaterialTheme.typography.bodyMedium
333-
)
334-
BasicTextField(
335-
modifier = Modifier.fillMaxWidth(),
336-
value = event,
337-
textStyle = MaterialTheme.typography.bodyMedium,
338-
onValueChange = {
339-
event = it
340-
kpmInfo.event = it
341-
},
342-
)
343-
}
344-
var args by remember { mutableStateOf(kpmInfo.args) }
345-
Row(
346-
modifier = Modifier
347-
.fillMaxWidth()
348-
.background(Color.LightGray)
349-
) {
350-
Text(
351-
text = stringResource(id = R.string.patch_item_extra_args) + " ",
352-
style = MaterialTheme.typography.bodyMedium
353-
)
354-
BasicTextField(
355-
modifier = Modifier.fillMaxWidth(),
356-
value = args,
357-
textStyle = MaterialTheme.typography.bodyMedium,
358-
onValueChange = {
359-
args = it
360-
kpmInfo.args = it
361-
},
362-
)
363-
}
364418
}
365419
}
366420
}

0 commit comments

Comments
 (0)