Skip to content

Commit fda952b

Browse files
committed
manager: bump material3 version to 1.5.0-alpha22
- replace deprecated rememberModalBottomSheetState with rememberBottomSheetState - update to expressive dropdown menu styling
1 parent 5517191 commit fda952b

11 files changed

Lines changed: 275 additions & 170 deletions

File tree

manager/app/src/main/java/me/weishu/kernelsu/ui/component/material/SegmentedList.kt

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,20 @@ import androidx.compose.foundation.relocation.bringIntoViewRequester
1313
import androidx.compose.foundation.text.BasicTextField
1414
import androidx.compose.foundation.text.KeyboardActions
1515
import androidx.compose.foundation.text.KeyboardOptions
16+
import androidx.compose.material.icons.Icons
17+
import androidx.compose.material.icons.filled.Check
1618
import androidx.compose.material3.Checkbox
17-
import androidx.compose.material3.DropdownMenu
19+
import androidx.compose.material3.DropdownMenuGroup
1820
import androidx.compose.material3.DropdownMenuItem
21+
import androidx.compose.material3.DropdownMenuPopup
1922
import androidx.compose.material3.Icon
2023
import androidx.compose.material3.ListItemColors
2124
import androidx.compose.material3.ListItemDefaults
2225
import androidx.compose.material3.ListItemShapes
2326
import androidx.compose.material3.LocalContentColor
2427
import androidx.compose.material3.MaterialTheme
2528
import androidx.compose.material3.MaterialTheme.colorScheme
29+
import androidx.compose.material3.MenuDefaults
2630
import androidx.compose.material3.ProvideTextStyle
2731
import androidx.compose.material3.RadioButton
2832
import androidx.compose.material3.SegmentedListItem
@@ -293,23 +297,34 @@ fun SegmentedDropdownItem(
293297
modifier = Modifier.fillMaxWidth(0.3f),
294298
color = if (enabled) colorScheme.primary else colorScheme.onSurfaceVariant
295299
)
296-
DropdownMenu(
300+
DropdownMenuPopup(
297301
expanded = expanded,
298302
onDismissRequest = { expanded = false }
299303
) {
300-
items.forEachIndexed { index, text ->
301-
DropdownMenuItem(
302-
text = {
303-
Text(text, color = if (index == safeIndex) colorScheme.primary else colorScheme.onSurface)
304-
},
305-
onClick = {
306-
if (index in items.indices) {
307-
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
308-
onItemSelected(index)
309-
}
310-
expanded = false
311-
}
312-
)
304+
DropdownMenuGroup(shapes = MenuDefaults.groupShapes()) {
305+
items.forEachIndexed { index, text ->
306+
DropdownMenuItem(
307+
text = { Text(text) },
308+
selected = index == safeIndex,
309+
onClick = {
310+
if (index in items.indices) {
311+
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
312+
onItemSelected(index)
313+
}
314+
expanded = false
315+
},
316+
shapes = MenuDefaults.itemShape(index = index, count = items.size),
317+
leadingIcon = {
318+
if (index == safeIndex) {
319+
Icon(
320+
Icons.Filled.Check,
321+
contentDescription = null,
322+
modifier = Modifier.size(MenuDefaults.LeadingIconSize),
323+
)
324+
}
325+
},
326+
)
327+
}
313328
}
314329
}
315330
}

manager/app/src/main/java/me/weishu/kernelsu/ui/component/material/SendLogBottomSheet.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ import androidx.compose.material3.FilledTonalIconButton
2121
import androidx.compose.material3.Icon
2222
import androidx.compose.material3.MaterialTheme
2323
import androidx.compose.material3.ModalBottomSheet
24+
import androidx.compose.material3.SheetValue
2425
import androidx.compose.material3.SnackbarHostState
2526
import androidx.compose.material3.Text
26-
import androidx.compose.material3.rememberModalBottomSheetState
27+
import androidx.compose.material3.rememberBottomSheetState
2728
import androidx.compose.runtime.Composable
2829
import androidx.compose.runtime.rememberCoroutineScope
2930
import androidx.compose.ui.Alignment
@@ -66,7 +67,7 @@ fun SendLogBottomSheet(
6667
val sendLog = stringResource(R.string.send_log)
6768
val loadingDialog = rememberLoadingDialog()
6869
val haptic = LocalHapticFeedback.current
69-
val sheetState = rememberModalBottomSheetState()
70+
val sheetState = rememberBottomSheetState(initialValue = SheetValue.Hidden)
7071
val scope = rememberCoroutineScope()
7172
val dismiss = {
7273
scope.launch { sheetState.hide() }

manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/dialogs/MultiSelectDialog.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import androidx.compose.material3.ListItemDefaults
1616
import androidx.compose.material3.MaterialTheme
1717
import androidx.compose.material3.ModalBottomSheet
1818
import androidx.compose.material3.OutlinedTextField
19+
import androidx.compose.material3.SheetValue
1920
import androidx.compose.material3.Text
20-
import androidx.compose.material3.rememberModalBottomSheetState
21+
import androidx.compose.material3.rememberBottomSheetState
2122
import androidx.compose.runtime.Composable
2223
import androidx.compose.runtime.getValue
2324
import androidx.compose.runtime.mutableStateOf
@@ -56,7 +57,7 @@ fun <T> MultiSelectDialog(
5657

5758
ModalBottomSheet(
5859
onDismissRequest = onDismiss,
59-
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
60+
sheetState = rememberBottomSheetState(initialValue = SheetValue.Hidden)
6061
) {
6162
Column(
6263
modifier = Modifier

manager/app/src/main/java/me/weishu/kernelsu/ui/component/rebootlistpopup/RebootListPopupMaterial.kt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package me.weishu.kernelsu.ui.component.rebootlistpopup
22

33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.filled.PowerSettingsNew
5-
import androidx.compose.material3.DropdownMenu
5+
import androidx.compose.material3.DropdownMenuGroup
66
import androidx.compose.material3.DropdownMenuItem
7+
import androidx.compose.material3.DropdownMenuPopup
78
import androidx.compose.material3.Icon
89
import androidx.compose.material3.IconButton
10+
import androidx.compose.material3.MenuDefaults
911
import androidx.compose.material3.Text
1012
import androidx.compose.runtime.Composable
1113
import androidx.compose.runtime.getValue
@@ -19,10 +21,13 @@ import me.weishu.kernelsu.ui.util.reboot
1921

2022
@Composable
2123
fun RebootDropdownItems(onItemClick: (String) -> Unit) {
22-
getRebootListOption().forEach { option ->
24+
val options = getRebootListOption()
25+
options.forEachIndexed { index, option ->
2326
DropdownMenuItem(
27+
selected = false,
28+
onClick = { onItemClick(option.reason) },
2429
text = { Text(" " + stringResource(option.labelRes)) },
25-
onClick = { onItemClick(option.reason) }
30+
shapes = MenuDefaults.itemShape(index = index, count = options.size),
2631
)
2732
}
2833
}
@@ -39,13 +44,15 @@ fun RebootListPopupMaterial() {
3944
)
4045
}
4146

42-
DropdownMenu(
47+
DropdownMenuPopup(
4348
expanded = expanded,
4449
onDismissRequest = { expanded = false }
4550
) {
46-
RebootDropdownItems { reason ->
47-
expanded = false
48-
reboot(reason)
51+
DropdownMenuGroup(shapes = MenuDefaults.groupShapes()) {
52+
RebootDropdownItems { reason ->
53+
expanded = false
54+
reboot(reason)
55+
}
4956
}
5057
}
5158
}

manager/app/src/main/java/me/weishu/kernelsu/ui/screen/appprofile/AppProfileMaterial.kt

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@ import androidx.compose.material.icons.filled.Android
2828
import androidx.compose.material.icons.filled.MoreVert
2929
import androidx.compose.material.icons.filled.Security
3030
import androidx.compose.material3.ButtonGroupDefaults
31-
import androidx.compose.material3.DropdownMenu
31+
import androidx.compose.material3.DropdownMenuGroup
3232
import androidx.compose.material3.DropdownMenuItem
33+
import androidx.compose.material3.DropdownMenuPopup
3334
import androidx.compose.material3.Icon
3435
import androidx.compose.material3.IconButton
3536
import androidx.compose.material3.LargeFlexibleTopAppBar
3637
import androidx.compose.material3.MaterialTheme
38+
import androidx.compose.material3.MenuDefaults
3739
import androidx.compose.material3.Scaffold
3840
import androidx.compose.material3.SnackbarHostState
3941
import androidx.compose.material3.Text
@@ -354,34 +356,36 @@ private fun TopBar(
354356
imageVector = Icons.Filled.MoreVert,
355357
contentDescription = stringResource(id = R.string.settings)
356358
)
357-
DropdownMenu(
359+
DropdownMenuPopup(
358360
expanded = showDropdown,
359361
onDismissRequest = { showDropdown = false }
360362
) {
361-
DropdownMenuItem(
362-
text = { Text(stringResource(id = R.string.launch_app)) },
363-
onClick = {
364-
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
365-
showDropdown = false
366-
onLaunchApp(packageName, userId)
367-
},
368-
)
369-
DropdownMenuItem(
370-
text = { Text(stringResource(id = R.string.force_stop_app)) },
371-
onClick = {
372-
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
373-
showDropdown = false
374-
onForceStopApp(packageName, userId)
375-
},
376-
)
377-
DropdownMenuItem(
378-
text = { Text(stringResource(id = R.string.restart_app)) },
379-
onClick = {
380-
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
381-
showDropdown = false
382-
onRestartApp(packageName, userId)
383-
},
384-
)
363+
DropdownMenuGroup(shapes = MenuDefaults.groupShapes()) {
364+
DropdownMenuItem(
365+
text = { Text(stringResource(id = R.string.launch_app)) },
366+
onClick = {
367+
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
368+
showDropdown = false
369+
onLaunchApp(packageName, userId)
370+
},
371+
)
372+
DropdownMenuItem(
373+
text = { Text(stringResource(id = R.string.force_stop_app)) },
374+
onClick = {
375+
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
376+
showDropdown = false
377+
onForceStopApp(packageName, userId)
378+
},
379+
)
380+
DropdownMenuItem(
381+
text = { Text(stringResource(id = R.string.restart_app)) },
382+
onClick = {
383+
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
384+
showDropdown = false
385+
onRestartApp(packageName, userId)
386+
},
387+
)
388+
}
385389
}
386390
}
387391
}

manager/app/src/main/java/me/weishu/kernelsu/ui/screen/module/ModuleMaterial.kt

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import androidx.compose.foundation.selection.toggleable
5151
import androidx.compose.foundation.shape.RoundedCornerShape
5252
import androidx.compose.material.icons.Icons
5353
import androidx.compose.material.icons.filled.Add
54+
import androidx.compose.material.icons.filled.Check
5455
import androidx.compose.material.icons.filled.MoreVert
5556
import androidx.compose.material.icons.outlined.Cloud
5657
import androidx.compose.material.icons.outlined.Code
@@ -61,19 +62,21 @@ import androidx.compose.material.icons.outlined.Refresh
6162
import androidx.compose.material3.Button
6263
import androidx.compose.material3.ButtonColors
6364
import androidx.compose.material3.ButtonDefaults
64-
import androidx.compose.material3.Checkbox
65-
import androidx.compose.material3.DropdownMenu
65+
import androidx.compose.material3.DropdownMenuGroup
6666
import androidx.compose.material3.DropdownMenuItem
67+
import androidx.compose.material3.DropdownMenuPopup
6768
import androidx.compose.material3.FilledTonalButton
6869
import androidx.compose.material3.HorizontalDivider
6970
import androidx.compose.material3.Icon
7071
import androidx.compose.material3.IconButton
7172
import androidx.compose.material3.MaterialTheme
73+
import androidx.compose.material3.MenuDefaults
7274
import androidx.compose.material3.ModalBottomSheet
7375
import androidx.compose.material3.OutlinedButton
7476
import androidx.compose.material3.OutlinedTextField
7577
import androidx.compose.material3.ProvideTextStyle
7678
import androidx.compose.material3.Scaffold
79+
import androidx.compose.material3.SheetValue
7780
import androidx.compose.material3.SmallExtendedFloatingActionButton
7881
import androidx.compose.material3.SnackbarDuration
7982
import androidx.compose.material3.SnackbarHostState
@@ -85,7 +88,7 @@ import androidx.compose.material3.TopAppBarDefaults
8588
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
8689
import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults
8790
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
88-
import androidx.compose.material3.rememberModalBottomSheetState
91+
import androidx.compose.material3.rememberBottomSheetState
8992
import androidx.compose.material3.rememberTopAppBarState
9093
import androidx.compose.runtime.Composable
9194
import androidx.compose.runtime.LaunchedEffect
@@ -290,26 +293,44 @@ fun ModulePagerMaterial(
290293
imageVector = Icons.Filled.MoreVert,
291294
contentDescription = stringResource(id = R.string.settings)
292295
)
293-
DropdownMenu(
296+
DropdownMenuPopup(
294297
expanded = showDropdown,
295298
onDismissRequest = { showDropdown = false }
296299
) {
297-
DropdownMenuItem(
298-
text = { Text(stringResource(R.string.module_sort_action_first)) },
299-
trailingIcon = { Checkbox(uiState.sortActionFirst, null) },
300-
onClick = {
301-
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
302-
actions.onToggleSortActionFirst()
303-
}
304-
)
305-
DropdownMenuItem(
306-
text = { Text(stringResource(R.string.module_sort_enabled_first)) },
307-
trailingIcon = { Checkbox(uiState.sortEnabledFirst, null) },
308-
onClick = {
309-
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
310-
actions.onToggleSortEnabledFirst()
311-
}
312-
)
300+
DropdownMenuGroup(shapes = MenuDefaults.groupShapes()) {
301+
DropdownMenuItem(
302+
text = { Text(stringResource(R.string.module_sort_action_first)) },
303+
checked = uiState.sortActionFirst,
304+
checkedLeadingIcon = {
305+
Icon(
306+
Icons.Filled.Check,
307+
modifier = Modifier.size(MenuDefaults.LeadingIconSize),
308+
contentDescription = null,
309+
)
310+
},
311+
onCheckedChange = {
312+
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
313+
actions.onToggleSortActionFirst()
314+
},
315+
shapes = MenuDefaults.itemShape(index = 0, count = 2),
316+
)
317+
DropdownMenuItem(
318+
text = { Text(stringResource(R.string.module_sort_enabled_first)) },
319+
checked = uiState.sortEnabledFirst,
320+
checkedLeadingIcon = {
321+
Icon(
322+
Icons.Filled.Check,
323+
modifier = Modifier.size(MenuDefaults.LeadingIconSize),
324+
contentDescription = null,
325+
)
326+
},
327+
onCheckedChange = {
328+
haptic.performHapticFeedback(HapticFeedbackType.VirtualKey)
329+
actions.onToggleSortEnabledFirst()
330+
},
331+
shapes = MenuDefaults.itemShape(index = 1, count = 2),
332+
)
333+
}
313334
}
314335
}
315336
},
@@ -534,7 +555,7 @@ private fun ModuleShortcutSheet(
534555

535556
ModalBottomSheet(
536557
onDismissRequest = onDismiss,
537-
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
558+
sheetState = rememberBottomSheetState(initialValue = SheetValue.Hidden)
538559
) {
539560
Column(
540561
verticalArrangement = Arrangement.spacedBy(12.dp),

0 commit comments

Comments
 (0)