mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	TabbedBottomSheetDialog: Fix scrollable pages (#5173)
This commit is contained in:
		@@ -0,0 +1,54 @@
 | 
			
		||||
package eu.kanade.tachiyomi.widget.sheet
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.util.AttributeSet
 | 
			
		||||
import android.view.View
 | 
			
		||||
import androidx.viewpager.widget.ViewPager
 | 
			
		||||
import java.lang.reflect.Field
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * From https://github.com/kafumi/android-bottomsheet-viewpager
 | 
			
		||||
 */
 | 
			
		||||
class BottomSheetViewPager @JvmOverloads constructor(
 | 
			
		||||
    context: Context,
 | 
			
		||||
    attrs: AttributeSet? = null
 | 
			
		||||
) : ViewPager(context, attrs) {
 | 
			
		||||
 | 
			
		||||
    private val positionField: Field = LayoutParams::class.java.getDeclaredField("position").also {
 | 
			
		||||
        it.isAccessible = true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun getChildAt(index: Int): View {
 | 
			
		||||
        val currentView = getCurrentView() ?: return super.getChildAt(index)
 | 
			
		||||
        return if (index == 0) {
 | 
			
		||||
            currentView
 | 
			
		||||
        } else {
 | 
			
		||||
            var view = super.getChildAt(index)
 | 
			
		||||
            if (view == currentView) {
 | 
			
		||||
                view = super.getChildAt(0)
 | 
			
		||||
            }
 | 
			
		||||
            return view
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun getCurrentView(): View? {
 | 
			
		||||
        for (i in 0 until childCount) {
 | 
			
		||||
            val child = super.getChildAt(i)
 | 
			
		||||
            val lp = child.layoutParams as? LayoutParams
 | 
			
		||||
            if (lp != null) {
 | 
			
		||||
                val position = positionField.getInt(lp)
 | 
			
		||||
                if (!lp.isDecor && currentItem == position) {
 | 
			
		||||
                    return child
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return null
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        addOnPageChangeListener(object : SimpleOnPageChangeListener() {
 | 
			
		||||
            override fun onPageSelected(position: Int) {
 | 
			
		||||
                requestLayout()
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user