1
+ package info.papdt.express.helper.support
2
+
3
+ import android.content.Context
4
+ import info.papdt.express.helper.model.MaterialPalette
5
+ import kotlin.random.Random
6
+
7
+ object MaterialColorGenerator {
8
+
9
+ lateinit var Red : MaterialPalette
10
+ lateinit var Pink : MaterialPalette
11
+ lateinit var Purple : MaterialPalette
12
+ lateinit var DeepPurple : MaterialPalette
13
+ lateinit var Indigo : MaterialPalette
14
+ lateinit var Blue : MaterialPalette
15
+ lateinit var LightBlue : MaterialPalette
16
+ lateinit var Cyan : MaterialPalette
17
+ lateinit var Teal : MaterialPalette
18
+ lateinit var Green : MaterialPalette
19
+ lateinit var LightGreen : MaterialPalette
20
+ lateinit var Lime : MaterialPalette
21
+ lateinit var Yellow : MaterialPalette
22
+ lateinit var Amber : MaterialPalette
23
+ lateinit var Orange : MaterialPalette
24
+ lateinit var DeepOrange : MaterialPalette
25
+ lateinit var Brown : MaterialPalette
26
+ lateinit var BlueGrey : MaterialPalette
27
+
28
+ val AllPalettes : List <MaterialPalette > by lazy {
29
+ listOf (Red , Pink , Purple , DeepPurple , Indigo , Blue , LightBlue ,
30
+ Cyan , Teal , Green , LightGreen , Lime , Amber , Orange ,
31
+ DeepOrange , Brown , BlueGrey )
32
+ }
33
+
34
+ private val random: Random = Random (System .currentTimeMillis())
35
+
36
+ private val RedProducer = PaletteProducer (" red" ,
37
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
38
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
39
+ private val PinkProducer = PaletteProducer (" pink" ,
40
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
41
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
42
+ private val PurpleProducer = PaletteProducer (" purple" ,
43
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
44
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
45
+ private val DeepPurpleProducer = PaletteProducer (" deep_purple" ,
46
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
47
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
48
+ private val IndigoProducer = PaletteProducer (" indigo" ,
49
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
50
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
51
+ private val BlueProducer = PaletteProducer (" blue" ,
52
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
53
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
54
+ private val LightBlueProducer = PaletteProducer (" light_blue" ,
55
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
56
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
57
+ private val CyanProducer = PaletteProducer (" cyan" ,
58
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
59
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
60
+ private val TealProducer = PaletteProducer (" teal" ,
61
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
62
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
63
+ private val GreenProducer = PaletteProducer (" green" ,
64
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
65
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
66
+ private val LightGreenProducer = PaletteProducer (" light_green" ,
67
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
68
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
69
+ private val LimeProducer = PaletteProducer (" lime" ,
70
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
71
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
72
+ private val YellowProducer = PaletteProducer (" yellow" ,
73
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
74
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
75
+ private val AmberProducer = PaletteProducer (" amber" ,
76
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
77
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
78
+ private val OrangeProducer = PaletteProducer (" orange" ,
79
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
80
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
81
+ private val DeepOrangeProducer = PaletteProducer (" deep_orange" ,
82
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
83
+ " 600" , " 700" , " 800" , " 900" , " A100" , " A200" , " A400" , " A700" )
84
+ private val BrownProducer = PaletteProducer (" brown" ,
85
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
86
+ " 600" , " 700" , " 800" , " 900" )
87
+ private val BlueGreyProducer = PaletteProducer (" blue_grey" ,
88
+ " 50" , " 100" , " 200" , " 300" , " 400" , " 500" ,
89
+ " 600" , " 700" , " 800" , " 900" )
90
+
91
+ fun init (context : Context ) {
92
+ Red = RedProducer .make(context)
93
+ Pink = PinkProducer .make(context)
94
+ Purple = PurpleProducer .make(context)
95
+ DeepPurple = DeepPurpleProducer .make(context)
96
+ Indigo = IndigoProducer .make(context)
97
+ Blue = BlueProducer .make(context)
98
+ LightBlue = LightBlueProducer .make(context)
99
+ Cyan = CyanProducer .make(context)
100
+ Teal = TealProducer .make(context)
101
+ Green = GreenProducer .make(context)
102
+ LightGreen = LightGreenProducer .make(context)
103
+ Lime = LimeProducer .make(context)
104
+ Yellow = YellowProducer .make(context)
105
+ Amber = AmberProducer .make(context)
106
+ Orange = OrangeProducer .make(context)
107
+ DeepOrange = DeepOrangeProducer .make(context)
108
+ Brown = BrownProducer .make(context)
109
+ BlueGrey = BlueGreyProducer .make(context)
110
+ }
111
+
112
+ fun getPalette (key : Any ): MaterialPalette {
113
+ return AllPalettes [Math .abs(key.hashCode()) % AllPalettes .size]
114
+ }
115
+
116
+ private class PaletteProducer (
117
+ val colorName : String ,
118
+ vararg val colorKeys : String
119
+ ) {
120
+
121
+ fun make (context : Context ): MaterialPalette {
122
+ val res = context.resources
123
+ val ids = colorKeys.map {
124
+ it to res.getIdentifier(" ${colorName} _$it " ,
125
+ " color" , context.packageName)
126
+ }.toTypedArray()
127
+ return MaterialPalette .makeFromResources(context, colorName, * ids)
128
+ }
129
+
130
+ }
131
+
132
+ }
0 commit comments