@@ -6,17 +6,25 @@ import androidx.activity.compose.setContent
6
6
import androidx.appcompat.app.AppCompatActivity
7
7
import androidx.compose.foundation.isSystemInDarkTheme
8
8
import androidx.compose.foundation.layout.*
9
+ import androidx.compose.foundation.rememberScrollState
9
10
import androidx.compose.foundation.shape.RoundedCornerShape
11
+ import androidx.compose.foundation.verticalScroll
10
12
import androidx.compose.material.*
11
13
import androidx.compose.runtime.getValue
12
14
import androidx.compose.runtime.mutableStateOf
15
+ import androidx.compose.runtime.remember
13
16
import androidx.compose.runtime.saveable.rememberSaveable
14
17
import androidx.compose.runtime.setValue
15
- import androidx.compose.ui.Alignment
16
18
import androidx.compose.ui.Modifier
19
+ import androidx.compose.ui.graphics.luminance
17
20
import androidx.compose.ui.unit.dp
18
21
import com.holix.android.bottomsheetdialog.compose.BottomSheetDialog
19
22
import com.holix.android.bottomsheetdialog.compose.BottomSheetDialogProperties
23
+ import com.holix.android.bottomsheetdialog.compose.NavigationBarProperties
24
+ import com.holix.android.bottomsheetdialogcomposedemo.preferences.BooleanPreference
25
+ import com.holix.android.bottomsheetdialogcomposedemo.preferences.ColorPreference
26
+ import com.holix.android.bottomsheetdialogcomposedemo.preferences.PreferenceCategory
27
+ import com.holix.android.bottomsheetdialogcomposedemo.preferences.SingleChoicePreference
20
28
21
29
class MainActivity : AppCompatActivity () {
22
30
override fun onCreate (savedInstanceState : Bundle ? ) {
@@ -29,6 +37,10 @@ class MainActivity : AppCompatActivity() {
29
37
lightColors()
30
38
}
31
39
) {
40
+ var showBottomSheetDialog by rememberSaveable {
41
+ mutableStateOf(false )
42
+ }
43
+ // BottomSheetProperties
32
44
var dismissOnBackPress by rememberSaveable {
33
45
mutableStateOf(true )
34
46
}
@@ -38,8 +50,16 @@ class MainActivity : AppCompatActivity() {
38
50
var dismissWithAnimation by rememberSaveable {
39
51
mutableStateOf(false )
40
52
}
41
- var showBottomSheetDialog by rememberSaveable {
42
- mutableStateOf(false )
53
+ // NavigationBarProperties
54
+ val surfaceColor = MaterialTheme .colors.surface
55
+ var navigationBarColor by remember(surfaceColor) {
56
+ mutableStateOf(surfaceColor)
57
+ }
58
+ var darkIcons by rememberSaveable {
59
+ mutableStateOf(DarkIconsValue .Default )
60
+ }
61
+ var navigationBarContrastEnforced by rememberSaveable {
62
+ mutableStateOf(true )
43
63
}
44
64
if (showBottomSheetDialog) {
45
65
BottomSheetDialog (
@@ -51,7 +71,15 @@ class MainActivity : AppCompatActivity() {
51
71
dismissOnBackPress = dismissOnBackPress,
52
72
dismissOnClickOutside = dismissOnClickOutside,
53
73
dismissWithAnimation = dismissWithAnimation,
54
- navigationBarColor = MaterialTheme .colors.surface
74
+ navigationBarProperties = NavigationBarProperties (
75
+ color = navigationBarColor,
76
+ darkIcons = when (darkIcons) {
77
+ DarkIconsValue .Default -> navigationBarColor.luminance() > 0.5F
78
+ DarkIconsValue .True -> true
79
+ DarkIconsValue .False -> false
80
+ },
81
+ navigationBarContrastEnforced = navigationBarContrastEnforced
82
+ )
55
83
)
56
84
) {
57
85
Surface (
@@ -60,69 +88,102 @@ class MainActivity : AppCompatActivity() {
60
88
Column (
61
89
modifier = Modifier
62
90
.fillMaxWidth()
63
- .padding(16 .dp),
91
+ .padding(16 .dp)
92
+ .verticalScroll(rememberScrollState()),
64
93
verticalArrangement = Arrangement .spacedBy(16 .dp)
65
94
) {
66
95
Text (text = " Title" , style = MaterialTheme .typography.h5)
67
96
repeat(5 ) { index ->
68
- Text (text = " Item $index " , style = MaterialTheme .typography.body1)
97
+ Text (
98
+ text = " Item $index " ,
99
+ style = MaterialTheme .typography.body1
100
+ )
69
101
}
70
102
}
71
103
}
72
104
}
73
105
}
74
106
Surface {
75
- Box (
76
- modifier = Modifier .fillMaxSize(),
77
- contentAlignment = Alignment .Center
107
+ Column (
108
+ modifier = Modifier .fillMaxSize()
78
109
) {
79
110
Column (
80
- verticalArrangement = Arrangement .spacedBy(16 .dp),
81
- horizontalAlignment = Alignment .CenterHorizontally
111
+ modifier = Modifier
112
+ .fillMaxWidth()
113
+ .weight(1F )
114
+ .verticalScroll(rememberScrollState())
82
115
) {
83
- Row (
84
- verticalAlignment = Alignment .CenterVertically ,
85
- horizontalArrangement = Arrangement .spacedBy(8 .dp)
86
- ) {
87
- Text (text = " dismissOnBackPress" )
88
- Switch (
89
- checked = dismissOnBackPress,
90
- onCheckedChange = {
91
- dismissOnBackPress = it
92
- }
93
- )
94
- }
95
- Row (
96
- verticalAlignment = Alignment .CenterVertically ,
97
- horizontalArrangement = Arrangement .spacedBy(8 .dp)
98
- ) {
99
- Text (text = " dismissOnClickOutside" )
100
- Switch (
101
- checked = dismissOnClickOutside,
102
- onCheckedChange = {
103
- dismissOnClickOutside = it
104
- }
105
- )
106
- }
107
- Row (
108
- verticalAlignment = Alignment .CenterVertically ,
109
- horizontalArrangement = Arrangement .spacedBy(8 .dp)
110
- ) {
111
- Text (text = " dismissWithAnimation" )
112
- Switch (
113
- checked = dismissWithAnimation,
114
- onCheckedChange = {
115
- dismissWithAnimation = it
116
- }
117
- )
118
- }
119
- Button (onClick = { showBottomSheetDialog = true }) {
120
- Text (text = " Show" )
121
- }
116
+ PreferenceCategory (" BottomSheetDialogProperties" )
117
+ BooleanPreference (
118
+ value = dismissOnBackPress,
119
+ onValueChange = {
120
+ dismissOnBackPress = it
121
+ },
122
+ label = " dismissOnBackPress"
123
+ )
124
+ BooleanPreference (
125
+ value = dismissOnClickOutside,
126
+ onValueChange = {
127
+ dismissOnClickOutside = it
128
+ },
129
+ label = " dismissOnClickOutside"
130
+ )
131
+ BooleanPreference (
132
+ value = dismissWithAnimation,
133
+ onValueChange = {
134
+ dismissWithAnimation = it
135
+ },
136
+ label = " dismissWithAnimation"
137
+ )
138
+ PreferenceCategory (" NavigationBarProperties" )
139
+ ColorPreference (
140
+ value = navigationBarColor,
141
+ onValueChange = {
142
+ navigationBarColor = it
143
+ },
144
+ label = " color"
145
+ )
146
+ SingleChoicePreference (
147
+ value = darkIcons.name,
148
+ onValueChange = {
149
+ darkIcons = DarkIconsValue .valueOf(it)
150
+ },
151
+ label = " darkIcons" ,
152
+ options = DarkIconsValue .values().map { value ->
153
+ Pair (
154
+ value.name,
155
+ when (value) {
156
+ DarkIconsValue .Default ->
157
+ " Default (color.luminance() > 0.5F) = " +
158
+ " ${navigationBarColor.luminance() > 0.5F } "
159
+ else -> value.name
160
+ }
161
+ )
162
+ }
163
+ )
164
+ BooleanPreference (
165
+ value = navigationBarContrastEnforced,
166
+ onValueChange = {
167
+ navigationBarContrastEnforced = it
168
+ },
169
+ label = " navigationBarContrastEnforced"
170
+ )
171
+ }
172
+ Button (
173
+ modifier = Modifier
174
+ .padding(16 .dp)
175
+ .fillMaxWidth(),
176
+ onClick = { showBottomSheetDialog = true }
177
+ ) {
178
+ Text (text = " Show" )
122
179
}
123
180
}
124
181
}
125
182
}
126
183
}
127
184
}
128
185
}
186
+
187
+ private enum class DarkIconsValue {
188
+ Default , True , False
189
+ }
0 commit comments