NewPipe-app-android/app/src/main/java/org/schabi/newpipe/fragments/detail/TabAdapter.kt

77 lines
2.5 KiB
Kotlin

package org.schabi.newpipe.fragments.detail
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
class TabAdapter // if changed to BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT => crash if enqueueing stream in
// the background and then clicking on it to open VideoDetailFragment:
// "Cannot setMaxLifecycle for Fragment not attached to FragmentManager"
(private val fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_SET_USER_VISIBLE_HINT) {
private val mFragmentList: MutableList<Fragment> = ArrayList()
private val mFragmentTitleList: MutableList<String?> = ArrayList()
public override fun getItem(position: Int): Fragment {
return mFragmentList.get(position)
}
public override fun getCount(): Int {
return mFragmentList.size
}
fun addFragment(fragment: Fragment, title: String?) {
mFragmentList.add(fragment)
mFragmentTitleList.add(title)
}
fun clearAllItems() {
mFragmentList.clear()
mFragmentTitleList.clear()
}
fun removeItem(position: Int) {
mFragmentList.removeAt(if (position == 0) 0 else position - 1)
mFragmentTitleList.removeAt(if (position == 0) 0 else position - 1)
}
fun updateItem(position: Int, fragment: Fragment) {
mFragmentList.set(position, fragment)
}
fun updateItem(title: String?, fragment: Fragment) {
val index: Int = mFragmentTitleList.indexOf(title)
if (index != -1) {
updateItem(index, fragment)
}
}
public override fun getItemPosition(`object`: Any): Int {
if (mFragmentList.contains(`object`)) {
return mFragmentList.indexOf(`object`)
} else {
return POSITION_NONE
}
}
fun getItemPositionByTitle(title: String?): Int {
return mFragmentTitleList.indexOf(title)
}
fun getItemTitle(position: Int): String? {
if (position < 0 || position >= mFragmentTitleList.size) {
return null
}
return mFragmentTitleList.get(position)
}
fun notifyDataSetUpdate() {
notifyDataSetChanged()
}
public override fun destroyItem(container: ViewGroup,
position: Int,
`object`: Any) {
fragmentManager.beginTransaction().remove((`object` as Fragment?)!!).commitNowAllowingStateLoss()
}
}