mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-20 00:39:14 +01:00
Revert ViewPager2 library
This commit is contained in:
parent
cede590696
commit
08dc57fd02
@ -143,7 +143,6 @@ dependencies {
|
|||||||
implementation 'androidx.preference:preference:1.1.1'
|
implementation 'androidx.preference:preference:1.1.1'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha04'
|
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha04'
|
||||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||||
implementation "androidx.viewpager2:viewpager2:1.0.0"
|
|
||||||
implementation 'androidx.webkit:webkit:1.3.0-rc01'
|
implementation 'androidx.webkit:webkit:1.3.0-rc01'
|
||||||
|
|
||||||
final lifecycle_version = '2.3.0-alpha05'
|
final lifecycle_version = '2.3.0-alpha05'
|
||||||
@ -236,6 +235,7 @@ dependencies {
|
|||||||
implementation 'eu.davidea:flexible-adapter:5.1.0'
|
implementation 'eu.davidea:flexible-adapter:5.1.0'
|
||||||
implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
|
implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
|
||||||
implementation 'com.nononsenseapps:filepicker:2.5.2'
|
implementation 'com.nononsenseapps:filepicker:2.5.2'
|
||||||
|
implementation 'com.nightlynexus.viewstatepageradapter:viewstatepageradapter:1.1.0'
|
||||||
implementation 'com.github.mthli:Slice:v1.3'
|
implementation 'com.github.mthli:Slice:v1.3'
|
||||||
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
||||||
implementation 'com.github.carlosesco:DirectionalViewPager:a844dbca0a'
|
implementation 'com.github.carlosesco:DirectionalViewPager:a844dbca0a'
|
||||||
@ -259,7 +259,7 @@ dependencies {
|
|||||||
implementation "io.github.reactivecircus.flowbinding:flowbinding-appcompat:$flowbinding_version"
|
implementation "io.github.reactivecircus.flowbinding:flowbinding-appcompat:$flowbinding_version"
|
||||||
implementation "io.github.reactivecircus.flowbinding:flowbinding-recyclerview:$flowbinding_version"
|
implementation "io.github.reactivecircus.flowbinding:flowbinding-recyclerview:$flowbinding_version"
|
||||||
implementation "io.github.reactivecircus.flowbinding:flowbinding-swiperefreshlayout:$flowbinding_version"
|
implementation "io.github.reactivecircus.flowbinding:flowbinding-swiperefreshlayout:$flowbinding_version"
|
||||||
implementation "io.github.reactivecircus.flowbinding:flowbinding-viewpager2:$flowbinding_version"
|
implementation "io.github.reactivecircus.flowbinding:flowbinding-viewpager:$flowbinding_version"
|
||||||
|
|
||||||
// Licenses
|
// Licenses
|
||||||
final aboutlibraries_version = '8.2.0'
|
final aboutlibraries_version = '8.2.0'
|
||||||
|
@ -1,20 +1,18 @@
|
|||||||
package eu.kanade.tachiyomi.ui.library
|
package eu.kanade.tachiyomi.ui.library
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
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.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.
|
* This adapter stores the categories from the library, used with a ViewPager.
|
||||||
|
*
|
||||||
|
* @constructor creates an instance of the adapter.
|
||||||
*/
|
*/
|
||||||
class LibraryAdapter(
|
class LibraryAdapter(private val controller: LibraryController) : RecyclerViewPagerAdapter() {
|
||||||
private val context: Context,
|
|
||||||
private val controller: LibraryController
|
|
||||||
) : RecyclerView.Adapter<LibraryAdapter.ViewHolder>() {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The categories to bind in the adapter.
|
* The categories to bind in the adapter.
|
||||||
@ -30,25 +28,45 @@ class LibraryAdapter(
|
|||||||
|
|
||||||
private var boundViews = arrayListOf<View>()
|
private var boundViews = arrayListOf<View>()
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
/**
|
||||||
val binding = LibraryCategoryBinding.inflate(LayoutInflater.from(context), parent, false)
|
* Creates a new view for this adapter.
|
||||||
binding.root.onCreate(controller)
|
*
|
||||||
return ViewHolder(binding)
|
* @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)
|
* Binds a view with a position.
|
||||||
view.onBind(categories[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)
|
boundViews.add(view)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewRecycled(holder: ViewHolder) {
|
/**
|
||||||
val view = (holder.itemView as LibraryCategoryView)
|
* Recycles a view.
|
||||||
view.onRecycle()
|
*
|
||||||
|
* @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)
|
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
|
return categories.size
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,10 +76,19 @@ class LibraryAdapter(
|
|||||||
* @param position the position of the element.
|
* @param position the position of the element.
|
||||||
* @return the title to display.
|
* @return the title to display.
|
||||||
*/
|
*/
|
||||||
fun getPageTitle(position: Int): CharSequence {
|
override fun getPageTitle(position: Int): CharSequence {
|
||||||
return categories[position].name
|
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.
|
* 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.ControllerChangeHandler
|
||||||
import com.bluelinelabs.conductor.ControllerChangeType
|
import com.bluelinelabs.conductor.ControllerChangeType
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
|
||||||
import com.jakewharton.rxrelay.BehaviorRelay
|
import com.jakewharton.rxrelay.BehaviorRelay
|
||||||
import com.jakewharton.rxrelay.PublishRelay
|
import com.jakewharton.rxrelay.PublishRelay
|
||||||
import com.tfcporciuncula.flow.Preference
|
import com.tfcporciuncula.flow.Preference
|
||||||
@ -46,7 +45,7 @@ import kotlinx.coroutines.flow.launchIn
|
|||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import reactivecircus.flowbinding.android.view.clicks
|
import reactivecircus.flowbinding.android.view.clicks
|
||||||
import reactivecircus.flowbinding.appcompat.queryTextChanges
|
import reactivecircus.flowbinding.appcompat.queryTextChanges
|
||||||
import reactivecircus.flowbinding.viewpager2.pageSelections
|
import reactivecircus.flowbinding.viewpager.pageSelections
|
||||||
import rx.Subscription
|
import rx.Subscription
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
@ -165,8 +164,7 @@ class LibraryController(
|
|||||||
override fun onViewCreated(view: View) {
|
override fun onViewCreated(view: View) {
|
||||||
super.onViewCreated(view)
|
super.onViewCreated(view)
|
||||||
|
|
||||||
adapter = LibraryAdapter(activity!!, this)
|
adapter = LibraryAdapter(this)
|
||||||
binding.libraryPager.offscreenPageLimit = 5
|
|
||||||
binding.libraryPager.adapter = adapter
|
binding.libraryPager.adapter = adapter
|
||||||
binding.libraryPager.pageSelections()
|
binding.libraryPager.pageSelections()
|
||||||
.onEach {
|
.onEach {
|
||||||
@ -214,11 +212,7 @@ class LibraryController(
|
|||||||
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
||||||
super.onChangeStarted(handler, type)
|
super.onChangeStarted(handler, type)
|
||||||
if (type.isEnter) {
|
if (type.isEnter) {
|
||||||
activity?.tabs?.let { tabLayout ->
|
activity?.tabs?.setupWithViewPager(binding.libraryPager)
|
||||||
TabLayoutMediator(tabLayout, binding.libraryPager) { tab, position ->
|
|
||||||
tab.text = adapter?.getPageTitle(position)
|
|
||||||
}.attach()
|
|
||||||
}
|
|
||||||
presenter.subscribeLibrary()
|
presenter.subscribeLibrary()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -339,8 +333,10 @@ class LibraryController(
|
|||||||
|
|
||||||
val position = binding.libraryPager.currentItem
|
val position = binding.libraryPager.currentItem
|
||||||
|
|
||||||
|
adapter.recycle = false
|
||||||
binding.libraryPager.adapter = adapter
|
binding.libraryPager.adapter = adapter
|
||||||
binding.libraryPager.currentItem = position
|
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)
|
||||||
|
}
|
||||||
|
}
|
@ -39,7 +39,7 @@
|
|||||||
tools:text="Search"
|
tools:text="Search"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<androidx.viewpager2.widget.ViewPager2
|
<androidx.viewpager.widget.ViewPager
|
||||||
android:id="@+id/library_pager"
|
android:id="@+id/library_pager"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
Loading…
Reference in New Issue
Block a user