mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Revert ViewPager2 library
This commit is contained in:
		| @@ -1,20 +1,18 @@ | ||||
| package eu.kanade.tachiyomi.ui.library | ||||
|  | ||||
| import android.content.Context | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import androidx.recyclerview.widget.RecyclerView | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.database.models.Category | ||||
| import eu.kanade.tachiyomi.databinding.LibraryCategoryBinding | ||||
| import eu.kanade.tachiyomi.util.view.inflate | ||||
| import eu.kanade.tachiyomi.widget.RecyclerViewPagerAdapter | ||||
|  | ||||
| /** | ||||
|  * This adapter stores the categories from the library, used with a ViewPager. | ||||
|  * | ||||
|  * @constructor creates an instance of the adapter. | ||||
|  */ | ||||
| class LibraryAdapter( | ||||
|     private val context: Context, | ||||
|     private val controller: LibraryController | ||||
| ) : RecyclerView.Adapter<LibraryAdapter.ViewHolder>() { | ||||
| class LibraryAdapter(private val controller: LibraryController) : RecyclerViewPagerAdapter() { | ||||
|  | ||||
|     /** | ||||
|      * The categories to bind in the adapter. | ||||
| @@ -30,25 +28,45 @@ class LibraryAdapter( | ||||
|  | ||||
|     private var boundViews = arrayListOf<View>() | ||||
|  | ||||
|     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { | ||||
|         val binding = LibraryCategoryBinding.inflate(LayoutInflater.from(context), parent, false) | ||||
|         binding.root.onCreate(controller) | ||||
|         return ViewHolder(binding) | ||||
|     /** | ||||
|      * Creates a new view for this adapter. | ||||
|      * | ||||
|      * @return a new view. | ||||
|      */ | ||||
|     override fun createView(container: ViewGroup): View { | ||||
|         val view = container.inflate(R.layout.library_category) as LibraryCategoryView | ||||
|         view.onCreate(controller) | ||||
|         return view | ||||
|     } | ||||
|  | ||||
|     override fun onBindViewHolder(holder: ViewHolder, position: Int) { | ||||
|         val view = (holder.itemView as LibraryCategoryView) | ||||
|         view.onBind(categories[position]) | ||||
|     /** | ||||
|      * Binds a view with a position. | ||||
|      * | ||||
|      * @param view the view to bind. | ||||
|      * @param position the position in the adapter. | ||||
|      */ | ||||
|     override fun bindView(view: View, position: Int) { | ||||
|         (view as LibraryCategoryView).onBind(categories[position]) | ||||
|         boundViews.add(view) | ||||
|     } | ||||
|  | ||||
|     override fun onViewRecycled(holder: ViewHolder) { | ||||
|         val view = (holder.itemView as LibraryCategoryView) | ||||
|         view.onRecycle() | ||||
|     /** | ||||
|      * Recycles a view. | ||||
|      * | ||||
|      * @param view the view to recycle. | ||||
|      * @param position the position in the adapter. | ||||
|      */ | ||||
|     override fun recycleView(view: View, position: Int) { | ||||
|         (view as LibraryCategoryView).onRecycle() | ||||
|         boundViews.remove(view) | ||||
|     } | ||||
|  | ||||
|     override fun getItemCount(): Int { | ||||
|     /** | ||||
|      * Returns the number of categories. | ||||
|      * | ||||
|      * @return the number of categories or 0 if the list is null. | ||||
|      */ | ||||
|     override fun getCount(): Int { | ||||
|         return categories.size | ||||
|     } | ||||
|  | ||||
| @@ -58,10 +76,19 @@ class LibraryAdapter( | ||||
|      * @param position the position of the element. | ||||
|      * @return the title to display. | ||||
|      */ | ||||
|     fun getPageTitle(position: Int): CharSequence { | ||||
|     override fun getPageTitle(position: Int): CharSequence { | ||||
|         return categories[position].name | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns the position of the view. | ||||
|      */ | ||||
|     override fun getItemPosition(obj: Any): Int { | ||||
|         val view = obj as? LibraryCategoryView ?: return POSITION_NONE | ||||
|         val index = categories.indexOfFirst { it.id == view.category.id } | ||||
|         return if (index == -1) POSITION_NONE else index | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Called when the view of this adapter is being destroyed. | ||||
|      */ | ||||
| @@ -72,6 +99,4 @@ class LibraryAdapter( | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     class ViewHolder(binding: LibraryCategoryBinding) : RecyclerView.ViewHolder(binding.root) | ||||
| } | ||||
|   | ||||
| @@ -15,7 +15,6 @@ import androidx.core.graphics.drawable.DrawableCompat | ||||
| import com.bluelinelabs.conductor.ControllerChangeHandler | ||||
| import com.bluelinelabs.conductor.ControllerChangeType | ||||
| import com.google.android.material.tabs.TabLayout | ||||
| import com.google.android.material.tabs.TabLayoutMediator | ||||
| import com.jakewharton.rxrelay.BehaviorRelay | ||||
| import com.jakewharton.rxrelay.PublishRelay | ||||
| import com.tfcporciuncula.flow.Preference | ||||
| @@ -46,7 +45,7 @@ import kotlinx.coroutines.flow.launchIn | ||||
| import kotlinx.coroutines.flow.onEach | ||||
| import reactivecircus.flowbinding.android.view.clicks | ||||
| import reactivecircus.flowbinding.appcompat.queryTextChanges | ||||
| import reactivecircus.flowbinding.viewpager2.pageSelections | ||||
| import reactivecircus.flowbinding.viewpager.pageSelections | ||||
| import rx.Subscription | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| @@ -165,8 +164,7 @@ class LibraryController( | ||||
|     override fun onViewCreated(view: View) { | ||||
|         super.onViewCreated(view) | ||||
|  | ||||
|         adapter = LibraryAdapter(activity!!, this) | ||||
|         binding.libraryPager.offscreenPageLimit = 5 | ||||
|         adapter = LibraryAdapter(this) | ||||
|         binding.libraryPager.adapter = adapter | ||||
|         binding.libraryPager.pageSelections() | ||||
|             .onEach { | ||||
| @@ -214,11 +212,7 @@ class LibraryController( | ||||
|     override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) { | ||||
|         super.onChangeStarted(handler, type) | ||||
|         if (type.isEnter) { | ||||
|             activity?.tabs?.let { tabLayout -> | ||||
|                 TabLayoutMediator(tabLayout, binding.libraryPager) { tab, position -> | ||||
|                     tab.text = adapter?.getPageTitle(position) | ||||
|                 }.attach() | ||||
|             } | ||||
|             activity?.tabs?.setupWithViewPager(binding.libraryPager) | ||||
|             presenter.subscribeLibrary() | ||||
|         } | ||||
|     } | ||||
| @@ -339,8 +333,10 @@ class LibraryController( | ||||
|  | ||||
|         val position = binding.libraryPager.currentItem | ||||
|  | ||||
|         adapter.recycle = false | ||||
|         binding.libraryPager.adapter = adapter | ||||
|         binding.libraryPager.currentItem = position | ||||
|         adapter.recycle = true | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -0,0 +1,34 @@ | ||||
| package eu.kanade.tachiyomi.widget | ||||
|  | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import com.nightlynexus.viewstatepageradapter.ViewStatePagerAdapter | ||||
| import java.util.Stack | ||||
|  | ||||
| abstract class RecyclerViewPagerAdapter : ViewStatePagerAdapter() { | ||||
|  | ||||
|     private val pool = Stack<View>() | ||||
|  | ||||
|     var recycle = true | ||||
|         set(value) { | ||||
|             if (!value) pool.clear() | ||||
|             field = value | ||||
|         } | ||||
|  | ||||
|     protected abstract fun createView(container: ViewGroup): 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() else createView(container) | ||||
|         bindView(view, position) | ||||
|         return view | ||||
|     } | ||||
|  | ||||
|     override fun destroyView(container: ViewGroup, position: Int, view: View) { | ||||
|         recycleView(view, position) | ||||
|         if (recycle) pool.push(view) | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user