mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Minor cleanup/fixes
- Add FAB collapsing in clear database screen (fixes #7935) - Don't allow multiline category names to be entered - Consolidate Downloaded Only / Incognito Mode banner components - Fix see-through migrate screen sticky header
This commit is contained in:
		| @@ -40,10 +40,9 @@ import eu.kanade.presentation.browse.components.BrowseSourceComfortableGrid | ||||
| import eu.kanade.presentation.browse.components.BrowseSourceCompactGrid | ||||
| import eu.kanade.presentation.browse.components.BrowseSourceList | ||||
| import eu.kanade.presentation.browse.components.BrowseSourceToolbar | ||||
| import eu.kanade.presentation.components.DownloadedOnlyModeBanner | ||||
| import eu.kanade.presentation.components.AppStateBanners | ||||
| import eu.kanade.presentation.components.EmptyScreen | ||||
| import eu.kanade.presentation.components.ExtendedFloatingActionButton | ||||
| import eu.kanade.presentation.components.IncognitoModeBanner | ||||
| import eu.kanade.presentation.components.LoadingScreen | ||||
| import eu.kanade.presentation.components.Scaffold | ||||
| import eu.kanade.tachiyomi.R | ||||
| @@ -90,12 +89,8 @@ fun BrowseSourceScreen( | ||||
|                     onSearch = { presenter.search() }, | ||||
|                     scrollBehavior = scrollBehavior, | ||||
|                 ) | ||||
|                 if (downloadedOnlyMode) { | ||||
|                     DownloadedOnlyModeBanner() | ||||
|                 } | ||||
|                 if (incognitoMode) { | ||||
|                     IncognitoModeBanner() | ||||
|                 } | ||||
|  | ||||
|                 AppStateBanners(downloadedOnlyMode, incognitoMode) | ||||
|             } | ||||
|         }, | ||||
|         floatingActionButton = { | ||||
| @@ -140,7 +135,7 @@ fun BrowseSourceScreen( | ||||
|                             ) | ||||
|                         }, | ||||
|                         label = { | ||||
|                             Text(text = stringResource(id = R.string.popular)) | ||||
|                             Text(text = stringResource(R.string.popular)) | ||||
|                         }, | ||||
|                     ) | ||||
|                     if (presenter.source?.supportsLatest == true) { | ||||
| @@ -159,7 +154,7 @@ fun BrowseSourceScreen( | ||||
|                                 ) | ||||
|                             }, | ||||
|                             label = { | ||||
|                                 Text(text = stringResource(id = R.string.latest)) | ||||
|                                 Text(text = stringResource(R.string.latest)) | ||||
|                             }, | ||||
|                         ) | ||||
|                     } | ||||
| @@ -176,7 +171,7 @@ fun BrowseSourceScreen( | ||||
|                                 ) | ||||
|                             }, | ||||
|                             label = { | ||||
|                                 Text(text = stringResource(id = R.string.action_filter)) | ||||
|                                 Text(text = stringResource(R.string.action_filter)) | ||||
|                             }, | ||||
|                         ) | ||||
|                     } | ||||
| @@ -195,7 +190,7 @@ fun BrowseSourceFloatingActionButton( | ||||
|     AnimatedVisibility(visible = isVisible) { | ||||
|         ExtendedFloatingActionButton( | ||||
|             modifier = modifier, | ||||
|             text = { Text(text = stringResource(id = R.string.action_filter)) }, | ||||
|             text = { Text(text = stringResource(R.string.action_filter)) }, | ||||
|             icon = { Icon(Icons.Outlined.FilterList, contentDescription = "") }, | ||||
|             onClick = onFabClick, | ||||
|         ) | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package eu.kanade.presentation.browse | ||||
|  | ||||
| import androidx.compose.foundation.background | ||||
| import androidx.compose.foundation.layout.Arrangement | ||||
| import androidx.compose.foundation.layout.Column | ||||
| import androidx.compose.foundation.layout.Row | ||||
| @@ -84,7 +85,7 @@ fun MigrateSourceList( | ||||
|         stickyHeader(key = "header") { | ||||
|             Row( | ||||
|                 modifier = Modifier | ||||
|                     .animateItemPlacement() | ||||
|                     .background(MaterialTheme.colorScheme.background) | ||||
|                     .padding(start = horizontalPadding), | ||||
|                 verticalAlignment = Alignment.CenterVertically, | ||||
|             ) { | ||||
| @@ -109,14 +110,9 @@ fun MigrateSourceList( | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         item(key = "title") { | ||||
|         } | ||||
|  | ||||
|         items( | ||||
|             items = list, | ||||
|             key = { (source, _) -> | ||||
|                 source.id | ||||
|             }, | ||||
|             key = { (source, _) -> source.id }, | ||||
|         ) { (source, count) -> | ||||
|             MigrateSourceItem( | ||||
|                 modifier = Modifier.animateItemPlacement(), | ||||
|   | ||||
| @@ -102,7 +102,7 @@ fun BrowseSourceComfortableGridItem( | ||||
|             }, | ||||
|             badgesStart = { | ||||
|                 if (manga.favorite) { | ||||
|                     Badge(text = stringResource(id = R.string.in_library)) | ||||
|                     Badge(text = stringResource(R.string.in_library)) | ||||
|                 } | ||||
|             }, | ||||
|         ) | ||||
|   | ||||
| @@ -113,7 +113,7 @@ fun BrowseSourceCompactGridItem( | ||||
|         }, | ||||
|         badgesStart = { | ||||
|             if (manga.favorite) { | ||||
|                 Badge(text = stringResource(id = R.string.in_library)) | ||||
|                 Badge(text = stringResource(R.string.in_library)) | ||||
|             } | ||||
|         }, | ||||
|         content = { | ||||
|   | ||||
| @@ -18,7 +18,7 @@ fun RemoveMangaDialog( | ||||
|         onDismissRequest = onDismissRequest, | ||||
|         dismissButton = { | ||||
|             TextButton(onClick = onDismissRequest) { | ||||
|                 Text(text = stringResource(id = android.R.string.cancel)) | ||||
|                 Text(text = stringResource(android.R.string.cancel)) | ||||
|             } | ||||
|         }, | ||||
|         confirmButton = { | ||||
| @@ -28,11 +28,11 @@ fun RemoveMangaDialog( | ||||
|                     onConfirm() | ||||
|                 }, | ||||
|             ) { | ||||
|                 Text(text = stringResource(id = R.string.action_remove)) | ||||
|                 Text(text = stringResource(R.string.action_remove)) | ||||
|             } | ||||
|         }, | ||||
|         title = { | ||||
|             Text(text = stringResource(id = R.string.are_you_sure)) | ||||
|             Text(text = stringResource(R.string.are_you_sure)) | ||||
|         }, | ||||
|         text = { | ||||
|             Text(text = stringResource(R.string.remove_manga)) | ||||
|   | ||||
| @@ -91,7 +91,7 @@ fun BrowseSourceListItem( | ||||
|         onLongClick = onLongClick, | ||||
|         badges = { | ||||
|             if (manga.favorite) { | ||||
|                 Badge(text = stringResource(id = R.string.in_library)) | ||||
|                 Badge(text = stringResource(R.string.in_library)) | ||||
|             } | ||||
|         }, | ||||
|         content = { | ||||
|   | ||||
| @@ -85,24 +85,24 @@ fun BrowseSourceRegularToolbar( | ||||
|             AppBarActions( | ||||
|                 actions = listOf( | ||||
|                     AppBar.Action( | ||||
|                         title = stringResource(id = R.string.action_search), | ||||
|                         title = stringResource(R.string.action_search), | ||||
|                         icon = Icons.Outlined.Search, | ||||
|                         onClick = onSearchClick, | ||||
|                     ), | ||||
|                     AppBar.Action( | ||||
|                         title = stringResource(id = R.string.action_display_mode), | ||||
|                         title = stringResource(R.string.action_display_mode), | ||||
|                         icon = Icons.Filled.ViewModule, | ||||
|                         onClick = { selectingDisplayMode = true }, | ||||
|                     ), | ||||
|                     if (isLocalSource) { | ||||
|                         AppBar.Action( | ||||
|                             title = stringResource(id = R.string.label_help), | ||||
|                             title = stringResource(R.string.label_help), | ||||
|                             icon = Icons.Outlined.Help, | ||||
|                             onClick = onHelpClick, | ||||
|                         ) | ||||
|                     } else { | ||||
|                         AppBar.Action( | ||||
|                             title = stringResource(id = R.string.action_web_view), | ||||
|                             title = stringResource(R.string.action_web_view), | ||||
|                             icon = Icons.Outlined.Public, | ||||
|                             onClick = onWebViewClick, | ||||
|                         ) | ||||
| @@ -114,7 +114,7 @@ fun BrowseSourceRegularToolbar( | ||||
|                 onDismissRequest = { selectingDisplayMode = false }, | ||||
|             ) { | ||||
|                 DropdownMenuItem( | ||||
|                     text = { Text(text = stringResource(id = R.string.action_display_comfortable_grid)) }, | ||||
|                     text = { Text(text = stringResource(R.string.action_display_comfortable_grid)) }, | ||||
|                     onClick = { onDisplayModeChange(LibraryDisplayMode.ComfortableGrid) }, | ||||
|                     trailingIcon = { | ||||
|                         if (displayMode == LibraryDisplayMode.ComfortableGrid) { | ||||
| @@ -126,7 +126,7 @@ fun BrowseSourceRegularToolbar( | ||||
|                     }, | ||||
|                 ) | ||||
|                 DropdownMenuItem( | ||||
|                     text = { Text(text = stringResource(id = R.string.action_display_grid)) }, | ||||
|                     text = { Text(text = stringResource(R.string.action_display_grid)) }, | ||||
|                     onClick = { onDisplayModeChange(LibraryDisplayMode.CompactGrid) }, | ||||
|                     trailingIcon = { | ||||
|                         if (displayMode == LibraryDisplayMode.CompactGrid) { | ||||
| @@ -138,7 +138,7 @@ fun BrowseSourceRegularToolbar( | ||||
|                     }, | ||||
|                 ) | ||||
|                 DropdownMenuItem( | ||||
|                     text = { Text(text = stringResource(id = R.string.action_display_list)) }, | ||||
|                     text = { Text(text = stringResource(R.string.action_display_list)) }, | ||||
|                     onClick = { onDisplayModeChange(LibraryDisplayMode.List) }, | ||||
|                     trailingIcon = { | ||||
|                         if (displayMode == LibraryDisplayMode.List) { | ||||
|   | ||||
| @@ -51,6 +51,7 @@ fun CategoryCreateDialog( | ||||
|                 label = { | ||||
|                     Text(text = stringResource(R.string.name)) | ||||
|                 }, | ||||
|                 singleLine = true, | ||||
|             ) | ||||
|         }, | ||||
|     ) | ||||
| @@ -98,6 +99,7 @@ fun CategoryRenameDialog( | ||||
|                 label = { | ||||
|                     Text(text = stringResource(R.string.name)) | ||||
|                 }, | ||||
|                 singleLine = true, | ||||
|             ) | ||||
|         }, | ||||
|     ) | ||||
|   | ||||
| @@ -144,12 +144,7 @@ fun AppBar( | ||||
|             scrollBehavior = scrollBehavior, | ||||
|         ) | ||||
|  | ||||
|         if (downloadedOnlyMode) { | ||||
|             DownloadedOnlyModeBanner() | ||||
|         } | ||||
|         if (incognitoMode) { | ||||
|             IncognitoModeBanner() | ||||
|         } | ||||
|         AppStateBanners(downloadedOnlyMode, incognitoMode) | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package eu.kanade.presentation.components | ||||
|  | ||||
| import androidx.compose.foundation.background | ||||
| import androidx.compose.foundation.layout.ColumnScope | ||||
| import androidx.compose.foundation.layout.fillMaxWidth | ||||
| import androidx.compose.foundation.layout.padding | ||||
| import androidx.compose.material3.MaterialTheme | ||||
| @@ -13,7 +14,20 @@ import androidx.compose.ui.unit.dp | ||||
| import eu.kanade.tachiyomi.R | ||||
|  | ||||
| @Composable | ||||
| fun DownloadedOnlyModeBanner() { | ||||
| fun ColumnScope.AppStateBanners( | ||||
|     downloadedOnlyMode: Boolean, | ||||
|     incognitoMode: Boolean, | ||||
| ) { | ||||
|     if (downloadedOnlyMode) { | ||||
|         DownloadedOnlyModeBanner() | ||||
|     } | ||||
|     if (incognitoMode) { | ||||
|         IncognitoModeBanner() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| private fun DownloadedOnlyModeBanner() { | ||||
|     Text( | ||||
|         text = stringResource(R.string.label_downloaded_only), | ||||
|         modifier = Modifier | ||||
| @@ -27,7 +41,7 @@ fun DownloadedOnlyModeBanner() { | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| fun IncognitoModeBanner() { | ||||
| private fun IncognitoModeBanner() { | ||||
|     Text( | ||||
|         text = stringResource(R.string.pref_incognito_mode), | ||||
|         modifier = Modifier | ||||
|   | ||||
| @@ -76,12 +76,7 @@ fun TabbedScreen( | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (downloadedOnlyMode) { | ||||
|                 DownloadedOnlyModeBanner() | ||||
|             } | ||||
|             if (incognitoMode) { | ||||
|                 IncognitoModeBanner() | ||||
|             } | ||||
|             AppStateBanners(downloadedOnlyMode, incognitoMode) | ||||
|  | ||||
|             HorizontalPager( | ||||
|                 count = tabs.size, | ||||
|   | ||||
| @@ -13,8 +13,7 @@ import androidx.compose.ui.unit.dp | ||||
| import com.google.accompanist.pager.PagerState | ||||
| import eu.kanade.domain.category.model.Category | ||||
| import eu.kanade.presentation.category.visualName | ||||
| import eu.kanade.presentation.components.DownloadedOnlyModeBanner | ||||
| import eu.kanade.presentation.components.IncognitoModeBanner | ||||
| import eu.kanade.presentation.components.AppStateBanners | ||||
| import eu.kanade.presentation.components.TabIndicator | ||||
| import eu.kanade.presentation.components.TabText | ||||
| import kotlinx.coroutines.launch | ||||
| @@ -51,11 +50,7 @@ fun LibraryTabs( | ||||
|                 ) | ||||
|             } | ||||
|         } | ||||
|         if (isDownloadOnly) { | ||||
|             DownloadedOnlyModeBanner() | ||||
|         } | ||||
|         if (isIncognitoMode) { | ||||
|             IncognitoModeBanner() | ||||
|         } | ||||
|  | ||||
|         AppStateBanners(isDownloadOnly, isIncognitoMode) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -28,9 +28,8 @@ import androidx.compose.ui.draw.alpha | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.text.style.TextOverflow | ||||
| import androidx.compose.ui.unit.dp | ||||
| import eu.kanade.presentation.components.DownloadedOnlyModeBanner | ||||
| import eu.kanade.presentation.components.AppStateBanners | ||||
| import eu.kanade.presentation.components.DropdownMenu | ||||
| import eu.kanade.presentation.components.IncognitoModeBanner | ||||
| import eu.kanade.presentation.manga.DownloadAction | ||||
| import eu.kanade.tachiyomi.R | ||||
|  | ||||
| @@ -198,11 +197,6 @@ fun MangaAppBar( | ||||
|             ), | ||||
|         ) | ||||
|  | ||||
|         if (downloadedOnlyMode) { | ||||
|             DownloadedOnlyModeBanner() | ||||
|         } | ||||
|         if (incognitoMode) { | ||||
|             IncognitoModeBanner() | ||||
|         } | ||||
|         AppStateBanners(downloadedOnlyMode, incognitoMode) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package eu.kanade.presentation.more.settings.database | ||||
|  | ||||
| import androidx.compose.foundation.lazy.rememberLazyListState | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import eu.kanade.presentation.components.Scaffold | ||||
| @@ -7,7 +8,6 @@ import eu.kanade.presentation.more.settings.database.components.ClearDatabaseCon | ||||
| import eu.kanade.presentation.more.settings.database.components.ClearDatabaseDeleteDialog | ||||
| import eu.kanade.presentation.more.settings.database.components.ClearDatabaseFloatingActionButton | ||||
| import eu.kanade.presentation.more.settings.database.components.ClearDatabaseToolbar | ||||
| import eu.kanade.presentation.util.plus | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.ui.setting.database.ClearDatabasePresenter | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| @@ -18,6 +18,7 @@ fun ClearDatabaseScreen( | ||||
|     navigateUp: () -> Unit, | ||||
| ) { | ||||
|     val context = LocalContext.current | ||||
|     val lazyListState = rememberLazyListState() | ||||
|     Scaffold( | ||||
|         topBar = { scrollBehavior -> | ||||
|             ClearDatabaseToolbar( | ||||
| @@ -31,6 +32,7 @@ fun ClearDatabaseScreen( | ||||
|         floatingActionButton = { | ||||
|             ClearDatabaseFloatingActionButton( | ||||
|                 isVisible = presenter.selection.isNotEmpty(), | ||||
|                 lazyListState = lazyListState, | ||||
|                 onClickDelete = { | ||||
|                     presenter.dialog = ClearDatabasePresenter.Dialog.Delete(presenter.selection) | ||||
|                 }, | ||||
| @@ -40,6 +42,7 @@ fun ClearDatabaseScreen( | ||||
|         ClearDatabaseContent( | ||||
|             state = presenter, | ||||
|             contentPadding = paddingValues, | ||||
|             lazyListState = lazyListState, | ||||
|             onClickSelection = { source -> | ||||
|                 presenter.toggleSelection(source) | ||||
|             }, | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.PaddingValues | ||||
| import androidx.compose.foundation.layout.WindowInsets | ||||
| import androidx.compose.foundation.layout.asPaddingValues | ||||
| import androidx.compose.foundation.layout.navigationBars | ||||
| import androidx.compose.foundation.lazy.LazyListState | ||||
| import androidx.compose.foundation.lazy.items | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.res.stringResource | ||||
| @@ -19,12 +20,14 @@ import eu.kanade.tachiyomi.R | ||||
| fun ClearDatabaseContent( | ||||
|     state: ClearDatabaseState, | ||||
|     contentPadding: PaddingValues, | ||||
|     lazyListState: LazyListState, | ||||
|     onClickSelection: (Source) -> Unit, | ||||
| ) { | ||||
|     Crossfade(targetState = state.isEmpty.not()) { _state -> | ||||
|         when (_state) { | ||||
|             true -> FastScrollLazyColumn( | ||||
|                 contentPadding = contentPadding + WindowInsets.navigationBars.asPaddingValues(), | ||||
|                 state = lazyListState, | ||||
|             ) { | ||||
|                 items(state.items) { sourceWithCount -> | ||||
|                     ClearDatabaseItem( | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import androidx.compose.animation.AnimatedVisibility | ||||
| import androidx.compose.animation.fadeIn | ||||
| import androidx.compose.animation.fadeOut | ||||
| import androidx.compose.foundation.layout.navigationBarsPadding | ||||
| import androidx.compose.foundation.lazy.LazyListState | ||||
| import androidx.compose.material.icons.Icons | ||||
| import androidx.compose.material.icons.outlined.Delete | ||||
| import androidx.compose.material3.Icon | ||||
| @@ -12,11 +13,14 @@ import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import eu.kanade.presentation.components.ExtendedFloatingActionButton | ||||
| import eu.kanade.presentation.util.isScrolledToEnd | ||||
| import eu.kanade.presentation.util.isScrollingUp | ||||
| import eu.kanade.tachiyomi.R | ||||
|  | ||||
| @Composable | ||||
| fun ClearDatabaseFloatingActionButton( | ||||
|     isVisible: Boolean, | ||||
|     lazyListState: LazyListState, | ||||
|     onClickDelete: () -> Unit, | ||||
| ) { | ||||
|     AnimatedVisibility( | ||||
| @@ -33,6 +37,7 @@ fun ClearDatabaseFloatingActionButton( | ||||
|                 Icon(Icons.Outlined.Delete, contentDescription = "") | ||||
|             }, | ||||
|             onClick = onClickDelete, | ||||
|             expanded = lazyListState.isScrollingUp() || lazyListState.isScrolledToEnd(), | ||||
|         ) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -174,20 +174,20 @@ class DownloadController : | ||||
|                                     onDismissRequest = { onExpanded(false) }, | ||||
|                                 ) { | ||||
|                                     DropdownMenuItem( | ||||
|                                         text = { Text(text = stringResource(id = R.string.action_reorganize_by)) }, | ||||
|                                         text = { Text(text = stringResource(R.string.action_reorganize_by)) }, | ||||
|                                         children = { | ||||
|                                             DropdownMenuItem( | ||||
|                                                 text = { Text(text = stringResource(id = R.string.action_order_by_upload_date)) }, | ||||
|                                                 text = { Text(text = stringResource(R.string.action_order_by_upload_date)) }, | ||||
|                                                 children = { | ||||
|                                                     DropdownMenuItem( | ||||
|                                                         text = { Text(text = stringResource(id = R.string.action_newest)) }, | ||||
|                                                         text = { Text(text = stringResource(R.string.action_newest)) }, | ||||
|                                                         onClick = { | ||||
|                                                             reorderQueue({ it.download.chapter.date_upload }, true) | ||||
|                                                             onExpanded(false) | ||||
|                                                         }, | ||||
|                                                     ) | ||||
|                                                     DropdownMenuItem( | ||||
|                                                         text = { Text(text = stringResource(id = R.string.action_oldest)) }, | ||||
|                                                         text = { Text(text = stringResource(R.string.action_oldest)) }, | ||||
|                                                         onClick = { | ||||
|                                                             reorderQueue({ it.download.chapter.date_upload }, false) | ||||
|                                                             onExpanded(false) | ||||
| @@ -196,17 +196,17 @@ class DownloadController : | ||||
|                                                 }, | ||||
|                                             ) | ||||
|                                             DropdownMenuItem( | ||||
|                                                 text = { Text(text = stringResource(id = R.string.action_order_by_chapter_number)) }, | ||||
|                                                 text = { Text(text = stringResource(R.string.action_order_by_chapter_number)) }, | ||||
|                                                 children = { | ||||
|                                                     DropdownMenuItem( | ||||
|                                                         text = { Text(text = stringResource(id = R.string.action_asc)) }, | ||||
|                                                         text = { Text(text = stringResource(R.string.action_asc)) }, | ||||
|                                                         onClick = { | ||||
|                                                             reorderQueue({ it.download.chapter.chapter_number }, false) | ||||
|                                                             onExpanded(false) | ||||
|                                                         }, | ||||
|                                                     ) | ||||
|                                                     DropdownMenuItem( | ||||
|                                                         text = { Text(text = stringResource(id = R.string.action_desc)) }, | ||||
|                                                         text = { Text(text = stringResource(R.string.action_desc)) }, | ||||
|                                                         onClick = { | ||||
|                                                             reorderQueue({ it.download.chapter.chapter_number }, true) | ||||
|                                                             onExpanded(false) | ||||
| @@ -217,7 +217,7 @@ class DownloadController : | ||||
|                                         }, | ||||
|                                     ) | ||||
|                                     DropdownMenuItem( | ||||
|                                         text = { Text(text = stringResource(id = R.string.action_cancel_all)) }, | ||||
|                                         text = { Text(text = stringResource(R.string.action_cancel_all)) }, | ||||
|                                         onClick = { | ||||
|                                             presenter.clearQueue(context) | ||||
|                                             onExpanded(false) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user