1 /*
2 * Copyright 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package com.android.permissioncontroller.wear.permission.components.material3
17
18 import androidx.compose.runtime.Composable
19 import androidx.compose.ui.graphics.Color
20 import androidx.wear.compose.material.ToggleChipColors
21 import androidx.wear.compose.material.ToggleChipDefaults.toggleChipColors
22 import androidx.wear.compose.material3.CheckboxButtonColors
23 import androidx.wear.compose.material3.CheckboxButtonDefaults.checkboxButtonColors
24 import androidx.wear.compose.material3.RadioButtonColors
25 import androidx.wear.compose.material3.RadioButtonDefaults.radioButtonColors
26 import androidx.wear.compose.material3.SwitchButtonColors
27 import androidx.wear.compose.material3.SwitchButtonDefaults.switchButtonColors
28 import com.android.permissioncontroller.wear.permission.components.material2.toggleChipBackgroundColors
29 import com.android.permissioncontroller.wear.permission.components.material2.toggleChipDisabledColors
30
31 /**
32 * Defines toggle control styles, It helps in setting the right colors scheme to a toggle control.
33 */
34 enum class WearPermissionToggleControlStyle {
35 Default,
36 Transparent,
37 DisabledLike,
38 }
39
40 @Composable
radioButtonColorSchemenull41 internal fun WearPermissionToggleControlStyle.radioButtonColorScheme(): RadioButtonColors {
42 return when (this) {
43 WearPermissionToggleControlStyle.Default -> radioButtonColors()
44 WearPermissionToggleControlStyle.Transparent -> radioButtonTransparentColors()
45 WearPermissionToggleControlStyle.DisabledLike -> radioButtonDisabledLikeColors()
46 }
47 }
48
49 @Composable
checkboxColorSchemenull50 internal fun WearPermissionToggleControlStyle.checkboxColorScheme(): CheckboxButtonColors {
51 return when (this) {
52 WearPermissionToggleControlStyle.Default -> checkboxButtonColors()
53 WearPermissionToggleControlStyle.Transparent -> checkButtonTransparentColors()
54 WearPermissionToggleControlStyle.DisabledLike -> checkboxDisabledLikeColors()
55 }
56 }
57
58 @Composable
switchButtonColorSchemenull59 internal fun WearPermissionToggleControlStyle.switchButtonColorScheme(): SwitchButtonColors {
60 return when (this) {
61 WearPermissionToggleControlStyle.Default -> switchButtonColors()
62 WearPermissionToggleControlStyle.Transparent -> switchButtonTransparentColors()
63 WearPermissionToggleControlStyle.DisabledLike -> switchButtonDisabledLikeColors()
64 }
65 }
66
67 @Composable
material2ToggleControlColorsnull68 internal fun WearPermissionToggleControlStyle.material2ToggleControlColors(): ToggleChipColors {
69 return when (this) {
70 WearPermissionToggleControlStyle.Default -> toggleChipColors()
71 WearPermissionToggleControlStyle.Transparent -> toggleChipBackgroundColors()
72 WearPermissionToggleControlStyle.DisabledLike -> toggleChipDisabledColors()
73 }
74 }
75
76 @Composable
checkButtonTransparentColorsnull77 private fun checkButtonTransparentColors() =
78 checkboxButtonColors(
79 checkedContainerColor = Color.Transparent,
80 uncheckedContainerColor = Color.Transparent,
81 disabledCheckedContainerColor = Color.Transparent,
82 disabledUncheckedContainerColor = Color.Transparent,
83 )
84
85 @Composable
86 private fun radioButtonTransparentColors() =
87 radioButtonColors(
88 selectedContainerColor = Color.Transparent,
89 unselectedContainerColor = Color.Transparent,
90 disabledSelectedContainerColor = Color.Transparent,
91 disabledUnselectedContainerColor = Color.Transparent,
92 )
93
94 @Composable
95 private fun switchButtonTransparentColors() =
96 switchButtonColors(
97 checkedContainerColor = Color.Transparent,
98 uncheckedContainerColor = Color.Transparent,
99 disabledCheckedContainerColor = Color.Transparent,
100 disabledUncheckedContainerColor = Color.Transparent,
101 )
102
103 @Composable
104 private fun checkboxDisabledLikeColors(): CheckboxButtonColors {
105 val defaultColors = checkboxButtonColors()
106 return checkboxButtonColors(
107 checkedContainerColor = defaultColors.disabledCheckedContainerColor,
108 checkedContentColor = defaultColors.disabledCheckedContentColor,
109 checkedSecondaryContentColor = defaultColors.disabledCheckedSecondaryContentColor,
110 checkedIconColor = defaultColors.disabledCheckedIconColor,
111 checkedBoxColor = defaultColors.disabledCheckedBoxColor,
112 checkedCheckmarkColor = defaultColors.disabledCheckedCheckmarkColor,
113 uncheckedContainerColor = defaultColors.disabledUncheckedContainerColor,
114 uncheckedContentColor = defaultColors.disabledUncheckedContentColor,
115 uncheckedSecondaryContentColor = defaultColors.disabledUncheckedSecondaryContentColor,
116 uncheckedIconColor = defaultColors.disabledUncheckedIconColor,
117 uncheckedBoxColor = defaultColors.disabledUncheckedBoxColor,
118 )
119 }
120
121 @Composable
radioButtonDisabledLikeColorsnull122 private fun radioButtonDisabledLikeColors(): RadioButtonColors {
123 val defaultColors = radioButtonColors()
124 return radioButtonColors(
125 selectedContainerColor = defaultColors.disabledSelectedContainerColor,
126 selectedContentColor = defaultColors.disabledSelectedContentColor,
127 selectedSecondaryContentColor = defaultColors.disabledSelectedSecondaryContentColor,
128 selectedIconColor = defaultColors.disabledSelectedIconColor,
129 selectedControlColor = defaultColors.disabledSelectedControlColor,
130 unselectedContentColor = defaultColors.disabledUnselectedContentColor,
131 unselectedContainerColor = defaultColors.disabledUnselectedContainerColor,
132 unselectedSecondaryContentColor = defaultColors.disabledUnselectedSecondaryContentColor,
133 unselectedIconColor = defaultColors.disabledUnselectedIconColor,
134 unselectedControlColor = defaultColors.disabledUnselectedControlColor,
135 )
136 }
137
138 @Composable
switchButtonDisabledLikeColorsnull139 private fun switchButtonDisabledLikeColors(): SwitchButtonColors {
140 val defaultColors = switchButtonColors()
141 return switchButtonColors(
142 checkedContainerColor = defaultColors.disabledCheckedContainerColor,
143 checkedContentColor = defaultColors.disabledCheckedContentColor,
144 checkedSecondaryContentColor = defaultColors.disabledCheckedSecondaryContentColor,
145 checkedIconColor = defaultColors.disabledCheckedIconColor,
146 checkedThumbColor = defaultColors.disabledCheckedThumbColor,
147 checkedThumbIconColor = defaultColors.disabledCheckedThumbIconColor,
148 checkedTrackColor = defaultColors.disabledCheckedTrackColor,
149 checkedTrackBorderColor = defaultColors.disabledCheckedTrackBorderColor,
150 uncheckedContainerColor = defaultColors.disabledUncheckedContainerColor,
151 uncheckedContentColor = defaultColors.disabledUncheckedContentColor,
152 uncheckedSecondaryContentColor = defaultColors.disabledUncheckedSecondaryContentColor,
153 uncheckedIconColor = defaultColors.disabledUncheckedIconColor,
154 uncheckedThumbColor = defaultColors.disabledUncheckedThumbColor,
155 uncheckedTrackColor = defaultColors.checkedTrackColor.run { copy(alpha = alpha * 0.12f) },
156 uncheckedTrackBorderColor = defaultColors.disabledUncheckedTrackBorderColor,
157 )
158 }
159