@@ -2,18 +2,10 @@ package com.ismartcoding.plain.ui.base
22
33import androidx.compose.foundation.ExperimentalFoundationApi
44import androidx.compose.material3.ExperimentalMaterial3Api
5- import androidx.compose.material3.Icon
65import androidx.compose.material3.MaterialTheme
7- import androidx.compose.material3.Text
86import androidx.compose.material3.TopAppBarScrollBehavior
97import androidx.compose.runtime.Composable
10- import androidx.compose.runtime.getValue
11- import androidx.compose.runtime.mutableStateOf
12- import androidx.compose.runtime.remember
13- import androidx.compose.runtime.rememberCoroutineScope
14- import androidx.compose.runtime.setValue
158import androidx.compose.ui.platform.LocalContext
16- import androidx.compose.ui.res.painterResource
179import androidx.compose.ui.res.stringResource
1810import androidx.compose.ui.unit.dp
1911import androidx.navigation.NavHostController
@@ -23,15 +15,12 @@ import com.ismartcoding.plain.data.DMediaBucket
2315import com.ismartcoding.plain.data.IData
2416import com.ismartcoding.plain.enums.DataType
2517import com.ismartcoding.plain.features.file.FileSortBy
26- import com.ismartcoding.plain.preferences.DocTabsModePreference
2718import com.ismartcoding.plain.ui.base.dragselect.DragSelectState
19+ import com.ismartcoding.plain.ui.components.SortAndBrowseDialog
2820import com.ismartcoding.plain.ui.models.CastViewModel
2921import com.ismartcoding.plain.ui.models.BaseMediaViewModel
30- import com.ismartcoding.plain.ui.models.DocsViewModel
3122import com.ismartcoding.plain.ui.models.TagsViewModel
3223import com.ismartcoding.plain.ui.models.enterSearchMode
33- import kotlinx.coroutines.Dispatchers
34- import kotlinx.coroutines.launch
3524
3625@OptIn(ExperimentalMaterial3Api ::class , ExperimentalFoundationApi ::class )
3726@Composable
@@ -50,10 +39,7 @@ fun <T : IData> MediaTopBar(
5039 onSearchAction : (context: android.content.Context , tagsViewModel: TagsViewModel ) -> Unit
5140) {
5241 val context = LocalContext .current
53- val scope = rememberCoroutineScope()
54- var isSortMenuOpen by remember { mutableStateOf(false ) }
5542 val isDocs = mediaVM.dataType == DataType .DOC
56- val docsVM = mediaVM as ? DocsViewModel
5743
5844 val title = getMediaPageTitle(mediaVM.dataType, castVM, bucket = bucketsMap[mediaVM.bucketId.value], dragSelectState, mediaVM.tag, mediaVM.trash)
5945 val containerColor = if (castVM.castMode.value) MaterialTheme .colorScheme.secondaryContainer else null
@@ -116,97 +102,23 @@ fun <T : IData> MediaTopBar(
116102 icon = R .drawable.sort,
117103 contentDescription = stringResource(R .string.sort),
118104 tint = MaterialTheme .colorScheme.onSurface,
119- click = { isSortMenuOpen = true },
105+ click = { mediaVM.showSortAndBrowseDialog.value = true },
120106 )
121- PDropdownMenu (
122- expanded = isSortMenuOpen,
123- onDismissRequest = { isSortMenuOpen = false }
124- ) {
125- if (docsVM != null ) {
126- PDropdownMenuItem (
127- text = { Text (stringResource(R .string.tags)) },
128- trailingIcon = if (docsVM.tabsShowTags.value) {
129- {
130- Icon (
131- painter = painterResource(R .drawable.check),
132- contentDescription = null ,
133- tint = MaterialTheme .colorScheme.primary,
134- )
135- }
136- } else {
137- null
138- },
139- onClick = {
140- isSortMenuOpen = false
141- if (docsVM.tabsShowTags.value) {
142- return @PDropdownMenuItem
143- }
144- scope.launch(Dispatchers .IO ) {
145- DocTabsModePreference .putAsync(context, true )
146- docsVM.tabsShowTags.value = true
147- docsVM.fileType.value = " "
148- docsVM.tag.value = null
149- docsVM.trash.value = false
150- docsVM.loadAsync(context, tagsVM)
151- }
152- },
153- )
154- PDropdownMenuItem (
155- text = { Text (stringResource(R .string.type)) },
156- trailingIcon = if (! docsVM.tabsShowTags.value) {
157- {
158- Icon (
159- painter = painterResource(R .drawable.check),
160- contentDescription = null ,
161- tint = MaterialTheme .colorScheme.primary,
162- )
163- }
164- } else {
165- null
166- },
167- onClick = {
168- isSortMenuOpen = false
169- if (! docsVM.tabsShowTags.value) {
170- return @PDropdownMenuItem
171- }
172- scope.launch(Dispatchers .IO ) {
173- DocTabsModePreference .putAsync(context, false )
174- docsVM.tabsShowTags.value = false
175- docsVM.fileType.value = " "
176- docsVM.tag.value = null
177- docsVM.trash.value = false
178- docsVM.loadAsync(context, tagsVM)
179- }
180- },
181- )
182- }
183- FileSortBy .entries.forEach { sortByOption ->
184- if (sortByOption == FileSortBy .TAKEN_AT_DESC && setOf (DataType .AUDIO , DataType .DOC ).contains(mediaVM.dataType)) {
185- return @forEach
186- }
187- PDropdownMenuItem (
188- text = { Text (stringResource(sortByOption.getTextId())) },
189- trailingIcon = if (mediaVM.sortBy.value == sortByOption) {
190- {
191- Icon (
192- painter = painterResource(R .drawable.check),
193- contentDescription = null ,
194- tint = MaterialTheme .colorScheme.primary,
195- )
196- }
197- } else null ,
198- onClick = {
199- isSortMenuOpen = false
200- onSortSelected(context, sortByOption)
201- }
202- )
203- }
204- }
205107 }
206108 },
207109 onSearchAction = {
208110 mediaVM.showLoading.value = true
209111 onSearchAction(context, tagsVM)
210112 }
211113 )
114+
115+ if (mediaVM.showSortAndBrowseDialog.value) {
116+ SortAndBrowseDialog (
117+ context = context,
118+ mediaVM = mediaVM,
119+ tagsVM = tagsVM,
120+ onSortSelected = { sortBy -> onSortSelected(context, sortBy) },
121+ onDismiss = { mediaVM.showSortAndBrowseDialog.value = false },
122+ )
123+ }
212124}
0 commit comments