From c9c808a78270329a67d75a62bed884e02e2d173d Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 28 Nov 2020 15:24:40 -0500 Subject: [PATCH] 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 --- .../ui/base/holder/BaseFlexibleViewHolder.kt | 16 -------- .../browse/extension/ExtensionGroupHolder.kt | 10 +++-- .../ui/browse/extension/ExtensionHolder.kt | 31 +++++++--------- .../ui/browse/latest/LatestCardHolder.kt | 21 +++++------ .../ui/browse/latest/LatestHolder.kt | 35 ++++++++---------- .../advanced/design/MigrationSourceHolder.kt | 4 +- .../process/MigrationProcessHolder.kt | 4 +- .../ui/browse/migration/manga/MangaHolder.kt | 6 +-- .../migration/sources/SelectionHeader.kt | 7 ++-- .../browse/migration/sources/SourceHolder.kt | 6 +-- .../tachiyomi/ui/browse/source/LangHolder.kt | 10 +++-- .../ui/browse/source/SourceHolder.kt | 36 +++++++++--------- .../browse/SourceComfortableGridHolder.kt | 24 ++++++------ .../browse/SourceEnhancedEHentaiListHolder.kt | 34 ++++++++--------- .../browse/source/browse/SourceGridHolder.kt | 22 +++++------ .../ui/browse/source/browse/SourceHolder.kt | 4 +- .../browse/source/browse/SourceListHolder.kt | 20 +++++----- .../globalsearch/GlobalSearchCardHolder.kt | 21 +++++------ .../source/globalsearch/GlobalSearchHolder.kt | 35 ++++++++---------- .../ui/browse/source/index/IndexCardHolder.kt | 21 +++++------ .../tachiyomi/ui/category/CategoryHolder.kt | 13 ++++--- .../biometric/BiometricTimesHolder.kt | 14 ++++--- .../ui/category/genre/SortTagHolder.kt | 13 ++++--- .../category/sources/SourceCategoryHolder.kt | 14 ++++--- .../tachiyomi/ui/download/DownloadHolder.kt | 37 +++++++++---------- .../library/LibraryComfortableGridHolder.kt | 33 +++++++---------- .../ui/library/LibraryCompactGridHolder.kt | 31 +++++++--------- .../tachiyomi/ui/library/LibraryHolder.kt | 4 +- .../tachiyomi/ui/library/LibraryListHolder.kt | 25 ++++++------- .../kanade/tachiyomi/ui/main/MainActivity.kt | 4 +- .../ui/manga/chapter/ChapterHolder.kt | 25 ++++++------- .../ui/manga/merged/EditMergedMangaHolder.kt | 4 +- .../ui/recent/history/HistoryHolder.kt | 29 +++++++-------- .../ui/recent/updates/UpdatesHolder.kt | 31 ++++++++-------- .../ui/setting/search/SettingsSearchHolder.kt | 19 +++++----- 35 files changed, 307 insertions(+), 356 deletions(-) delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/base/holder/BaseFlexibleViewHolder.kt diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/holder/BaseFlexibleViewHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/holder/BaseFlexibleViewHolder.kt deleted file mode 100644 index e85cb7709..000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/holder/BaseFlexibleViewHolder.kt +++ /dev/null @@ -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 -} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionGroupHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionGroupHolder.kt index 2712a4ee1..fbe31cf8f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionGroupHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionGroupHolder.kt @@ -3,11 +3,13 @@ package eu.kanade.tachiyomi.ui.browse.extension import android.annotation.SuppressLint import android.view.View import eu.davidea.flexibleadapter.FlexibleAdapter -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.source_main_controller_card_header.title +import eu.davidea.viewholders.FlexibleViewHolder +import eu.kanade.tachiyomi.databinding.SourceMainControllerCardHeaderBinding class ExtensionGroupHolder(view: View, adapter: FlexibleAdapter<*>) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = SourceMainControllerCardHeaderBinding.bind(view) @SuppressLint("SetTextI18n") fun bind(item: ExtensionGroupItem) { @@ -16,6 +18,6 @@ class ExtensionGroupHolder(view: View, adapter: FlexibleAdapter<*>) : text += " (${item.size})" } - title.text = text + binding.title.text = text } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt index 1f0d606c9..6cc35e91c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionHolder.kt @@ -2,26 +2,23 @@ package eu.kanade.tachiyomi.ui.browse.extension import android.annotation.SuppressLint import android.view.View +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R 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.InstallStep import eu.kanade.tachiyomi.source.ConfigurableSource -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder 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 class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = ExtensionCardItemBinding.bind(view) init { - ext_button.setOnClickListener { + binding.extButton.setOnClickListener { adapter.buttonClickListener.onButtonClick(bindingAdapterPosition) } } @@ -29,10 +26,10 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : fun bind(item: ExtensionItem) { val extension = item.extension - ext_title.text = extension.name - version.text = extension.versionName - lang.text = LocaleHelper.getSourceDisplayName(extension.lang, itemView.context) - warning.text = when { + binding.extTitle.text = extension.name + binding.version.text = extension.versionName + binding.lang.text = LocaleHelper.getSourceDisplayName(extension.lang, itemView.context) + binding.warning.text = when { 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.isUnofficial -> itemView.context.getString(R.string.ext_unofficial) @@ -43,19 +40,19 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : else -> "" }.toUpperCase() - GlideApp.with(itemView.context).clear(image) + GlideApp.with(itemView.context).clear(binding.image) if (extension is Extension.Available) { GlideApp.with(itemView.context) .load(extension.iconUrl) - .into(image) + .into(binding.image) } else { - extension.getApplicationIcon(itemView.context)?.let { image.setImageDrawable(it) } + extension.getApplicationIcon(itemView.context)?.let { binding.image.setImageDrawable(it) } } bindButton(item) } @Suppress("ResourceType") - fun bindButton(item: ExtensionItem) = with(ext_button) { + fun bindButton(item: ExtensionItem) = with(binding.extButton) { isEnabled = true isClickable = true diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/latest/LatestCardHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/latest/LatestCardHolder.kt index 61a514e11..fc3292f10 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/latest/LatestCardHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/latest/LatestCardHolder.kt @@ -2,18 +2,17 @@ package eu.kanade.tachiyomi.ui.browse.latest import android.view.View 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.glide.GlideApp 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 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) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = GlobalSearchControllerCardItemBinding.bind(view) init { // Call onMangaClickListener when item is pressed. @@ -33,17 +32,17 @@ class LatestCardHolder(view: View, adapter: LatestCardAdapter) : } fun bind(manga: Manga) { - card.clipToOutline = true + binding.card.clipToOutline = true - title.text = manga.title + binding.title.text = manga.title // 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) } fun setImage(manga: Manga) { - GlideApp.with(itemView.context).clear(cover) + GlideApp.with(itemView.context).clear(binding.cover) if (!manga.thumbnail_url.isNullOrEmpty()) { GlideApp.with(itemView.context) .load(manga.toMangaThumbnail()) @@ -51,7 +50,7 @@ class LatestCardHolder(view: View, adapter: LatestCardAdapter) : .centerCrop() .skipMemoryCache(true) .placeholder(android.R.color.transparent) - .into(StateImageViewTarget(cover, progress)) + .into(StateImageViewTarget(binding.cover, binding.progress)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/latest/LatestHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/latest/LatestHolder.kt index 460629418..ec116cb53 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/latest/LatestHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/latest/LatestHolder.kt @@ -3,15 +3,10 @@ package eu.kanade.tachiyomi.ui.browse.latest import android.view.View import androidx.core.view.isVisible import androidx.recyclerview.widget.LinearLayoutManager +import eu.davidea.viewholders.FlexibleViewHolder 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 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. @@ -20,7 +15,9 @@ import kotlinx.android.synthetic.main.latest_controller_card.title_wrapper * @param adapter instance of [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. @@ -31,10 +28,10 @@ class LatestHolder(view: View, val adapter: LatestAdapter) : init { // Set layout horizontal. - recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false) - recycler.adapter = mangaAdapter + binding.recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false) + binding.recycler.adapter = mangaAdapter - title_wrapper.setOnClickListener { + binding.titleWrapper.setOnClickListener { adapter.getItem(bindingAdapterPosition)?.let { adapter.titleClickListener.onTitleClick(it.source) } @@ -52,21 +49,21 @@ class LatestHolder(view: View, val adapter: LatestAdapter) : val titlePrefix = if (item.highlighted) "▶ " else "" - title.text = titlePrefix + source.name - subtitle.isVisible = true - subtitle.text = LocaleHelper.getDisplayName(source.lang) + binding.title.text = titlePrefix + source.name + binding.subtitle.isVisible = true + binding.subtitle.text = LocaleHelper.getDisplayName(source.lang) when { results == null -> { - progress.isVisible = true + binding.progress.isVisible = true showResultsHolder() } results.isEmpty() -> { - progress.isVisible = false + binding.progress.isVisible = false showNoResults() } else -> { - progress.isVisible = false + binding.progress.isVisible = false showResultsHolder() } } @@ -103,10 +100,10 @@ class LatestHolder(view: View, val adapter: LatestAdapter) : } private fun showResultsHolder() { - no_results_found.isVisible = false + binding.noResultsFound.isVisible = false } private fun showNoResults() { - no_results_found.isVisible = true + binding.noResultsFound.isVisible = true } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/design/MigrationSourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/design/MigrationSourceHolder.kt index 010df7e24..719586374 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/design/MigrationSourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/design/MigrationSourceHolder.kt @@ -2,15 +2,15 @@ package eu.kanade.tachiyomi.ui.browse.migration.advanced.design import android.graphics.Paint.STRIKE_THRU_TEXT_FLAG import android.view.View +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.databinding.MigrationSourceItemBinding import eu.kanade.tachiyomi.source.icon import eu.kanade.tachiyomi.source.online.HttpSource -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder import uy.kohesive.injekt.injectLazy class MigrationSourceHolder(view: View, val adapter: MigrationSourceAdapter) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { val binding = MigrationSourceItemBinding.bind(view) init { setDragHandleView(binding.reorder) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationProcessHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationProcessHolder.kt index cf22c2aeb..0a1506bc5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationProcessHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationProcessHolder.kt @@ -5,6 +5,7 @@ import android.widget.PopupMenu import androidx.core.view.isInvisible import androidx.core.view.isVisible import com.bumptech.glide.load.engine.DiskCacheStrategy +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.DatabaseHelper 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.SourceManager 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.util.lang.await import eu.kanade.tachiyomi.util.lang.launchUI @@ -36,7 +36,7 @@ import java.text.DecimalFormat class MigrationProcessHolder( private val view: View, private val adapter: MigrationProcessAdapter -) : BaseFlexibleViewHolder(view, adapter) { +) : FlexibleViewHolder(view, adapter) { private val db: DatabaseHelper by injectLazy() private val sourceManager: SourceManager by injectLazy() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/manga/MangaHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/manga/MangaHolder.kt index 1e0dea1b9..9e54a4f86 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/manga/MangaHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/manga/MangaHolder.kt @@ -6,18 +6,18 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.RequestOptions import eu.davidea.flexibleadapter.FlexibleAdapter +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail import eu.kanade.tachiyomi.databinding.SourceListItemBinding -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder class MangaHolder( view: View, adapter: FlexibleAdapter<*> -) : BaseFlexibleViewHolder(view, adapter) { +) : FlexibleViewHolder(view, adapter) { - val binding = SourceListItemBinding.bind(view) + private val binding = SourceListItemBinding.bind(view) fun bind(item: MangaItem) { // Update the title of the manga. diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SelectionHeader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SelectionHeader.kt index 2c08db628..f96f7b1a1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SelectionHeader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SelectionHeader.kt @@ -5,9 +5,9 @@ import androidx.recyclerview.widget.RecyclerView import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractHeaderItem import eu.davidea.flexibleadapter.items.IFlexible +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.databinding.SourceMainControllerCardHeaderBinding -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder /** * Item that contains the selection header. @@ -45,8 +45,9 @@ class SelectionHeader : AbstractHeaderItem() { // Intentionally empty } - class Holder(view: View, adapter: FlexibleAdapter */ IFlexible /* SY <-- */>) : BaseFlexibleViewHolder(view, adapter) { - val binding = SourceMainControllerCardHeaderBinding.bind(view) + class Holder(view: View, adapter: FlexibleAdapter */ IFlexible /* SY <-- */>) : FlexibleViewHolder(view, adapter) { + private val binding = SourceMainControllerCardHeaderBinding.bind(view) + init { binding.title.text = view.context.getString(/* SY --> */ R.string.select_a_source_to_migrate_from /* SY <-- */) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SourceHolder.kt index 7c35dd346..b0c568cb2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SourceHolder.kt @@ -2,15 +2,15 @@ package eu.kanade.tachiyomi.ui.browse.migration.sources import android.view.View import androidx.core.view.isVisible +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.databinding.SourceMainControllerCardItemBinding import eu.kanade.tachiyomi.source.icon -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder 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 --> init { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/LangHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/LangHolder.kt index d62ccd601..edb50eaee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/LangHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/LangHolder.kt @@ -2,14 +2,16 @@ package eu.kanade.tachiyomi.ui.browse.source import android.view.View 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 kotlinx.android.synthetic.main.source_main_controller_card_header.title class LangHolder(view: View, adapter: FlexibleAdapter<*>) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = SourceMainControllerCardHeaderBinding.bind(view) fun bind(item: LangItem) { - title.text = LocaleHelper.getSourceDisplayName(item.code, itemView.context) + binding.title.text = LocaleHelper.getSourceDisplayName(item.code, itemView.context) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceHolder.kt index 7606ef6d4..27d907995 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceHolder.kt @@ -2,34 +2,32 @@ package eu.kanade.tachiyomi.ui.browse.source import android.view.View import androidx.core.view.isVisible +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.databinding.SourceMainControllerCardItemBinding import eu.kanade.tachiyomi.source.LocalSource 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.getResourceColor 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 <-- */) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = SourceMainControllerCardItemBinding.bind(view) init { - source_latest.setOnClickListener { + binding.sourceLatest.setOnClickListener { adapter.clickListener.onLatestClick(bindingAdapterPosition) } - pin.setOnClickListener { + binding.pin.setOnClickListener { adapter.clickListener.onPinClick(bindingAdapterPosition) } // SY --> if (!showLatest) { - source_latest.isVisible = false + binding.sourceLatest.isVisible = false } // SY <-- } @@ -37,26 +35,26 @@ class SourceHolder(private val view: View, val adapter: SourceAdapter /* SY --> fun bind(item: SourceItem) { val source = item.source - title.text = source.name - subtitle.isVisible = source !is LocalSource - subtitle.text = LocaleHelper.getDisplayName(source.lang) + binding.title.text = source.name + binding.subtitle.isVisible = source !is LocalSource + binding.subtitle.text = LocaleHelper.getDisplayName(source.lang) // Set source icon itemView.post { val icon = source.icon() when { - icon != null -> image.setImageDrawable(icon) - item.source.id == LocalSource.ID -> image.setImageResource(R.mipmap.ic_local_source) + icon != null -> binding.image.setImageDrawable(icon) + 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) { - 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 { - 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)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceComfortableGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceComfortableGridHolder.kt index 6953bccf4..fa09e3373 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceComfortableGridHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceComfortableGridHolder.kt @@ -8,14 +8,10 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail +import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding import eu.kanade.tachiyomi.widget.StateImageViewTarget import exh.metadata.metadata.MangaDexSearchMetadata 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. @@ -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 <-- */) : SourceGridHolder(view, adapter) { + private val binding = SourceComfortableGridItemBinding.bind(view) + /** * Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this * holder with the given manga. @@ -36,13 +34,13 @@ class SourceComfortableGridHolder(private val view: View, private val adapter: F */ override fun onSetValues(manga: Manga) { // Set manga title - title.text = manga.title + binding.title.text = manga.title // SY --> - title.isVisible = hasTitle + binding.title.isVisible = hasTitle // SY <-- // 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) } @@ -51,8 +49,8 @@ class SourceComfortableGridHolder(private val view: View, private val adapter: F override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) { if (metadata is MangaDexSearchMetadata) { metadata.follow_status?.let { - local_text.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it] - local_text.isVisible = true + binding.localText.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it] + binding.localText.isVisible = true } } } @@ -60,16 +58,16 @@ class SourceComfortableGridHolder(private val view: View, private val adapter: F override fun setImage(manga: Manga) { // 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()) { GlideApp.with(view.context) .load(manga.toMangaThumbnail()) .diskCacheStrategy(DiskCacheStrategy.DATA) .centerCrop() .placeholder(android.R.color.transparent) - .into(StateImageViewTarget(thumbnail, progress)) + .into(StateImageViewTarget(binding.thumbnail, binding.progress)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceEnhancedEHentaiListHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceEnhancedEHentaiListHolder.kt index 0eac7f7de..b117cc214 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceEnhancedEHentaiListHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceEnhancedEHentaiListHolder.kt @@ -11,18 +11,12 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail +import eu.kanade.tachiyomi.databinding.SourceEnhancedEhentaiListItemBinding import eu.kanade.tachiyomi.util.system.getResourceColor import exh.metadata.MetadataUtil import exh.metadata.metadata.EHentaiSearchMetadata import exh.metadata.metadata.base.RaisedSearchMetadata 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 /** @@ -36,6 +30,8 @@ import java.util.Date class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleAdapter<*>) : SourceHolder(view, adapter) { + private val binding = SourceEnhancedEhentaiListItemBinding.bind(view) + private val favoriteColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f) 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. */ override fun onSetValues(manga: Manga) { - title.text = manga.title - title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor) + binding.title.text = manga.title + binding.title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor) // 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) } @@ -59,7 +55,7 @@ class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleA if (metadata !is EHentaiSearchMetadata) return if (metadata.uploader != null) { - uploader.text = metadata.uploader + binding.uploader.text = metadata.uploader } val pair = when (metadata.genre) { @@ -77,18 +73,18 @@ class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleA } if (pair.first.isNotBlank()) { - genre.setBackgroundColor(Color.parseColor(pair.first)) - genre.text = view.context.getString(pair.second) - } else genre.text = metadata.genre + binding.genre.setBackgroundColor(Color.parseColor(pair.first)) + binding.genre.text = view.context.getString(pair.second) + } 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 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()) } else if (pageCount != null) { 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) { - GlideApp.with(view.context).clear(thumbnail) + GlideApp.with(view.context).clear(binding.thumbnail) if (!manga.thumbnail_url.isNullOrEmpty()) { val radius = view.context.resources.getDimensionPixelSize(R.dimen.card_radius) @@ -107,7 +103,7 @@ class SourceEnhancedEHentaiListHolder(private val view: View, adapter: FlexibleA .apply(requestOptions) .dontAnimate() .placeholder(android.R.color.transparent) - .into(thumbnail) + .into(binding.thumbnail) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceGridHolder.kt index 6bfbf3fb3..88c5bdfca 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceGridHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceGridHolder.kt @@ -8,14 +8,10 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail +import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding import eu.kanade.tachiyomi.widget.StateImageViewTarget import exh.metadata.metadata.MangaDexSearchMetadata 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. @@ -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<*>) : SourceHolder(view, adapter) { + private val binding = SourceComfortableGridItemBinding.bind(view) + /** * Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this * 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) { // Set manga title - title.text = manga.title + binding.title.text = manga.title // 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) } @@ -48,8 +46,8 @@ open class SourceGridHolder(private val view: View, private val adapter: Flexibl override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) { if (metadata is MangaDexSearchMetadata) { metadata.follow_status?.let { - local_text.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it] - local_text.isVisible = true + binding.localText.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it] + binding.localText.isVisible = true } } } @@ -57,16 +55,16 @@ open class SourceGridHolder(private val view: View, private val adapter: Flexibl override fun setImage(manga: Manga) { // 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()) { GlideApp.with(view.context) .load(manga.toMangaThumbnail()) .diskCacheStrategy(DiskCacheStrategy.DATA) .centerCrop() .placeholder(android.R.color.transparent) - .into(StateImageViewTarget(thumbnail, progress)) + .into(StateImageViewTarget(binding.thumbnail, binding.progress)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceHolder.kt index 3533170d2..6629be984 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceHolder.kt @@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.browse.source.browse import android.view.View import eu.davidea.flexibleadapter.FlexibleAdapter +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.data.database.models.Manga -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder import exh.metadata.metadata.base.RaisedSearchMetadata /** @@ -13,7 +13,7 @@ import exh.metadata.metadata.base.RaisedSearchMetadata * @param adapter the adapter handling this holder. */ abstract class SourceHolder(view: View, adapter: FlexibleAdapter<*>) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { /** * Method called from [CatalogueAdapter.onBindViewHolder]. It updates the data for this diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceListHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceListHolder.kt index cfebb9c7c..869370238 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceListHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceListHolder.kt @@ -11,12 +11,10 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail +import eu.kanade.tachiyomi.databinding.SourceListItemBinding import eu.kanade.tachiyomi.util.system.getResourceColor import exh.metadata.metadata.MangaDexSearchMetadata 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. @@ -29,6 +27,8 @@ import kotlinx.android.synthetic.main.source_list_item.title class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) : SourceHolder(view, adapter) { + private val binding = SourceListItemBinding.bind(view) + private val favoriteColor = view.context.getResourceColor(R.attr.colorOnSurface, 0.38f) 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. */ override fun onSetValues(manga: Manga) { - title.text = manga.title - title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor) + binding.title.text = manga.title + binding.title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor) // 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) } @@ -52,15 +52,15 @@ class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) : override fun onSetMetadataValues(manga: Manga, metadata: RaisedSearchMetadata) { if (metadata is MangaDexSearchMetadata) { metadata.follow_status?.let { - local_text.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it] - local_text.isVisible = true + binding.localText.text = itemView.context.resources.getStringArray(R.array.md_follows_options).asList()[it] + binding.localText.isVisible = true } } } // SY <-- override fun setImage(manga: Manga) { - GlideApp.with(view.context).clear(thumbnail) + GlideApp.with(view.context).clear(binding.thumbnail) if (!manga.thumbnail_url.isNullOrEmpty()) { val radius = view.context.resources.getDimensionPixelSize(R.dimen.card_radius) @@ -71,7 +71,7 @@ class SourceListHolder(private val view: View, adapter: FlexibleAdapter<*>) : .apply(requestOptions) .dontAnimate() .placeholder(android.R.color.transparent) - .into(thumbnail) + .into(binding.thumbnail) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchCardHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchCardHolder.kt index 97d217b4c..8b0310f1f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchCardHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchCardHolder.kt @@ -2,18 +2,17 @@ package eu.kanade.tachiyomi.ui.browse.source.globalsearch import android.view.View 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.glide.GlideApp 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 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) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = GlobalSearchControllerCardItemBinding.bind(view) init { // Call onMangaClickListener when item is pressed. @@ -33,17 +32,17 @@ class GlobalSearchCardHolder(view: View, adapter: GlobalSearchCardAdapter) : } fun bind(manga: Manga) { - card.clipToOutline = true + binding.card.clipToOutline = true - title.text = manga.title + binding.title.text = manga.title // 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) } fun setImage(manga: Manga) { - GlideApp.with(itemView.context).clear(cover) + GlideApp.with(itemView.context).clear(binding.cover) if (!manga.thumbnail_url.isNullOrEmpty()) { GlideApp.with(itemView.context) .load(manga.toMangaThumbnail()) @@ -51,7 +50,7 @@ class GlobalSearchCardHolder(view: View, adapter: GlobalSearchCardAdapter) : .centerCrop() .skipMemoryCache(true) .placeholder(android.R.color.transparent) - .into(StateImageViewTarget(cover, progress)) + .into(StateImageViewTarget(binding.cover, binding.progress)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchHolder.kt index 50a7244a9..c02b29d77 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchHolder.kt @@ -3,16 +3,11 @@ package eu.kanade.tachiyomi.ui.browse.source.globalsearch import android.view.View import androidx.core.view.isVisible import androidx.recyclerview.widget.LinearLayoutManager +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.data.database.models.Manga +import eu.kanade.tachiyomi.databinding.GlobalSearchControllerCardBinding import eu.kanade.tachiyomi.source.LocalSource -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder 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. @@ -21,7 +16,9 @@ import kotlinx.android.synthetic.main.global_search_controller_card.title_wrappe * @param adapter instance of [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. @@ -32,10 +29,10 @@ class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) : init { // Set layout horizontal. - recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false) - recycler.adapter = mangaAdapter + binding.recycler.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false) + binding.recycler.adapter = mangaAdapter - title_wrapper.setOnClickListener { + binding.titleWrapper.setOnClickListener { adapter.getItem(bindingAdapterPosition)?.let { adapter.titleClickListener.onTitleClick(it.source) } @@ -53,21 +50,21 @@ class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) : val titlePrefix = if (item.highlighted) "▶ " else "" - title.text = titlePrefix + source.name - subtitle.isVisible = source !is LocalSource - subtitle.text = LocaleHelper.getDisplayName(source.lang) + binding.title.text = titlePrefix + source.name + binding.subtitle.isVisible = source !is LocalSource + binding.subtitle.text = LocaleHelper.getDisplayName(source.lang) when { results == null -> { - progress.isVisible = true + binding.progress.isVisible = true showResultsHolder() } results.isEmpty() -> { - progress.isVisible = false + binding.progress.isVisible = false showNoResults() } else -> { - progress.isVisible = false + binding.progress.isVisible = false showResultsHolder() } } @@ -104,10 +101,10 @@ class GlobalSearchHolder(view: View, val adapter: GlobalSearchAdapter) : } private fun showResultsHolder() { - no_results_found.isVisible = false + binding.noResultsFound.isVisible = false } private fun showNoResults() { - no_results_found.isVisible = true + binding.noResultsFound.isVisible = true } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexCardHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexCardHolder.kt index 816601313..3ae3391c9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexCardHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexCardHolder.kt @@ -2,18 +2,17 @@ package eu.kanade.tachiyomi.ui.browse.source.index import android.view.View 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.glide.GlideApp 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 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) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = GlobalSearchControllerCardItemBinding.bind(view) init { // Call onMangaClickListener when item is pressed. @@ -33,17 +32,17 @@ class IndexCardHolder(view: View, adapter: IndexCardAdapter) : } fun bind(manga: Manga) { - card.clipToOutline = true + binding.card.clipToOutline = true - title.text = manga.title + binding.title.text = manga.title // 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) } fun setImage(manga: Manga) { - GlideApp.with(itemView.context).clear(cover) + GlideApp.with(itemView.context).clear(binding.cover) if (!manga.thumbnail_url.isNullOrEmpty()) { GlideApp.with(itemView.context) .load(manga.toMangaThumbnail()) @@ -51,7 +50,7 @@ class IndexCardHolder(view: View, adapter: IndexCardAdapter) : .centerCrop() .skipMemoryCache(true) .placeholder(android.R.color.transparent) - .into(StateImageViewTarget(cover, progress)) + .into(StateImageViewTarget(binding.cover, binding.progress)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryHolder.kt index 22adfbc0f..98ad8306c 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryHolder.kt @@ -1,10 +1,9 @@ package eu.kanade.tachiyomi.ui.category import android.view.View +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.data.database.models.Category -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.categories_item.reorder -import kotlinx.android.synthetic.main.categories_item.title +import eu.kanade.tachiyomi.databinding.CategoriesItemBinding /** * 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 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 { - setDragHandleView(reorder) + setDragHandleView(binding.reorder) } /** @@ -24,7 +25,7 @@ class CategoryHolder(view: View, val adapter: CategoryAdapter) : BaseFlexibleVie * @param category The category to bind. */ fun bind(category: Category) { - title.text = category.name + binding.title.text = category.name } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesHolder.kt index a6a2943d4..b1685bef9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesHolder.kt @@ -2,9 +2,8 @@ package eu.kanade.tachiyomi.ui.category.biometric import android.view.View import androidx.core.view.isVisible -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.categories_item.reorder -import kotlinx.android.synthetic.main.categories_item.title +import eu.davidea.viewholders.FlexibleViewHolder +import eu.kanade.tachiyomi.databinding.CategoriesItemBinding import kotlin.time.ExperimentalTime /** @@ -13,7 +12,10 @@ import kotlin.time.ExperimentalTime * @param view The view used by category items. * @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. * @@ -22,7 +24,7 @@ class BiometricTimesHolder(view: View, val adapter: BiometricTimesAdapter) : Bas @OptIn(ExperimentalTime::class) fun bind(timeRange: TimeRange) { // Set capitalized title. - title.text = timeRange.getFormattedString(itemView.context) - reorder.isVisible = false + binding.title.text = timeRange.getFormattedString(itemView.context) + binding.reorder.isVisible = false } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagHolder.kt index 4caa83849..bb7ce8532 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagHolder.kt @@ -1,9 +1,8 @@ package eu.kanade.tachiyomi.ui.category.genre import android.view.View -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.categories_item.reorder -import kotlinx.android.synthetic.main.categories_item.title +import eu.davidea.viewholders.FlexibleViewHolder +import eu.kanade.tachiyomi.databinding.CategoriesItemBinding /** * 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 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 { - setDragHandleView(reorder) + setDragHandleView(binding.reorder) } /** @@ -23,7 +24,7 @@ class SortTagHolder(view: View, val adapter: SortTagAdapter) : BaseFlexibleViewH * @param tag The tag to bind. */ fun bind(tag: String) { - title.text = tag + binding.title.text = tag } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/sources/SourceCategoryHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/sources/SourceCategoryHolder.kt index 17c1a3313..1bdfd82cf 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/sources/SourceCategoryHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/sources/SourceCategoryHolder.kt @@ -2,9 +2,8 @@ package eu.kanade.tachiyomi.ui.category.sources import android.view.View import androidx.core.view.isVisible -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.categories_item.reorder -import kotlinx.android.synthetic.main.categories_item.title +import eu.davidea.viewholders.FlexibleViewHolder +import eu.kanade.tachiyomi.databinding.CategoriesItemBinding /** * 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 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. * @@ -20,7 +22,7 @@ class SourceCategoryHolder(view: View, val adapter: SourceCategoryAdapter) : Bas */ fun bind(category: String) { // Set capitalized title. - title.text = category - reorder.isVisible = false + binding.title.text = category + binding.reorder.isVisible = false } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt index 45fc79e69..9668a68ea 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt @@ -1,16 +1,11 @@ package eu.kanade.tachiyomi.ui.download import android.view.View +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R 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 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. @@ -20,11 +15,13 @@ import kotlinx.android.synthetic.main.download_item.reorder * @constructor creates a new download holder. */ class DownloadHolder(private val view: View, val adapter: DownloadAdapter) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = DownloadItemBinding.bind(view) init { - setDragHandleView(reorder) - menu.setOnClickListener { it.post { showPopupMenu(it) } } + setDragHandleView(binding.reorder) + binding.menu.setOnClickListener { it.post { showPopupMenu(it) } } } private lateinit var download: Download @@ -37,19 +34,19 @@ class DownloadHolder(private val view: View, val adapter: DownloadAdapter) : fun bind(download: Download) { this.download = download // Update the chapter name. - chapter_title.text = download.chapter.name + binding.chapterTitle.text = download.chapter.name // 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 val pages = download.pages if (pages == null) { - download_progress.progress = 0 - download_progress.max = 1 - download_progress_text.text = "" + binding.downloadProgress.progress = 0 + binding.downloadProgress.max = 1 + binding.downloadProgressText.text = "" } else { - download_progress.max = pages.size * 100 + binding.downloadProgress.max = pages.size * 100 notifyProgress() notifyDownloadedPages() } @@ -60,10 +57,10 @@ class DownloadHolder(private val view: View, val adapter: DownloadAdapter) : */ fun notifyProgress() { val pages = download.pages ?: return - if (download_progress.max == 1) { - download_progress.max = pages.size * 100 + if (binding.downloadProgress.max == 1) { + 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() { 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) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryComfortableGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryComfortableGridHolder.kt index 0178df889..eeafa42e7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryComfortableGridHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryComfortableGridHolder.kt @@ -8,15 +8,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail +import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding 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.onEach import reactivecircus.flowbinding.android.view.clicks @@ -38,9 +31,11 @@ class LibraryComfortableGridHolder( // SY <-- ) : LibraryCompactGridHolder(view, adapter) { + private val binding = SourceComfortableGridItemBinding.bind(view) + // SY --> init { - play_layout.clicks() + binding.playLayout.clicks() .onEach { playButtonClicked() } @@ -59,41 +54,41 @@ class LibraryComfortableGridHolder( manga = item.manga // SY <-- // Update the title of the manga. - title.text = item.manga.title + binding.title.text = item.manga.title // SY --> - title.isVisible = hasTitle + binding.title.isVisible = hasTitle // SY <-- // For rounded corners - badges.clipToOutline = true + binding.badges.clipToOutline = true // Update the unread count and its visibility. - with(unread_text) { + with(binding.unreadText) { isVisible = item.unreadCount > 0 text = item.unreadCount.toString() } // Update the download count and its visibility. - with(download_text) { + with(binding.downloadText) { isVisible = item.downloadCount > 0 text = item.downloadCount.toString() } // set local visibility if its local manga - local_text.isVisible = item.manga.isLocal() + binding.localText.isVisible = item.manga.isLocal() // SY --> - play_layout.isVisible = (item.manga.unread > 0 && item.startReadingButton) + binding.playLayout.isVisible = (item.manga.unread > 0 && item.startReadingButton) // SY <-- // For rounded corners - card.clipToOutline = true + binding.card.clipToOutline = true // Update the cover. - GlideApp.with(view.context).clear(thumbnail) + GlideApp.with(view.context).clear(binding.thumbnail) GlideApp.with(view.context) .load(item.manga.toMangaThumbnail()) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .centerCrop() .dontAnimate() - .into(thumbnail) + .into(binding.thumbnail) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCompactGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCompactGridHolder.kt index c54a8172e..5896b7a7a 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCompactGridHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCompactGridHolder.kt @@ -9,15 +9,8 @@ import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail +import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding 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.onEach import reactivecircus.flowbinding.android.view.clicks @@ -38,11 +31,13 @@ open class LibraryCompactGridHolder( // SY <-- ) : LibraryHolder(view, adapter) { + private val binding = SourceComfortableGridItemBinding.bind(view) + var manga: Manga? = null // SY --> init { - play_layout.clicks() + binding.playLayout.clicks() .onEach { playButtonClicked() } @@ -61,39 +56,39 @@ open class LibraryCompactGridHolder( manga = item.manga // SY <-- // Update the title of the manga. - title.text = item.manga.title + binding.title.text = item.manga.title // For rounded corners - badges.clipToOutline = true + binding.badges.clipToOutline = true // Update the unread count and its visibility. - with(unread_text) { + with(binding.unreadText) { isVisible = item.unreadCount > 0 text = item.unreadCount.toString() } // Update the download count and its visibility. - with(download_text) { + with(binding.downloadText) { isVisible = item.downloadCount > 0 text = item.downloadCount.toString() } // set local visibility if its local manga - local_text.isVisible = item.manga.isLocal() + binding.localText.isVisible = item.manga.isLocal() // SY --> - play_layout.isVisible = (item.manga.unread > 0 && item.startReadingButton) + binding.playLayout.isVisible = (item.manga.unread > 0 && item.startReadingButton) // SY <-- // For rounded corners - card.clipToOutline = true + binding.card.clipToOutline = true // Update the cover. - GlideApp.with(view.context).clear(thumbnail) + GlideApp.with(view.context).clear(binding.thumbnail) GlideApp.with(view.context) .load(item.manga.toMangaThumbnail()) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .centerCrop() .dontAnimate() - .into(thumbnail) + .into(binding.thumbnail) } // SY --> diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt index 00c03b86f..e2e2c827a 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt @@ -4,7 +4,7 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import eu.davidea.flexibleadapter.FlexibleAdapter 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. @@ -18,7 +18,7 @@ abstract class LibraryHolder( // SY --> val adapter: FlexibleAdapter> // SY <-- -) : BaseFlexibleViewHolder(view, adapter) { +) : FlexibleViewHolder(view, adapter) { /** * Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt index 37cfe9202..7948ae121 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt @@ -12,13 +12,8 @@ import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail +import eu.kanade.tachiyomi.databinding.SourceListItemBinding 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. @@ -37,6 +32,8 @@ class LibraryListHolder( // SY <-- ) : LibraryHolder(view, adapter) { + private val binding = SourceListItemBinding.bind(view) + /** * Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this * holder with the given manga. @@ -45,32 +42,32 @@ class LibraryListHolder( */ override fun onSetValues(item: LibraryItem) { // Update the title of the manga. - title.text = item.manga.title + binding.title.text = item.manga.title // For rounded corners - badges.clipToOutline = true + binding.badges.clipToOutline = true // Update the unread count and its visibility. - with(unread_text) { + with(binding.unreadText) { isVisible = item.unreadCount > 0 text = item.unreadCount.toString() } // Update the download count and its visibility. - with(download_text) { + with(binding.downloadText) { isVisible = item.downloadCount > 0 text = "${item.downloadCount}" } // 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 - thumbnail.setOnClickListener { + binding.thumbnail.setOnClickListener { // Simulate long click on this view to enter selection mode onLongClick(itemView) } // 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 requestOptions = RequestOptions().transform(CenterCrop(), RoundedCorners(radius)) @@ -79,6 +76,6 @@ class LibraryListHolder( .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .apply(requestOptions) .dontAnimate() - .into(thumbnail) + .into(binding.thumbnail) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 02e6f7d8c..3f97f6ac7 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -480,8 +480,8 @@ class MainActivity : BaseActivity() { } /** - * Used to manually offset a view within the activity's child views that might be cut off due to the - * collapsing AppBarLayout. + * Used to manually offset a view within the activity's child views that might be cut off due to + * the collapsing AppBarLayout. */ fun fixViewToBottom(view: View) { binding.appbar.addOnOffsetChangedListener( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt index 65e36d997..61b34a6d5 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt @@ -5,28 +5,27 @@ import android.text.SpannableStringBuilder import android.text.style.ForegroundColorSpan import android.view.View import androidx.core.view.isVisible +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga 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.EXH_SOURCE_ID 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 class ChapterHolder( view: View, private val adapter: ChaptersAdapter -) : BaseFlexibleViewHolder(view, adapter) { +) : FlexibleViewHolder(view, adapter) { + + private val binding = ChaptersItemBinding.bind(view) fun bind(item: ChapterItem, manga: Manga) { val chapter = item.chapter - chapter_title.text = when (manga.displayMode) { + binding.chapterTitle.text = when (manga.displayMode) { Manga.DISPLAY_NUMBER -> { val number = adapter.decimalFormat.format(chapter.chapter_number.toDouble()) itemView.context.getString(R.string.display_mode_chapter, number) @@ -40,16 +39,16 @@ class ChapterHolder( chapter.bookmark -> adapter.bookmarkedColor else -> adapter.unreadColor } - chapter_title.setTextColor(chapterTitleColor) + binding.chapterTitle.setTextColor(chapterTitleColor) val chapterDescriptionColor = when { chapter.read -> adapter.readColor chapter.bookmark -> adapter.bookmarkedColor else -> adapter.unreadColorSecondary } - chapter_description.setTextColor(chapterDescriptionColor) + binding.chapterDescription.setTextColor(chapterDescriptionColor) - bookmark_icon.isVisible = chapter.bookmark + binding.bookmarkIcon.isVisible = chapter.bookmark val descriptions = mutableListOf() @@ -70,15 +69,15 @@ class ChapterHolder( } if (descriptions.isNotEmpty()) { - chapter_description.text = descriptions.joinTo(SpannableStringBuilder(), " • ") + binding.chapterDescription.text = descriptions.joinTo(SpannableStringBuilder(), " • ") } else { - chapter_description.text = "" + binding.chapterDescription.text = "" } notifyStatus(item.status) } - fun notifyStatus(status: Int) = with(download_text) { + fun notifyStatus(status: Int) = with(binding.downloadText) { when (status) { Download.QUEUE -> setText(R.string.chapter_queued) Download.DOWNLOADING -> setText(R.string.chapter_downloading) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedMangaHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedMangaHolder.kt index ed592a60d..cdd306980 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedMangaHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedMangaHolder.kt @@ -2,18 +2,18 @@ package eu.kanade.tachiyomi.ui.manga.merged import android.view.View import com.bumptech.glide.load.engine.DiskCacheStrategy +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.glide.toMangaThumbnail import eu.kanade.tachiyomi.databinding.EditMergedSettingsItemBinding import eu.kanade.tachiyomi.source.SourceManager -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder import eu.kanade.tachiyomi.util.system.getResourceColor import exh.merged.sql.models.MergedMangaReference import uy.kohesive.injekt.Injekt 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 var binding = EditMergedSettingsItemBinding.bind(view) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/history/HistoryHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/history/HistoryHolder.kt index 595bf640c..d96ab429d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/history/HistoryHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/history/HistoryHolder.kt @@ -2,18 +2,13 @@ package eu.kanade.tachiyomi.ui.recent.history import android.view.View import com.bumptech.glide.load.engine.DiskCacheStrategy +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.MangaChapterHistory import eu.kanade.tachiyomi.data.glide.GlideApp 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 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 /** @@ -28,18 +23,20 @@ import java.util.Date class HistoryHolder( view: View, val adapter: HistoryAdapter -) : BaseFlexibleViewHolder(view, adapter) { +) : FlexibleViewHolder(view, adapter) { + + private val binding = HistoryItemBinding.bind(view) init { - holder.setOnClickListener { + binding.holder.setOnClickListener { adapter.itemClickListener.onItemClick(bindingAdapterPosition) } - remove.setOnClickListener { + binding.remove.setOnClickListener { adapter.removeClickListener.onRemoveClick(bindingAdapterPosition) } - resume.setOnClickListener { + binding.resume.setOnClickListener { adapter.resumeClickListener.onResumeClick(bindingAdapterPosition) } } @@ -54,26 +51,26 @@ class HistoryHolder( val (manga, chapter, history) = item // Set manga title - manga_title.text = manga.title + binding.mangaTitle.text = manga.title // Set chapter number + timestamp if (chapter.chapter_number > -1f) { 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, formattedNumber, Date(history.last_read).toTimestampString() ) } else { - manga_subtitle.text = Date(history.last_read).toTimestampString() + binding.mangaSubtitle.text = Date(history.last_read).toTimestampString() } // Set cover - GlideApp.with(itemView.context).clear(cover) + GlideApp.with(itemView.context).clear(binding.cover) GlideApp.with(itemView.context) .load(manga.toMangaThumbnail()) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .centerCrop() - .into(cover) + .into(binding.cover) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt index eb3e433b9..e94417ef7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesHolder.kt @@ -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.RoundedCorners import com.bumptech.glide.request.RequestOptions +import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.glide.GlideApp 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 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 @@ -27,7 +24,9 @@ import kotlinx.android.synthetic.main.updates_item.manga_title * @constructor creates a new recent chapter holder. */ 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 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 init { - manga_cover.setOnClickListener { + binding.mangaCover.setOnClickListener { adapter.coverClickListener.onCoverClick(bindingAdapterPosition) } } @@ -52,25 +51,25 @@ class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter) this.item = item // Set chapter title - chapter_title.text = item.chapter.name + binding.chapterTitle.text = item.chapter.name // Set manga title - manga_title.text = item.manga.title + binding.mangaTitle.text = item.manga.title // Check if chapter is read and set correct color if (item.chapter.read) { - chapter_title.setTextColor(readColor) - manga_title.setTextColor(readColor) + binding.chapterTitle.setTextColor(readColor) + binding.mangaTitle.setTextColor(readColor) } else { - chapter_title.setTextColor(unreadColor) - manga_title.setTextColor(unreadColor) + binding.chapterTitle.setTextColor(unreadColor) + binding.mangaTitle.setTextColor(unreadColor) } // Set chapter status notifyStatus(item.status) // 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 requestOptions = RequestOptions().transform(CenterCrop(), RoundedCorners(radius)) @@ -79,7 +78,7 @@ class UpdatesHolder(private val view: View, private val adapter: UpdatesAdapter) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .apply(requestOptions) .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 */ - fun notifyStatus(status: Int) = with(download_text) { + fun notifyStatus(status: Int) = with(binding.downloadText) { when (status) { Download.QUEUE -> setText(R.string.chapter_queued) Download.DOWNLOADING -> setText(R.string.chapter_downloading) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/search/SettingsSearchHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/search/SettingsSearchHolder.kt index b63a15cd6..1dd79a22c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/search/SettingsSearchHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/search/SettingsSearchHolder.kt @@ -1,11 +1,8 @@ package eu.kanade.tachiyomi.ui.setting.search import android.view.View -import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.settings_search_controller_card.search_result_pref_breadcrumb -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 eu.davidea.viewholders.FlexibleViewHolder +import eu.kanade.tachiyomi.databinding.SettingsSearchControllerCardBinding import kotlin.reflect.full.createInstance /** @@ -15,10 +12,12 @@ import kotlin.reflect.full.createInstance * @param adapter instance of [SettingsSearchAdapter] */ class SettingsSearchHolder(view: View, val adapter: SettingsSearchAdapter) : - BaseFlexibleViewHolder(view, adapter) { + FlexibleViewHolder(view, adapter) { + + private val binding = SettingsSearchControllerCardBinding.bind(view) init { - title_wrapper.setOnClickListener { + binding.titleWrapper.setOnClickListener { adapter.getItem(bindingAdapterPosition)?.let { val ctrl = it.settingsSearchResult.searchController::class.createInstance() ctrl.preferenceKey = it.settingsSearchResult.key @@ -35,8 +34,8 @@ class SettingsSearchHolder(view: View, val adapter: SettingsSearchAdapter) : * @param item item of card. */ fun bind(item: SettingsSearchItem) { - search_result_pref_title.text = item.settingsSearchResult.title - search_result_pref_summary.text = item.settingsSearchResult.summary - search_result_pref_breadcrumb.text = item.settingsSearchResult.breadcrumb + binding.searchResultPrefTitle.text = item.settingsSearchResult.title + binding.searchResultPrefSummary.text = item.settingsSearchResult.summary + binding.searchResultPrefBreadcrumb.text = item.settingsSearchResult.breadcrumb } }