1 @file:Suppress("unused")
2
3 /*
4 * Copyright (C) 2024 The Android Open Source Project
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18 package com.android.permissioncontroller.wear.permission.components.theme
19
20 import android.content.Context
21 import android.os.Build
22 import androidx.annotation.ColorRes
23 import androidx.annotation.DoNotInline
24 import androidx.annotation.RequiresApi
25 import androidx.compose.ui.graphics.Color
26
27 /**
28 * Tonal Palette structure in Material.
29 *
30 * A tonal palette is comprised of 5 tonal ranges. Each tonal range includes the 13 stops, or tonal
31 * swatches.
32 *
33 * Tonal range names are:
34 * - Neutral (N)
35 * - Neutral variant (NV)
36 * - Primary (P)
37 * - Secondary (S)
38 * - Tertiary (T)
39 */
40 internal class WearPermissionTonalPalette(
41 // The neutral tonal range.
42 val neutral100: Color,
43 val neutral99: Color,
44 val neutral95: Color,
45 val neutral90: Color,
46 val neutral80: Color,
47 val neutral70: Color,
48 val neutral60: Color,
49 val neutral50: Color,
50 val neutral40: Color,
51 val neutral30: Color,
52 val neutral20: Color,
53 val neutral10: Color,
54 val neutral0: Color,
55
56 // The neutral variant tonal range, sometimes called "neutral 2"
57 val neutralVariant100: Color,
58 val neutralVariant99: Color,
59 val neutralVariant95: Color,
60 val neutralVariant90: Color,
61 val neutralVariant80: Color,
62 val neutralVariant70: Color,
63 val neutralVariant60: Color,
64 val neutralVariant50: Color,
65 val neutralVariant40: Color,
66 val neutralVariant30: Color,
67 val neutralVariant20: Color,
68 val neutralVariant10: Color,
69 val neutralVariant0: Color,
70
71 // The primary tonal range, also known as accent 1
72 val primary100: Color,
73 val primary99: Color,
74 val primary95: Color,
75 val primary90: Color,
76 val primary80: Color,
77 val primary70: Color,
78 val primary60: Color,
79 val primary50: Color,
80 val primary40: Color,
81 val primary30: Color,
82 val primary20: Color,
83 val primary10: Color,
84 val primary0: Color,
85
86 // The Secondary tonal range, also know as accent 2
87 val secondary100: Color,
88 val secondary99: Color,
89 val secondary95: Color,
90 val secondary90: Color,
91 val secondary80: Color,
92 val secondary70: Color,
93 val secondary60: Color,
94 val secondary50: Color,
95 val secondary40: Color,
96 val secondary30: Color,
97 val secondary20: Color,
98 val secondary10: Color,
99 val secondary0: Color,
100
101 // The tertiary tonal range, also known as accent 3
102 val tertiary100: Color,
103 val tertiary99: Color,
104 val tertiary95: Color,
105 val tertiary90: Color,
106 val tertiary80: Color,
107 val tertiary70: Color,
108 val tertiary60: Color,
109 val tertiary50: Color,
110 val tertiary40: Color,
111 val tertiary30: Color,
112 val tertiary20: Color,
113 val tertiary10: Color,
114 val tertiary0: Color,
115 )
116
117 /** Dynamic colors for wear compose material to support resource overlay. */
118 @RequiresApi(Build.VERSION_CODES.S)
dynamicTonalPalettenull119 internal fun dynamicTonalPalette(context: Context) =
120 WearPermissionTonalPalette(
121 // The neutral tonal range from the generated dynamic color palette.
122 neutral100 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_0),
123 neutral99 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_10),
124 neutral95 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_50),
125 neutral90 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_100),
126 neutral80 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_200),
127 neutral70 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_300),
128 neutral60 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_400),
129 neutral50 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_500),
130 neutral40 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_600),
131 neutral30 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_700),
132 neutral20 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_800),
133 neutral10 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_900),
134 neutral0 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_1000),
135
136 // The neutral variant tonal range, sometimes called "neutral 2", from the
137 // generated dynamic color palette.
138 neutralVariant100 =
139 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_0),
140 neutralVariant99 =
141 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_10),
142 neutralVariant95 =
143 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_50),
144 neutralVariant90 =
145 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_100),
146 neutralVariant80 =
147 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_200),
148 neutralVariant70 =
149 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_300),
150 neutralVariant60 =
151 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_400),
152 neutralVariant50 =
153 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_500),
154 neutralVariant40 =
155 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_600),
156 neutralVariant30 =
157 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_700),
158 neutralVariant20 =
159 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_800),
160 neutralVariant10 =
161 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_900),
162 neutralVariant0 =
163 ColorResourceHelper.getColor(context, android.R.color.system_neutral2_1000),
164
165 // The primary tonal range from the generated dynamic color palette.
166 primary100 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_0),
167 primary99 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_10),
168 primary95 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_50),
169 primary90 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_100),
170 primary80 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_200),
171 primary70 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_300),
172 primary60 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_400),
173 primary50 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_500),
174 primary40 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_600),
175 primary30 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_700),
176 primary20 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_800),
177 primary10 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_900),
178 primary0 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_1000),
179
180 // The secondary tonal range from the generated dynamic color palette.
181 secondary100 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_0),
182 secondary99 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_10),
183 secondary95 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_50),
184 secondary90 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_100),
185 secondary80 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_200),
186 secondary70 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_300),
187 secondary60 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_400),
188 secondary50 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_500),
189 secondary40 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_600),
190 secondary30 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_700),
191 secondary20 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_800),
192 secondary10 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_900),
193 secondary0 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_1000),
194
195 // The tertiary tonal range from the generated dynamic color palette.
196 tertiary100 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_0),
197 tertiary99 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_10),
198 tertiary95 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_50),
199 tertiary90 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_100),
200 tertiary80 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_200),
201 tertiary70 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_300),
202 tertiary60 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_400),
203 tertiary50 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_500),
204 tertiary40 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_600),
205 tertiary30 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_700),
206 tertiary20 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_800),
207 tertiary10 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_900),
208 tertiary0 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_1000),
209 )
210
211 private object ColorResourceHelper {
212 @DoNotInline
213 fun getColor(context: Context, @ColorRes id: Int): Color {
214 return Color(context.resources.getColor(id, context.theme))
215 }
216 }
217