komikku/app/src/main/java/eu/kanade/presentation/components/Chip.kt
Ivan Iskandar 2b7aca710e MangaController overhaul (#7244)
(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
2022-06-25 17:11:25 -04:00

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)