1+ package com.flamingo.playground.components.iconbutton
2+
3+ import android.os.Bundle
4+ import android.view.View
5+ import androidx.compose.runtime.getValue
6+ import androidx.compose.runtime.mutableStateOf
7+ import androidx.compose.runtime.setValue
8+ import androidx.preference.DropDownPreference
9+ import androidx.preference.PreferenceFragmentCompat
10+ import androidx.preference.SwitchPreferenceCompat
11+ import com.flamingo.Flamingo
12+ import com.flamingo.components.IconButton
13+ import com.flamingo.components.IconButtonColor
14+ import com.flamingo.components.IconButtonIndicator
15+ import com.flamingo.components.IconButtonShape
16+ import com.flamingo.components.IconButtonSize
17+ import com.flamingo.components.IconButtonVariant
18+ import com.flamingo.components.IndicatorColor
19+ import com.flamingo.components.IndicatorPlacement
20+ import com.flamingo.demoapi.DemoPreference
21+ import com.flamingo.demoapi.StatesPlayroomDemo
22+ import com.flamingo.demoapi.configurePreference
23+ import com.flamingo.demoapi.findPreference
24+ import com.flamingo.demoapi.initPref
25+ import com.flamingo.demoapi.onChange
26+ import com.flamingo.demoapi.tintIcons
27+ import com.flamingo.playground.R
28+ import com.flamingo.playground.boast
29+
30+ @StatesPlayroomDemo
31+ class IconButtonComposeStatesPlayroom : PreferenceFragmentCompat () {
32+ override fun onCreatePreferences (savedInstanceState : Bundle ? , rootKey : String? ) {
33+ setPreferencesFromResource(R .xml.states_playroom_icon_button_compose, rootKey)
34+ preferenceScreen.tintIcons()
35+ }
36+
37+ @Suppress(" LongMethod" )
38+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
39+ super .onViewCreated(view, savedInstanceState)
40+
41+ var icon by mutableStateOf(Flamingo .icons.Aperture )
42+ var size by mutableStateOf(IconButtonSize .MEDIUM )
43+ var variant by mutableStateOf(IconButtonVariant .CONTAINED )
44+ var color by mutableStateOf(IconButtonColor .DEFAULT )
45+ var shape by mutableStateOf(IconButtonShape .CIRCLE )
46+ var indicator by mutableStateOf(false )
47+ var loading by mutableStateOf(false )
48+ var disabled by mutableStateOf(false )
49+ var indicatorColor by mutableStateOf(IndicatorColor .DEFAULT )
50+ var indicatorPlacement by mutableStateOf(IndicatorPlacement .TopEnd )
51+
52+ findPreference<DemoPreference >(" component" )?.setComposeDesignComponent {
53+ IconButton (
54+ onClick = boast(" Click" ),
55+ icon = icon,
56+ contentDescription = null ,
57+ size = size,
58+ variant = variant,
59+ color = color,
60+ shape = shape,
61+ indicator = if (indicator) IconButtonIndicator (
62+ indicatorColor,
63+ indicatorPlacement
64+ ) else null ,
65+ loading = loading,
66+ disabled = disabled,
67+ )
68+ }
69+
70+ configurePreference<SwitchPreferenceCompat >(" loading" ) {
71+ onChange { loading = it as ? Boolean ? : return @onChange false ; true }
72+ initPref(savedInstanceState, defVal = false )
73+ }
74+
75+ configurePreference<DropDownPreference >(" size" ) {
76+ val sizes = IconButtonSize .values().map { it.name }.toTypedArray()
77+ entries = sizes
78+ entryValues = sizes
79+ onChange { size = IconButtonSize .valueOf(it); true }
80+ initPref(savedInstanceState, defVal = IconButtonSize .MEDIUM )
81+ }
82+
83+ configurePreference<DropDownPreference >(" color" ) {
84+ val colors = IconButtonColor .values().map { it.name }.toTypedArray()
85+ entries = colors
86+ entryValues = colors
87+ onChange {
88+ color = IconButtonColor .valueOf(it); true
89+ }
90+ initPref(savedInstanceState, defVal = IconButtonColor .DEFAULT )
91+ }
92+
93+ configurePreference<DropDownPreference >(" variant" ) {
94+ val variants = IconButtonVariant .values().map { it.name }.toTypedArray()
95+ entries = variants
96+ entryValues = variants
97+ onChange {
98+ variant = IconButtonVariant .valueOf(it); true
99+ }
100+ initPref(savedInstanceState, defVal = IconButtonVariant .CONTAINED )
101+ }
102+
103+ configurePreference<DropDownPreference >(" shape" ) {
104+ val shapes = IconButtonShape .values().map { it.name }.toTypedArray()
105+ entries = shapes
106+ entryValues = shapes
107+ onChange {
108+ shape = IconButtonShape .valueOf(it); true
109+ }
110+ initPref(savedInstanceState, defVal = IconButtonShape .CIRCLE )
111+ }
112+
113+ configurePreference<DropDownPreference >(" icon" ) {
114+ entries = arrayOf(
115+ " Airplay" ,
116+ " Bell" ,
117+ " Aperture" ,
118+ )
119+ entryValues = arrayOf(
120+ Flamingo .icons.Airplay .getName(context),
121+ Flamingo .icons.Bell .getName(context),
122+ Flamingo .icons.Aperture .getName(context),
123+ )
124+ onChange {
125+ icon = it.let { Flamingo .icons.fromName(context, it) }
126+ true
127+ }
128+ initPref(savedInstanceState, defVal = Flamingo .icons.Airplay .getName(context))
129+ }
130+
131+ configurePreference<SwitchPreferenceCompat >(" disabled" ) {
132+ onChange { disabled = it as ? Boolean ? : return @onChange false ; true }
133+ initPref(savedInstanceState, defVal = false )
134+ }
135+
136+ configurePreference<SwitchPreferenceCompat >(" indicator" ) {
137+ onChange {
138+ indicator = it as ? Boolean ? : return @onChange false
139+ findPreference(" indicatorColor" ).isVisible = indicator
140+ findPreference(" indicatorPlacement" ).isVisible = indicator
141+
142+ true
143+ }
144+ initPref(savedInstanceState, defVal = false )
145+ }
146+
147+ configurePreference<DropDownPreference >(" indicatorColor" ) {
148+ val colors = IndicatorColor .values().map { it.name }.toTypedArray()
149+ entries = colors
150+ entryValues = colors
151+ onChange {
152+ indicatorColor = IndicatorColor .valueOf(it); true
153+ }
154+ initPref(savedInstanceState, defVal = IndicatorColor .DEFAULT )
155+ }
156+
157+ configurePreference<DropDownPreference >(" indicatorPlacement" ) {
158+ val placement = IndicatorPlacement .values().map { it.name }.toTypedArray()
159+ entries = placement
160+ entryValues = placement
161+ onChange {
162+ indicatorPlacement = IndicatorPlacement .valueOf(it); true
163+ }
164+ initPref(savedInstanceState, defVal = IndicatorPlacement .TopEnd )
165+ }
166+ }
167+ }
0 commit comments