mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Refactor tabbed bottom sheet
This commit is contained in:
		@@ -4,54 +4,43 @@ import android.app.Activity
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.util.AttributeSet
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import com.google.android.material.bottomsheet.BottomSheetDialog
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
import eu.kanade.tachiyomi.databinding.LibrarySettingsSheetBinding
 | 
			
		||||
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
 | 
			
		||||
import eu.kanade.tachiyomi.widget.ViewPagerAdapter
 | 
			
		||||
import eu.kanade.tachiyomi.widget.TabbedBottomSheetDialog
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
class LibrarySettingsSheet(
 | 
			
		||||
    private val activity: Activity,
 | 
			
		||||
    private val onGroupClickListener: (ExtendedNavigationView.Group) -> Unit
 | 
			
		||||
) : BottomSheetDialog(activity) {
 | 
			
		||||
    onGroupClickListener: (ExtendedNavigationView.Group) -> Unit
 | 
			
		||||
) : TabbedBottomSheetDialog(activity) {
 | 
			
		||||
 | 
			
		||||
    val filters = Filter(activity)
 | 
			
		||||
 | 
			
		||||
    private val tabItems = listOf(
 | 
			
		||||
        Pair(R.string.action_filter, filters),
 | 
			
		||||
        Pair(R.string.action_sort, Sort(activity)),
 | 
			
		||||
        Pair(R.string.action_display, Display(activity))
 | 
			
		||||
    )
 | 
			
		||||
    val filters: Filter
 | 
			
		||||
    private val sort: Sort
 | 
			
		||||
    private val display: Display
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        val binding: LibrarySettingsSheetBinding = LibrarySettingsSheetBinding.inflate(activity.layoutInflater)
 | 
			
		||||
        filters = Filter(activity)
 | 
			
		||||
        filters.onGroupClicked = onGroupClickListener
 | 
			
		||||
 | 
			
		||||
        val adapter = LibrarySettingsSheetAdapter()
 | 
			
		||||
        binding.librarySettingsPager.adapter = adapter
 | 
			
		||||
        binding.librarySettingsTabs.setupWithViewPager(binding.librarySettingsPager)
 | 
			
		||||
        sort = Sort(activity)
 | 
			
		||||
        sort.onGroupClicked = onGroupClickListener
 | 
			
		||||
 | 
			
		||||
        setContentView(binding.root)
 | 
			
		||||
        display = Display(activity)
 | 
			
		||||
        display.onGroupClicked = onGroupClickListener
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private inner class LibrarySettingsSheetAdapter : ViewPagerAdapter() {
 | 
			
		||||
    override fun getTabViews(): List<View> = listOf(
 | 
			
		||||
        filters,
 | 
			
		||||
        sort,
 | 
			
		||||
        display
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
        override fun createView(container: ViewGroup, position: Int): View {
 | 
			
		||||
            val view = tabItems[position].second
 | 
			
		||||
            view.onGroupClicked = onGroupClickListener
 | 
			
		||||
            return view
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        override fun getCount(): Int {
 | 
			
		||||
            return tabItems.size
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        override fun getPageTitle(position: Int): CharSequence {
 | 
			
		||||
            return activity.resources!!.getString(tabItems[position].first)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    override fun getTabTitles(): List<Int> = listOf(
 | 
			
		||||
        R.string.action_filter,
 | 
			
		||||
        R.string.action_sort,
 | 
			
		||||
        R.string.action_display
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Filters group (unread, downloaded, ...).
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
package eu.kanade.tachiyomi.widget
 | 
			
		||||
 | 
			
		||||
import android.app.Activity
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import com.google.android.material.bottomsheet.BottomSheetDialog
 | 
			
		||||
import eu.kanade.tachiyomi.databinding.CommonTabbedSheetBinding
 | 
			
		||||
 | 
			
		||||
abstract class TabbedBottomSheetDialog(private val activity: Activity) : BottomSheetDialog(activity) {
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        val binding: CommonTabbedSheetBinding = CommonTabbedSheetBinding.inflate(activity.layoutInflater)
 | 
			
		||||
 | 
			
		||||
        val adapter = LibrarySettingsSheetAdapter()
 | 
			
		||||
        binding.pager.adapter = adapter
 | 
			
		||||
        binding.tabs.setupWithViewPager(binding.pager)
 | 
			
		||||
 | 
			
		||||
        setContentView(binding.root)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    abstract fun getTabViews(): List<View>
 | 
			
		||||
 | 
			
		||||
    abstract fun getTabTitles(): List<Int>
 | 
			
		||||
 | 
			
		||||
    private inner class LibrarySettingsSheetAdapter : ViewPagerAdapter() {
 | 
			
		||||
 | 
			
		||||
        override fun createView(container: ViewGroup, position: Int): View {
 | 
			
		||||
            return getTabViews()[position]
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        override fun getCount(): Int {
 | 
			
		||||
            return getTabViews().size
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        override fun getPageTitle(position: Int): CharSequence {
 | 
			
		||||
            return activity.resources!!.getString(getTabTitles()[position])
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
    android:orientation="vertical">
 | 
			
		||||
 | 
			
		||||
    <com.google.android.material.tabs.TabLayout
 | 
			
		||||
        android:id="@+id/library_settings_tabs"
 | 
			
		||||
        android:id="@+id/tabs"
 | 
			
		||||
        style="@style/Theme.Widget.Tabs"
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
        app:tabMode="fixed" />
 | 
			
		||||
 | 
			
		||||
    <eu.kanade.tachiyomi.widget.MaxHeightViewPager
 | 
			
		||||
        android:id="@+id/library_settings_pager"
 | 
			
		||||
        android:id="@+id/pager"
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
        android:layout_height="wrap_content" />
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user