Remove extra padding when using list with Per Category setting (#5997)

* Remove padding when using list with Per Category setting (fixes #5636)

* Add view type to RecyclerViewPagerAdapter

Correctly this time (ノ◕ヮ◕)ノ*:・゚✧

* Minor tweaks

(cherry picked from commit 372e5005903d12f131088df04d50799e88ba2de4)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt
This commit is contained in:
Andreas 2021-10-04 16:41:20 +02:00 committed by Jobobby04
parent 6f429cdb9c
commit bd8a7c038e
3 changed files with 46 additions and 28 deletions

View File

@ -6,6 +6,7 @@ import android.view.ViewGroup
import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Category
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.databinding.LibraryCategoryBinding import eu.kanade.tachiyomi.databinding.LibraryCategoryBinding
import eu.kanade.tachiyomi.ui.library.setting.DisplayModeSetting
import eu.kanade.tachiyomi.widget.RecyclerViewPagerAdapter import eu.kanade.tachiyomi.widget.RecyclerViewPagerAdapter
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
@ -45,15 +46,18 @@ class LibraryAdapter(
private var boundViews = arrayListOf<View>() private var boundViews = arrayListOf<View>()
private val isPerCategory by lazy { preferences.categorisedDisplaySettings().get() }
private val currentDisplayMode by lazy { preferences.libraryDisplayMode().get() }
/** /**
* Creates a new view for this adapter. * Creates a new view for this adapter.
* *
* @return a new view. * @return a new view.
*/ */
override fun createView(container: ViewGroup): View { override fun inflateView(container: ViewGroup, viewType: Int): View {
val binding = LibraryCategoryBinding.inflate(LayoutInflater.from(container.context), container, false) val binding = LibraryCategoryBinding.inflate(LayoutInflater.from(container.context), container, false)
val view: LibraryCategoryView = binding.root val view: LibraryCategoryView = binding.root
view.onCreate(controller, binding) view.onCreate(controller, binding, viewType)
return view return view
} }
@ -120,4 +124,26 @@ class LibraryAdapter(
} }
} }
} }
override fun getViewType(position: Int): Int {
val category = categories[position]
return if (isPerCategory && category.id != 0) {
if (DisplayModeSetting.fromFlag(category.displayMode) == DisplayModeSetting.LIST) {
LIST_DISPLAY_MODE
} else {
GRID_DISPLAY_MODE
}
} else {
if (currentDisplayMode == DisplayModeSetting.LIST) {
LIST_DISPLAY_MODE
} else {
GRID_DISPLAY_MODE
}
}
}
companion object {
const val LIST_DISPLAY_MODE = 1
const val GRID_DISPLAY_MODE = 2
}
} }

View File

@ -6,7 +6,8 @@ import android.view.View
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import dev.chrisbanes.insetter.applyInsetter import dev.chrisbanes.insetter.Insetter
import dev.chrisbanes.insetter.windowInsetTypesOf
import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.SelectableAdapter import eu.davidea.flexibleadapter.SelectableAdapter
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
@ -41,7 +42,6 @@ import rx.subscriptions.CompositeSubscription
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.util.ArrayDeque import java.util.ArrayDeque
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import eu.kanade.tachiyomi.ui.library.setting.DisplayModeSetting as DisplayMode
/** /**
* Fragment containing the library manga for a certain category. * Fragment containing the library manga for a certain category.
@ -93,12 +93,10 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
private var initialLoadHandle: LoadingHandle? = null private var initialLoadHandle: LoadingHandle? = null
// EXH <-- // EXH <--
fun onCreate(controller: LibraryController, binding: LibraryCategoryBinding) { fun onCreate(controller: LibraryController, binding: LibraryCategoryBinding, viewType: Int) {
this.controller = controller this.controller = controller
recycler = if (preferences.libraryDisplayMode().get() == DisplayMode.LIST && recycler = if (viewType == LibraryAdapter.LIST_DISPLAY_MODE) {
!preferences.categorisedDisplaySettings().get()
) {
(binding.swipeRefresh.inflate(R.layout.library_list_recycler) as AutofitRecyclerView).apply { (binding.swipeRefresh.inflate(R.layout.library_list_recycler) as AutofitRecyclerView).apply {
spanCount = 1 spanCount = 1
} }
@ -108,11 +106,9 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
} }
} }
recycler.applyInsetter { Insetter.builder()
type(navigationBars = true) { .paddingBottom(windowInsetTypesOf(navigationBars = true))
padding() .applyToView(recycler)
}
}
adapter = LibraryCategoryAdapter(this, controller) adapter = LibraryCategoryAdapter(this, controller)
@ -164,15 +160,6 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
fun onBind(category: Category) { fun onBind(category: Category) {
this.category = category this.category = category
// If displayMode should be set from category adjust manga count per row
if (preferences.categorisedDisplaySettings().get()) {
recycler.spanCount = if (DisplayMode.fromFlag(category.displayMode) == DisplayMode.LIST || (preferences.libraryDisplayMode().get() == DisplayMode.LIST && category.id == 0)) {
1
} else {
controller.mangaPerRow
}
}
adapter.mode = if (controller.selectedMangas.isNotEmpty()) { adapter.mode = if (controller.selectedMangas.isNotEmpty()) {
SelectableAdapter.Mode.MULTI SelectableAdapter.Mode.MULTI
} else { } else {

View File

@ -8,7 +8,7 @@ import java.util.Stack
abstract class RecyclerViewPagerAdapter : ViewStatePagerAdapter() { abstract class RecyclerViewPagerAdapter : ViewStatePagerAdapter() {
private val pool = Stack<View>() private val pool = HashMap<Int, Stack<View>>()
var recycle = true var recycle = true
set(value) { set(value) {
@ -16,17 +16,20 @@ abstract class RecyclerViewPagerAdapter : ViewStatePagerAdapter() {
field = value field = value
} }
protected abstract fun createView(container: ViewGroup): View protected abstract fun getViewType(position: Int): Int
protected abstract fun inflateView(container: ViewGroup, viewType: Int): View
protected abstract fun bindView(view: View, position: Int) protected abstract fun bindView(view: View, position: Int)
protected open fun recycleView(view: View, position: Int) {} protected open fun recycleView(view: View, position: Int) {}
override fun createView(container: ViewGroup, position: Int): View { override fun createView(container: ViewGroup, position: Int): View {
val view = if (pool.isNotEmpty()) { val viewType = getViewType(position)
pool.pop().setViewPagerPositionParam(position) val view = if (pool[viewType] != null && pool[viewType]!!.isNotEmpty()) {
pool[viewType]!!.pop().setViewPagerPositionParam(position)
} else { } else {
createView(container) inflateView(container, viewType)
} }
bindView(view, position) bindView(view, position)
return view return view
@ -34,7 +37,9 @@ abstract class RecyclerViewPagerAdapter : ViewStatePagerAdapter() {
override fun destroyView(container: ViewGroup, position: Int, view: View) { override fun destroyView(container: ViewGroup, position: Int, view: View) {
recycleView(view, position) recycleView(view, position)
if (recycle) pool.push(view) val viewType = getViewType(position)
if (pool[viewType] == null) pool[viewType] = Stack<View>()
if (recycle) pool[viewType]!!.push(view)
} }
/** /**