(cherry picked from commit 33a778873af0eb52528a29f741fa59b530679c64) # Conflicts: # app/build.gradle.kts # app/src/main/java/eu/kanade/tachiyomi/data/database/models/LibraryManga.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchController.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersAdapter.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersSettingsSheet.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt # app/src/main/java/eu/kanade/tachiyomi/widget/MangaSummaryView.kt # app/src/main/res/layout-sw720dp/manga_info_header.xml # app/src/main/res/layout/manga_controller.xml # app/src/main/res/layout/manga_info_header.xml # app/src/main/res/layout/manga_summary.xml # app/src/main/res/menu/manga.xml
245 lines
8.4 KiB
Kotlin
245 lines
8.4 KiB
Kotlin
package eu.kanade.presentation.components
|
|
|
|
import androidx.compose.foundation.BorderStroke
|
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
|
import androidx.compose.foundation.layout.Arrangement
|
|
import androidx.compose.foundation.layout.PaddingValues
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.Spacer
|
|
import androidx.compose.foundation.layout.defaultMinSize
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.layout.width
|
|
import androidx.compose.material3.ChipBorder
|
|
import androidx.compose.material3.ChipColors
|
|
import androidx.compose.material3.ChipElevation
|
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
import androidx.compose.material3.LocalContentColor
|
|
import androidx.compose.material3.LocalTextStyle
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.SuggestionChipDefaults
|
|
import androidx.compose.material3.Surface
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.CompositionLocalProvider
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.graphics.Shape
|
|
import androidx.compose.ui.text.TextStyle
|
|
import androidx.compose.ui.unit.Dp
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
@ExperimentalMaterial3Api
|
|
@Composable
|
|
fun SuggestionChip(
|
|
label: @Composable () -> Unit,
|
|
modifier: Modifier = Modifier,
|
|
enabled: Boolean = true,
|
|
icon: @Composable (() -> Unit)? = null,
|
|
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
|
elevation: ChipElevation? = SuggestionChipDefaults.suggestionChipElevation(),
|
|
shape: Shape = MaterialTheme.shapes.small,
|
|
border: ChipBorder? = SuggestionChipDefaults.suggestionChipBorder(),
|
|
colors: ChipColors = SuggestionChipDefaults.suggestionChipColors(),
|
|
) = Chip(
|
|
modifier = modifier,
|
|
label = label,
|
|
labelTextStyle = MaterialTheme.typography.labelLarge,
|
|
labelColor = colors.labelColor(enabled).value,
|
|
leadingIcon = icon,
|
|
avatar = null,
|
|
trailingIcon = null,
|
|
leadingIconColor = colors.leadingIconContentColor(enabled).value,
|
|
trailingIconColor = colors.trailingIconContentColor(enabled).value,
|
|
containerColor = colors.containerColor(enabled).value,
|
|
tonalElevation = elevation?.tonalElevation(enabled, interactionSource)?.value ?: 0.dp,
|
|
shadowElevation = elevation?.shadowElevation(enabled, interactionSource)?.value ?: 0.dp,
|
|
minHeight = SuggestionChipDefaults.Height,
|
|
paddingValues = SuggestionChipPadding,
|
|
shape = shape,
|
|
border = border?.borderStroke(enabled)?.value,
|
|
)
|
|
|
|
@ExperimentalMaterial3Api
|
|
@Composable
|
|
fun SuggestionChip(
|
|
onClick: () -> Unit,
|
|
onLongClick: () -> Unit,
|
|
label: @Composable () -> Unit,
|
|
modifier: Modifier = Modifier,
|
|
enabled: Boolean = true,
|
|
icon: @Composable (() -> Unit)? = null,
|
|
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
|
elevation: ChipElevation? = SuggestionChipDefaults.suggestionChipElevation(),
|
|
shape: Shape = MaterialTheme.shapes.small,
|
|
border: ChipBorder? = SuggestionChipDefaults.suggestionChipBorder(),
|
|
colors: ChipColors = SuggestionChipDefaults.suggestionChipColors(),
|
|
) = Chip(
|
|
modifier = modifier,
|
|
onClick = onClick,
|
|
onLongClick = onLongClick,
|
|
enabled = enabled,
|
|
label = label,
|
|
labelTextStyle = MaterialTheme.typography.labelLarge,
|
|
labelColor = colors.labelColor(enabled).value,
|
|
leadingIcon = icon,
|
|
avatar = null,
|
|
trailingIcon = null,
|
|
leadingIconColor = colors.leadingIconContentColor(enabled).value,
|
|
trailingIconColor = colors.trailingIconContentColor(enabled).value,
|
|
containerColor = colors.containerColor(enabled).value,
|
|
tonalElevation = elevation?.tonalElevation(enabled, interactionSource)?.value ?: 0.dp,
|
|
shadowElevation = elevation?.shadowElevation(enabled, interactionSource)?.value ?: 0.dp,
|
|
minHeight = SuggestionChipDefaults.Height,
|
|
paddingValues = SuggestionChipPadding,
|
|
shape = shape,
|
|
border = border?.borderStroke(enabled)?.value,
|
|
interactionSource = interactionSource,
|
|
)
|
|
|
|
@Suppress("SameParameterValue")
|
|
@ExperimentalMaterial3Api
|
|
@Composable
|
|
private fun Chip(
|
|
modifier: Modifier,
|
|
label: @Composable () -> Unit,
|
|
labelTextStyle: TextStyle,
|
|
labelColor: Color,
|
|
leadingIcon: @Composable (() -> Unit)?,
|
|
avatar: @Composable (() -> Unit)?,
|
|
trailingIcon: @Composable (() -> Unit)?,
|
|
leadingIconColor: Color,
|
|
trailingIconColor: Color,
|
|
containerColor: Color,
|
|
tonalElevation: Dp,
|
|
shadowElevation: Dp,
|
|
minHeight: Dp,
|
|
paddingValues: PaddingValues,
|
|
shape: Shape,
|
|
border: BorderStroke?,
|
|
) {
|
|
Surface(
|
|
modifier = modifier,
|
|
shape = shape,
|
|
color = containerColor,
|
|
tonalElevation = tonalElevation,
|
|
shadowElevation = shadowElevation,
|
|
border = border,
|
|
) {
|
|
ChipContent(
|
|
label = label,
|
|
labelTextStyle = labelTextStyle,
|
|
labelColor = labelColor,
|
|
leadingIcon = leadingIcon,
|
|
avatar = avatar,
|
|
trailingIcon = trailingIcon,
|
|
leadingIconColor = leadingIconColor,
|
|
trailingIconColor = trailingIconColor,
|
|
minHeight = minHeight,
|
|
paddingValues = paddingValues,
|
|
)
|
|
}
|
|
}
|
|
|
|
@Suppress("SameParameterValue")
|
|
@ExperimentalMaterial3Api
|
|
@Composable
|
|
private fun Chip(
|
|
modifier: Modifier,
|
|
onClick: () -> Unit,
|
|
onLongClick: () -> Unit,
|
|
enabled: Boolean,
|
|
label: @Composable () -> Unit,
|
|
labelTextStyle: TextStyle,
|
|
labelColor: Color,
|
|
leadingIcon: @Composable (() -> Unit)?,
|
|
avatar: @Composable (() -> Unit)?,
|
|
trailingIcon: @Composable (() -> Unit)?,
|
|
leadingIconColor: Color,
|
|
trailingIconColor: Color,
|
|
containerColor: Color,
|
|
tonalElevation: Dp,
|
|
shadowElevation: Dp,
|
|
minHeight: Dp,
|
|
paddingValues: PaddingValues,
|
|
shape: Shape,
|
|
border: BorderStroke?,
|
|
interactionSource: MutableInteractionSource,
|
|
) {
|
|
Surface(
|
|
onClick = onClick,
|
|
modifier = modifier,
|
|
onLongClick = onLongClick,
|
|
enabled = enabled,
|
|
shape = shape,
|
|
color = containerColor,
|
|
tonalElevation = tonalElevation,
|
|
shadowElevation = shadowElevation,
|
|
border = border,
|
|
interactionSource = interactionSource,
|
|
) {
|
|
ChipContent(
|
|
label = label,
|
|
labelTextStyle = labelTextStyle,
|
|
labelColor = labelColor,
|
|
leadingIcon = leadingIcon,
|
|
avatar = avatar,
|
|
trailingIcon = trailingIcon,
|
|
leadingIconColor = leadingIconColor,
|
|
trailingIconColor = trailingIconColor,
|
|
minHeight = minHeight,
|
|
paddingValues = paddingValues,
|
|
)
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
private fun ChipContent(
|
|
label: @Composable () -> Unit,
|
|
labelTextStyle: TextStyle,
|
|
labelColor: Color,
|
|
leadingIcon: @Composable (() -> Unit)?,
|
|
avatar: @Composable (() -> Unit)?,
|
|
trailingIcon: @Composable (() -> Unit)?,
|
|
leadingIconColor: Color,
|
|
trailingIconColor: Color,
|
|
minHeight: Dp,
|
|
paddingValues: PaddingValues,
|
|
) {
|
|
CompositionLocalProvider(
|
|
LocalContentColor provides labelColor,
|
|
LocalTextStyle provides labelTextStyle,
|
|
) {
|
|
Row(
|
|
Modifier.defaultMinSize(minHeight = minHeight).padding(paddingValues),
|
|
horizontalArrangement = Arrangement.Start,
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
) {
|
|
if (avatar != null) {
|
|
avatar()
|
|
} else if (leadingIcon != null) {
|
|
CompositionLocalProvider(
|
|
LocalContentColor provides leadingIconColor, content = leadingIcon,
|
|
)
|
|
}
|
|
Spacer(Modifier.width(HorizontalElementsPadding))
|
|
label()
|
|
Spacer(Modifier.width(HorizontalElementsPadding))
|
|
if (trailingIcon != null) {
|
|
CompositionLocalProvider(
|
|
LocalContentColor provides trailingIconColor, content = trailingIcon,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The padding between the elements in the chip.
|
|
*/
|
|
private val HorizontalElementsPadding = 8.dp
|
|
|
|
/**
|
|
* Returns the [PaddingValues] for the suggestion chip.
|
|
*/
|
|
private val SuggestionChipPadding = PaddingValues(horizontal = HorizontalElementsPadding)
|