• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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