mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -6,6 +6,7 @@ import android.view.ViewGroup | ||||
| import eu.kanade.tachiyomi.data.database.models.Category | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.databinding.LibraryCategoryBinding | ||||
| import eu.kanade.tachiyomi.ui.library.setting.DisplayModeSetting | ||||
| import eu.kanade.tachiyomi.widget.RecyclerViewPagerAdapter | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| @@ -45,15 +46,18 @@ class LibraryAdapter( | ||||
|  | ||||
|     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. | ||||
|      * | ||||
|      * @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 view: LibraryCategoryView = binding.root | ||||
|         view.onCreate(controller, binding) | ||||
|         view.onCreate(controller, binding, viewType) | ||||
|         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 | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -5,14 +5,14 @@ import android.util.AttributeSet | ||||
| import android.view.View | ||||
| import android.widget.FrameLayout | ||||
| import androidx.recyclerview.widget.LinearLayoutManager | ||||
| import dev.chrisbanes.insetter.applyInsetter | ||||
| import dev.chrisbanes.insetter.Insetter | ||||
| import dev.chrisbanes.insetter.windowInsetTypesOf | ||||
| import eu.davidea.flexibleadapter.FlexibleAdapter | ||||
| import eu.davidea.flexibleadapter.SelectableAdapter | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.database.models.Category | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.data.library.LibraryUpdateService | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.databinding.LibraryCategoryBinding | ||||
| import eu.kanade.tachiyomi.ui.main.MainActivity | ||||
| import eu.kanade.tachiyomi.util.lang.plusAssign | ||||
| @@ -27,9 +27,7 @@ import kotlinx.coroutines.flow.onEach | ||||
| import reactivecircus.flowbinding.recyclerview.scrollStateChanges | ||||
| import reactivecircus.flowbinding.swiperefreshlayout.refreshes | ||||
| import rx.subscriptions.CompositeSubscription | ||||
| import uy.kohesive.injekt.injectLazy | ||||
| import java.util.ArrayDeque | ||||
| import eu.kanade.tachiyomi.ui.library.setting.DisplayModeSetting as DisplayMode | ||||
|  | ||||
| /** | ||||
|  * Fragment containing the library manga for a certain category. | ||||
| @@ -41,8 +39,6 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att | ||||
|  | ||||
|     private val scope = MainScope() | ||||
|  | ||||
|     private val preferences: PreferencesHelper by injectLazy() | ||||
|  | ||||
|     /** | ||||
|      * The fragment containing this view. | ||||
|      */ | ||||
| @@ -71,12 +67,10 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att | ||||
|  | ||||
|     private var lastClickPositionStack = ArrayDeque(listOf(-1)) | ||||
|  | ||||
|     fun onCreate(controller: LibraryController, binding: LibraryCategoryBinding) { | ||||
|     fun onCreate(controller: LibraryController, binding: LibraryCategoryBinding, viewType: Int) { | ||||
|         this.controller = controller | ||||
|  | ||||
|         recycler = if (preferences.libraryDisplayMode().get() == DisplayMode.LIST && | ||||
|             !preferences.categorisedDisplaySettings().get() | ||||
|         ) { | ||||
|         recycler = if (viewType == LibraryAdapter.LIST_DISPLAY_MODE) { | ||||
|             (binding.swipeRefresh.inflate(R.layout.library_list_recycler) as AutofitRecyclerView).apply { | ||||
|                 spanCount = 1 | ||||
|             } | ||||
| @@ -86,11 +80,9 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         recycler.applyInsetter { | ||||
|             type(navigationBars = true) { | ||||
|                 padding() | ||||
|             } | ||||
|         } | ||||
|         Insetter.builder() | ||||
|             .paddingBottom(windowInsetTypesOf(navigationBars = true)) | ||||
|             .applyToView(recycler) | ||||
|  | ||||
|         adapter = LibraryCategoryAdapter(this) | ||||
|  | ||||
| @@ -129,15 +121,6 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att | ||||
|     fun onBind(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()) { | ||||
|             SelectableAdapter.Mode.MULTI | ||||
|         } else { | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import java.util.Stack | ||||
|  | ||||
| abstract class RecyclerViewPagerAdapter : ViewStatePagerAdapter() { | ||||
|  | ||||
|     private val pool = Stack<View>() | ||||
|     private val pool = HashMap<Int, Stack<View>>() | ||||
|  | ||||
|     var recycle = true | ||||
|         set(value) { | ||||
| @@ -16,17 +16,20 @@ abstract class RecyclerViewPagerAdapter : ViewStatePagerAdapter() { | ||||
|             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 open fun recycleView(view: View, position: Int) {} | ||||
|  | ||||
|     override fun createView(container: ViewGroup, position: Int): View { | ||||
|         val view = if (pool.isNotEmpty()) { | ||||
|             pool.pop().setViewPagerPositionParam(position) | ||||
|         val viewType = getViewType(position) | ||||
|         val view = if (pool[viewType] != null && pool[viewType]!!.isNotEmpty()) { | ||||
|             pool[viewType]!!.pop().setViewPagerPositionParam(position) | ||||
|         } else { | ||||
|             createView(container) | ||||
|             inflateView(container, viewType) | ||||
|         } | ||||
|         bindView(view, position) | ||||
|         return view | ||||
| @@ -34,7 +37,9 @@ abstract class RecyclerViewPagerAdapter : ViewStatePagerAdapter() { | ||||
|  | ||||
|     override fun destroyView(container: ViewGroup, position: Int, view: View) { | ||||
|         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) | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user