Replace Kotlin synthetic views in viewholders
(cherry picked from commit 749c2071af3fb65efd3dd88ca82f6d3461950907) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/manga/MangaHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SelectionHeader.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SourceHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceComfortableGridHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceGridHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceListHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryComfortableGridHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCompactGridHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt
This commit is contained in:
parent
6f9edb7903
commit
c9c808a782
@ -1,16 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.ui.base.holder
|
|
||||||
|
|
||||||
import android.view.View
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
|
||||||
import eu.davidea.viewholders.FlexibleViewHolder
|
|
||||||
import kotlinx.android.extensions.LayoutContainer
|
|
||||||
|
|
||||||
abstract class BaseFlexibleViewHolder(
|
|
||||||
view: View,
|
|
||||||
adapter: FlexibleAdapter<*>,
|
|
||||||
stickyHeader: Boolean = false
|
|
||||||
) : FlexibleViewHolder(view, adapter, stickyHeader), LayoutContainer {
|
|
||||||
|
|
||||||
override val containerView: View?
|
|
||||||
get() = itemView
|
|
||||||
}
|
|
@ -3,11 +3,13 @@ package eu.kanade.tachiyomi.ui.browse.extension
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_header.title
|
import eu.kanade.tachiyomi.databinding.SourceMainControllerCardHeaderBinding
|
||||||
|
|
||||||
class ExtensionGroupHolder(view: View, adapter: FlexibleAdapter<*>) :
|
class ExtensionGroupHolder(view: View, adapter: FlexibleAdapter<*>) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceMainControllerCardHeaderBinding.bind(view)
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
fun bind(item: ExtensionGroupItem) {
|
fun bind(item: ExtensionGroupItem) {
|
||||||
@ -16,6 +18,6 @@ class ExtensionGroupHolder(view: View, adapter: FlexibleAdapter<*>) :
|
|||||||
text += " (${item.size})"
|
text += " (${item.size})"
|
||||||
}
|
}
|
||||||
|
|
||||||
title.text = text
|
binding.title.text = text
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,26 +2,23 @@ package eu.kanade.tachiyomi.ui.browse.extension
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
|
import eu.kanade.tachiyomi.databinding.ExtensionCardItemBinding
|
||||||
import eu.kanade.tachiyomi.extension.model.Extension
|
import eu.kanade.tachiyomi.extension.model.Extension
|
||||||
import eu.kanade.tachiyomi.extension.model.InstallStep
|
import eu.kanade.tachiyomi.extension.model.InstallStep
|
||||||
import eu.kanade.tachiyomi.source.ConfigurableSource
|
import eu.kanade.tachiyomi.source.ConfigurableSource
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import kotlinx.android.synthetic.main.extension_card_item.ext_button
|
|
||||||
import kotlinx.android.synthetic.main.extension_card_item.ext_title
|
|
||||||
import kotlinx.android.synthetic.main.extension_card_item.image
|
|
||||||
import kotlinx.android.synthetic.main.extension_card_item.lang
|
|
||||||
import kotlinx.android.synthetic.main.extension_card_item.version
|
|
||||||
import kotlinx.android.synthetic.main.extension_card_item.warning
|
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
class ExtensionHolder(view: View, val adapter: ExtensionAdapter) :
|
class ExtensionHolder(view: View, val adapter: ExtensionAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = ExtensionCardItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
ext_button.setOnClickListener {
|
binding.extButton.setOnClickListener {
|
||||||
adapter.buttonClickListener.onButtonClick(bindingAdapterPosition)
|
adapter.buttonClickListener.onButtonClick(bindingAdapterPosition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29,10 +26,10 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) :
|
|||||||
fun bind(item: ExtensionItem) {
|
fun bind(item: ExtensionItem) {
|
||||||
val extension = item.extension
|
val extension = item.extension
|
||||||
|
|
||||||
ext_title.text = extension.name
|
binding.extTitle.text = extension.name
|
||||||
version.text = extension.versionName
|
binding.version.text = extension.versionName
|
||||||
lang.text = LocaleHelper.getSourceDisplayName(extension.lang, itemView.context)
|
binding.lang.text = LocaleHelper.getSourceDisplayName(extension.lang, itemView.context)
|
||||||
warning.text = when {
|
binding.warning.text = when {
|
||||||
extension is Extension.Untrusted -> itemView.context.getString(R.string.ext_untrusted)
|
extension is Extension.Untrusted -> itemView.context.getString(R.string.ext_untrusted)
|
||||||
extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.ext_obsolete)
|
extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.ext_obsolete)
|
||||||
extension is Extension.Installed && extension.isUnofficial -> itemView.context.getString(R.string.ext_unofficial)
|
extension is Extension.Installed && extension.isUnofficial -> itemView.context.getString(R.string.ext_unofficial)
|
||||||
@ -43,19 +40,19 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) :
|
|||||||
else -> ""
|
else -> ""
|
||||||
}.toUpperCase()
|
}.toUpperCase()
|
||||||
|
|
||||||
GlideApp.with(itemView.context).clear(image)
|
GlideApp.with(itemView.context).clear(binding.image)
|
||||||
if (extension is Extension.Available) {
|
if (extension is Extension.Available) {
|
||||||
GlideApp.with(itemView.context)
|
GlideApp.with(itemView.context)
|
||||||
.load(extension.iconUrl)
|
.load(extension.iconUrl)
|
||||||
.into(image)
|
.into(binding.image)
|
||||||
} else {
|
} else {
|
||||||
extension.getApplicationIcon(itemView.context)?.let { image.setImageDrawable(it) }
|
extension.getApplicationIcon(itemView.context)?.let { binding.image.setImageDrawable(it) }
|
||||||
}
|
}
|
||||||
bindButton(item)
|
bindButton(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("ResourceType")
|
@Suppress("ResourceType")
|
||||||
fun bindButton(item: ExtensionItem) = with(ext_button) {
|
fun bindButton(item: ExtensionItem) = with(binding.extButton) {
|
||||||
isEnabled = true
|
isEnabled = true
|
||||||
isClickable = true
|
isClickable = true
|
||||||
|
|
||||||
|
@ -2,18 +2,17 @@ package eu.kanade.tachiyomi.ui.browse.latest
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.GlobalSearchControllerCardItemBinding
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.card
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.cover
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.progress
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.title
|
|
||||||
|
|
||||||
class LatestCardHolder(view: View, adapter: LatestCardAdapter) :
|
class LatestCardHolder(view: View, adapter: LatestCardAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = GlobalSearchControllerCardItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// Call onMangaClickListener when item is pressed.
|
// Call onMangaClickListener when item is pressed.
|
||||||
@ -33,17 +32,17 @@ class LatestCardHolder(view: View, adapter: LatestCardAdapter) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun bind(manga: Manga) {
|
fun bind(manga: Manga) {
|
||||||
card.clipToOutline = true
|
binding.card.clipToOutline = true
|
||||||
|
|
||||||
title.text = manga.title
|
binding.title.text = manga.title
|
||||||
// Set alpha of thumbnail.
|
// Set alpha of thumbnail.
|
||||||
cover.alpha = if (manga.favorite) 0.3f else 1.0f
|
binding.cover.alpha = if (manga.favorite) 0.3f else 1.0f
|
||||||
|
|
||||||
setImage(manga)
|
setImage(manga)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setImage(manga: Manga) {
|
fun setImage(manga: Manga) {
|
||||||
GlideApp.with(itemView.context).clear(cover)
|
GlideApp.with(itemView.context).clear(binding.cover)
|
||||||
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
||||||
GlideApp.with(itemView.context)
|
GlideApp.with(itemView.context)
|
||||||
.load(manga.toMangaThumbnail())
|
.load(manga.toMangaThumbnail())
|
||||||
@ -51,7 +50,7 @@ class LatestCardHolder(view: View, adapter: LatestCardAdapter) :
|
|||||||
.centerCrop()
|
.centerCrop()
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.placeholder(android.R.color.transparent)
|
.placeholder(android.R.color.transparent)
|
||||||
.into(StateImageViewTarget(cover, progress))
|
.into(StateImageViewTarget(binding.cover, binding.progress))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,10 @@ package eu.kanade.tachiyomi.ui.browse.latest
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.LatestControllerCardBinding
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import kotlinx.android.synthetic.main.latest_controller_card.no_results_found
|
|
||||||
import kotlinx.android.synthetic.main.latest_controller_card.progress
|
|
||||||
import kotlinx.android.synthetic.main.latest_controller_card.recycler
|
|
||||||
import kotlinx.android.synthetic.main.latest_controller_card.subtitle
|
|
||||||
import kotlinx.android.synthetic.main.latest_controller_card.title
|
|
||||||
import kotlinx.android.synthetic.main.latest_controller_card.title_wrapper
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holder that binds the [LatestItem] containing catalogue cards.
|
* Holder that binds the [LatestItem] containing catalogue cards.
|
||||||
@ -20,7 +15,9 @@ import kotlinx.android.synthetic.main.latest_controller_card.title_wrapper
|
|||||||
* @param adapter instance of [LatestAdapter]
|
* @param adapter instance of [LatestAdapter]
|
||||||
*/
|
*/
|
||||||
class LatestHolder(view: View, val adapter: LatestAdapter) :
|
class LatestHolder(view: View, val adapter: LatestAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = LatestControllerCardBinding.bind(view)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapter containing manga from search results.
|
* Adapter containing manga from search results.
|
||||||
@ -31,10 +28,10 @@ class LatestHolder(view: View, val adapter: LatestAdapter) :
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
// Set layout horizontal.
|
// Set layout horizontal.
|
||||||
recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false)
|
binding.recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false)
|
||||||
recycler.adapter = mangaAdapter
|
binding.recycler.adapter = mangaAdapter
|
||||||
|
|
||||||
title_wrapper.setOnClickListener {
|
binding.titleWrapper.setOnClickListener {
|
||||||
adapter.getItem(bindingAdapterPosition)?.let {
|
adapter.getItem(bindingAdapterPosition)?.let {
|
||||||
adapter.titleClickListener.onTitleClick(it.source)
|
adapter.titleClickListener.onTitleClick(it.source)
|
||||||
}
|
}
|
||||||
@ -52,21 +49,21 @@ class LatestHolder(view: View, val adapter: LatestAdapter) :
|
|||||||
|
|
||||||
val titlePrefix = if (item.highlighted) "▶ " else ""
|
val titlePrefix = if (item.highlighted) "▶ " else ""
|
||||||
|
|
||||||
title.text = titlePrefix + source.name
|
binding.title.text = titlePrefix + source.name
|
||||||
subtitle.isVisible = true
|
binding.subtitle.isVisible = true
|
||||||
subtitle.text = LocaleHelper.getDisplayName(source.lang)
|
binding.subtitle.text = LocaleHelper.getDisplayName(source.lang)
|
||||||
|
|
||||||
when {
|
when {
|
||||||
results == null -> {
|
results == null -> {
|
||||||
progress.isVisible = true
|
binding.progress.isVisible = true
|
||||||
showResultsHolder()
|
showResultsHolder()
|
||||||
}
|
}
|
||||||
results.isEmpty() -> {
|
results.isEmpty() -> {
|
||||||
progress.isVisible = false
|
binding.progress.isVisible = false
|
||||||
showNoResults()
|
showNoResults()
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
progress.isVisible = false
|
binding.progress.isVisible = false
|
||||||
showResultsHolder()
|
showResultsHolder()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -103,10 +100,10 @@ class LatestHolder(view: View, val adapter: LatestAdapter) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun showResultsHolder() {
|
private fun showResultsHolder() {
|
||||||
no_results_found.isVisible = false
|
binding.noResultsFound.isVisible = false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showNoResults() {
|
private fun showNoResults() {
|
||||||
no_results_found.isVisible = true
|
binding.noResultsFound.isVisible = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,15 +2,15 @@ package eu.kanade.tachiyomi.ui.browse.migration.advanced.design
|
|||||||
|
|
||||||
import android.graphics.Paint.STRIKE_THRU_TEXT_FLAG
|
import android.graphics.Paint.STRIKE_THRU_TEXT_FLAG
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.databinding.MigrationSourceItemBinding
|
import eu.kanade.tachiyomi.databinding.MigrationSourceItemBinding
|
||||||
import eu.kanade.tachiyomi.source.icon
|
import eu.kanade.tachiyomi.source.icon
|
||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
class MigrationSourceHolder(view: View, val adapter: MigrationSourceAdapter) :
|
class MigrationSourceHolder(view: View, val adapter: MigrationSourceAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
val binding = MigrationSourceItemBinding.bind(view)
|
val binding = MigrationSourceItemBinding.bind(view)
|
||||||
init {
|
init {
|
||||||
setDragHandleView(binding.reorder)
|
setDragHandleView(binding.reorder)
|
||||||
|
@ -5,6 +5,7 @@ import android.widget.PopupMenu
|
|||||||
import androidx.core.view.isInvisible
|
import androidx.core.view.isInvisible
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
@ -15,7 +16,6 @@ import eu.kanade.tachiyomi.databinding.MigrationProcessItemBinding
|
|||||||
import eu.kanade.tachiyomi.source.Source
|
import eu.kanade.tachiyomi.source.Source
|
||||||
import eu.kanade.tachiyomi.source.SourceManager
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
import eu.kanade.tachiyomi.util.lang.await
|
import eu.kanade.tachiyomi.util.lang.await
|
||||||
import eu.kanade.tachiyomi.util.lang.launchUI
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
||||||
@ -36,7 +36,7 @@ import java.text.DecimalFormat
|
|||||||
class MigrationProcessHolder(
|
class MigrationProcessHolder(
|
||||||
private val view: View,
|
private val view: View,
|
||||||
private val adapter: MigrationProcessAdapter
|
private val adapter: MigrationProcessAdapter
|
||||||
) : BaseFlexibleViewHolder(view, adapter) {
|
) : FlexibleViewHolder(view, adapter) {
|
||||||
private val db: DatabaseHelper by injectLazy()
|
private val db: DatabaseHelper by injectLazy()
|
||||||
private val sourceManager: SourceManager by injectLazy()
|
private val sourceManager: SourceManager by injectLazy()
|
||||||
|
|
||||||
|
@ -6,18 +6,18 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
|||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
import eu.kanade.tachiyomi.databinding.SourceListItemBinding
|
import eu.kanade.tachiyomi.databinding.SourceListItemBinding
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
|
|
||||||
class MangaHolder(
|
class MangaHolder(
|
||||||
view: View,
|
view: View,
|
||||||
adapter: FlexibleAdapter<*>
|
adapter: FlexibleAdapter<*>
|
||||||
) : BaseFlexibleViewHolder(view, adapter) {
|
) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
val binding = SourceListItemBinding.bind(view)
|
private val binding = SourceListItemBinding.bind(view)
|
||||||
|
|
||||||
fun bind(item: MangaItem) {
|
fun bind(item: MangaItem) {
|
||||||
// Update the title of the manga.
|
// Update the title of the manga.
|
||||||
|
@ -5,9 +5,9 @@ import androidx.recyclerview.widget.RecyclerView
|
|||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.davidea.flexibleadapter.items.AbstractHeaderItem
|
import eu.davidea.flexibleadapter.items.AbstractHeaderItem
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.databinding.SourceMainControllerCardHeaderBinding
|
import eu.kanade.tachiyomi.databinding.SourceMainControllerCardHeaderBinding
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item that contains the selection header.
|
* Item that contains the selection header.
|
||||||
@ -45,8 +45,9 @@ class SelectionHeader : AbstractHeaderItem<SelectionHeader.Holder>() {
|
|||||||
// Intentionally empty
|
// Intentionally empty
|
||||||
}
|
}
|
||||||
|
|
||||||
class Holder(view: View, adapter: FlexibleAdapter</* SY --> */ IFlexible<RecyclerView.ViewHolder> /* SY <-- */>) : BaseFlexibleViewHolder(view, adapter) {
|
class Holder(view: View, adapter: FlexibleAdapter</* SY --> */ IFlexible<RecyclerView.ViewHolder> /* SY <-- */>) : FlexibleViewHolder(view, adapter) {
|
||||||
val binding = SourceMainControllerCardHeaderBinding.bind(view)
|
private val binding = SourceMainControllerCardHeaderBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
binding.title.text = view.context.getString(/* SY --> */ R.string.select_a_source_to_migrate_from /* SY <-- */)
|
binding.title.text = view.context.getString(/* SY --> */ R.string.select_a_source_to_migrate_from /* SY <-- */)
|
||||||
}
|
}
|
||||||
|
@ -2,15 +2,15 @@ package eu.kanade.tachiyomi.ui.browse.migration.sources
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.databinding.SourceMainControllerCardItemBinding
|
import eu.kanade.tachiyomi.databinding.SourceMainControllerCardItemBinding
|
||||||
import eu.kanade.tachiyomi.source.icon
|
import eu.kanade.tachiyomi.source.icon
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
|
|
||||||
class SourceHolder(view: View, val adapter: SourceAdapter) :
|
class SourceHolder(view: View, val adapter: SourceAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
val binding = SourceMainControllerCardItemBinding.bind(view)
|
private val binding = SourceMainControllerCardItemBinding.bind(view)
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
init {
|
init {
|
||||||
|
@ -2,14 +2,16 @@ package eu.kanade.tachiyomi.ui.browse.source
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceMainControllerCardHeaderBinding
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_header.title
|
|
||||||
|
|
||||||
class LangHolder(view: View, adapter: FlexibleAdapter<*>) :
|
class LangHolder(view: View, adapter: FlexibleAdapter<*>) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceMainControllerCardHeaderBinding.bind(view)
|
||||||
|
|
||||||
fun bind(item: LangItem) {
|
fun bind(item: LangItem) {
|
||||||
title.text = LocaleHelper.getSourceDisplayName(item.code, itemView.context)
|
binding.title.text = LocaleHelper.getSourceDisplayName(item.code, itemView.context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,34 +2,32 @@ package eu.kanade.tachiyomi.ui.browse.source
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceMainControllerCardItemBinding
|
||||||
import eu.kanade.tachiyomi.source.LocalSource
|
import eu.kanade.tachiyomi.source.LocalSource
|
||||||
import eu.kanade.tachiyomi.source.icon
|
import eu.kanade.tachiyomi.source.icon
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.image
|
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.pin
|
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.source_latest
|
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.subtitle
|
|
||||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.title
|
|
||||||
|
|
||||||
class SourceHolder(private val view: View, val adapter: SourceAdapter /* SY --> */, private val showLatest: Boolean, private val showPins: Boolean /* SY <-- */) :
|
class SourceHolder(private val view: View, val adapter: SourceAdapter /* SY --> */, private val showLatest: Boolean, private val showPins: Boolean /* SY <-- */) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceMainControllerCardItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
source_latest.setOnClickListener {
|
binding.sourceLatest.setOnClickListener {
|
||||||
adapter.clickListener.onLatestClick(bindingAdapterPosition)
|
adapter.clickListener.onLatestClick(bindingAdapterPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
pin.setOnClickListener {
|
binding.pin.setOnClickListener {
|
||||||
adapter.clickListener.onPinClick(bindingAdapterPosition)
|
adapter.clickListener.onPinClick(bindingAdapterPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
if (!showLatest) {
|
if (!showLatest) {
|
||||||
source_latest.isVisible = false
|
binding.sourceLatest.isVisible = false
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
}
|
}
|
||||||
@ -37,26 +35,26 @@ class SourceHolder(private val view: View, val adapter: SourceAdapter /* SY -->
|
|||||||
fun bind(item: SourceItem) {
|
fun bind(item: SourceItem) {
|
||||||
val source = item.source
|
val source = item.source
|
||||||
|
|
||||||
title.text = source.name
|
binding.title.text = source.name
|
||||||
subtitle.isVisible = source !is LocalSource
|
binding.subtitle.isVisible = source !is LocalSource
|
||||||
subtitle.text = LocaleHelper.getDisplayName(source.lang)
|
binding.subtitle.text = LocaleHelper.getDisplayName(source.lang)
|
||||||
|
|
||||||
// Set source icon
|
// Set source icon
|
||||||
itemView.post {
|
itemView.post {
|
||||||
val icon = source.icon()
|
val icon = source.icon()
|
||||||
when {
|
when {
|
||||||
icon != null -> image.setImageDrawable(icon)
|
icon != null -> binding.image.setImageDrawable(icon)
|
||||||
item.source.id == LocalSource.ID -> image.setImageResource(R.mipmap.ic_local_source)
|
item.source.id == LocalSource.ID -> binding.image.setImageResource(R.mipmap.ic_local_source)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
source_latest.isVisible = source.supportsLatest/* SY --> */ && showLatest /* SY <-- */
|
binding.sourceLatest.isVisible = source.supportsLatest/* SY --> */ && showLatest /* SY <-- */
|
||||||
|
|
||||||
pin.isVisible = showPins
|
binding.pin.isVisible = showPins
|
||||||
if (item.isPinned) {
|
if (item.isPinned) {
|
||||||
pin.setVectorCompat(R.drawable.ic_push_pin_filled_24dp, view.context.getResourceColor(R.attr.colorAccent))
|
binding.pin.setVectorCompat(R.drawable.ic_push_pin_filled_24dp, view.context.getResourceColor(R.attr.colorAccent))
|
||||||
} else {
|
} else {
|
||||||
pin.setVectorCompat(R.drawable.ic_push_pin_24dp, view.context.getResourceColor(android.R.attr.textColorHint))
|
binding.pin.setVectorCompat(R.drawable.ic_push_pin_24dp, view.context.getResourceColor(android.R.attr.textColorHint))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,10 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import exh.metadata.metadata.MangaDexSearchMetadata
|
import exh.metadata.metadata.MangaDexSearchMetadata
|
||||||
import exh.metadata.metadata.base.RaisedSearchMetadata
|
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.card
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.local_text
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.progress
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.thumbnail
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.title
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
|
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
|
||||||
@ -28,6 +24,8 @@ import kotlinx.android.synthetic.main.source_comfortable_grid_item.title
|
|||||||
class SourceComfortableGridHolder(private val view: View, private val adapter: FlexibleAdapter<*> /* SY --> */, private val hasTitle: Boolean /* SY <-- */) :
|
class SourceComfortableGridHolder(private val view: View, private val adapter: FlexibleAdapter<*> /* SY --> */, private val hasTitle: Boolean /* SY <-- */) :
|
||||||
SourceGridHolder(view, adapter) {
|
SourceGridHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceComfortableGridItemBinding.bind(view)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this
|
* Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this
|
||||||
* holder with the given manga.
|
* holder with the given manga.
|
||||||
@ -36,13 +34,13 @@ class SourceComfortableGridHolder(private val view: View, private val adapter: F
|
|||||||
*/
|
*/
|
||||||
override fun onSetValues(manga: Manga) {
|
override fun onSetValues(manga: Manga) {
|
||||||
// Set manga title
|
// Set manga title
|
||||||
title.text = manga.title
|
binding.title.text = manga.title
|
||||||
// SY -->
|
// SY -->
|
||||||
title.isVisible = hasTitle
|
binding.title.isVisible = hasTitle
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
// Set alpha of thumbnail.
|
// Set alpha of thumbnail.
|
||||||
thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
|
binding.thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
|
||||||
|
|
||||||
setImage(manga)
|
setImage(manga)
|
||||||
}
|
}
|
||||||
@ -51,8 +49,8 @@ class SourceComfortableGridHolder(private val view: View, private val adapter: F
|
|||||||
override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) {
|
override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) {
|
||||||
if (metadata is MangaDexSearchMetadata) {
|
if (metadata is MangaDexSearchMetadata) {
|
||||||
metadata.follow_status?.let {
|
metadata.follow_status?.let {
|
||||||
local_text.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it]
|
binding.localText.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it]
|
||||||
local_text.isVisible = true
|
binding.localText.isVisible = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -60,16 +58,16 @@ class SourceComfortableGridHolder(private val view: View, private val adapter: F
|
|||||||
|
|
||||||
override fun setImage(manga: Manga) {
|
override fun setImage(manga: Manga) {
|
||||||
// For rounded corners
|
// For rounded corners
|
||||||
card.clipToOutline = true
|
binding.card.clipToOutline = true
|
||||||
|
|
||||||
GlideApp.with(view.context).clear(thumbnail)
|
GlideApp.with(view.context).clear(binding.thumbnail)
|
||||||
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
||||||
GlideApp.with(view.context)
|
GlideApp.with(view.context)
|
||||||
.load(manga.toMangaThumbnail())
|
.load(manga.toMangaThumbnail())
|
||||||
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.placeholder(android.R.color.transparent)
|
.placeholder(android.R.color.transparent)
|
||||||
.into(StateImageViewTarget(thumbnail, progress))
|
.into(StateImageViewTarget(binding.thumbnail, binding.progress))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,18 +11,12 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceEnhancedEhentaiListItemBinding
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import exh.metadata.MetadataUtil
|
import exh.metadata.MetadataUtil
|
||||||
import exh.metadata.metadata.EHentaiSearchMetadata
|
import exh.metadata.metadata.EHentaiSearchMetadata
|
||||||
import exh.metadata.metadata.base.RaisedSearchMetadata
|
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||||
import exh.util.SourceTagsUtil
|
import exh.util.SourceTagsUtil
|
||||||
import kotlinx.android.synthetic.main.source_enhanced_ehentai_list_item.date_posted
|
|
||||||
import kotlinx.android.synthetic.main.source_enhanced_ehentai_list_item.genre
|
|
||||||
import kotlinx.android.synthetic.main.source_enhanced_ehentai_list_item.language
|
|
||||||
import kotlinx.android.synthetic.main.source_enhanced_ehentai_list_item.rating_bar
|
|
||||||
import kotlinx.android.synthetic.main.source_enhanced_ehentai_list_item.thumbnail
|
|
||||||
import kotlinx.android.synthetic.main.source_enhanced_ehentai_list_item.title
|
|
||||||
import kotlinx.android.synthetic.main.source_enhanced_ehentai_list_item.uploader
|
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,6 +30,8 @@ import java.util.Date
|
|||||||
class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
|
class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
|
||||||
SourceHolder(view, adapter) {
|
SourceHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceEnhancedEhentaiListItemBinding.bind(view)
|
||||||
|
|
||||||
private val favoriteColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f)
|
private val favoriteColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f)
|
||||||
private val unfavoriteColor = view.context.getResourceColor(R.attr.colorOnSurface)
|
private val unfavoriteColor = view.context.getResourceColor(R.attr.colorOnSurface)
|
||||||
|
|
||||||
@ -46,11 +42,11 @@ class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleA
|
|||||||
* @param manga the manga to bind.
|
* @param manga the manga to bind.
|
||||||
*/
|
*/
|
||||||
override fun onSetValues(manga: Manga) {
|
override fun onSetValues(manga: Manga) {
|
||||||
title.text = manga.title
|
binding.title.text = manga.title
|
||||||
title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor)
|
binding.title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor)
|
||||||
|
|
||||||
// Set alpha of thumbnail.
|
// Set alpha of thumbnail.
|
||||||
thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
|
binding.thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
|
||||||
|
|
||||||
setImage(manga)
|
setImage(manga)
|
||||||
}
|
}
|
||||||
@ -59,7 +55,7 @@ class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleA
|
|||||||
if (metadata !is EHentaiSearchMetadata) return
|
if (metadata !is EHentaiSearchMetadata) return
|
||||||
|
|
||||||
if (metadata.uploader != null) {
|
if (metadata.uploader != null) {
|
||||||
uploader.text = metadata.uploader
|
binding.uploader.text = metadata.uploader
|
||||||
}
|
}
|
||||||
|
|
||||||
val pair = when (metadata.genre) {
|
val pair = when (metadata.genre) {
|
||||||
@ -77,18 +73,18 @@ class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleA
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pair.first.isNotBlank()) {
|
if (pair.first.isNotBlank()) {
|
||||||
genre.setBackgroundColor(Color.parseColor(pair.first))
|
binding.genre.setBackgroundColor(Color.parseColor(pair.first))
|
||||||
genre.text = view.context.getString(pair.second)
|
binding.genre.text = view.context.getString(pair.second)
|
||||||
} else genre.text = metadata.genre
|
} else binding.genre.text = metadata.genre
|
||||||
|
|
||||||
metadata.datePosted?.let { date_posted.text = MetadataUtil.EX_DATE_FORMAT.format(Date(it)) }
|
metadata.datePosted?.let { binding.datePosted.text = MetadataUtil.EX_DATE_FORMAT.format(Date(it)) }
|
||||||
|
|
||||||
metadata.averageRating?.let { rating_bar.rating = it.toFloat() }
|
metadata.averageRating?.let { binding.ratingBar.rating = it.toFloat() }
|
||||||
|
|
||||||
val locale = SourceTagsUtil.getLocaleSourceUtil(metadata.tags.firstOrNull { it.namespace == "language" }?.name)
|
val locale = SourceTagsUtil.getLocaleSourceUtil(metadata.tags.firstOrNull { it.namespace == "language" }?.name)
|
||||||
val pageCount = metadata.length
|
val pageCount = metadata.length
|
||||||
|
|
||||||
language.text = if (locale != null && pageCount != null) {
|
binding.language.text = if (locale != null && pageCount != null) {
|
||||||
view.resources.getQuantityString(R.plurals.browse_language_and_pages, pageCount, pageCount, locale.toLanguageTag().toUpperCase())
|
view.resources.getQuantityString(R.plurals.browse_language_and_pages, pageCount, pageCount, locale.toLanguageTag().toUpperCase())
|
||||||
} else if (pageCount != null) {
|
} else if (pageCount != null) {
|
||||||
view.resources.getQuantityString(R.plurals.num_pages, pageCount, pageCount)
|
view.resources.getQuantityString(R.plurals.num_pages, pageCount, pageCount)
|
||||||
@ -96,7 +92,7 @@ class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleA
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun setImage(manga: Manga) {
|
override fun setImage(manga: Manga) {
|
||||||
GlideApp.with(view.context).clear(thumbnail)
|
GlideApp.with(view.context).clear(binding.thumbnail)
|
||||||
|
|
||||||
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
||||||
val radius = view.context.resources.getDimensionPixelSize(R.dimen.card_radius)
|
val radius = view.context.resources.getDimensionPixelSize(R.dimen.card_radius)
|
||||||
@ -107,7 +103,7 @@ class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleA
|
|||||||
.apply(requestOptions)
|
.apply(requestOptions)
|
||||||
.dontAnimate()
|
.dontAnimate()
|
||||||
.placeholder(android.R.color.transparent)
|
.placeholder(android.R.color.transparent)
|
||||||
.into(thumbnail)
|
.into(binding.thumbnail)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,10 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import exh.metadata.metadata.MangaDexSearchMetadata
|
import exh.metadata.metadata.MangaDexSearchMetadata
|
||||||
import exh.metadata.metadata.base.RaisedSearchMetadata
|
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.card
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.local_text
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.progress
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.thumbnail
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.title
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
|
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
|
||||||
@ -28,6 +24,8 @@ import kotlinx.android.synthetic.main.source_compact_grid_item.title
|
|||||||
open class SourceGridHolder(private val view: View, private val adapter: FlexibleAdapter<*>) :
|
open class SourceGridHolder(private val view: View, private val adapter: FlexibleAdapter<*>) :
|
||||||
SourceHolder(view, adapter) {
|
SourceHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceComfortableGridItemBinding.bind(view)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this
|
* Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this
|
||||||
* holder with the given manga.
|
* holder with the given manga.
|
||||||
@ -36,10 +34,10 @@ open class SourceGridHolder(private val view: View, private val adapter: Flexibl
|
|||||||
*/
|
*/
|
||||||
override fun onSetValues(manga: Manga) {
|
override fun onSetValues(manga: Manga) {
|
||||||
// Set manga title
|
// Set manga title
|
||||||
title.text = manga.title
|
binding.title.text = manga.title
|
||||||
|
|
||||||
// Set alpha of thumbnail.
|
// Set alpha of thumbnail.
|
||||||
thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
|
binding.thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
|
||||||
|
|
||||||
setImage(manga)
|
setImage(manga)
|
||||||
}
|
}
|
||||||
@ -48,8 +46,8 @@ open class SourceGridHolder(private val view: View, private val adapter: Flexibl
|
|||||||
override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) {
|
override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) {
|
||||||
if (metadata is MangaDexSearchMetadata) {
|
if (metadata is MangaDexSearchMetadata) {
|
||||||
metadata.follow_status?.let {
|
metadata.follow_status?.let {
|
||||||
local_text.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it]
|
binding.localText.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it]
|
||||||
local_text.isVisible = true
|
binding.localText.isVisible = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -57,16 +55,16 @@ open class SourceGridHolder(private val view: View, private val adapter: Flexibl
|
|||||||
|
|
||||||
override fun setImage(manga: Manga) {
|
override fun setImage(manga: Manga) {
|
||||||
// For rounded corners
|
// For rounded corners
|
||||||
card.clipToOutline = true
|
binding.card.clipToOutline = true
|
||||||
|
|
||||||
GlideApp.with(view.context).clear(thumbnail)
|
GlideApp.with(view.context).clear(binding.thumbnail)
|
||||||
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
||||||
GlideApp.with(view.context)
|
GlideApp.with(view.context)
|
||||||
.load(manga.toMangaThumbnail())
|
.load(manga.toMangaThumbnail())
|
||||||
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.placeholder(android.R.color.transparent)
|
.placeholder(android.R.color.transparent)
|
||||||
.into(StateImageViewTarget(thumbnail, progress))
|
.into(StateImageViewTarget(binding.thumbnail, binding.progress))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.browse.source.browse
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
import exh.metadata.metadata.base.RaisedSearchMetadata
|
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -13,7 +13,7 @@ import exh.metadata.metadata.base.RaisedSearchMetadata
|
|||||||
* @param adapter the adapter handling this holder.
|
* @param adapter the adapter handling this holder.
|
||||||
*/
|
*/
|
||||||
abstract class SourceHolder(view: View, adapter: FlexibleAdapter<*>) :
|
abstract class SourceHolder(view: View, adapter: FlexibleAdapter<*>) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this
|
* Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this
|
||||||
|
@ -11,12 +11,10 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceListItemBinding
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import exh.metadata.metadata.MangaDexSearchMetadata
|
import exh.metadata.metadata.MangaDexSearchMetadata
|
||||||
import exh.metadata.metadata.base.RaisedSearchMetadata
|
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||||
import kotlinx.android.synthetic.main.source_list_item.local_text
|
|
||||||
import kotlinx.android.synthetic.main.source_list_item.thumbnail
|
|
||||||
import kotlinx.android.synthetic.main.source_list_item.title
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
|
* Class used to hold the displayed data of a manga in the catalogue, like the cover or the title.
|
||||||
@ -29,6 +27,8 @@ import kotlinx.android.synthetic.main.source_list_item.title
|
|||||||
class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
|
class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
|
||||||
SourceHolder(view, adapter) {
|
SourceHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceListItemBinding.bind(view)
|
||||||
|
|
||||||
private val favoriteColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f)
|
private val favoriteColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f)
|
||||||
private val unfavoriteColor = view.context.getResourceColor(R.attr.colorOnSurface)
|
private val unfavoriteColor = view.context.getResourceColor(R.attr.colorOnSurface)
|
||||||
|
|
||||||
@ -39,11 +39,11 @@ class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
|
|||||||
* @param manga the manga to bind.
|
* @param manga the manga to bind.
|
||||||
*/
|
*/
|
||||||
override fun onSetValues(manga: Manga) {
|
override fun onSetValues(manga: Manga) {
|
||||||
title.text = manga.title
|
binding.title.text = manga.title
|
||||||
title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor)
|
binding.title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor)
|
||||||
|
|
||||||
// Set alpha of thumbnail.
|
// Set alpha of thumbnail.
|
||||||
thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
|
binding.thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
|
||||||
|
|
||||||
setImage(manga)
|
setImage(manga)
|
||||||
}
|
}
|
||||||
@ -52,15 +52,15 @@ class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
|
|||||||
override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) {
|
override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) {
|
||||||
if (metadata is MangaDexSearchMetadata) {
|
if (metadata is MangaDexSearchMetadata) {
|
||||||
metadata.follow_status?.let {
|
metadata.follow_status?.let {
|
||||||
local_text.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it]
|
binding.localText.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it]
|
||||||
local_text.isVisible = true
|
binding.localText.isVisible = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
override fun setImage(manga: Manga) {
|
override fun setImage(manga: Manga) {
|
||||||
GlideApp.with(view.context).clear(thumbnail)
|
GlideApp.with(view.context).clear(binding.thumbnail)
|
||||||
|
|
||||||
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
||||||
val radius = view.context.resources.getDimensionPixelSize(R.dimen.card_radius)
|
val radius = view.context.resources.getDimensionPixelSize(R.dimen.card_radius)
|
||||||
@ -71,7 +71,7 @@ class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
|
|||||||
.apply(requestOptions)
|
.apply(requestOptions)
|
||||||
.dontAnimate()
|
.dontAnimate()
|
||||||
.placeholder(android.R.color.transparent)
|
.placeholder(android.R.color.transparent)
|
||||||
.into(thumbnail)
|
.into(binding.thumbnail)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,18 +2,17 @@ package eu.kanade.tachiyomi.ui.browse.source.globalsearch
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.GlobalSearchControllerCardItemBinding
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.card
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.cover
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.progress
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.title
|
|
||||||
|
|
||||||
class GlobalSearchCardHolder(view: View, adapter: GlobalSearchCardAdapter) :
|
class GlobalSearchCardHolder(view: View, adapter: GlobalSearchCardAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = GlobalSearchControllerCardItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// Call onMangaClickListener when item is pressed.
|
// Call onMangaClickListener when item is pressed.
|
||||||
@ -33,17 +32,17 @@ class GlobalSearchCardHolder(view: View, adapter: GlobalSearchCardAdapter) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun bind(manga: Manga) {
|
fun bind(manga: Manga) {
|
||||||
card.clipToOutline = true
|
binding.card.clipToOutline = true
|
||||||
|
|
||||||
title.text = manga.title
|
binding.title.text = manga.title
|
||||||
// Set alpha of thumbnail.
|
// Set alpha of thumbnail.
|
||||||
cover.alpha = if (manga.favorite) 0.3f else 1.0f
|
binding.cover.alpha = if (manga.favorite) 0.3f else 1.0f
|
||||||
|
|
||||||
setImage(manga)
|
setImage(manga)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setImage(manga: Manga) {
|
fun setImage(manga: Manga) {
|
||||||
GlideApp.with(itemView.context).clear(cover)
|
GlideApp.with(itemView.context).clear(binding.cover)
|
||||||
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
||||||
GlideApp.with(itemView.context)
|
GlideApp.with(itemView.context)
|
||||||
.load(manga.toMangaThumbnail())
|
.load(manga.toMangaThumbnail())
|
||||||
@ -51,7 +50,7 @@ class GlobalSearchCardHolder(view: View, adapter: GlobalSearchCardAdapter) :
|
|||||||
.centerCrop()
|
.centerCrop()
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.placeholder(android.R.color.transparent)
|
.placeholder(android.R.color.transparent)
|
||||||
.into(StateImageViewTarget(cover, progress))
|
.into(StateImageViewTarget(binding.cover, binding.progress))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,16 +3,11 @@ package eu.kanade.tachiyomi.ui.browse.source.globalsearch
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
|
import eu.kanade.tachiyomi.databinding.GlobalSearchControllerCardBinding
|
||||||
import eu.kanade.tachiyomi.source.LocalSource
|
import eu.kanade.tachiyomi.source.LocalSource
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card.no_results_found
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card.progress
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card.recycler
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card.subtitle
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card.title
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card.title_wrapper
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holder that binds the [GlobalSearchItem] containing catalogue cards.
|
* Holder that binds the [GlobalSearchItem] containing catalogue cards.
|
||||||
@ -21,7 +16,9 @@ import kotlinx.android.synthetic.main.global_search_controller_card.title_wrappe
|
|||||||
* @param adapter instance of [GlobalSearchAdapter]
|
* @param adapter instance of [GlobalSearchAdapter]
|
||||||
*/
|
*/
|
||||||
class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) :
|
class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = GlobalSearchControllerCardBinding.bind(view)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapter containing manga from search results.
|
* Adapter containing manga from search results.
|
||||||
@ -32,10 +29,10 @@ class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) :
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
// Set layout horizontal.
|
// Set layout horizontal.
|
||||||
recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false)
|
binding.recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false)
|
||||||
recycler.adapter = mangaAdapter
|
binding.recycler.adapter = mangaAdapter
|
||||||
|
|
||||||
title_wrapper.setOnClickListener {
|
binding.titleWrapper.setOnClickListener {
|
||||||
adapter.getItem(bindingAdapterPosition)?.let {
|
adapter.getItem(bindingAdapterPosition)?.let {
|
||||||
adapter.titleClickListener.onTitleClick(it.source)
|
adapter.titleClickListener.onTitleClick(it.source)
|
||||||
}
|
}
|
||||||
@ -53,21 +50,21 @@ class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) :
|
|||||||
|
|
||||||
val titlePrefix = if (item.highlighted) "▶ " else ""
|
val titlePrefix = if (item.highlighted) "▶ " else ""
|
||||||
|
|
||||||
title.text = titlePrefix + source.name
|
binding.title.text = titlePrefix + source.name
|
||||||
subtitle.isVisible = source !is LocalSource
|
binding.subtitle.isVisible = source !is LocalSource
|
||||||
subtitle.text = LocaleHelper.getDisplayName(source.lang)
|
binding.subtitle.text = LocaleHelper.getDisplayName(source.lang)
|
||||||
|
|
||||||
when {
|
when {
|
||||||
results == null -> {
|
results == null -> {
|
||||||
progress.isVisible = true
|
binding.progress.isVisible = true
|
||||||
showResultsHolder()
|
showResultsHolder()
|
||||||
}
|
}
|
||||||
results.isEmpty() -> {
|
results.isEmpty() -> {
|
||||||
progress.isVisible = false
|
binding.progress.isVisible = false
|
||||||
showNoResults()
|
showNoResults()
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
progress.isVisible = false
|
binding.progress.isVisible = false
|
||||||
showResultsHolder()
|
showResultsHolder()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,10 +101,10 @@ class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun showResultsHolder() {
|
private fun showResultsHolder() {
|
||||||
no_results_found.isVisible = false
|
binding.noResultsFound.isVisible = false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showNoResults() {
|
private fun showNoResults() {
|
||||||
no_results_found.isVisible = true
|
binding.noResultsFound.isVisible = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,18 +2,17 @@ package eu.kanade.tachiyomi.ui.browse.source.index
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.GlobalSearchControllerCardItemBinding
|
||||||
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
import eu.kanade.tachiyomi.widget.StateImageViewTarget
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.card
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.cover
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.progress
|
|
||||||
import kotlinx.android.synthetic.main.global_search_controller_card_item.title
|
|
||||||
|
|
||||||
class IndexCardHolder(view: View, adapter: IndexCardAdapter) :
|
class IndexCardHolder(view: View, adapter: IndexCardAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = GlobalSearchControllerCardItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// Call onMangaClickListener when item is pressed.
|
// Call onMangaClickListener when item is pressed.
|
||||||
@ -33,17 +32,17 @@ class IndexCardHolder(view: View, adapter: IndexCardAdapter) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun bind(manga: Manga) {
|
fun bind(manga: Manga) {
|
||||||
card.clipToOutline = true
|
binding.card.clipToOutline = true
|
||||||
|
|
||||||
title.text = manga.title
|
binding.title.text = manga.title
|
||||||
// Set alpha of thumbnail.
|
// Set alpha of thumbnail.
|
||||||
cover.alpha = if (manga.favorite) 0.3f else 1.0f
|
binding.cover.alpha = if (manga.favorite) 0.3f else 1.0f
|
||||||
|
|
||||||
setImage(manga)
|
setImage(manga)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setImage(manga: Manga) {
|
fun setImage(manga: Manga) {
|
||||||
GlideApp.with(itemView.context).clear(cover)
|
GlideApp.with(itemView.context).clear(binding.cover)
|
||||||
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
if (!manga.thumbnail_url.isNullOrEmpty()) {
|
||||||
GlideApp.with(itemView.context)
|
GlideApp.with(itemView.context)
|
||||||
.load(manga.toMangaThumbnail())
|
.load(manga.toMangaThumbnail())
|
||||||
@ -51,7 +50,7 @@ class IndexCardHolder(view: View, adapter: IndexCardAdapter) :
|
|||||||
.centerCrop()
|
.centerCrop()
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.placeholder(android.R.color.transparent)
|
.placeholder(android.R.color.transparent)
|
||||||
.into(StateImageViewTarget(cover, progress))
|
.into(StateImageViewTarget(binding.cover, binding.progress))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package eu.kanade.tachiyomi.ui.category
|
package eu.kanade.tachiyomi.ui.category
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.data.database.models.Category
|
import eu.kanade.tachiyomi.data.database.models.Category
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.CategoriesItemBinding
|
||||||
import kotlinx.android.synthetic.main.categories_item.reorder
|
|
||||||
import kotlinx.android.synthetic.main.categories_item.title
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holder used to display category items.
|
* Holder used to display category items.
|
||||||
@ -12,10 +11,12 @@ import kotlinx.android.synthetic.main.categories_item.title
|
|||||||
* @param view The view used by category items.
|
* @param view The view used by category items.
|
||||||
* @param adapter The adapter containing this holder.
|
* @param adapter The adapter containing this holder.
|
||||||
*/
|
*/
|
||||||
class CategoryHolder(view: View, val adapter: CategoryAdapter) : BaseFlexibleViewHolder(view, adapter) {
|
class CategoryHolder(view: View, val adapter: CategoryAdapter) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = CategoriesItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setDragHandleView(reorder)
|
setDragHandleView(binding.reorder)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,7 +25,7 @@ class CategoryHolder(view: View, val adapter: CategoryAdapter) : BaseFlexibleVie
|
|||||||
* @param category The category to bind.
|
* @param category The category to bind.
|
||||||
*/
|
*/
|
||||||
fun bind(category: Category) {
|
fun bind(category: Category) {
|
||||||
title.text = category.name
|
binding.title.text = category.name
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,9 +2,8 @@ package eu.kanade.tachiyomi.ui.category.biometric
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import kotlinx.android.synthetic.main.categories_item.reorder
|
import eu.kanade.tachiyomi.databinding.CategoriesItemBinding
|
||||||
import kotlinx.android.synthetic.main.categories_item.title
|
|
||||||
import kotlin.time.ExperimentalTime
|
import kotlin.time.ExperimentalTime
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -13,7 +12,10 @@ import kotlin.time.ExperimentalTime
|
|||||||
* @param view The view used by category items.
|
* @param view The view used by category items.
|
||||||
* @param adapter The adapter containing this holder.
|
* @param adapter The adapter containing this holder.
|
||||||
*/
|
*/
|
||||||
class BiometricTimesHolder(view: View, val adapter: BiometricTimesAdapter) : BaseFlexibleViewHolder(view, adapter) {
|
class BiometricTimesHolder(view: View, val adapter: BiometricTimesAdapter) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = CategoriesItemBinding.bind(view)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binds this holder with the given category.
|
* Binds this holder with the given category.
|
||||||
*
|
*
|
||||||
@ -22,7 +24,7 @@ class BiometricTimesHolder(view: View, val adapter: BiometricTimesAdapter) : Bas
|
|||||||
@OptIn(ExperimentalTime::class)
|
@OptIn(ExperimentalTime::class)
|
||||||
fun bind(timeRange: TimeRange) {
|
fun bind(timeRange: TimeRange) {
|
||||||
// Set capitalized title.
|
// Set capitalized title.
|
||||||
title.text = timeRange.getFormattedString(itemView.context)
|
binding.title.text = timeRange.getFormattedString(itemView.context)
|
||||||
reorder.isVisible = false
|
binding.reorder.isVisible = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
package eu.kanade.tachiyomi.ui.category.genre
|
package eu.kanade.tachiyomi.ui.category.genre
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import kotlinx.android.synthetic.main.categories_item.reorder
|
import eu.kanade.tachiyomi.databinding.CategoriesItemBinding
|
||||||
import kotlinx.android.synthetic.main.categories_item.title
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holder used to display category items.
|
* Holder used to display category items.
|
||||||
@ -11,10 +10,12 @@ import kotlinx.android.synthetic.main.categories_item.title
|
|||||||
* @param view The view used by category items.
|
* @param view The view used by category items.
|
||||||
* @param adapter The adapter containing this holder.
|
* @param adapter The adapter containing this holder.
|
||||||
*/
|
*/
|
||||||
class SortTagHolder(view: View, val adapter: SortTagAdapter) : BaseFlexibleViewHolder(view, adapter) {
|
class SortTagHolder(view: View, val adapter: SortTagAdapter) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = CategoriesItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setDragHandleView(reorder)
|
setDragHandleView(binding.reorder)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -23,7 +24,7 @@ class SortTagHolder(view: View, val adapter: SortTagAdapter) : BaseFlexibleViewH
|
|||||||
* @param tag The tag to bind.
|
* @param tag The tag to bind.
|
||||||
*/
|
*/
|
||||||
fun bind(tag: String) {
|
fun bind(tag: String) {
|
||||||
title.text = tag
|
binding.title.text = tag
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,9 +2,8 @@ package eu.kanade.tachiyomi.ui.category.sources
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import kotlinx.android.synthetic.main.categories_item.reorder
|
import eu.kanade.tachiyomi.databinding.CategoriesItemBinding
|
||||||
import kotlinx.android.synthetic.main.categories_item.title
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holder used to display category items.
|
* Holder used to display category items.
|
||||||
@ -12,7 +11,10 @@ import kotlinx.android.synthetic.main.categories_item.title
|
|||||||
* @param view The view used by category items.
|
* @param view The view used by category items.
|
||||||
* @param adapter The adapter containing this holder.
|
* @param adapter The adapter containing this holder.
|
||||||
*/
|
*/
|
||||||
class SourceCategoryHolder(view: View, val adapter: SourceCategoryAdapter) : BaseFlexibleViewHolder(view, adapter) {
|
class SourceCategoryHolder(view: View, val adapter: SourceCategoryAdapter) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = CategoriesItemBinding.bind(view)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binds this holder with the given category.
|
* Binds this holder with the given category.
|
||||||
*
|
*
|
||||||
@ -20,7 +22,7 @@ class SourceCategoryHolder(view: View, val adapter: SourceCategoryAdapter) : Bas
|
|||||||
*/
|
*/
|
||||||
fun bind(category: String) {
|
fun bind(category: String) {
|
||||||
// Set capitalized title.
|
// Set capitalized title.
|
||||||
title.text = category
|
binding.title.text = category
|
||||||
reorder.isVisible = false
|
binding.reorder.isVisible = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,11 @@
|
|||||||
package eu.kanade.tachiyomi.ui.download
|
package eu.kanade.tachiyomi.ui.download
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
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.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.DownloadItemBinding
|
||||||
import eu.kanade.tachiyomi.util.view.popupMenu
|
import eu.kanade.tachiyomi.util.view.popupMenu
|
||||||
import kotlinx.android.synthetic.main.download_item.chapter_title
|
|
||||||
import kotlinx.android.synthetic.main.download_item.download_progress
|
|
||||||
import kotlinx.android.synthetic.main.download_item.download_progress_text
|
|
||||||
import kotlinx.android.synthetic.main.download_item.manga_full_title
|
|
||||||
import kotlinx.android.synthetic.main.download_item.menu
|
|
||||||
import kotlinx.android.synthetic.main.download_item.reorder
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class used to hold the data of a download.
|
* Class used to hold the data of a download.
|
||||||
@ -20,11 +15,13 @@ import kotlinx.android.synthetic.main.download_item.reorder
|
|||||||
* @constructor creates a new download holder.
|
* @constructor creates a new download holder.
|
||||||
*/
|
*/
|
||||||
class DownloadHolder(private val view: View, val adapter: DownloadAdapter) :
|
class DownloadHolder(private val view: View, val adapter: DownloadAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = DownloadItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setDragHandleView(reorder)
|
setDragHandleView(binding.reorder)
|
||||||
menu.setOnClickListener { it.post { showPopupMenu(it) } }
|
binding.menu.setOnClickListener { it.post { showPopupMenu(it) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var download: Download
|
private lateinit var download: Download
|
||||||
@ -37,19 +34,19 @@ class DownloadHolder(private val view: View, val adapter: DownloadAdapter) :
|
|||||||
fun bind(download: Download) {
|
fun bind(download: Download) {
|
||||||
this.download = download
|
this.download = download
|
||||||
// Update the chapter name.
|
// Update the chapter name.
|
||||||
chapter_title.text = download.chapter.name
|
binding.chapterTitle.text = download.chapter.name
|
||||||
|
|
||||||
// Update the manga title
|
// Update the manga title
|
||||||
manga_full_title.text = download.manga.title
|
binding.mangaFullTitle.text = download.manga.title
|
||||||
|
|
||||||
// Update the progress bar and the number of downloaded pages
|
// Update the progress bar and the number of downloaded pages
|
||||||
val pages = download.pages
|
val pages = download.pages
|
||||||
if (pages == null) {
|
if (pages == null) {
|
||||||
download_progress.progress = 0
|
binding.downloadProgress.progress = 0
|
||||||
download_progress.max = 1
|
binding.downloadProgress.max = 1
|
||||||
download_progress_text.text = ""
|
binding.downloadProgressText.text = ""
|
||||||
} else {
|
} else {
|
||||||
download_progress.max = pages.size * 100
|
binding.downloadProgress.max = pages.size * 100
|
||||||
notifyProgress()
|
notifyProgress()
|
||||||
notifyDownloadedPages()
|
notifyDownloadedPages()
|
||||||
}
|
}
|
||||||
@ -60,10 +57,10 @@ class DownloadHolder(private val view: View, val adapter: DownloadAdapter) :
|
|||||||
*/
|
*/
|
||||||
fun notifyProgress() {
|
fun notifyProgress() {
|
||||||
val pages = download.pages ?: return
|
val pages = download.pages ?: return
|
||||||
if (download_progress.max == 1) {
|
if (binding.downloadProgress.max == 1) {
|
||||||
download_progress.max = pages.size * 100
|
binding.downloadProgress.max = pages.size * 100
|
||||||
}
|
}
|
||||||
download_progress.progress = download.totalProgress
|
binding.downloadProgress.progress = download.totalProgress
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,7 +68,7 @@ class DownloadHolder(private val view: View, val adapter: DownloadAdapter) :
|
|||||||
*/
|
*/
|
||||||
fun notifyDownloadedPages() {
|
fun notifyDownloadedPages() {
|
||||||
val pages = download.pages ?: return
|
val pages = download.pages ?: return
|
||||||
download_progress_text.text = "${download.downloadedImages}/${pages.size}"
|
binding.downloadProgressText.text = "${download.downloadedImages}/${pages.size}"
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemReleased(position: Int) {
|
override fun onItemReleased(position: Int) {
|
||||||
|
@ -8,15 +8,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
|||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding
|
||||||
import eu.kanade.tachiyomi.util.isLocal
|
import eu.kanade.tachiyomi.util.isLocal
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.badges
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.card
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.download_text
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.local_text
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.play_layout
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.thumbnail
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.title
|
|
||||||
import kotlinx.android.synthetic.main.source_comfortable_grid_item.unread_text
|
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import reactivecircus.flowbinding.android.view.clicks
|
import reactivecircus.flowbinding.android.view.clicks
|
||||||
@ -38,9 +31,11 @@ class LibraryComfortableGridHolder(
|
|||||||
// SY <--
|
// SY <--
|
||||||
) : LibraryCompactGridHolder(view, adapter) {
|
) : LibraryCompactGridHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceComfortableGridItemBinding.bind(view)
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
init {
|
init {
|
||||||
play_layout.clicks()
|
binding.playLayout.clicks()
|
||||||
.onEach {
|
.onEach {
|
||||||
playButtonClicked()
|
playButtonClicked()
|
||||||
}
|
}
|
||||||
@ -59,41 +54,41 @@ class LibraryComfortableGridHolder(
|
|||||||
manga = item.manga
|
manga = item.manga
|
||||||
// SY <--
|
// SY <--
|
||||||
// Update the title of the manga.
|
// Update the title of the manga.
|
||||||
title.text = item.manga.title
|
binding.title.text = item.manga.title
|
||||||
// SY -->
|
// SY -->
|
||||||
title.isVisible = hasTitle
|
binding.title.isVisible = hasTitle
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
// For rounded corners
|
// For rounded corners
|
||||||
badges.clipToOutline = true
|
binding.badges.clipToOutline = true
|
||||||
|
|
||||||
// Update the unread count and its visibility.
|
// Update the unread count and its visibility.
|
||||||
with(unread_text) {
|
with(binding.unreadText) {
|
||||||
isVisible = item.unreadCount > 0
|
isVisible = item.unreadCount > 0
|
||||||
text = item.unreadCount.toString()
|
text = item.unreadCount.toString()
|
||||||
}
|
}
|
||||||
// Update the download count and its visibility.
|
// Update the download count and its visibility.
|
||||||
with(download_text) {
|
with(binding.downloadText) {
|
||||||
isVisible = item.downloadCount > 0
|
isVisible = item.downloadCount > 0
|
||||||
text = item.downloadCount.toString()
|
text = item.downloadCount.toString()
|
||||||
}
|
}
|
||||||
// set local visibility if its local manga
|
// set local visibility if its local manga
|
||||||
local_text.isVisible = item.manga.isLocal()
|
binding.localText.isVisible = item.manga.isLocal()
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
play_layout.isVisible = (item.manga.unread > 0 && item.startReadingButton)
|
binding.playLayout.isVisible = (item.manga.unread > 0 && item.startReadingButton)
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
// For rounded corners
|
// For rounded corners
|
||||||
card.clipToOutline = true
|
binding.card.clipToOutline = true
|
||||||
|
|
||||||
// Update the cover.
|
// Update the cover.
|
||||||
GlideApp.with(view.context).clear(thumbnail)
|
GlideApp.with(view.context).clear(binding.thumbnail)
|
||||||
GlideApp.with(view.context)
|
GlideApp.with(view.context)
|
||||||
.load(item.manga.toMangaThumbnail())
|
.load(item.manga.toMangaThumbnail())
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.dontAnimate()
|
.dontAnimate()
|
||||||
.into(thumbnail)
|
.into(binding.thumbnail)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,15 +9,8 @@ import eu.davidea.flexibleadapter.items.IFlexible
|
|||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding
|
||||||
import eu.kanade.tachiyomi.util.isLocal
|
import eu.kanade.tachiyomi.util.isLocal
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.badges
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.card
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.download_text
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.local_text
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.play_layout
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.thumbnail
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.title
|
|
||||||
import kotlinx.android.synthetic.main.source_compact_grid_item.unread_text
|
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import reactivecircus.flowbinding.android.view.clicks
|
import reactivecircus.flowbinding.android.view.clicks
|
||||||
@ -38,11 +31,13 @@ open class LibraryCompactGridHolder(
|
|||||||
// SY <--
|
// SY <--
|
||||||
) : LibraryHolder(view, adapter) {
|
) : LibraryHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceComfortableGridItemBinding.bind(view)
|
||||||
|
|
||||||
var manga: Manga? = null
|
var manga: Manga? = null
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
init {
|
init {
|
||||||
play_layout.clicks()
|
binding.playLayout.clicks()
|
||||||
.onEach {
|
.onEach {
|
||||||
playButtonClicked()
|
playButtonClicked()
|
||||||
}
|
}
|
||||||
@ -61,39 +56,39 @@ open class LibraryCompactGridHolder(
|
|||||||
manga = item.manga
|
manga = item.manga
|
||||||
// SY <--
|
// SY <--
|
||||||
// Update the title of the manga.
|
// Update the title of the manga.
|
||||||
title.text = item.manga.title
|
binding.title.text = item.manga.title
|
||||||
|
|
||||||
// For rounded corners
|
// For rounded corners
|
||||||
badges.clipToOutline = true
|
binding.badges.clipToOutline = true
|
||||||
|
|
||||||
// Update the unread count and its visibility.
|
// Update the unread count and its visibility.
|
||||||
with(unread_text) {
|
with(binding.unreadText) {
|
||||||
isVisible = item.unreadCount > 0
|
isVisible = item.unreadCount > 0
|
||||||
text = item.unreadCount.toString()
|
text = item.unreadCount.toString()
|
||||||
}
|
}
|
||||||
// Update the download count and its visibility.
|
// Update the download count and its visibility.
|
||||||
with(download_text) {
|
with(binding.downloadText) {
|
||||||
isVisible = item.downloadCount > 0
|
isVisible = item.downloadCount > 0
|
||||||
text = item.downloadCount.toString()
|
text = item.downloadCount.toString()
|
||||||
}
|
}
|
||||||
// set local visibility if its local manga
|
// set local visibility if its local manga
|
||||||
local_text.isVisible = item.manga.isLocal()
|
binding.localText.isVisible = item.manga.isLocal()
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
play_layout.isVisible = (item.manga.unread > 0 && item.startReadingButton)
|
binding.playLayout.isVisible = (item.manga.unread > 0 && item.startReadingButton)
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
// For rounded corners
|
// For rounded corners
|
||||||
card.clipToOutline = true
|
binding.card.clipToOutline = true
|
||||||
|
|
||||||
// Update the cover.
|
// Update the cover.
|
||||||
GlideApp.with(view.context).clear(thumbnail)
|
GlideApp.with(view.context).clear(binding.thumbnail)
|
||||||
GlideApp.with(view.context)
|
GlideApp.with(view.context)
|
||||||
.load(item.manga.toMangaThumbnail())
|
.load(item.manga.toMangaThumbnail())
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.dontAnimate()
|
.dontAnimate()
|
||||||
.into(thumbnail)
|
.into(binding.thumbnail)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
|
@ -4,7 +4,7 @@ import android.view.View
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generic class used to hold the displayed data of a manga in the library.
|
* Generic class used to hold the displayed data of a manga in the library.
|
||||||
@ -18,7 +18,7 @@ abstract class LibraryHolder(
|
|||||||
// SY -->
|
// SY -->
|
||||||
val adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>
|
val adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>
|
||||||
// SY <--
|
// SY <--
|
||||||
) : BaseFlexibleViewHolder(view, adapter) {
|
) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this
|
* Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this
|
||||||
|
@ -12,13 +12,8 @@ import eu.davidea.flexibleadapter.items.IFlexible
|
|||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceListItemBinding
|
||||||
import eu.kanade.tachiyomi.util.isLocal
|
import eu.kanade.tachiyomi.util.isLocal
|
||||||
import kotlinx.android.synthetic.main.source_list_item.badges
|
|
||||||
import kotlinx.android.synthetic.main.source_list_item.download_text
|
|
||||||
import kotlinx.android.synthetic.main.source_list_item.local_text
|
|
||||||
import kotlinx.android.synthetic.main.source_list_item.thumbnail
|
|
||||||
import kotlinx.android.synthetic.main.source_list_item.title
|
|
||||||
import kotlinx.android.synthetic.main.source_list_item.unread_text
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class used to hold the displayed data of a manga in the library, like the cover or the title.
|
* Class used to hold the displayed data of a manga in the library, like the cover or the title.
|
||||||
@ -37,6 +32,8 @@ class LibraryListHolder(
|
|||||||
// SY <--
|
// SY <--
|
||||||
) : LibraryHolder(view, adapter) {
|
) : LibraryHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SourceListItemBinding.bind(view)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this
|
* Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this
|
||||||
* holder with the given manga.
|
* holder with the given manga.
|
||||||
@ -45,32 +42,32 @@ class LibraryListHolder(
|
|||||||
*/
|
*/
|
||||||
override fun onSetValues(item: LibraryItem) {
|
override fun onSetValues(item: LibraryItem) {
|
||||||
// Update the title of the manga.
|
// Update the title of the manga.
|
||||||
title.text = item.manga.title
|
binding.title.text = item.manga.title
|
||||||
|
|
||||||
// For rounded corners
|
// For rounded corners
|
||||||
badges.clipToOutline = true
|
binding.badges.clipToOutline = true
|
||||||
|
|
||||||
// Update the unread count and its visibility.
|
// Update the unread count and its visibility.
|
||||||
with(unread_text) {
|
with(binding.unreadText) {
|
||||||
isVisible = item.unreadCount > 0
|
isVisible = item.unreadCount > 0
|
||||||
text = item.unreadCount.toString()
|
text = item.unreadCount.toString()
|
||||||
}
|
}
|
||||||
// Update the download count and its visibility.
|
// Update the download count and its visibility.
|
||||||
with(download_text) {
|
with(binding.downloadText) {
|
||||||
isVisible = item.downloadCount > 0
|
isVisible = item.downloadCount > 0
|
||||||
text = "${item.downloadCount}"
|
text = "${item.downloadCount}"
|
||||||
}
|
}
|
||||||
// show local text badge if local manga
|
// show local text badge if local manga
|
||||||
local_text.isVisible = item.manga.isLocal()
|
binding.localText.isVisible = item.manga.isLocal()
|
||||||
|
|
||||||
// Create thumbnail onclick to simulate long click
|
// Create thumbnail onclick to simulate long click
|
||||||
thumbnail.setOnClickListener {
|
binding.thumbnail.setOnClickListener {
|
||||||
// Simulate long click on this view to enter selection mode
|
// Simulate long click on this view to enter selection mode
|
||||||
onLongClick(itemView)
|
onLongClick(itemView)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the cover.
|
// Update the cover.
|
||||||
GlideApp.with(itemView.context).clear(thumbnail)
|
GlideApp.with(itemView.context).clear(binding.thumbnail)
|
||||||
|
|
||||||
val radius = view.context.resources.getDimensionPixelSize(R.dimen.card_radius)
|
val radius = view.context.resources.getDimensionPixelSize(R.dimen.card_radius)
|
||||||
val requestOptions = RequestOptions().transform(CenterCrop(), RoundedCorners(radius))
|
val requestOptions = RequestOptions().transform(CenterCrop(), RoundedCorners(radius))
|
||||||
@ -79,6 +76,6 @@ class LibraryListHolder(
|
|||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
.apply(requestOptions)
|
.apply(requestOptions)
|
||||||
.dontAnimate()
|
.dontAnimate()
|
||||||
.into(thumbnail)
|
.into(binding.thumbnail)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -480,8 +480,8 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to manually offset a view within the activity's child views that might be cut off due to the
|
* Used to manually offset a view within the activity's child views that might be cut off due to
|
||||||
* collapsing AppBarLayout.
|
* the collapsing AppBarLayout.
|
||||||
*/
|
*/
|
||||||
fun fixViewToBottom(view: View) {
|
fun fixViewToBottom(view: View) {
|
||||||
binding.appbar.addOnOffsetChangedListener(
|
binding.appbar.addOnOffsetChangedListener(
|
||||||
|
@ -5,28 +5,27 @@ import android.text.SpannableStringBuilder
|
|||||||
import android.text.style.ForegroundColorSpan
|
import android.text.style.ForegroundColorSpan
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.download.model.Download
|
import eu.kanade.tachiyomi.data.download.model.Download
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.ChaptersItemBinding
|
||||||
import exh.EH_SOURCE_ID
|
import exh.EH_SOURCE_ID
|
||||||
import exh.EXH_SOURCE_ID
|
import exh.EXH_SOURCE_ID
|
||||||
import exh.metadata.MetadataUtil
|
import exh.metadata.MetadataUtil
|
||||||
import kotlinx.android.synthetic.main.chapters_item.bookmark_icon
|
|
||||||
import kotlinx.android.synthetic.main.chapters_item.chapter_description
|
|
||||||
import kotlinx.android.synthetic.main.chapters_item.chapter_title
|
|
||||||
import kotlinx.android.synthetic.main.chapters_item.download_text
|
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
||||||
class ChapterHolder(
|
class ChapterHolder(
|
||||||
view: View,
|
view: View,
|
||||||
private val adapter: ChaptersAdapter
|
private val adapter: ChaptersAdapter
|
||||||
) : BaseFlexibleViewHolder(view, adapter) {
|
) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = ChaptersItemBinding.bind(view)
|
||||||
|
|
||||||
fun bind(item: ChapterItem, manga: Manga) {
|
fun bind(item: ChapterItem, manga: Manga) {
|
||||||
val chapter = item.chapter
|
val chapter = item.chapter
|
||||||
|
|
||||||
chapter_title.text = when (manga.displayMode) {
|
binding.chapterTitle.text = when (manga.displayMode) {
|
||||||
Manga.DISPLAY_NUMBER -> {
|
Manga.DISPLAY_NUMBER -> {
|
||||||
val number = adapter.decimalFormat.format(chapter.chapter_number.toDouble())
|
val number = adapter.decimalFormat.format(chapter.chapter_number.toDouble())
|
||||||
itemView.context.getString(R.string.display_mode_chapter, number)
|
itemView.context.getString(R.string.display_mode_chapter, number)
|
||||||
@ -40,16 +39,16 @@ class ChapterHolder(
|
|||||||
chapter.bookmark -> adapter.bookmarkedColor
|
chapter.bookmark -> adapter.bookmarkedColor
|
||||||
else -> adapter.unreadColor
|
else -> adapter.unreadColor
|
||||||
}
|
}
|
||||||
chapter_title.setTextColor(chapterTitleColor)
|
binding.chapterTitle.setTextColor(chapterTitleColor)
|
||||||
|
|
||||||
val chapterDescriptionColor = when {
|
val chapterDescriptionColor = when {
|
||||||
chapter.read -> adapter.readColor
|
chapter.read -> adapter.readColor
|
||||||
chapter.bookmark -> adapter.bookmarkedColor
|
chapter.bookmark -> adapter.bookmarkedColor
|
||||||
else -> adapter.unreadColorSecondary
|
else -> adapter.unreadColorSecondary
|
||||||
}
|
}
|
||||||
chapter_description.setTextColor(chapterDescriptionColor)
|
binding.chapterDescription.setTextColor(chapterDescriptionColor)
|
||||||
|
|
||||||
bookmark_icon.isVisible = chapter.bookmark
|
binding.bookmarkIcon.isVisible = chapter.bookmark
|
||||||
|
|
||||||
val descriptions = mutableListOf<CharSequence>()
|
val descriptions = mutableListOf<CharSequence>()
|
||||||
|
|
||||||
@ -70,15 +69,15 @@ class ChapterHolder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (descriptions.isNotEmpty()) {
|
if (descriptions.isNotEmpty()) {
|
||||||
chapter_description.text = descriptions.joinTo(SpannableStringBuilder(), " • ")
|
binding.chapterDescription.text = descriptions.joinTo(SpannableStringBuilder(), " • ")
|
||||||
} else {
|
} else {
|
||||||
chapter_description.text = ""
|
binding.chapterDescription.text = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyStatus(item.status)
|
notifyStatus(item.status)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun notifyStatus(status: Int) = with(download_text) {
|
fun notifyStatus(status: Int) = with(binding.downloadText) {
|
||||||
when (status) {
|
when (status) {
|
||||||
Download.QUEUE -> setText(R.string.chapter_queued)
|
Download.QUEUE -> setText(R.string.chapter_queued)
|
||||||
Download.DOWNLOADING -> setText(R.string.chapter_downloading)
|
Download.DOWNLOADING -> setText(R.string.chapter_downloading)
|
||||||
|
@ -2,18 +2,18 @@ package eu.kanade.tachiyomi.ui.manga.merged
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
import eu.kanade.tachiyomi.databinding.EditMergedSettingsItemBinding
|
import eu.kanade.tachiyomi.databinding.EditMergedSettingsItemBinding
|
||||||
import eu.kanade.tachiyomi.source.SourceManager
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import exh.merged.sql.models.MergedMangaReference
|
import exh.merged.sql.models.MergedMangaReference
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
class EditMergedMangaHolder(view: View, val adapter: EditMergedMangaAdapter) : BaseFlexibleViewHolder(view, adapter) {
|
class EditMergedMangaHolder(view: View, val adapter: EditMergedMangaAdapter) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
lateinit var reference: MergedMangaReference
|
lateinit var reference: MergedMangaReference
|
||||||
var binding = EditMergedSettingsItemBinding.bind(view)
|
var binding = EditMergedSettingsItemBinding.bind(view)
|
||||||
|
@ -2,18 +2,13 @@ package eu.kanade.tachiyomi.ui.recent.history
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.database.models.MangaChapterHistory
|
import eu.kanade.tachiyomi.data.database.models.MangaChapterHistory
|
||||||
import eu.kanade.tachiyomi.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.HistoryItemBinding
|
||||||
import eu.kanade.tachiyomi.util.lang.toTimestampString
|
import eu.kanade.tachiyomi.util.lang.toTimestampString
|
||||||
import kotlinx.android.synthetic.main.history_item.cover
|
|
||||||
import kotlinx.android.synthetic.main.history_item.holder
|
|
||||||
import kotlinx.android.synthetic.main.history_item.manga_subtitle
|
|
||||||
import kotlinx.android.synthetic.main.history_item.manga_title
|
|
||||||
import kotlinx.android.synthetic.main.history_item.remove
|
|
||||||
import kotlinx.android.synthetic.main.history_item.resume
|
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -28,18 +23,20 @@ import java.util.Date
|
|||||||
class HistoryHolder(
|
class HistoryHolder(
|
||||||
view: View,
|
view: View,
|
||||||
val adapter: HistoryAdapter
|
val adapter: HistoryAdapter
|
||||||
) : BaseFlexibleViewHolder(view, adapter) {
|
) : FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = HistoryItemBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
holder.setOnClickListener {
|
binding.holder.setOnClickListener {
|
||||||
adapter.itemClickListener.onItemClick(bindingAdapterPosition)
|
adapter.itemClickListener.onItemClick(bindingAdapterPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
remove.setOnClickListener {
|
binding.remove.setOnClickListener {
|
||||||
adapter.removeClickListener.onRemoveClick(bindingAdapterPosition)
|
adapter.removeClickListener.onRemoveClick(bindingAdapterPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
resume.setOnClickListener {
|
binding.resume.setOnClickListener {
|
||||||
adapter.resumeClickListener.onResumeClick(bindingAdapterPosition)
|
adapter.resumeClickListener.onResumeClick(bindingAdapterPosition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,26 +51,26 @@ class HistoryHolder(
|
|||||||
val (manga, chapter, history) = item
|
val (manga, chapter, history) = item
|
||||||
|
|
||||||
// Set manga title
|
// Set manga title
|
||||||
manga_title.text = manga.title
|
binding.mangaTitle.text = manga.title
|
||||||
|
|
||||||
// Set chapter number + timestamp
|
// Set chapter number + timestamp
|
||||||
if (chapter.chapter_number > -1f) {
|
if (chapter.chapter_number > -1f) {
|
||||||
val formattedNumber = adapter.decimalFormat.format(chapter.chapter_number.toDouble())
|
val formattedNumber = adapter.decimalFormat.format(chapter.chapter_number.toDouble())
|
||||||
manga_subtitle.text = itemView.context.getString(
|
binding.mangaSubtitle.text = itemView.context.getString(
|
||||||
R.string.recent_manga_time,
|
R.string.recent_manga_time,
|
||||||
formattedNumber,
|
formattedNumber,
|
||||||
Date(history.last_read).toTimestampString()
|
Date(history.last_read).toTimestampString()
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
manga_subtitle.text = Date(history.last_read).toTimestampString()
|
binding.mangaSubtitle.text = Date(history.last_read).toTimestampString()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set cover
|
// Set cover
|
||||||
GlideApp.with(itemView.context).clear(cover)
|
GlideApp.with(itemView.context).clear(binding.cover)
|
||||||
GlideApp.with(itemView.context)
|
GlideApp.with(itemView.context)
|
||||||
.load(manga.toMangaThumbnail())
|
.load(manga.toMangaThumbnail())
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.into(cover)
|
.into(binding.cover)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,16 +5,13 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
|
|||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.R
|
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.data.glide.GlideApp
|
import eu.kanade.tachiyomi.data.glide.GlideApp
|
||||||
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.kanade.tachiyomi.databinding.UpdatesItemBinding
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import kotlinx.android.synthetic.main.updates_item.chapter_title
|
|
||||||
import kotlinx.android.synthetic.main.updates_item.download_text
|
|
||||||
import kotlinx.android.synthetic.main.updates_item.manga_cover
|
|
||||||
import kotlinx.android.synthetic.main.updates_item.manga_title
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holder that contains chapter item
|
* Holder that contains chapter item
|
||||||
@ -27,7 +24,9 @@ import kotlinx.android.synthetic.main.updates_item.manga_title
|
|||||||
* @constructor creates a new recent chapter holder.
|
* @constructor creates a new recent chapter holder.
|
||||||
*/
|
*/
|
||||||
class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter) :
|
class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = UpdatesItemBinding.bind(view)
|
||||||
|
|
||||||
private var readColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f)
|
private var readColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f)
|
||||||
private var unreadColor = view.context.getResourceColor(R.attr.colorOnSurface)
|
private var unreadColor = view.context.getResourceColor(R.attr.colorOnSurface)
|
||||||
@ -38,7 +37,7 @@ class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter)
|
|||||||
private var item: UpdatesItem? = null
|
private var item: UpdatesItem? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
manga_cover.setOnClickListener {
|
binding.mangaCover.setOnClickListener {
|
||||||
adapter.coverClickListener.onCoverClick(bindingAdapterPosition)
|
adapter.coverClickListener.onCoverClick(bindingAdapterPosition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -52,25 +51,25 @@ class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter)
|
|||||||
this.item = item
|
this.item = item
|
||||||
|
|
||||||
// Set chapter title
|
// Set chapter title
|
||||||
chapter_title.text = item.chapter.name
|
binding.chapterTitle.text = item.chapter.name
|
||||||
|
|
||||||
// Set manga title
|
// Set manga title
|
||||||
manga_title.text = item.manga.title
|
binding.mangaTitle.text = item.manga.title
|
||||||
|
|
||||||
// Check if chapter is read and set correct color
|
// Check if chapter is read and set correct color
|
||||||
if (item.chapter.read) {
|
if (item.chapter.read) {
|
||||||
chapter_title.setTextColor(readColor)
|
binding.chapterTitle.setTextColor(readColor)
|
||||||
manga_title.setTextColor(readColor)
|
binding.mangaTitle.setTextColor(readColor)
|
||||||
} else {
|
} else {
|
||||||
chapter_title.setTextColor(unreadColor)
|
binding.chapterTitle.setTextColor(unreadColor)
|
||||||
manga_title.setTextColor(unreadColor)
|
binding.mangaTitle.setTextColor(unreadColor)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set chapter status
|
// Set chapter status
|
||||||
notifyStatus(item.status)
|
notifyStatus(item.status)
|
||||||
|
|
||||||
// Set cover
|
// Set cover
|
||||||
GlideApp.with(itemView.context).clear(manga_cover)
|
GlideApp.with(itemView.context).clear(binding.mangaCover)
|
||||||
|
|
||||||
val radius = itemView.context.resources.getDimensionPixelSize(R.dimen.card_radius)
|
val radius = itemView.context.resources.getDimensionPixelSize(R.dimen.card_radius)
|
||||||
val requestOptions = RequestOptions().transform(CenterCrop(), RoundedCorners(radius))
|
val requestOptions = RequestOptions().transform(CenterCrop(), RoundedCorners(radius))
|
||||||
@ -79,7 +78,7 @@ class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter)
|
|||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
.apply(requestOptions)
|
.apply(requestOptions)
|
||||||
.dontAnimate()
|
.dontAnimate()
|
||||||
.into(manga_cover)
|
.into(binding.mangaCover)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -87,7 +86,7 @@ class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter)
|
|||||||
*
|
*
|
||||||
* @param status download status
|
* @param status download status
|
||||||
*/
|
*/
|
||||||
fun notifyStatus(status: Int) = with(download_text) {
|
fun notifyStatus(status: Int) = with(binding.downloadText) {
|
||||||
when (status) {
|
when (status) {
|
||||||
Download.QUEUE -> setText(R.string.chapter_queued)
|
Download.QUEUE -> setText(R.string.chapter_queued)
|
||||||
Download.DOWNLOADING -> setText(R.string.chapter_downloading)
|
Download.DOWNLOADING -> setText(R.string.chapter_downloading)
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
package eu.kanade.tachiyomi.ui.setting.search
|
package eu.kanade.tachiyomi.ui.setting.search
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
import eu.davidea.viewholders.FlexibleViewHolder
|
||||||
import kotlinx.android.synthetic.main.settings_search_controller_card.search_result_pref_breadcrumb
|
import eu.kanade.tachiyomi.databinding.SettingsSearchControllerCardBinding
|
||||||
import kotlinx.android.synthetic.main.settings_search_controller_card.search_result_pref_summary
|
|
||||||
import kotlinx.android.synthetic.main.settings_search_controller_card.search_result_pref_title
|
|
||||||
import kotlinx.android.synthetic.main.settings_search_controller_card.title_wrapper
|
|
||||||
import kotlin.reflect.full.createInstance
|
import kotlin.reflect.full.createInstance
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15,10 +12,12 @@ import kotlin.reflect.full.createInstance
|
|||||||
* @param adapter instance of [SettingsSearchAdapter]
|
* @param adapter instance of [SettingsSearchAdapter]
|
||||||
*/
|
*/
|
||||||
class SettingsSearchHolder(view: View, val adapter: SettingsSearchAdapter) :
|
class SettingsSearchHolder(view: View, val adapter: SettingsSearchAdapter) :
|
||||||
BaseFlexibleViewHolder(view, adapter) {
|
FlexibleViewHolder(view, adapter) {
|
||||||
|
|
||||||
|
private val binding = SettingsSearchControllerCardBinding.bind(view)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
title_wrapper.setOnClickListener {
|
binding.titleWrapper.setOnClickListener {
|
||||||
adapter.getItem(bindingAdapterPosition)?.let {
|
adapter.getItem(bindingAdapterPosition)?.let {
|
||||||
val ctrl = it.settingsSearchResult.searchController::class.createInstance()
|
val ctrl = it.settingsSearchResult.searchController::class.createInstance()
|
||||||
ctrl.preferenceKey = it.settingsSearchResult.key
|
ctrl.preferenceKey = it.settingsSearchResult.key
|
||||||
@ -35,8 +34,8 @@ class SettingsSearchHolder(view: View, val adapter: SettingsSearchAdapter) :
|
|||||||
* @param item item of card.
|
* @param item item of card.
|
||||||
*/
|
*/
|
||||||
fun bind(item: SettingsSearchItem) {
|
fun bind(item: SettingsSearchItem) {
|
||||||
search_result_pref_title.text = item.settingsSearchResult.title
|
binding.searchResultPrefTitle.text = item.settingsSearchResult.title
|
||||||
search_result_pref_summary.text = item.settingsSearchResult.summary
|
binding.searchResultPrefSummary.text = item.settingsSearchResult.summary
|
||||||
search_result_pref_breadcrumb.text = item.settingsSearchResult.breadcrumb
|
binding.searchResultPrefBreadcrumb.text = item.settingsSearchResult.breadcrumb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user