@@ -3,11 +3,13 @@ package dev.halim.shelfdroid.core.ui.screen.settings
33import android.os.Build
44import androidx.compose.foundation.layout.Arrangement
55import androidx.compose.foundation.layout.Column
6+ import androidx.compose.foundation.layout.Row
67import androidx.compose.foundation.layout.Spacer
78import androidx.compose.foundation.layout.fillMaxSize
89import androidx.compose.foundation.layout.fillMaxWidth
910import androidx.compose.foundation.layout.height
1011import androidx.compose.foundation.layout.padding
12+ import androidx.compose.foundation.layout.width
1113import androidx.compose.material3.Text
1214import androidx.compose.material3.TextButton
1315import androidx.compose.runtime.Composable
@@ -26,6 +28,7 @@ import dev.halim.shelfdroid.core.PodcastSort
2628import dev.halim.shelfdroid.core.SortOrder
2729import dev.halim.shelfdroid.core.data.screen.settings.SettingsUiState
2830import dev.halim.shelfdroid.core.ui.R
31+ import dev.halim.shelfdroid.core.ui.components.ExposedDropdownMenu
2932import dev.halim.shelfdroid.core.ui.components.MyAlertDialog
3033import dev.halim.shelfdroid.core.ui.event.DisplayPrefsEvent
3134import dev.halim.shelfdroid.core.ui.preview.Defaults
@@ -60,14 +63,7 @@ fun SettingsScreenContent(
6063
6164 Spacer (modifier = Modifier .height(16 .dp))
6265
63- SettingsLabel (text = stringResource(R .string.others))
64- Spacer (modifier = Modifier .height(4 .dp))
65- SettingsBody (text = stringResource(R .string.args_version, version))
66- val userText =
67- user +
68- if (uiState.isAdmin) stringResource(R .string.is_an_admin)
69- else stringResource(R .string.is_not_an_admin)
70- SettingsBody (text = userText)
66+ OthersSection (version, user, uiState)
7167
7268 Spacer (modifier = Modifier .height(16 .dp))
7369
@@ -80,12 +76,14 @@ private fun DisplaySection(uiState: SettingsUiState, onEvent: (SettingsEvent) ->
8076 SettingsLabel (text = stringResource(R .string.display))
8177 Spacer (modifier = Modifier .height(4 .dp))
8278 SettingsSwitchItem (
79+ modifier = Modifier .padding(start = 16 .dp),
8380 title = stringResource(R .string.dark_mode),
8481 checked = uiState.isDarkMode,
8582 onCheckedChange = { onEvent(SettingsEvent .SwitchDarkTheme (it)) },
8683 contentDescription = stringResource(R .string.dark_mode),
8784 )
8885 SettingsSwitchItem (
86+ modifier = Modifier .padding(start = 16 .dp),
8987 title = stringResource(R .string.dynamic_theme),
9088 checked = uiState.isDynamicTheme,
9189 onCheckedChange = { onEvent(SettingsEvent .SwitchDynamicTheme (it)) },
@@ -97,15 +95,16 @@ private fun DisplaySection(uiState: SettingsUiState, onEvent: (SettingsEvent) ->
9795@Composable
9896private fun HomeScreenSection (uiState : SettingsUiState , onEvent : (SettingsEvent ) -> Unit ) {
9997 SettingsLabel (Modifier .padding(top = 16 .dp), text = stringResource(R .string.home_screen))
98+ val paddingStart = Modifier .padding(start = 8 .dp)
10099 SettingsSwitchItem (
101- modifier = Modifier ,
100+ modifier = paddingStart ,
102101 title = stringResource(R .string.list_view),
103102 checked = uiState.displayPrefs.listView,
104103 onCheckedChange = { onEvent(SettingsEvent .SwitchListView (it)) },
105104 contentDescription = stringResource(R .string.list_view),
106105 )
107106 SettingsSwitchItem (
108- modifier = Modifier ,
107+ modifier = paddingStart ,
109108 title = stringResource(R .string.show_only_downloaded),
110109 checked = uiState.displayPrefs.filter.isDownloaded(),
111110 onCheckedChange = {
@@ -114,34 +113,65 @@ private fun HomeScreenSection(uiState: SettingsUiState, onEvent: (SettingsEvent)
114113 },
115114 contentDescription = stringResource(R .string.show_only_downloaded),
116115 )
116+ val paddingStartTwo = Modifier .padding(start = 16 .dp, top = 4 .dp)
117+ SettingsSublabel (Modifier .padding(start = 8 .dp, top = 4 .dp), text = " Book Library" )
118+ Row (modifier = paddingStartTwo.fillMaxWidth(), horizontalArrangement = Arrangement .SpaceBetween ) {
119+ ExposedDropdownMenu (
120+ modifier = Modifier .weight(1f ),
121+ label = stringResource(R .string.sort),
122+ options = BookSort .entries.map { it.name },
123+ initialValue = uiState.displayPrefs.bookSort.name,
124+ onClick = { onEvent(SettingsEvent .SettingsDisplayPrefsEvent (DisplayPrefsEvent .BookSort (it))) },
125+ )
126+ Spacer (Modifier .width(8 .dp))
127+ ExposedDropdownMenu (
128+ modifier = Modifier .weight(1f ),
129+ label = stringResource(R .string.order),
130+ options = SortOrder .entries.map { it.name },
131+ initialValue = uiState.displayPrefs.sortOrder.name,
132+ onClick = {
133+ onEvent(SettingsEvent .SettingsDisplayPrefsEvent (DisplayPrefsEvent .SortOrder (it)))
134+ },
135+ )
136+ }
117137
118- SettingsSublabel (Modifier .padding(top = 16 .dp), text = " Book Library" )
119- SettingsDropDown (
120- " Sort" ,
121- BookSort .entries.map { it.name },
122- uiState.displayPrefs.bookSort.name,
123- { onEvent(SettingsEvent .SettingsDisplayPrefsEvent (DisplayPrefsEvent .BookSort (it))) },
124- )
125- SettingsDropDown (
126- " Sort Order" ,
127- SortOrder .entries.map { it.name },
128- uiState.displayPrefs.sortOrder.name,
129- { onEvent(SettingsEvent .SettingsDisplayPrefsEvent (DisplayPrefsEvent .SortOrder (it))) },
130- )
138+ SettingsSublabel (Modifier .padding(start = 8 .dp, top = 4 .dp), text = " Podcast Library" )
139+ Row (modifier = paddingStartTwo.fillMaxWidth(), horizontalArrangement = Arrangement .SpaceBetween ) {
140+ ExposedDropdownMenu (
141+ modifier = Modifier .weight(1f ),
142+ label = stringResource(R .string.sort),
143+ options = PodcastSort .entries.map { it.name },
144+ initialValue = uiState.displayPrefs.podcastSort.name,
145+ onClick = {
146+ onEvent(SettingsEvent .SettingsDisplayPrefsEvent (DisplayPrefsEvent .PodcastSort (it)))
147+ },
148+ )
149+ Spacer (Modifier .width(8 .dp))
150+ ExposedDropdownMenu (
151+ modifier = Modifier .weight(1f ),
152+ label = stringResource(R .string.order),
153+ options = SortOrder .entries.map { it.name },
154+ initialValue = uiState.displayPrefs.podcastSortOrder.name,
155+ onClick = {
156+ onEvent(SettingsEvent .SettingsDisplayPrefsEvent (DisplayPrefsEvent .PodcastSortOrder (it)))
157+ },
158+ )
159+ }
160+ }
131161
132- SettingsSublabel (Modifier .padding(top = 16 .dp), text = " Podcast Library" )
133- SettingsDropDown (
134- " Sort" ,
135- PodcastSort .entries.map { it.name },
136- uiState.displayPrefs.podcastSort.name,
137- { onEvent(SettingsEvent .SettingsDisplayPrefsEvent (DisplayPrefsEvent .PodcastSort (it))) },
138- )
139- SettingsDropDown (
140- " Sort Order" ,
141- SortOrder .entries.map { it.name },
142- uiState.displayPrefs.podcastSortOrder.name,
143- { onEvent(SettingsEvent .SettingsDisplayPrefsEvent (DisplayPrefsEvent .PodcastSortOrder (it))) },
162+ @Composable
163+ private fun OthersSection (version : String , user : String , uiState : SettingsUiState ) {
164+ SettingsLabel (text = stringResource(R .string.others))
165+ Spacer (modifier = Modifier .height(4 .dp))
166+ SettingsBody (
167+ modifier = Modifier .padding(start = 8 .dp),
168+ text = stringResource(R .string.args_version, version),
144169 )
170+ val userText =
171+ user +
172+ if (uiState.isAdmin) stringResource(R .string.is_an_admin)
173+ else stringResource(R .string.is_not_an_admin)
174+ SettingsBody (modifier = Modifier .padding(start = 8 .dp), text = userText)
145175}
146176
147177@Composable
0 commit comments