Skip to content

Commit 6d0a043

Browse files
Бубляев Алексей ВячеславовичБубляев Алексей Вячеславович
authored andcommitted
Pull request #26: Flamingo 0.0.13
Merge in ~18384547/flamingo-android from develop to main * commit '36a6ef4d23bddfcb8c38ed6931012c0a045c84c0': @task Flamingo version 0.0.13 [FLAMINGO-41] @task finished dropdown and its previews [FLAMINGO-41] @task edited dropdown [FLAMINGO-41] @task added dropdown [FLAMINGO-41]
2 parents 2ab891c + 36a6ef4 commit 6d0a043

File tree

13 files changed

+858
-35
lines changed

13 files changed

+858
-35
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package com.flamingo.playground.components.dropdown
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.compose.ui.platform.LocalContext
9+
import androidx.preference.DropDownPreference
10+
import androidx.preference.PreferenceFragmentCompat
11+
import com.flamingo.Flamingo
12+
import com.flamingo.components.button.ButtonSize
13+
import com.flamingo.components.dropdown.BaseDropdownComponent
14+
import com.flamingo.components.dropdown.Dropdown
15+
import com.flamingo.components.dropdown.DropdownItem
16+
import com.flamingo.demoapi.DemoPreference
17+
import com.flamingo.demoapi.StatesPlayroomDemo
18+
import com.flamingo.demoapi.configurePreference
19+
import com.flamingo.demoapi.findPreference
20+
import com.flamingo.demoapi.initPref
21+
import com.flamingo.demoapi.onChange
22+
import com.flamingo.playground.R
23+
import com.flamingo.playground.components.tabrow.TabsWithDropdown
24+
import com.flamingo.playground.utils.Boast
25+
26+
@StatesPlayroomDemo
27+
class DropdownStatesPlayroom : PreferenceFragmentCompat() {
28+
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
29+
setPreferencesFromResource(R.xml.states_playroom_dropdown, rootKey)
30+
}
31+
32+
@Suppress("LongMethod")
33+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
34+
super.onViewCreated(view, savedInstanceState)
35+
36+
var baseDropdownComponent: BaseDropdownComponent by mutableStateOf(BaseDropdownComponent.Button("button"))
37+
val items = listOf(
38+
DropdownItem("item 1", Flamingo.icons.Bell),
39+
DropdownItem("long long long long long long long long item", Flamingo.icons.Aperture),
40+
DropdownItem("item 3"),
41+
DropdownItem("item 4 long long long long long long long long"),
42+
DropdownItem("item 5", Flamingo.icons.Bell),
43+
DropdownItem("item 6", disabled = true),
44+
DropdownItem("item 7", Flamingo.icons.Share),
45+
DropdownItem("item 8", Flamingo.icons.Bell),
46+
DropdownItem("item 9", Flamingo.icons.Bell),
47+
DropdownItem("item 10", Flamingo.icons.Bell, true),
48+
DropdownItem("item 11", Flamingo.icons.Bell),
49+
DropdownItem("item 12", Flamingo.icons.Bell),
50+
DropdownItem("item 13", Flamingo.icons.Bell),
51+
)
52+
var baseComponentDemo: BaseComponentDemo by mutableStateOf(BaseComponentDemo.Button)
53+
54+
findPreference<DemoPreference>("component")?.setComposeDesignComponent {
55+
val context = LocalContext.current
56+
if (baseComponentDemo == BaseComponentDemo.TabRow) {
57+
TabsWithDropdown()
58+
} else {
59+
Dropdown(
60+
baseDropdownComponent = baseDropdownComponent,
61+
items = items,
62+
onDropdownItemSelected = {
63+
Boast.makeText(context, "clicked on ${it.label}")
64+
}
65+
)
66+
}
67+
}
68+
69+
configurePreference<DropDownPreference>("baseComponent") {
70+
entries = BaseComponentDemo.values().map { it.name }.toTypedArray()
71+
entryValues = entries
72+
onChange { newValue ->
73+
val demo = BaseComponentDemo.valueOf(newValue)
74+
baseComponentDemo = demo
75+
baseDropdownComponent = when (demo) {
76+
BaseComponentDemo.Button -> BaseDropdownComponent.Button("button")
77+
BaseComponentDemo.ButtonWithIcon -> BaseDropdownComponent.Button(
78+
"button 2",
79+
Flamingo.icons.Bell,
80+
ButtonSize.SMALL
81+
)
82+
BaseComponentDemo.Chip -> BaseDropdownComponent.Chip("chip")
83+
BaseComponentDemo.ChipWithIcon -> BaseDropdownComponent.Chip(
84+
"chip",
85+
Flamingo.icons.Share
86+
)
87+
BaseComponentDemo.IconButton -> BaseDropdownComponent.IconButton(Flamingo.icons.Edit)
88+
BaseComponentDemo.TabRow -> BaseDropdownComponent.Button("null") // placeholder
89+
}
90+
true
91+
}
92+
initPref(savedInstanceState, defVal = BaseComponentDemo.Button.name)
93+
}
94+
}
95+
96+
private enum class BaseComponentDemo {
97+
Button,
98+
ButtonWithIcon,
99+
Chip,
100+
ChipWithIcon,
101+
IconButton,
102+
TabRow
103+
}
104+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.flamingo.playground.components.dropdown
2+
3+
import android.os.Bundle
4+
import android.view.LayoutInflater
5+
import android.view.ViewGroup
6+
import androidx.compose.foundation.layout.Arrangement
7+
import androidx.compose.foundation.layout.Box
8+
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.tooling.preview.Preview
13+
import androidx.compose.ui.unit.dp
14+
import androidx.fragment.app.Fragment
15+
import com.flamingo.demoapi.TypicalUsageDemo
16+
import com.flamingo.playground.Compose
17+
import com.flamingo.playground.components.tabrow.TabsWithDropdown
18+
19+
@TypicalUsageDemo
20+
class DropdownTypicalUsage : Fragment() {
21+
22+
override fun onCreateView(
23+
inflater: LayoutInflater,
24+
container: ViewGroup?,
25+
savedInstanceState: Bundle?,
26+
) = Compose { Box { DropdownSamples() } }
27+
28+
@Preview
29+
@Composable
30+
private fun DropdownSamples() = Column(
31+
modifier = Modifier.padding(vertical = 16.dp),
32+
verticalArrangement = Arrangement.spacedBy(16.dp)
33+
) {
34+
ButtonDropdownWithChangingLabel()
35+
IconButtonDropdown()
36+
ChipDropdown()
37+
TabsWithDropdown()
38+
}
39+
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package com.flamingo.playground.components.dropdown
2+
3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Row
5+
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.runtime.Composable
7+
import androidx.compose.runtime.getValue
8+
import androidx.compose.runtime.mutableStateOf
9+
import androidx.compose.runtime.remember
10+
import androidx.compose.runtime.setValue
11+
import androidx.compose.ui.Alignment
12+
import androidx.compose.ui.Modifier
13+
import androidx.compose.ui.unit.dp
14+
import com.flamingo.Flamingo
15+
import com.flamingo.components.IconButtonColor
16+
import com.flamingo.components.IconButtonSize
17+
import com.flamingo.components.IconButtonVariant
18+
import com.flamingo.components.dropdown.BaseDropdownComponent
19+
import com.flamingo.components.dropdown.Dropdown
20+
import com.flamingo.components.dropdown.DropdownItem
21+
import com.flamingo.theme.FlamingoIcon
22+
23+
@Composable
24+
fun ButtonDropdownWithChangingLabel() {
25+
var label by remember { mutableStateOf("button") }
26+
var icon: FlamingoIcon? by remember { mutableStateOf(null) }
27+
Dropdown(
28+
modifier = Modifier.padding(start = 16.dp),
29+
baseDropdownComponent = BaseDropdownComponent.Button(label, icon),
30+
items = listOf(
31+
DropdownItem("item 1"),
32+
DropdownItem("item 2", Flamingo.icons.Bell),
33+
DropdownItem("long long long item")
34+
).filter { it.label != label },
35+
onDropdownItemSelected = {
36+
label = it.label
37+
icon = it.icon
38+
}
39+
)
40+
}
41+
42+
@Composable
43+
fun IconButtonDropdown() {
44+
Row(
45+
horizontalArrangement = Arrangement.spacedBy(16.dp),
46+
verticalAlignment = Alignment.CenterVertically,
47+
modifier = Modifier.padding(start = 16.dp)
48+
) {
49+
Dropdown(
50+
baseDropdownComponent = BaseDropdownComponent.IconButton(Flamingo.icons.MoreHorizontal),
51+
items = listOf(
52+
DropdownItem("item 1"),
53+
DropdownItem("item 2", Flamingo.icons.Bell, true),
54+
DropdownItem("item 3", Flamingo.icons.Bell),
55+
DropdownItem("long long long item")
56+
),
57+
onDropdownItemSelected = {}
58+
)
59+
60+
Dropdown(
61+
baseDropdownComponent = BaseDropdownComponent.IconButton(
62+
icon = Flamingo.icons.MoreVertical,
63+
size = IconButtonSize.LARGE,
64+
color = IconButtonColor.PRIMARY
65+
),
66+
items = listOf(
67+
DropdownItem("item 1"),
68+
DropdownItem("item 2", Flamingo.icons.Bell, true),
69+
DropdownItem("long long long item"),
70+
DropdownItem("second long long item", Flamingo.icons.Edit)
71+
),
72+
onDropdownItemSelected = {}
73+
)
74+
75+
Dropdown(
76+
baseDropdownComponent = BaseDropdownComponent.IconButton(
77+
icon = Flamingo.icons.Menu,
78+
variant = IconButtonVariant.TEXT,
79+
color = IconButtonColor.WARNING
80+
),
81+
items = listOf(
82+
DropdownItem("item 1"),
83+
DropdownItem("item 2", Flamingo.icons.Bell, true),
84+
DropdownItem("item 3", Flamingo.icons.Bell),
85+
DropdownItem("long long long item")
86+
),
87+
onDropdownItemSelected = {}
88+
)
89+
}
90+
}
91+
92+
@Composable
93+
fun ChipDropdown() {
94+
var label by remember { mutableStateOf("button") }
95+
var icon: FlamingoIcon? by remember { mutableStateOf(null) }
96+
Dropdown(
97+
modifier = Modifier.padding(start = 16.dp),
98+
baseDropdownComponent = BaseDropdownComponent.Chip(label, icon),
99+
items = listOf(
100+
DropdownItem("item 1"),
101+
DropdownItem("item 2", Flamingo.icons.Bell),
102+
DropdownItem("long long long item")
103+
).filter { it.label != label },
104+
onDropdownItemSelected = {
105+
label = it.label
106+
icon = it.icon
107+
}
108+
)
109+
}

flamingo-playground/src/main/java/com/flamingo/playground/components/tabrow/TabRowTypicalUsage.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,6 @@ class TabRowTypicalUsage : Fragment() {
5050
ComplexTabs()
5151
LinedTabs()
5252
ComplexLinedTabs()
53+
TabsWithDropdown()
5354
}
5455
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.flamingo.playground.components.tabrow
2+
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.getValue
5+
import androidx.compose.runtime.mutableStateOf
6+
import androidx.compose.runtime.saveable.rememberSaveable
7+
import androidx.compose.runtime.setValue
8+
import androidx.compose.ui.tooling.preview.Preview
9+
import com.flamingo.Flamingo
10+
import com.flamingo.components.BadgeColor
11+
import com.flamingo.components.dropdown.DropdownItem
12+
import com.flamingo.components.tabrow.Tab
13+
import com.flamingo.components.tabrow.TabRow
14+
import com.flamingo.components.tabrow.TabWithDropdown
15+
16+
@Preview
17+
@Composable
18+
fun TabsWithDropdown() {
19+
var index by rememberSaveable { mutableStateOf(0) }
20+
val tabs = listOf(
21+
TabWithDropdown(label = "One"),
22+
TabWithDropdown(label = "Two", disabled = true),
23+
TabWithDropdown(label = "Dropdown", dropdownItems = listOf(
24+
DropdownItem(label = "item 1"),
25+
DropdownItem(label = "item 2", disabled = true),
26+
DropdownItem(label = "item with icon", icon = Flamingo.icons.Bell),
27+
)),
28+
TabWithDropdown(label = "Three", badge = Tab.Badge("Badge text", BadgeColor.Primary)),
29+
TabWithDropdown(label = "Four", badge = Tab.Badge("Badge text", BadgeColor.Info), disabled = true),
30+
TabWithDropdown(label = "Bird"),
31+
)
32+
TabRow(tabs = tabs, selectedTabIndex = index, onTabSelect = { newIndex, dropdownIndex ->
33+
index = newIndex
34+
})
35+
}

flamingo-playground/src/main/java/com/flamingo/playground/gallery/ComponentsRepository.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ internal class ComponentsRepository {
1515

1616
return dscClass.sealedSubclasses
1717
.filterNot { it.isAbstract }
18-
.ifEmpty { error("There must be subclasses of ${dscClass.simpleName}") }
1918
.map {
2019
it.java.getAnnotation(annClass)
2120
?: error("Annotation @${annClass.simpleName} not found")
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.flamingo.playground.preview
2+
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.ui.tooling.preview.Preview
5+
import com.flamingo.Flamingo
6+
import com.flamingo.components.dropdown.BaseDropdownComponent
7+
import com.flamingo.components.dropdown.Dropdown
8+
import com.flamingo.components.dropdown.DropdownItem
9+
10+
@Preview
11+
@Composable
12+
fun DropdownPreview() {
13+
Dropdown(
14+
baseDropdownComponent = BaseDropdownComponent.Button("dropdown"),
15+
items = listOf(
16+
DropdownItem("item 1", Flamingo.icons.Bell),
17+
DropdownItem("long long long long long long long long item", Flamingo.icons.Aperture),
18+
DropdownItem("item 3"),
19+
DropdownItem("item 4 long long long long long long long long"),
20+
DropdownItem("item 5", Flamingo.icons.Bell),
21+
DropdownItem("item 6", disabled = true),
22+
DropdownItem("item 7", Flamingo.icons.Share),
23+
DropdownItem("item 8", Flamingo.icons.Bell),
24+
DropdownItem("item 9", Flamingo.icons.Bell),
25+
DropdownItem("item 10", Flamingo.icons.Bell, true),
26+
DropdownItem("item 11", Flamingo.icons.Bell),
27+
DropdownItem("item 12", Flamingo.icons.Bell),
28+
DropdownItem("item 13", Flamingo.icons.Bell),
29+
)
30+
) {
31+
32+
}
33+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
3+
4+
<com.flamingo.demoapi.DemoPreference app:key="component" />
5+
6+
<DropDownPreference
7+
app:iconSpaceReserved="false"
8+
app:key="baseComponent"
9+
app:persistent="false"
10+
app:summary="%s"
11+
app:title="Base component" />
12+
13+
</PreferenceScreen>

0 commit comments

Comments
 (0)