diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt index c97410f36..d3a8f5c06 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt @@ -358,7 +358,7 @@ open class BrowseSourceController(bundle: Bundle) : (layoutManager as GridLayoutManager).spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { override fun getSpanSize(position: Int): Int { return when (adapter?.getItemViewType(position)) { - R.layout.source_compact_grid_item, R.layout.source_comfortable_grid_item, null -> 1 + R.layout.source_compact_grid_item, R.layout.source_comfortable_grid_item -> 1 else -> spanCount } } @@ -409,12 +409,9 @@ open class BrowseSourceController(bundle: Bundle) : ) val displayItem = when (preferences.sourceDisplayMode().get()) { - DisplayModeSetting.COMPACT_GRID -> R.id.action_compact_grid - DisplayModeSetting.COMFORTABLE_GRID -> R.id.action_comfortable_grid - // SY --> - DisplayModeSetting.NO_TITLE_GRID -> R.id.action_no_title_grid - // SY <-- DisplayModeSetting.LIST -> R.id.action_list + DisplayModeSetting.COMFORTABLE_GRID -> R.id.action_comfortable_grid + else -> R.id.action_compact_grid } menu.findItem(displayItem).isChecked = true // SY --> @@ -447,9 +444,6 @@ open class BrowseSourceController(bundle: Bundle) : R.id.action_search -> expandActionViewFromInteraction = true R.id.action_compact_grid -> setDisplayMode(DisplayModeSetting.COMPACT_GRID) R.id.action_comfortable_grid -> setDisplayMode(DisplayModeSetting.COMFORTABLE_GRID) - // SY --> - R.id.action_no_title_grid -> setDisplayMode(DisplayModeSetting.NO_TITLE_GRID) - // SY <-- R.id.action_list -> setDisplayMode(DisplayModeSetting.LIST) R.id.action_open_in_web_view -> openInWebView() // SY --> 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 e9d76ca5e..a108374ed 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 @@ -23,7 +23,7 @@ import exh.metadata.metadata.base.RaisedSearchMetadata * @param adapter the adapter handling this holder. * @constructor creates a new catalogue holder. */ -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<*>) : SourceHolder(view, adapter) { override val binding = SourceComfortableGridItemBinding.bind(view) @@ -37,9 +37,6 @@ class SourceComfortableGridHolder(private val view: View, private val adapter: F override fun onSetValues(manga: Manga) { // Set manga title binding.title.text = manga.title - // SY --> - binding.title.isVisible = hasTitle - // SY <-- // Set alpha of thumbnail. binding.thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceItem.kt index 1d649c374..83e270d6c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceItem.kt @@ -28,11 +28,15 @@ class SourceItem(val manga: Manga, private val displayMode: Preference */ if (manga.isEhBasedManga() && preferences.enhancedEHentaiView().get()) R.layout.source_enhanced_ehentai_list_item - else /* SY <-- */ when (displayMode.get()) { - DisplayModeSetting.COMPACT_GRID -> R.layout.source_compact_grid_item - DisplayModeSetting.COMFORTABLE_GRID, /* SY --> */ DisplayModeSetting.NO_TITLE_GRID /* SY <-- */ -> R.layout.source_comfortable_grid_item + // SY --> + if (manga.isEhBasedManga() && preferences.enhancedEHentaiView().get()) { + return R.layout.source_enhanced_ehentai_list_item + } + // SY <-- + return when (displayMode.get()) { DisplayModeSetting.LIST -> R.layout.source_list_item + DisplayModeSetting.COMFORTABLE_GRID -> R.layout.source_comfortable_grid_item + else -> R.layout.source_compact_grid_item } } @@ -40,10 +44,28 @@ class SourceItem(val manga: Manga, private val displayMode: Preference> ): SourceHolder<*> { - return /* SY --> */ if (manga.isEhBasedManga() && preferences.enhancedEHentaiView().get()) { - SourceEnhancedEHentaiListHolder(view, adapter) - } else /* SY <-- */ when (displayMode.get()) { - DisplayModeSetting.COMPACT_GRID -> { + // SY --> + if (manga.isEhBasedManga() && preferences.enhancedEHentaiView().get()) { + return SourceEnhancedEHentaiListHolder(view, adapter) + } + // SY <-- + return when (displayMode.get()) { + DisplayModeSetting.LIST -> { + SourceListHolder(view, adapter) + } + DisplayModeSetting.COMFORTABLE_GRID -> { + val binding = SourceComfortableGridItemBinding.bind(view) + val parent = adapter.recyclerView as AutofitRecyclerView + val coverHeight = parent.itemWidth / 3 * 4 + view.apply { + binding.card.layoutParams = ConstraintLayout.LayoutParams( + MATCH_PARENT, + coverHeight + ) + } + SourceComfortableGridHolder(view, adapter) + } + else -> { val binding = SourceCompactGridItemBinding.bind(view) val parent = adapter.recyclerView as AutofitRecyclerView val coverHeight = parent.itemWidth / 3 * 4 @@ -60,21 +82,6 @@ class SourceItem(val manga: Manga, private val displayMode: Preference */, DisplayModeSetting.NO_TITLE_GRID /* SY <-- */ -> { - val binding = SourceComfortableGridItemBinding.bind(view) - val parent = adapter.recyclerView as AutofitRecyclerView - val coverHeight = parent.itemWidth / 3 * 4 - view.apply { - binding.card.layoutParams = ConstraintLayout.LayoutParams( - MATCH_PARENT, - coverHeight - ) - } - SourceComfortableGridHolder(view, adapter, displayMode.get() != DisplayModeSetting.NO_TITLE_GRID) - } - DisplayModeSetting.LIST -> { - SourceListHolder(view, adapter) - } } } 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 5a138e782..9fbf46ae9 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 @@ -24,10 +24,7 @@ import reactivecircus.flowbinding.android.view.clicks */ class LibraryComfortableGridHolder( private val view: View, - adapter: FlexibleAdapter>, - // SY --> - private val hasTitle: Boolean -// SY <-- + adapter: FlexibleAdapter> ) : LibraryHolder(view, adapter) { override val binding = SourceComfortableGridItemBinding.bind(view) @@ -56,9 +53,6 @@ class LibraryComfortableGridHolder( // SY <-- // Update the title of the manga. binding.title.text = item.manga.title - // SY --> - binding.title.isVisible = hasTitle - // SY <-- // For rounded corners binding.badges.leftBadges.clipToOutline = true diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCoverOnlyGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCoverOnlyGridHolder.kt new file mode 100644 index 000000000..b99e38636 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCoverOnlyGridHolder.kt @@ -0,0 +1,60 @@ +package eu.kanade.tachiyomi.ui.library + +import android.view.View +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import coil.clear +import eu.davidea.flexibleadapter.FlexibleAdapter +import eu.davidea.flexibleadapter.items.IFlexible +import eu.kanade.tachiyomi.databinding.SourceCoverOnlyGridItemBinding +import eu.kanade.tachiyomi.util.view.loadAnyAutoPause + +class LibraryCoverOnlyGridHolder( + view: View, + adapter: FlexibleAdapter> +) : LibraryHolder(view, adapter) { + + override val binding = SourceCoverOnlyGridItemBinding.bind(view) + + /** + * Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this + * holder with the given manga. + * + * @param item the manga item to bind. + */ + override fun onSetValues(item: LibraryItem) { + // For rounded corners + binding.badges.leftBadges.clipToOutline = true + binding.badges.rightBadges.clipToOutline = true + + // Update the unread count and its visibility. + with(binding.badges.unreadText) { + isVisible = item.unreadCount > 0 + text = item.unreadCount.toString() + } + // Update the download count and its visibility. + with(binding.badges.downloadText) { + isVisible = item.downloadCount > 0 + text = item.downloadCount.toString() + } + // Update the source language and its visibility + with(binding.badges.languageText) { + isVisible = item.sourceLanguage.isNotEmpty() + text = item.sourceLanguage + } + // set local visibility if its local manga + binding.badges.localText.isVisible = item.isLocal + + // For rounded corners + binding.card.clipToOutline = true + + // Update the cover. + binding.thumbnail.clear() + if (!item.manga.thumbnail_url.isNullOrEmpty()) { + binding.thumbnail.loadAnyAutoPause(item.manga) + } else { + // Set manga title + binding.title.text = item.manga.title + } + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt index 36449dbe3..9820cef1b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt @@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.LibraryManga import eu.kanade.tachiyomi.databinding.SourceComfortableGridItemBinding import eu.kanade.tachiyomi.databinding.SourceCompactGridItemBinding +import eu.kanade.tachiyomi.databinding.SourceCoverOnlyGridItemBinding import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.library.setting.DisplayModeSetting import eu.kanade.tachiyomi.widget.AutofitRecyclerView @@ -51,13 +52,14 @@ class LibraryItem( override fun getLayoutRes(): Int { return when (getDisplayMode()) { DisplayModeSetting.COMPACT_GRID -> R.layout.source_compact_grid_item - DisplayModeSetting.COMFORTABLE_GRID /* SY --> */, DisplayModeSetting.NO_TITLE_GRID /* SY <-- */ -> R.layout.source_comfortable_grid_item + DisplayModeSetting.COMFORTABLE_GRID -> R.layout.source_comfortable_grid_item + DisplayModeSetting.COVER_ONLY_GRID -> R.layout.source_cover_only_grid_item DisplayModeSetting.LIST -> R.layout.source_list_item } } override fun createViewHolder(view: View, adapter: FlexibleAdapter>): LibraryHolder<*> { - return when (val displayMode = getDisplayMode()) { + return when (getDisplayMode()) { DisplayModeSetting.COMPACT_GRID -> { val binding = SourceCompactGridItemBinding.bind(view) val parent = adapter.recyclerView as AutofitRecyclerView @@ -72,7 +74,7 @@ class LibraryItem( } LibraryCompactGridHolder(view, adapter) } - DisplayModeSetting.COMFORTABLE_GRID /* SY --> */, DisplayModeSetting.NO_TITLE_GRID /* SY <-- */ -> { + DisplayModeSetting.COMFORTABLE_GRID -> { val binding = SourceComfortableGridItemBinding.bind(view) val parent = adapter.recyclerView as AutofitRecyclerView val coverHeight = parent.itemWidth / 3 * 4 @@ -82,7 +84,19 @@ class LibraryItem( coverHeight ) } - LibraryComfortableGridHolder(view, adapter, displayMode != DisplayModeSetting.NO_TITLE_GRID) + LibraryComfortableGridHolder(view, adapter) + } + DisplayModeSetting.COVER_ONLY_GRID -> { + val binding = SourceCoverOnlyGridItemBinding.bind(view) + val parent = adapter.recyclerView as AutofitRecyclerView + val coverHeight = parent.itemWidth / 3 * 4 + view.apply { + binding.card.layoutParams = ConstraintLayout.LayoutParams( + MATCH_PARENT, + coverHeight + ) + } + LibraryCoverOnlyGridHolder(view, adapter) } DisplayModeSetting.LIST -> { LibraryListHolder(view, adapter) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt index 9f7c5224a..f5520e3ab 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt @@ -375,15 +375,11 @@ class LibrarySettingsSheet( private val compactGrid = Item.Radio(R.string.action_display_grid, this) private val comfortableGrid = Item.Radio(R.string.action_display_comfortable_grid, this) - - // SY --> - private val noTitleGrid = Item.Radio(R.string.action_display_no_title_grid, this) - - // SY <-- + private val coverOnlyGrid = Item.Radio(R.string.action_display_cover_only_grid, this) private val list = Item.Radio(R.string.action_display_list, this) override val header = Item.Header(R.string.action_display_mode) - override val items = listOf(compactGrid, comfortableGrid, /* SY --> */ noTitleGrid /* SY <-- */, list) + override val items = listOf(compactGrid, comfortableGrid, coverOnlyGrid, list) override val footer = null override fun initModels() { @@ -407,9 +403,7 @@ class LibrarySettingsSheet( fun setGroupSelections(mode: DisplayModeSetting) { compactGrid.checked = mode == DisplayModeSetting.COMPACT_GRID comfortableGrid.checked = mode == DisplayModeSetting.COMFORTABLE_GRID - // SY --> - noTitleGrid.checked = mode == DisplayModeSetting.NO_TITLE_GRID - // SY <-- + coverOnlyGrid.checked = mode == DisplayModeSetting.COVER_ONLY_GRID list.checked = mode == DisplayModeSetting.LIST } @@ -417,9 +411,7 @@ class LibrarySettingsSheet( val flag = when (item) { compactGrid -> DisplayModeSetting.COMPACT_GRID comfortableGrid -> DisplayModeSetting.COMFORTABLE_GRID - // SY --> - noTitleGrid -> DisplayModeSetting.NO_TITLE_GRID - // SY <-- + coverOnlyGrid -> DisplayModeSetting.COVER_ONLY_GRID list -> DisplayModeSetting.LIST else -> throw NotImplementedError("Unknown display mode") } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/setting/DisplayModeSetting.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/setting/DisplayModeSetting.kt index d988e1236..c84e70cfa 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/setting/DisplayModeSetting.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/setting/DisplayModeSetting.kt @@ -4,10 +4,7 @@ enum class DisplayModeSetting(val flag: Int) { COMPACT_GRID(0b00000000), COMFORTABLE_GRID(0b00000001), LIST(0b00000010), - - // SY --> - NO_TITLE_GRID(0b00000011); - // SY <--; + COVER_ONLY_GRID(0b00000011); companion object { const val MASK = 0b00000011 diff --git a/app/src/main/res/layout/source_cover_only_grid_item.xml b/app/src/main/res/layout/source_cover_only_grid_item.xml new file mode 100644 index 000000000..dafe66452 --- /dev/null +++ b/app/src/main/res/layout/source_cover_only_grid_item.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5b577f676..afa4e608f 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -91,6 +91,7 @@ Compact grid Comfortable grid List + Cover only grid Downloaded chapters Unread chapters Local manga