-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathThemeSwitcher.kt
More file actions
65 lines (61 loc) · 2.14 KB
/
ThemeSwitcher.kt
File metadata and controls
65 lines (61 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.redmadrobot.debug.uikit.components
import androidx.compose.foundation.layout.size
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.redmadrobot.debug.uikit.theme.DebugPanelTheme
import com.redmadrobot.debug.uikit.theme.model.ThemeMode
@Composable
public fun ThemeSwitcher(
currentMode: ThemeMode,
onModeSelect: (ThemeMode) -> Unit,
modifier: Modifier = Modifier,
) {
var expanded by remember { mutableStateOf(false) }
IconButton(onClick = { expanded = true }, modifier = modifier) {
Icon(
painter = painterResource(id = ThemeMode.getIconRes(mode = currentMode)),
contentDescription = null,
tint = DebugPanelTheme.colors.content.secondary,
modifier = Modifier.size(size = 20.dp),
)
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
) {
ThemeMode.entries.forEach { mode ->
key(mode.name) {
DropdownMenuItem(
title = stringResource(id = ThemeMode.getTitleRes(mode = mode)),
onModeSelect = {
onModeSelect.invoke(mode)
expanded = false
}
)
}
}
}
}
}
@Composable
private fun DropdownMenuItem(
title: String,
onModeSelect: () -> Unit
) {
DropdownMenuItem(
text = { Text(text = title, style = DebugPanelTheme.typography.bodyMedium) },
onClick = { onModeSelect() },
)
}