Address more Compose lint warnings

(cherry picked from commit 2c032ff70d607f0e0197091e53763491775a0ab3)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt
#	app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt
#	app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt
#	app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt
#	app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt
This commit is contained in:
arkon 2023-11-17 09:46:13 -05:00 committed by Jobobby04
parent adb53a9a45
commit 91d45cc8b9
48 changed files with 288 additions and 241 deletions

View File

@ -177,7 +177,7 @@ fun BrowseSourceContent(
} }
@Composable @Composable
fun MissingSourceScreen( internal fun MissingSourceScreen(
source: StubSource, source: StubSource,
navigateUp: () -> Unit, navigateUp: () -> Unit,
) { ) {

View File

@ -56,6 +56,7 @@ import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreenModel import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreenModel
import eu.kanade.tachiyomi.util.system.LocaleHelper import eu.kanade.tachiyomi.util.system.LocaleHelper
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.ScrollbarLazyColumn
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.padding
@ -81,40 +82,42 @@ fun ExtensionDetailsScreen(
navigateUp = navigateUp, navigateUp = navigateUp,
actions = { actions = {
AppBarActions( AppBarActions(
actions = buildList { actions = persistentListOf<AppBar.AppBarAction>().builder()
if (state.extension?.isUnofficial == false) { .apply {
add( if (state.extension?.isUnofficial == false) {
AppBar.Action( add(
title = stringResource(R.string.whats_new), AppBar.Action(
icon = Icons.Outlined.History, title = stringResource(R.string.whats_new),
onClick = onClickWhatsNew, icon = Icons.Outlined.History,
), onClick = onClickWhatsNew,
) ),
add( )
AppBar.Action( add(
title = stringResource(R.string.action_faq_and_guides), AppBar.Action(
icon = Icons.AutoMirrored.Outlined.HelpOutline, title = stringResource(R.string.action_faq_and_guides),
onClick = onClickReadme, icon = Icons.AutoMirrored.Outlined.HelpOutline,
onClick = onClickReadme,
),
)
}
addAll(
listOf(
AppBar.OverflowAction(
title = stringResource(R.string.action_enable_all),
onClick = onClickEnableAll,
),
AppBar.OverflowAction(
title = stringResource(R.string.action_disable_all),
onClick = onClickDisableAll,
),
AppBar.OverflowAction(
title = stringResource(R.string.pref_clear_cookies),
onClick = onClickClearCookies,
),
), ),
) )
} }
addAll( .build(),
listOf(
AppBar.OverflowAction(
title = stringResource(R.string.action_enable_all),
onClick = onClickEnableAll,
),
AppBar.OverflowAction(
title = stringResource(R.string.action_disable_all),
onClick = onClickDisableAll,
),
AppBar.OverflowAction(
title = stringResource(R.string.pref_clear_cookies),
onClick = onClickClearCookies,
),
),
)
},
) )
}, },
scrollBehavior = scrollBehavior, scrollBehavior = scrollBehavior,
@ -342,10 +345,10 @@ private fun DetailsHeader(
@Composable @Composable
private fun InfoText( private fun InfoText(
modifier: Modifier,
primaryText: String, primaryText: String,
primaryTextStyle: TextStyle = MaterialTheme.typography.bodyLarge,
secondaryText: String, secondaryText: String,
modifier: Modifier = Modifier,
primaryTextStyle: TextStyle = MaterialTheme.typography.bodyLarge,
onClick: (() -> Unit)? = null, onClick: (() -> Unit)? = null,
) { ) {
val interactionSource = remember { MutableInteractionSource() } val interactionSource = remember { MutableInteractionSource() }
@ -385,10 +388,10 @@ private fun InfoDivider() {
@Composable @Composable
private fun SourceSwitchPreference( private fun SourceSwitchPreference(
modifier: Modifier = Modifier,
source: ExtensionSourceItem, source: ExtensionSourceItem,
onClickSourcePreferences: (sourceId: Long) -> Unit, onClickSourcePreferences: (sourceId: Long) -> Unit,
onClickSource: (sourceId: Long) -> Unit, onClickSource: (sourceId: Long) -> Unit,
modifier: Modifier = Modifier,
) { ) {
val context = LocalContext.current val context = LocalContext.current

View File

@ -217,12 +217,12 @@ private fun ExtensionContent(
@Composable @Composable
private fun ExtensionItem( private fun ExtensionItem(
modifier: Modifier = Modifier,
item: ExtensionUiModel.Item, item: ExtensionUiModel.Item,
onClickItem: (Extension) -> Unit, onClickItem: (Extension) -> Unit,
onLongClickItem: (Extension) -> Unit, onLongClickItem: (Extension) -> Unit,
onClickItemCancel: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit,
onClickItemAction: (Extension) -> Unit, onClickItemAction: (Extension) -> Unit,
modifier: Modifier = Modifier,
) { ) {
val (extension, installStep) = item val (extension, installStep) = item
BaseBrowseItem( BaseBrowseItem(

View File

@ -60,13 +60,13 @@ fun GlobalSearchScreen(
@Composable @Composable
internal fun GlobalSearchContent( internal fun GlobalSearchContent(
fromSourceId: Long? = null,
items: Map<CatalogueSource, SearchItemResult>, items: Map<CatalogueSource, SearchItemResult>,
contentPadding: PaddingValues, contentPadding: PaddingValues,
getManga: @Composable (Manga) -> State<Manga>, getManga: @Composable (Manga) -> State<Manga>,
onClickSource: (CatalogueSource) -> Unit, onClickSource: (CatalogueSource) -> Unit,
onClickItem: (Manga) -> Unit, onClickItem: (Manga) -> Unit,
onLongClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit,
fromSourceId: Long? = null,
) { ) {
LazyColumn( LazyColumn(
contentPadding = contentPadding, contentPadding = contentPadding,

View File

@ -70,10 +70,10 @@ private fun MigrateMangaContent(
@Composable @Composable
private fun MigrateMangaItem( private fun MigrateMangaItem(
modifier: Modifier = Modifier,
manga: Manga, manga: Manga,
onClickItem: (Manga) -> Unit, onClickItem: (Manga) -> Unit,
onClickCover: (Manga) -> Unit, onClickCover: (Manga) -> Unit,
modifier: Modifier = Modifier,
) { ) {
BaseMangaListItem( BaseMangaListItem(
modifier = modifier, modifier = modifier,

View File

@ -158,7 +158,6 @@ private fun MigrateSourceList(
@Composable @Composable
private fun MigrateSourceItem( private fun MigrateSourceItem(
modifier: Modifier = Modifier,
source: Source, source: Source,
count: Long, count: Long,
onClickItem: () -> Unit, onClickItem: () -> Unit,
@ -166,6 +165,7 @@ private fun MigrateSourceItem(
// SY --> // SY -->
onClickAll: () -> Unit, onClickAll: () -> Unit,
// SY <-- // SY <--
modifier: Modifier = Modifier,
) { ) {
BaseSourceItem( BaseSourceItem(
modifier = modifier, modifier = modifier,

View File

@ -30,6 +30,7 @@ import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarActions
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigratingManga import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigratingManga
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withIOContext
import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.Manga
import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.ScrollbarLazyColumn
@ -64,7 +65,7 @@ fun MigrationListScreen(
title = title, title = title,
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.copy), title = stringResource(R.string.copy),
icon = if (items.size == 1) Icons.Outlined.ContentCopy else Icons.Outlined.CopyAll, icon = if (items.size == 1) Icons.Outlined.ContentCopy else Icons.Outlined.CopyAll,

View File

@ -121,10 +121,10 @@ private fun SourcesFilterContent(
@Composable @Composable
private fun SourcesFilterHeader( private fun SourcesFilterHeader(
modifier: Modifier,
language: String, language: String,
enabled: Boolean, enabled: Boolean,
onClickItem: (String) -> Unit, onClickItem: (String) -> Unit,
modifier: Modifier = Modifier,
) { ) {
SwitchPreferenceWidget( SwitchPreferenceWidget(
modifier = modifier, modifier = modifier,
@ -153,10 +153,10 @@ fun SourcesFilterToggle(
@Composable @Composable
private fun SourcesFilterItem( private fun SourcesFilterItem(
modifier: Modifier,
source: Source, source: Source,
enabled: Boolean, enabled: Boolean,
onClickItem: (Source) -> Unit, onClickItem: (Source) -> Unit,
modifier: Modifier = Modifier,
) { ) {
BaseSourceItem( BaseSourceItem(
modifier = modifier, modifier = modifier,

View File

@ -16,8 +16,8 @@ import tachiyomi.presentation.core.util.secondaryItemAlpha
@Composable @Composable
fun BaseSourceItem( fun BaseSourceItem(
modifier: Modifier = Modifier,
source: Source, source: Source,
modifier: Modifier = Modifier,
showLanguageInContent: Boolean = true, showLanguageInContent: Boolean = true,
onClickItem: () -> Unit = {}, onClickItem: () -> Unit = {},
onLongClickItem: () -> Unit = {}, onLongClickItem: () -> Unit = {},

View File

@ -17,6 +17,7 @@ import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarActions
import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.DropdownMenu
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibraryDisplayMode
@Composable @Composable
@ -34,7 +35,7 @@ fun BrowseSourceSimpleToolbar(
var selectingDisplayMode by remember { mutableStateOf(false) } var selectingDisplayMode by remember { mutableStateOf(false) }
AppBarActions( AppBarActions(
// SY --> // SY -->
actions = listOfNotNull( actions = persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(id = R.string.action_display_mode), title = stringResource(id = R.string.action_display_mode),
icon = Icons.Outlined.ViewModule, icon = Icons.Outlined.ViewModule,

View File

@ -23,6 +23,7 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import exh.source.anyIs import exh.source.anyIs
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.source.local.LocalSource import tachiyomi.source.local.LocalSource
@ -56,49 +57,67 @@ fun BrowseSourceToolbar(
onClickCloseSearch = navigateUp, onClickCloseSearch = navigateUp,
actions = { actions = {
AppBarActions( AppBarActions(
actions = listOfNotNull( actions = persistentListOf<AppBar.AppBarAction>().builder()
AppBar.Action( .apply {
title = stringResource(R.string.action_display_mode), if (displayMode != null) {
icon = if (displayMode == LibraryDisplayMode.List) { add(
Icons.AutoMirrored.Filled.ViewList AppBar.Action(
} else { title = stringResource(R.string.action_display_mode),
Icons.Filled.ViewModule icon = if (displayMode == LibraryDisplayMode.List) {
}, Icons.AutoMirrored.Filled.ViewList
onClick = { selectingDisplayMode = true }, } else {
).takeIf { displayMode != null }, Icons.Filled.ViewModule
if (isLocalSource) { },
if (isConfigurableSource && displayMode != null) { onClick = { selectingDisplayMode = true },
AppBar.OverflowAction( ),
title = stringResource(R.string.label_help),
onClick = onHelpClick,
)
} else {
AppBar.Action(
title = stringResource(R.string.label_help),
icon = Icons.Outlined.Help,
onClick = onHelpClick,
) )
} }
} else { if (isLocalSource) {
if (isConfigurableSource && displayMode != null) { if (isConfigurableSource && displayMode != null) {
AppBar.OverflowAction( add(
title = stringResource(R.string.action_web_view), AppBar.OverflowAction(
onClick = onWebViewClick, title = stringResource(R.string.label_help),
) onClick = onHelpClick,
),
)
} else {
add(
AppBar.Action(
title = stringResource(R.string.label_help),
icon = Icons.Outlined.Help,
onClick = onHelpClick,
),
)
}
} else { } else {
AppBar.Action( if (isConfigurableSource && displayMode != null) {
title = stringResource(R.string.action_web_view), add(
icon = Icons.Outlined.Public, AppBar.OverflowAction(
onClick = onWebViewClick, title = stringResource(R.string.action_web_view),
onClick = onWebViewClick,
)
)
} else {
add(
AppBar.Action(
title = stringResource(R.string.action_web_view),
icon = Icons.Outlined.Public,
onClick = onWebViewClick,
)
)
}
}
// SY <--
if (isConfigurableSource) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_settings),
onClick = onSettingsClick,
),
) )
} }
}, }
// SY <-- .build(),
AppBar.OverflowAction(
title = stringResource(R.string.action_settings),
onClick = onSettingsClick,
).takeIf { isConfigurableSource },
),
) )
DropdownMenu( DropdownMenu(

View File

@ -19,6 +19,7 @@ import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarActions
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.category.CategoryScreenState import eu.kanade.tachiyomi.ui.category.CategoryScreenState
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.model.Category
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.padding
@ -45,7 +46,7 @@ fun CategoryScreen(
navigateUp = navigateUp, navigateUp = navigateUp,
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_sort), title = stringResource(R.string.action_sort),
icon = Icons.Outlined.SortByAlpha, icon = Icons.Outlined.SortByAlpha,

View File

@ -27,7 +27,6 @@ import tachiyomi.presentation.core.components.material.padding
@Composable @Composable
fun CategoryListItem( fun CategoryListItem(
modifier: Modifier = Modifier,
category: Category, category: Category,
canMoveUp: Boolean, canMoveUp: Boolean,
canMoveDown: Boolean, canMoveDown: Boolean,
@ -35,6 +34,7 @@ fun CategoryListItem(
onMoveDown: (Category) -> Unit, onMoveDown: (Category) -> Unit,
onRename: () -> Unit, onRename: () -> Unit,
onDelete: () -> Unit, onDelete: () -> Unit,
modifier: Modifier = Modifier,
) { ) {
ElevatedCard( ElevatedCard(
modifier = modifier, modifier = modifier,

View File

@ -71,10 +71,10 @@ fun NavigatorAdaptiveSheet(
*/ */
@Composable @Composable
fun AdaptiveSheet( fun AdaptiveSheet(
onDismissRequest: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
tonalElevation: Dp = 1.dp, tonalElevation: Dp = 1.dp,
enableSwipeDismiss: Boolean = true, enableSwipeDismiss: Boolean = true,
onDismissRequest: () -> Unit,
content: @Composable () -> Unit, content: @Composable () -> Unit,
) { ) {
val isTabletUi = isTabletUi() val isTabletUi = isTabletUi()

View File

@ -51,6 +51,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import kotlinx.collections.immutable.ImmutableList
import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide
import tachiyomi.presentation.core.util.runOnEnterKeyPressed import tachiyomi.presentation.core.util.runOnEnterKeyPressed
import tachiyomi.presentation.core.util.secondaryItemAlpha import tachiyomi.presentation.core.util.secondaryItemAlpha
@ -184,7 +185,7 @@ fun AppBarTitle(
@Composable @Composable
fun AppBarActions( fun AppBarActions(
actions: List<AppBar.AppBarAction>, actions: ImmutableList<AppBar.AppBarAction>,
) { ) {
var showMenu by remember { mutableStateOf(false) } var showMenu by remember { mutableStateOf(false) }

View File

@ -11,10 +11,10 @@ import java.util.Date
@Composable @Composable
fun RelativeDateHeader( fun RelativeDateHeader(
modifier: Modifier = Modifier,
date: Date, date: Date,
relativeTime: Boolean, relativeTime: Boolean,
dateFormat: DateFormat, dateFormat: DateFormat,
modifier: Modifier = Modifier,
) { ) {
val context = LocalContext.current val context = LocalContext.current
ListGroupHeader( ListGroupHeader(

View File

@ -28,6 +28,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastForEachIndexed import androidx.compose.ui.util.fastForEachIndexed
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import kotlinx.collections.immutable.ImmutableList
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import tachiyomi.presentation.core.components.HorizontalPager import tachiyomi.presentation.core.components.HorizontalPager
import tachiyomi.presentation.core.components.material.TabText import tachiyomi.presentation.core.components.material.TabText
@ -39,9 +40,9 @@ object TabbedDialogPaddings {
@Composable @Composable
fun TabbedDialog( fun TabbedDialog(
modifier: Modifier = Modifier,
onDismissRequest: () -> Unit, onDismissRequest: () -> Unit,
tabTitles: List<String>, tabTitles: ImmutableList<String>,
modifier: Modifier = Modifier,
tabOverflowMenuContent: (@Composable ColumnScope.(() -> Unit) -> Unit)? = null, tabOverflowMenuContent: (@Composable ColumnScope.(() -> Unit) -> Unit)? = null,
pagerState: PagerState = rememberPagerState { tabTitles.size }, pagerState: PagerState = rememberPagerState { tabTitles.size },
content: @Composable (Int) -> Unit, content: @Composable (Int) -> Unit,

View File

@ -21,6 +21,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import tachiyomi.presentation.core.components.HorizontalPager import tachiyomi.presentation.core.components.HorizontalPager
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
@ -29,7 +31,7 @@ import tachiyomi.presentation.core.components.material.TabText
@Composable @Composable
fun TabbedScreen( fun TabbedScreen(
@StringRes titleRes: Int, @StringRes titleRes: Int,
tabs: List<TabContent>, tabs: ImmutableList<TabContent>,
startIndex: Int? = null, startIndex: Int? = null,
searchQuery: String? = null, searchQuery: String? = null,
onChangeSearchQuery: (String?) -> Unit = {}, onChangeSearchQuery: (String?) -> Unit = {},
@ -97,6 +99,6 @@ data class TabContent(
@StringRes val titleRes: Int, @StringRes val titleRes: Int,
val badgeNumber: Int? = null, val badgeNumber: Int? = null,
val searchEnabled: Boolean = false, val searchEnabled: Boolean = false,
val actions: List<AppBar.Action> = emptyList(), val actions: ImmutableList<AppBar.Action> = persistentListOf(),
val content: @Composable (contentPadding: PaddingValues, snackbarHostState: SnackbarHostState) -> Unit, val content: @Composable (contentPadding: PaddingValues, snackbarHostState: SnackbarHostState) -> Unit,
) )

View File

@ -23,6 +23,7 @@ import eu.kanade.presentation.history.components.HistoryItem
import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.presentation.theme.TachiyomiTheme
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.history.HistoryScreenModel import eu.kanade.tachiyomi.ui.history.HistoryScreenModel
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.core.preference.InMemoryPreferenceStore import tachiyomi.core.preference.InMemoryPreferenceStore
import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.domain.history.model.HistoryWithRelations
import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.FastScrollLazyColumn
@ -51,7 +52,7 @@ fun HistoryScreen(
onChangeSearchQuery = onSearchQueryChange, onChangeSearchQuery = onSearchQueryChange,
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.pref_clear_history), title = stringResource(R.string.pref_clear_history),
icon = Icons.Outlined.DeleteSweep, icon = Icons.Outlined.DeleteSweep,

View File

@ -1,13 +0,0 @@
package eu.kanade.presentation.history
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import java.time.Instant
import java.util.Date
object HistoryUiModelProviders {
class HeadNow : PreviewParameterProvider<HistoryUiModel> {
override val values: Sequence<HistoryUiModel> =
sequenceOf(HistoryUiModel.Header(Date.from(Instant.now())))
}
}

View File

@ -35,11 +35,11 @@ private val HistoryItemHeight = 96.dp
@Composable @Composable
fun HistoryItem( fun HistoryItem(
modifier: Modifier = Modifier,
history: HistoryWithRelations, history: HistoryWithRelations,
onClickCover: () -> Unit, onClickCover: () -> Unit,
onClickResume: () -> Unit, onClickResume: () -> Unit,
onClickDelete: () -> Unit, onClickDelete: () -> Unit,
modifier: Modifier = Modifier,
) { ) {
Row( Row(
modifier = modifier modifier = modifier

View File

@ -21,6 +21,7 @@ import eu.kanade.presentation.components.TabbedDialog
import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.presentation.components.TabbedDialogPaddings
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.library.LibrarySettingsScreenModel import eu.kanade.tachiyomi.ui.library.LibrarySettingsScreenModel
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import tachiyomi.core.preference.TriState import tachiyomi.core.preference.TriState
import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.model.Category
@ -49,7 +50,7 @@ fun LibrarySettingsDialog(
) { ) {
TabbedDialog( TabbedDialog(
onDismissRequest = onDismissRequest, onDismissRequest = onDismissRequest,
tabTitles = listOf( tabTitles = persistentListOf(
stringResource(R.string.action_filter), stringResource(R.string.action_filter),
stringResource(R.string.action_sort), stringResource(R.string.action_sort),
stringResource(R.string.action_display), stringResource(R.string.action_display),

View File

@ -21,6 +21,7 @@ import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarActions
import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.components.SearchToolbar
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.presentation.core.components.Pill import tachiyomi.presentation.core.components.Pill
import tachiyomi.presentation.core.theme.active import tachiyomi.presentation.core.theme.active
@ -104,7 +105,7 @@ private fun LibraryRegularToolbar(
actions = { actions = {
val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current
AppBarActions( AppBarActions(
listOfNotNull( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_filter), title = stringResource(R.string.action_filter),
icon = Icons.Outlined.FilterList, icon = Icons.Outlined.FilterList,
@ -123,17 +124,19 @@ private fun LibraryRegularToolbar(
title = stringResource(R.string.action_open_random_manga), title = stringResource(R.string.action_open_random_manga),
onClick = onClickOpenRandomManga, onClick = onClickOpenRandomManga,
), ),
).builder().apply {
// SY --> // SY -->
if (onClickSyncExh != null) { if (onClickSyncExh != null) {
AppBar.OverflowAction( add(
title = stringResource(R.string.sync_favorites), AppBar.OverflowAction(
onClick = onClickSyncExh, title = stringResource(R.string.sync_favorites),
onClick = onClickSyncExh,
)
) )
} else { }
null
},
// SY <-- // SY <--
), }.build(),
) )
}, },
scrollBehavior = scrollBehavior, scrollBehavior = scrollBehavior,
@ -151,7 +154,7 @@ private fun LibrarySelectionToolbar(
titleContent = { Text(text = "$selectedCount") }, titleContent = { Text(text = "$selectedCount") },
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_select_all), title = stringResource(R.string.action_select_all),
icon = Icons.Outlined.SelectAll, icon = Icons.Outlined.SelectAll,

View File

@ -32,6 +32,7 @@ import eu.kanade.domain.manga.model.forceDownloaded
import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialog
import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.presentation.components.TabbedDialogPaddings
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.core.preference.TriState import tachiyomi.core.preference.TriState
import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.Manga
import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.LabeledCheckbox
@ -64,7 +65,7 @@ fun ChapterSettingsDialog(
TabbedDialog( TabbedDialog(
onDismissRequest = onDismissRequest, onDismissRequest = onDismissRequest,
tabTitles = listOf( tabTitles = persistentListOf(
stringResource(R.string.action_filter), stringResource(R.string.action_filter),
stringResource(R.string.action_sort), stringResource(R.string.action_sort),
stringResource(R.string.action_display), stringResource(R.string.action_display),

View File

@ -49,6 +49,7 @@ import eu.kanade.presentation.components.DropdownMenu
import eu.kanade.presentation.manga.EditCoverAction import eu.kanade.presentation.manga.EditCoverAction
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.Manga
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.util.clickableNoIndication import tachiyomi.presentation.core.util.clickableNoIndication
@ -91,22 +92,18 @@ fun MangaCoverDialog(
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
ActionsPill { ActionsPill {
AppBarActions( AppBarActions(
actions = buildList { actions = persistentListOf(
add( AppBar.Action(
AppBar.Action( title = stringResource(R.string.action_share),
title = stringResource(R.string.action_share), icon = Icons.Outlined.Share,
icon = Icons.Outlined.Share, onClick = onShareClick,
onClick = onShareClick, ),
), AppBar.Action(
) title = stringResource(R.string.action_save),
add( icon = Icons.Outlined.Save,
AppBar.Action( onClick = onSaveClick,
title = stringResource(R.string.action_save), ),
icon = Icons.Outlined.Save, ),
onClick = onSaveClick,
),
)
},
) )
if (onEditClick != null) { if (onEditClick != null) {
Box { Box {

View File

@ -30,6 +30,7 @@ import eu.kanade.presentation.components.DownloadDropdownMenu
import eu.kanade.presentation.components.UpIcon import eu.kanade.presentation.components.UpIcon
import eu.kanade.presentation.manga.DownloadAction import eu.kanade.presentation.manga.DownloadAction
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.presentation.core.theme.active import tachiyomi.presentation.core.theme.active
@Composable @Composable
@ -78,7 +79,7 @@ fun MangaToolbar(
actions = { actions = {
if (isActionMode) { if (isActionMode) {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_select_all), title = stringResource(R.string.action_select_all),
icon = Icons.Outlined.SelectAll, icon = Icons.Outlined.SelectAll,
@ -104,89 +105,91 @@ fun MangaToolbar(
val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current
AppBarActions( AppBarActions(
actions = buildList { actions = persistentListOf<AppBar.AppBarAction>().builder()
if (onClickDownload != null) { .apply {
if (onClickDownload != null) {
add(
AppBar.Action(
title = stringResource(R.string.manga_download),
icon = Icons.Outlined.Download,
onClick = { downloadExpanded = !downloadExpanded },
),
)
}
add( add(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.manga_download), title = stringResource(R.string.action_filter),
icon = Icons.Outlined.Download, icon = Icons.Outlined.FilterList,
onClick = { downloadExpanded = !downloadExpanded }, iconTint = filterTint,
onClick = onClickFilter,
), ),
) )
}
add(
AppBar.Action(
title = stringResource(R.string.action_filter),
icon = Icons.Outlined.FilterList,
iconTint = filterTint,
onClick = onClickFilter,
),
)
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_webview_refresh),
onClick = onClickRefresh,
),
)
if (onClickEditCategory != null) {
add( add(
AppBar.OverflowAction( AppBar.OverflowAction(
title = stringResource(R.string.action_edit_categories), title = stringResource(R.string.action_webview_refresh),
onClick = onClickEditCategory, onClick = onClickRefresh,
), ),
) )
if (onClickEditCategory != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_edit_categories),
onClick = onClickEditCategory,
),
)
}
if (onClickMigrate != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_migrate),
onClick = onClickMigrate,
),
)
}
if (onClickShare != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_share),
onClick = onClickShare,
),
)
}
// SY -->
if (onClickMerge != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.merge),
onClick = onClickMerge,
),
)
}
if (onClickEditInfo != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_edit_info),
onClick = onClickEditInfo,
),
)
}
if (onClickRecommend != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.az_recommends),
onClick = onClickRecommend,
),
)
}
if (onClickMergedSettings != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.merge_settings),
onClick = onClickMergedSettings,
),
)
}
// SY <--
} }
if (onClickMigrate != null) { .build(),
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_migrate),
onClick = onClickMigrate,
),
)
}
if (onClickShare != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_share),
onClick = onClickShare,
),
)
}
// SY -->
if (onClickMerge != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.merge),
onClick = onClickMerge,
),
)
}
if (onClickEditInfo != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.action_edit_info),
onClick = onClickEditInfo,
),
)
}
if (onClickRecommend != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.az_recommends),
onClick = onClickRecommend,
),
)
}
if (onClickMergedSettings != null) {
add(
AppBar.OverflowAction(
title = stringResource(R.string.merge_settings),
onClick = onClickMergedSettings,
),
)
}
// SY <--
},
) )
} }
}, },

View File

@ -50,6 +50,7 @@ import eu.kanade.tachiyomi.R
import exh.assets.EhAssets import exh.assets.EhAssets
import exh.assets.ehassets.EhLogo import exh.assets.ehassets.EhLogo
import exh.assets.ehassets.MangadexLogo import exh.assets.ehassets.MangadexLogo
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen
@ -91,7 +92,7 @@ object SettingsMainScreen : Screen() {
navigateUp = backPress::invoke, navigateUp = backPress::invoke,
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_search), title = stringResource(R.string.action_search),
icon = Icons.Outlined.Search, icon = Icons.Outlined.Search,

View File

@ -20,6 +20,7 @@ import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarActions
import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
class OpenSourceLibraryLicenseScreen( class OpenSourceLibraryLicenseScreen(
@ -41,7 +42,7 @@ class OpenSourceLibraryLicenseScreen(
actions = { actions = {
if (!website.isNullOrEmpty()) { if (!website.isNullOrEmpty()) {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.website), title = stringResource(R.string.website),
icon = Icons.Default.Public, icon = Icons.Default.Public,

View File

@ -44,6 +44,7 @@ import eu.kanade.presentation.components.AppBarActions
import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.launchIO
@ -126,7 +127,7 @@ class ClearDatabaseScreen : Screen() {
actions = { actions = {
if (s.items.isNotEmpty()) { if (s.items.isNotEmpty()) {
AppBarActions( AppBarActions(
actions = listOf( actions = persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_select_all), title = stringResource(R.string.action_select_all),
icon = Icons.Outlined.SelectAll, icon = Icons.Outlined.SelectAll,

View File

@ -21,6 +21,7 @@ import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.backup.models.Backup import eu.kanade.tachiyomi.data.backup.models.Backup
import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.copyToClipboard
import kotlinx.collections.immutable.persistentListOf
import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
@ -44,7 +45,7 @@ class BackupSchemaScreen : Screen() {
navigateUp = navigator::pop, navigateUp = navigator::pop,
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_copy_to_clipboard), title = stringResource(R.string.action_copy_to_clipboard),
icon = Icons.Default.ContentCopy, icon = Icons.Default.ContentCopy,

View File

@ -33,6 +33,7 @@ import eu.kanade.presentation.util.ioCoroutineScope
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.copyToClipboard
import eu.kanade.tachiyomi.util.system.workManager import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
@ -62,7 +63,7 @@ class WorkerInfoScreen : Screen() {
navigateUp = navigator::pop, navigateUp = navigator::pop,
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_copy_to_clipboard), title = stringResource(R.string.action_copy_to_clipboard),
icon = Icons.Default.ContentCopy, icon = Icons.Default.ContentCopy,

View File

@ -33,6 +33,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.ui.reader.viewer.Viewer
import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
import kotlinx.collections.immutable.persistentListOf
private val animationSpec = tween<IntOffset>(200) private val animationSpec = tween<IntOffset>(200)

View File

@ -17,6 +17,7 @@ import eu.kanade.presentation.components.TabbedDialog
import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.presentation.components.TabbedDialogPaddings
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
import kotlinx.collections.immutable.persistentListOf
@Composable @Composable
fun ReaderSettingsDialog( fun ReaderSettingsDialog(
@ -25,7 +26,7 @@ fun ReaderSettingsDialog(
onHideMenus: () -> Unit, onHideMenus: () -> Unit,
screenModel: ReaderSettingsScreenModel, screenModel: ReaderSettingsScreenModel,
) { ) {
val tabTitles = listOf( val tabTitles = persistentListOf(
stringResource(R.string.pref_category_reading_mode), stringResource(R.string.pref_category_reading_mode),
stringResource(R.string.pref_category_general), stringResource(R.string.pref_category_general),
stringResource(R.string.custom_filter), stringResource(R.string.custom_filter),

View File

@ -240,10 +240,10 @@ private fun TrackInfoItem(
@Composable @Composable
private fun TrackDetailsItem( private fun TrackDetailsItem(
modifier: Modifier = Modifier,
text: String?, text: String?,
placeholder: String = "",
onClick: () -> Unit, onClick: () -> Unit,
modifier: Modifier = Modifier,
placeholder: String = "",
) { ) {
Box( Box(
modifier = modifier modifier = modifier

View File

@ -191,9 +191,9 @@ fun TrackDateSelector(
private fun BaseSelector( private fun BaseSelector(
title: String, title: String,
content: @Composable BoxScope.() -> Unit, content: @Composable BoxScope.() -> Unit,
thirdButton: @Composable (RowScope.() -> Unit)? = null,
onConfirm: () -> Unit, onConfirm: () -> Unit,
onDismissRequest: () -> Unit, onDismissRequest: () -> Unit,
thirdButton: @Composable (RowScope.() -> Unit)? = null,
) { ) {
AlertDialogContent( AlertDialogContent(
modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars), modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),

View File

@ -29,6 +29,7 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.ui.updates.UpdatesItem import eu.kanade.tachiyomi.ui.updates.UpdatesItem
import eu.kanade.tachiyomi.ui.updates.UpdatesScreenModel import eu.kanade.tachiyomi.ui.updates.UpdatesScreenModel
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.FastScrollLazyColumn
@ -134,7 +135,6 @@ fun UpdateScreen(
@Composable @Composable
private fun UpdatesAppBar( private fun UpdatesAppBar(
modifier: Modifier = Modifier,
onUpdateLibrary: () -> Unit, onUpdateLibrary: () -> Unit,
// For action mode // For action mode
actionModeCounter: Int, actionModeCounter: Int,
@ -142,13 +142,14 @@ private fun UpdatesAppBar(
onInvertSelection: () -> Unit, onInvertSelection: () -> Unit,
onCancelActionMode: () -> Unit, onCancelActionMode: () -> Unit,
scrollBehavior: TopAppBarScrollBehavior, scrollBehavior: TopAppBarScrollBehavior,
modifier: Modifier = Modifier,
) { ) {
AppBar( AppBar(
modifier = modifier, modifier = modifier,
title = stringResource(R.string.label_recent_updates), title = stringResource(R.string.label_recent_updates),
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_update_library), title = stringResource(R.string.action_update_library),
icon = Icons.Outlined.Refresh, icon = Icons.Outlined.Refresh,
@ -161,7 +162,7 @@ private fun UpdatesAppBar(
onCancelActionMode = onCancelActionMode, onCancelActionMode = onCancelActionMode,
actionModeActions = { actionModeActions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_select_all), title = stringResource(R.string.action_select_all),
icon = Icons.Outlined.SelectAll, icon = Icons.Outlined.SelectAll,

View File

@ -138,7 +138,6 @@ internal fun LazyListScope.updatesUiItems(
@Composable @Composable
private fun UpdatesUiItem( private fun UpdatesUiItem(
modifier: Modifier,
update: UpdatesWithRelations, update: UpdatesWithRelations,
selected: Boolean, selected: Boolean,
readProgress: String?, readProgress: String?,
@ -149,6 +148,7 @@ private fun UpdatesUiItem(
// Download Indicator // Download Indicator
downloadStateProvider: () -> Download.State, downloadStateProvider: () -> Download.State,
downloadProgressProvider: () -> Int, downloadProgressProvider: () -> Int,
modifier: Modifier = Modifier,
) { ) {
val haptic = LocalHapticFeedback.current val haptic = LocalHapticFeedback.current
val textAlpha = if (update.read) ReadItemAlpha else 1f val textAlpha = if (update.read) ReadItemAlpha else 1f

View File

@ -1,5 +1,6 @@
package eu.kanade.presentation.util package eu.kanade.presentation.util
import android.annotation.SuppressLint
import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.AnimatedContentTransitionScope
import androidx.compose.animation.ContentTransform import androidx.compose.animation.ContentTransform
@ -27,6 +28,7 @@ import soup.compose.material.motion.animation.rememberSlideDistance
/** /**
* For invoking back press to the parent activity * For invoking back press to the parent activity
*/ */
@SuppressLint("ComposeCompositionLocalUsage")
val LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null } val LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null }
interface Tab : cafe.adriel.voyager.navigator.tab.Tab { interface Tab : cafe.adriel.voyager.navigator.tab.Tab {
@ -84,6 +86,7 @@ fun ScreenTransition(
targetState = navigator.lastItem, targetState = navigator.lastItem,
transitionSpec = transition, transitionSpec = transition,
modifier = modifier, modifier = modifier,
label = "transition",
) { screen -> ) { screen ->
navigator.saveableState("transition", screen) { navigator.saveableState("transition", screen) {
content(screen) content(screen)

View File

@ -43,6 +43,7 @@ import eu.kanade.tachiyomi.BuildConfig
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.system.getHtml import eu.kanade.tachiyomi.util.system.getHtml
import eu.kanade.tachiyomi.util.system.setDefaultSettings import eu.kanade.tachiyomi.util.system.setDefaultSettings
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
@ -51,11 +52,11 @@ fun WebViewScreenContent(
onNavigateUp: () -> Unit, onNavigateUp: () -> Unit,
initialTitle: String?, initialTitle: String?,
url: String, url: String,
headers: Map<String, String> = emptyMap(),
onUrlChange: (String) -> Unit = {},
onShare: (String) -> Unit, onShare: (String) -> Unit,
onOpenInBrowser: (String) -> Unit, onOpenInBrowser: (String) -> Unit,
onClearCookies: (String) -> Unit, onClearCookies: (String) -> Unit,
headers: Map<String, String> = emptyMap(),
onUrlChange: (String) -> Unit = {},
) { ) {
val state = rememberWebViewState(url = url, additionalHttpHeaders = headers) val state = rememberWebViewState(url = url, additionalHttpHeaders = headers)
val navigator = rememberWebViewNavigator() val navigator = rememberWebViewNavigator()
@ -124,7 +125,7 @@ fun WebViewScreenContent(
navigationIcon = Icons.Outlined.Close, navigationIcon = Icons.Outlined.Close,
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_webview_back), title = stringResource(R.string.action_webview_back),
icon = Icons.AutoMirrored.Outlined.ArrowBack, icon = Icons.AutoMirrored.Outlined.ArrowBack,

View File

@ -28,6 +28,7 @@ import eu.kanade.tachiyomi.ui.browse.migration.sources.migrateSourceTab
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen
import eu.kanade.tachiyomi.ui.browse.source.sourcesTab import eu.kanade.tachiyomi.ui.browse.source.sourcesTab
import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.main.MainActivity
import kotlinx.collections.immutable.persistentListOf
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
@ -69,14 +70,14 @@ data class BrowseTab(
titleRes = R.string.browse, titleRes = R.string.browse,
// SY --> // SY -->
tabs = if (feedTabInFront) { tabs = if (feedTabInFront) {
listOf( persistentListOf(
feedTab(), feedTab(),
sourcesTab(), sourcesTab(),
extensionsTab(extensionsScreenModel), extensionsTab(extensionsScreenModel),
migrateSourceTab(), migrateSourceTab(),
) )
} else { } else {
listOf( persistentListOf(
sourcesTab(), sourcesTab(),
feedTab(), feedTab(),
extensionsTab(extensionsScreenModel), extensionsTab(extensionsScreenModel),

View File

@ -14,6 +14,7 @@ import eu.kanade.presentation.components.TabContent
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen
import kotlinx.collections.immutable.persistentListOf
@Composable @Composable
fun extensionsTab( fun extensionsTab(
@ -26,7 +27,7 @@ fun extensionsTab(
titleRes = R.string.label_extensions, titleRes = R.string.label_extensions,
badgeNumber = state.updates.takeIf { it > 0 }, badgeNumber = state.updates.takeIf { it > 0 },
searchEnabled = true, searchEnabled = true,
actions = listOf( actions = persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_filter), title = stringResource(R.string.action_filter),
icon = Icons.Outlined.Translate, icon = Icons.Outlined.Translate,

View File

@ -22,6 +22,7 @@ import eu.kanade.presentation.components.TabContent
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen
import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import tachiyomi.domain.source.interactor.GetRemoteManga import tachiyomi.domain.source.interactor.GetRemoteManga
@ -48,7 +49,7 @@ fun Screen.feedTab(): TabContent {
return TabContent( return TabContent(
titleRes = R.string.feed, titleRes = R.string.feed,
actions = listOf( actions = persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_add), title = stringResource(R.string.action_add),
icon = Icons.Outlined.Add, icon = Icons.Outlined.Add,

View File

@ -41,6 +41,7 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.databinding.PreMigrationListBinding import eu.kanade.tachiyomi.databinding.PreMigrationListBinding
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationListScreen import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationListScreen
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationProcedureConfig import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationProcedureConfig
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -83,7 +84,7 @@ class PreMigrationScreen(val mangaIds: List<Long>) : Screen() {
scrollBehavior = scrollBehavior, scrollBehavior = scrollBehavior,
actions = { actions = {
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.select_none), title = stringResource(R.string.select_none),
icon = Icons.Outlined.Deselect, icon = Icons.Outlined.Deselect,

View File

@ -22,6 +22,7 @@ import tachiyomi.core.util.lang.launchIO
import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.lang.withUIContext
import tachiyomi.domain.UnsortedPreferences import tachiyomi.domain.UnsortedPreferences
import tachiyomi.domain.manga.interactor.GetFavorites import tachiyomi.domain.manga.interactor.GetFavorites
import kotlinx.collections.immutable.persistentListOf
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
@ -34,7 +35,7 @@ fun Screen.migrateSourceTab(): TabContent {
return TabContent( return TabContent(
titleRes = R.string.label_migration, titleRes = R.string.label_migration,
actions = listOf( actions = persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.migration_help_guide), title = stringResource(R.string.migration_help_guide),
icon = Icons.AutoMirrored.Outlined.HelpOutline, icon = Icons.AutoMirrored.Outlined.HelpOutline,

View File

@ -24,6 +24,7 @@ import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreenModel.Listi
import eu.kanade.tachiyomi.ui.browse.source.feed.SourceFeedScreen import eu.kanade.tachiyomi.ui.browse.source.feed.SourceFeedScreen
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen
import exh.ui.smartsearch.SmartSearchScreen import exh.ui.smartsearch.SmartSearchScreen
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -42,7 +43,7 @@ fun Screen.sourcesTab(
false -> R.string.find_in_another_source false -> R.string.find_in_another_source
}, },
actions = if (smartSearchConfig == null) { actions = if (smartSearchConfig == null) {
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_global_search), title = stringResource(R.string.action_global_search),
icon = Icons.Outlined.TravelExplore, icon = Icons.Outlined.TravelExplore,
@ -55,7 +56,7 @@ fun Screen.sourcesTab(
), ),
) )
} else { } else {
emptyList() persistentListOf()
}, },
// SY <-- // SY <--
content = { contentPadding, snackbarHostState -> content = { contentPadding, snackbarHostState ->

View File

@ -55,6 +55,7 @@ import eu.kanade.presentation.components.NestedMenuItem
import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.databinding.DownloadListBinding import eu.kanade.tachiyomi.databinding.DownloadListBinding
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.core.util.lang.launchUI import tachiyomi.core.util.lang.launchUI
import tachiyomi.presentation.core.components.Pill import tachiyomi.presentation.core.components.Pill
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
@ -183,7 +184,7 @@ object DownloadQueueScreen : Screen() {
} }
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.Action( AppBar.Action(
title = stringResource(R.string.action_sort), title = stringResource(R.string.action_sort),
icon = Icons.AutoMirrored.Outlined.Sort, icon = Icons.AutoMirrored.Outlined.Sort,

View File

@ -13,6 +13,7 @@ import eu.kanade.presentation.more.stats.StatsScreenContent
import eu.kanade.presentation.more.stats.StatsScreenState import eu.kanade.presentation.more.stats.StatsScreenState
import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.screens.LoadingScreen
@ -35,7 +36,7 @@ class StatsScreen : Screen() {
actions = { actions = {
val allRead by screenModel.allRead.collectAsState() val allRead by screenModel.allRead.collectAsState()
AppBarActions( AppBarActions(
listOf( persistentListOf(
AppBar.OverflowAction( AppBar.OverflowAction(
title = if (allRead) { title = if (allRead) {
stringResource(R.string.ignore_non_library_entries) stringResource(R.string.ignore_non_library_entries)

View File

@ -35,6 +35,7 @@ import eu.kanade.presentation.manga.components.PagePreview
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import exh.pagepreview.PagePreviewState import exh.pagepreview.PagePreviewState
import exh.util.floor import exh.util.floor
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.ScrollbarLazyColumn
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
@ -185,13 +186,17 @@ fun PagePreviewTopAppBar(
title = title, title = title,
actions = { actions = {
AppBarActions( AppBarActions(
listOfNotNull( if (showOpenPageDialog) {
AppBar.Action( persistentListOf(
title = stringResource(R.string.page_preview_page_go_to), AppBar.Action(
icon = Icons.Outlined.UTurnRight, title = stringResource(R.string.page_preview_page_go_to),
onClick = onOpenPageDialog, icon = Icons.Outlined.UTurnRight,
).takeIf { showOpenPageDialog }, onClick = onOpenPageDialog,
), ),
)
} else {
persistentListOf()
},
) )
}, },
navigateUp = navigateUp, navigateUp = navigateUp,