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