komikku/app/src/main/java/exh/ui/metadata/adapters/TsuminoDescriptionAdapter.kt

119 lines
4.9 KiB
Kotlin

package exh.ui.metadata.adapters
import android.annotation.SuppressLint
import android.content.res.ColorStateList
import android.view.LayoutInflater
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidView
import eu.kanade.presentation.theme.colorscheme.AndroidViewColorScheme
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.databinding.DescriptionAdapterTsBinding
import eu.kanade.tachiyomi.ui.manga.MangaScreenModel.State
import eu.kanade.tachiyomi.util.system.copyToClipboard
import eu.kanade.tachiyomi.util.system.dpToPx
import exh.metadata.metadata.TsuminoSearchMetadata
import exh.ui.metadata.adapters.MetadataUIUtil.bindDrawable
import exh.util.SourceTagsUtil.genreTextColor
import tachiyomi.core.common.i18n.pluralStringResource
import tachiyomi.core.common.i18n.stringResource
import tachiyomi.i18n.MR
import tachiyomi.i18n.sy.SYMR
import java.util.Date
import kotlin.math.round
@Composable
fun TsuminoDescription(state: State.Success, openMetadataViewer: () -> Unit) {
val context = LocalContext.current
// KMK -->
val colorScheme = AndroidViewColorScheme(MaterialTheme.colorScheme)
val iconColor = colorScheme.iconColor
val ratingBarColor = colorScheme.ratingBarColor
val ratingBarSecondaryColor = colorScheme.ratingBarSecondaryColor
val textColor = LocalContentColor.current.toArgb()
// KMK <--
AndroidView(
modifier = Modifier.fillMaxWidth(),
factory = { factoryContext ->
DescriptionAdapterTsBinding.inflate(LayoutInflater.from(factoryContext)).root
},
update = {
val meta = state.meta
if (meta == null || meta !is TsuminoSearchMetadata) return@AndroidView
val binding = DescriptionAdapterTsBinding.bind(it)
binding.genre.text = meta.category?.let { genre -> MetadataUIUtil.getGenreAndColour(context, genre) }
?.let { (genre, name) ->
binding.genre.setBackgroundColor(genre.color)
// KMK -->
binding.genre.setTextColor(genreTextColor(genre))
// KMK <--
name
} ?: meta.category ?: context.stringResource(MR.strings.unknown)
binding.favorites.text = (meta.favorites ?: 0).toString()
// KMK -->
binding.favorites.bindDrawable(context, R.drawable.ic_book_24dp, iconColor)
binding.favorites.setTextColor(textColor)
// KMK <--
binding.whenPosted.text = TsuminoSearchMetadata.TSUMINO_DATE_FORMAT.format(Date(meta.uploadDate ?: 0))
// KMK -->
binding.whenPosted.setTextColor(textColor)
// KMK <--
binding.uploader.text = meta.uploader ?: context.stringResource(MR.strings.unknown)
// KMK -->
binding.uploader.setTextColor(textColor)
// KMK <--
binding.pages.text =
context.pluralStringResource(SYMR.plurals.num_pages, meta.length ?: 0, meta.length ?: 0)
// KMK -->
binding.pages.bindDrawable(context, R.drawable.ic_baseline_menu_book_24, iconColor, 4.dpToPx)
binding.pages.setTextColor(textColor)
// KMK <--
binding.ratingBar.rating = meta.averageRating ?: 0F
@SuppressLint("SetTextI18n")
binding.rating.text =
(round((meta.averageRating ?: 0F) * 100.0) / 100.0).toString() + " - " +
MetadataUIUtil.getRatingString(context, meta.averageRating?.times(2))
// KMK -->
binding.ratingBar.supportProgressTintList = ColorStateList.valueOf(ratingBarColor)
binding.ratingBar.supportSecondaryProgressTintList = ColorStateList.valueOf(ratingBarSecondaryColor)
binding.rating.setTextColor(textColor)
binding.moreInfo.bindDrawable(context, R.drawable.ic_info_24dp, iconColor)
binding.moreInfo.text = context.stringResource(SYMR.strings.more_info)
binding.moreInfo.setTextColor(iconColor)
// KMK <--
listOf(
binding.favorites,
binding.genre,
binding.pages,
binding.rating,
binding.uploader,
binding.whenPosted,
).forEach { textView ->
textView.setOnLongClickListener {
context.copyToClipboard(
textView.text.toString(),
textView.text.toString(),
)
true
}
}
binding.moreInfo.setOnClickListener {
openMetadataViewer()
}
},
)
}