Skip to content
This repository was archived by the owner on Jul 2, 2024. It is now read-only.

Commit 3f38459

Browse files
committed
Optimize ModalBottomSheet
1 parent 490b12a commit 3f38459

File tree

9 files changed

+84
-43
lines changed

9 files changed

+84
-43
lines changed

app/src/main/kotlin/com/sanmer/mrepo/ui/component/LicenseContent.kt

+17-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Arrangement
66
import androidx.compose.foundation.layout.Column
77
import androidx.compose.foundation.layout.Row
88
import androidx.compose.foundation.layout.Spacer
9-
import androidx.compose.foundation.layout.fillMaxSize
109
import androidx.compose.foundation.layout.fillMaxWidth
1110
import androidx.compose.foundation.layout.padding
1211
import androidx.compose.foundation.layout.size
@@ -44,7 +43,8 @@ import timber.log.Timber
4443

4544
@Composable
4645
fun LicenseContent(
47-
licenseId: String
46+
licenseId: String,
47+
modifier: Modifier = Modifier
4848
) {
4949
var license: License? by remember { mutableStateOf(null) }
5050
var message: String? by remember { mutableStateOf(null) }
@@ -62,22 +62,28 @@ fun LicenseContent(
6262
label = "LicenseContent"
6363
) {
6464
when {
65-
it.isLoading -> Loading(minHeight = 200.dp)
66-
it.isSucceeded -> ViewLicense(license = checkNotNull(license))
67-
it.isFailed -> Failed(message = message, minHeight = 200.dp)
65+
it.isLoading -> Loading(
66+
minHeight = 200.dp
67+
)
68+
it.isSucceeded -> ViewLicense(
69+
license = checkNotNull(license),
70+
modifier = modifier
71+
)
72+
it.isFailed -> Failed(
73+
message = message,
74+
minHeight = 200.dp
75+
)
6876
}
6977
}
7078
}
7179

7280
@Composable
7381
private fun ViewLicense(
74-
license: License
82+
license: License,
83+
modifier: Modifier = Modifier
7584
) = Column(
76-
modifier = Modifier
77-
.padding(top = 18.dp)
78-
.padding(horizontal = 18.dp)
79-
.fillMaxSize(),
80-
verticalArrangement = Arrangement.spacedBy(18.dp),
85+
modifier = modifier,
86+
verticalArrangement = Arrangement.spacedBy(16.dp),
8187
horizontalAlignment = Alignment.CenterHorizontally
8288
) {
8389
Surface(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.sanmer.mrepo.ui.component
2+
3+
import androidx.compose.foundation.layout.Box
4+
import androidx.compose.foundation.layout.Spacer
5+
import androidx.compose.foundation.layout.WindowInsets
6+
import androidx.compose.foundation.layout.asPaddingValues
7+
import androidx.compose.foundation.layout.navigationBars
8+
import androidx.compose.foundation.layout.padding
9+
import androidx.compose.runtime.Composable
10+
import androidx.compose.ui.Modifier
11+
12+
@Composable
13+
fun NavigationBarsSpacer(
14+
modifier: Modifier = Modifier
15+
) {
16+
val paddingValues = WindowInsets.navigationBars.asPaddingValues()
17+
18+
Box(
19+
modifier = Modifier.padding(paddingValues)
20+
) {
21+
Spacer(modifier = modifier)
22+
}
23+
}

app/src/main/kotlin/com/sanmer/mrepo/ui/component/VersionItemBottomSheet.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.Row
1616
import androidx.compose.foundation.layout.Spacer
1717
import androidx.compose.foundation.layout.WindowInsets
1818
import androidx.compose.foundation.layout.fillMaxWidth
19-
import androidx.compose.foundation.layout.navigationBars
2019
import androidx.compose.foundation.layout.padding
2120
import androidx.compose.foundation.layout.size
2221
import androidx.compose.foundation.layout.width
@@ -72,7 +71,7 @@ fun VersionItemBottomSheet(
7271
onDismissRequest = onClose,
7372
sheetState = state,
7473
shape = BottomSheetDefaults.expandedShape(15.dp),
75-
windowInsets = WindowInsets.navigationBars,
74+
windowInsets = WindowInsets(0),
7675
dragHandle = {
7776
if (hasChangelog) {
7877
BottomSheetDefaults.DragHandle()
@@ -113,6 +112,8 @@ fun VersionItemBottomSheet(
113112
onClose = onClose
114113
)
115114
}
115+
116+
NavigationBarsSpacer()
116117
}
117118
}
118119

app/src/main/kotlin/com/sanmer/mrepo/ui/screens/modules/ModulesMenu.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@ import androidx.compose.foundation.layout.Column
55
import androidx.compose.foundation.layout.FlowRow
66
import androidx.compose.foundation.layout.WindowInsets
77
import androidx.compose.foundation.layout.fillMaxWidth
8-
import androidx.compose.foundation.layout.navigationBars
98
import androidx.compose.foundation.layout.padding
109
import androidx.compose.foundation.layout.wrapContentHeight
1110
import androidx.compose.material3.BottomSheetDefaults
1211
import androidx.compose.material3.Icon
1312
import androidx.compose.material3.IconButton
1413
import androidx.compose.material3.MaterialTheme
1514
import androidx.compose.material3.ModalBottomSheet
16-
import androidx.compose.material3.SheetState
1715
import androidx.compose.material3.Text
1816
import androidx.compose.material3.rememberModalBottomSheetState
1917
import androidx.compose.runtime.Composable
@@ -30,6 +28,7 @@ import com.sanmer.mrepo.R
3028
import com.sanmer.mrepo.datastore.modules.ModulesMenuExt
3129
import com.sanmer.mrepo.datastore.repository.Option
3230
import com.sanmer.mrepo.ui.component.MenuChip
31+
import com.sanmer.mrepo.ui.component.NavigationBarsSpacer
3332
import com.sanmer.mrepo.ui.component.Segment
3433
import com.sanmer.mrepo.ui.component.SegmentedButtons
3534
import com.sanmer.mrepo.ui.component.SegmentedButtonsDefaults
@@ -63,15 +62,14 @@ fun ModulesMenu(
6362

6463
@Composable
6564
private fun BottomSheet(
66-
state: SheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),
6765
onClose: () -> Unit,
6866
menu: ModulesMenuExt,
6967
setMenu: (ModulesMenuExt) -> Unit
7068
) = ModalBottomSheet(
7169
onDismissRequest = onClose,
72-
sheetState = state,
70+
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),
7371
shape = BottomSheetDefaults.expandedShape(15.dp),
74-
windowInsets = WindowInsets.navigationBars
72+
windowInsets = WindowInsets(0)
7573
) {
7674
val options = listOf(
7775
Option.NAME to R.string.menu_sort_option_name,
@@ -139,4 +137,6 @@ private fun BottomSheet(
139137
)
140138
}
141139
}
140+
141+
NavigationBarsSpacer()
142142
}

app/src/main/kotlin/com/sanmer/mrepo/ui/screens/repository/RepositoryMenu.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Column
66
import androidx.compose.foundation.layout.FlowRow
77
import androidx.compose.foundation.layout.WindowInsets
88
import androidx.compose.foundation.layout.fillMaxWidth
9-
import androidx.compose.foundation.layout.navigationBars
109
import androidx.compose.foundation.layout.padding
1110
import androidx.compose.foundation.layout.wrapContentHeight
1211
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -15,7 +14,6 @@ import androidx.compose.material3.Icon
1514
import androidx.compose.material3.IconButton
1615
import androidx.compose.material3.MaterialTheme
1716
import androidx.compose.material3.ModalBottomSheet
18-
import androidx.compose.material3.SheetState
1917
import androidx.compose.material3.Surface
2018
import androidx.compose.material3.Text
2119
import androidx.compose.material3.rememberModalBottomSheetState
@@ -35,6 +33,7 @@ import com.sanmer.mrepo.datastore.repository.RepositoryMenuExt
3533
import com.sanmer.mrepo.model.online.OnlineModule
3634
import com.sanmer.mrepo.model.state.OnlineState
3735
import com.sanmer.mrepo.ui.component.MenuChip
36+
import com.sanmer.mrepo.ui.component.NavigationBarsSpacer
3837
import com.sanmer.mrepo.ui.component.Segment
3938
import com.sanmer.mrepo.ui.component.SegmentedButtons
4039
import com.sanmer.mrepo.ui.component.SegmentedButtonsDefaults
@@ -68,15 +67,14 @@ fun RepositoryMenu(
6867

6968
@Composable
7069
private fun BottomSheet(
71-
state: SheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),
7270
onClose: () -> Unit,
7371
menu: RepositoryMenuExt,
7472
setMenu: (RepositoryMenuExt) -> Unit
7573
) = ModalBottomSheet(
7674
onDismissRequest = onClose,
77-
sheetState = state,
75+
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),
7876
shape = BottomSheetDefaults.expandedShape(15.dp),
79-
windowInsets = WindowInsets.navigationBars
77+
windowInsets = WindowInsets(0)
8078
) {
8179
val options = listOf(
8280
Option.NAME to R.string.menu_sort_option_name,
@@ -174,5 +172,7 @@ private fun BottomSheet(
174172
label = { Text(text = stringResource(id = R.string.menu_show_updated)) }
175173
)
176174
}
175+
176+
NavigationBarsSpacer()
177177
}
178178
}

app/src/main/kotlin/com/sanmer/mrepo/ui/screens/repository/view/items/LicenseItem.kt

+11-5
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ package com.sanmer.mrepo.ui.screens.repository.view.items
22

33
import androidx.compose.foundation.layout.Box
44
import androidx.compose.foundation.layout.WindowInsets
5-
import androidx.compose.foundation.layout.navigationBars
5+
import androidx.compose.foundation.layout.padding
66
import androidx.compose.material3.BottomSheetDefaults
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.material3.ModalBottomSheet
99
import androidx.compose.material3.Text
10-
import androidx.compose.material3.rememberModalBottomSheetState
1110
import androidx.compose.runtime.Composable
1211
import androidx.compose.runtime.getValue
1312
import androidx.compose.runtime.mutableStateOf
@@ -19,6 +18,7 @@ import androidx.compose.ui.res.stringResource
1918
import androidx.compose.ui.unit.dp
2019
import com.sanmer.mrepo.R
2120
import com.sanmer.mrepo.ui.component.LicenseContent
21+
import com.sanmer.mrepo.ui.component.NavigationBarsSpacer
2222
import com.sanmer.mrepo.ui.utils.expandedShape
2323

2424
@Composable
@@ -35,17 +35,23 @@ fun LicenseItem(
3535
if (open) {
3636
ModalBottomSheet(
3737
onDismissRequest = { open = false },
38-
sheetState = rememberModalBottomSheetState(),
3938
shape = BottomSheetDefaults.expandedShape(15.dp),
40-
windowInsets = WindowInsets.navigationBars
39+
windowInsets = WindowInsets(0)
4140
) {
4241
Text(
4342
text = stringResource(id = R.string.license_title),
4443
style = MaterialTheme.typography.headlineSmall,
4544
modifier = Modifier.align(Alignment.CenterHorizontally)
4645
)
4746

48-
LicenseContent(licenseId = licenseId)
47+
LicenseContent(
48+
licenseId = licenseId,
49+
modifier = Modifier
50+
.padding(top = 16.dp)
51+
.padding(horizontal = 16.dp)
52+
)
53+
54+
NavigationBarsSpacer()
4955
}
5056
}
5157
}

app/src/main/kotlin/com/sanmer/mrepo/ui/screens/repository/view/items/TrackItem.kt

+10-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.Spacer
99
import androidx.compose.foundation.layout.WindowInsets
1010
import androidx.compose.foundation.layout.fillMaxWidth
1111
import androidx.compose.foundation.layout.height
12-
import androidx.compose.foundation.layout.navigationBars
1312
import androidx.compose.foundation.layout.padding
1413
import androidx.compose.foundation.layout.size
1514
import androidx.compose.foundation.lazy.LazyColumn
@@ -21,7 +20,6 @@ import androidx.compose.material3.MaterialTheme
2120
import androidx.compose.material3.ModalBottomSheet
2221
import androidx.compose.material3.Surface
2322
import androidx.compose.material3.Text
24-
import androidx.compose.material3.rememberModalBottomSheetState
2523
import androidx.compose.runtime.Composable
2624
import androidx.compose.runtime.getValue
2725
import androidx.compose.runtime.mutableStateOf
@@ -35,6 +33,7 @@ import androidx.compose.ui.unit.dp
3533
import com.sanmer.mrepo.R
3634
import com.sanmer.mrepo.database.entity.Repo
3735
import com.sanmer.mrepo.model.online.TrackJson
36+
import com.sanmer.mrepo.ui.component.NavigationBarsSpacer
3837
import com.sanmer.mrepo.ui.utils.expandedShape
3938
import com.sanmer.mrepo.utils.extensions.toDateTime
4039

@@ -52,9 +51,8 @@ fun TrackItem(
5251
if (open) {
5352
ModalBottomSheet(
5453
onDismissRequest = { open = false },
55-
sheetState = rememberModalBottomSheetState(),
5654
shape = BottomSheetDefaults.expandedShape(15.dp),
57-
windowInsets = WindowInsets.navigationBars
55+
windowInsets = WindowInsets(0)
5856
) {
5957
Text(
6058
text = stringResource(id = R.string.view_module_view_track),
@@ -63,8 +61,10 @@ fun TrackItem(
6361
)
6462

6563
LazyColumn(
66-
modifier = Modifier.padding(all = 18.dp),
67-
verticalArrangement = Arrangement.spacedBy(18.dp)
64+
modifier = Modifier
65+
.padding(top = 16.dp)
66+
.padding(horizontal = 16.dp),
67+
verticalArrangement = Arrangement.spacedBy(16.dp)
6868
) {
6969
items(
7070
items = tracks,
@@ -75,6 +75,10 @@ fun TrackItem(
7575
track = track
7676
)
7777
}
78+
79+
item {
80+
NavigationBarsSpacer()
81+
}
7882
}
7983
}
8084
}

app/src/main/kotlin/com/sanmer/mrepo/ui/screens/settings/app/items/AppThemeItem.kt

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package com.sanmer.mrepo.ui.screens.settings.app.items
22

33
import androidx.compose.foundation.layout.WindowInsets
4-
import androidx.compose.foundation.layout.navigationBars
54
import androidx.compose.foundation.layout.padding
65
import androidx.compose.material3.BottomSheetDefaults
76
import androidx.compose.material3.MaterialTheme
87
import androidx.compose.material3.ModalBottomSheet
9-
import androidx.compose.material3.SheetState
108
import androidx.compose.material3.Text
119
import androidx.compose.material3.rememberModalBottomSheetState
1210
import androidx.compose.runtime.Composable
@@ -20,6 +18,7 @@ import androidx.compose.ui.res.stringResource
2018
import androidx.compose.ui.unit.dp
2119
import com.sanmer.mrepo.R
2220
import com.sanmer.mrepo.datastore.DarkMode
21+
import com.sanmer.mrepo.ui.component.NavigationBarsSpacer
2322
import com.sanmer.mrepo.ui.component.SettingNormalItem
2423
import com.sanmer.mrepo.ui.utils.expandedShape
2524

@@ -52,10 +51,8 @@ fun AppThemeItem(
5251
}
5352
}
5453

55-
5654
@Composable
5755
private fun BottomSheet(
58-
state: SheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),
5956
onClose: () -> Unit,
6057
themeColor: Int,
6158
darkMode: DarkMode,
@@ -64,9 +61,9 @@ private fun BottomSheet(
6461
onDarkModeChange: (DarkMode) -> Unit,
6562
) = ModalBottomSheet(
6663
onDismissRequest = onClose,
67-
sheetState = state,
64+
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),
6865
shape = BottomSheetDefaults.expandedShape(15.dp),
69-
windowInsets = WindowInsets.navigationBars
66+
windowInsets = WindowInsets(0)
7067
) {
7168
Text(
7269
text = stringResource(id = R.string.settings_app_theme),
@@ -86,6 +83,8 @@ private fun BottomSheet(
8683
darkMode = darkMode,
8784
onChange = onDarkModeChange
8885
)
86+
87+
NavigationBarsSpacer()
8988
}
9089

9190
@Composable

0 commit comments

Comments
 (0)