mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Remove unused tabbed sheet layouts/classes
This commit is contained in:
		@@ -1,146 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.reader.setting
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.util.AttributeSet
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import androidx.core.view.isVisible
 | 
			
		||||
import androidx.core.widget.NestedScrollView
 | 
			
		||||
import androidx.lifecycle.lifecycleScope
 | 
			
		||||
import eu.kanade.domain.manga.model.orientationType
 | 
			
		||||
import eu.kanade.domain.manga.model.readingModeType
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.databinding.ReaderReadingModeSettingsBinding
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.bindToPreference
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
 | 
			
		||||
import kotlinx.coroutines.flow.launchIn
 | 
			
		||||
import kotlinx.coroutines.flow.onEach
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Sheet to show reader and viewer preferences.
 | 
			
		||||
 */
 | 
			
		||||
class ReaderReadingModeSettings @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
 | 
			
		||||
    NestedScrollView(context, attrs) {
 | 
			
		||||
 | 
			
		||||
    private val readerPreferences: ReaderPreferences by injectLazy()
 | 
			
		||||
 | 
			
		||||
    private val binding = ReaderReadingModeSettingsBinding.inflate(LayoutInflater.from(context), this, false)
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        addView(binding.root)
 | 
			
		||||
 | 
			
		||||
        initGeneralPreferences()
 | 
			
		||||
 | 
			
		||||
        when ((context as ReaderActivity).viewModel.state.value.viewer) {
 | 
			
		||||
            is PagerViewer -> initPagerPreferences()
 | 
			
		||||
            is WebtoonViewer -> initWebtoonPreferences()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Init general reader preferences.
 | 
			
		||||
     */
 | 
			
		||||
    private fun initGeneralPreferences() {
 | 
			
		||||
        binding.viewer.onItemSelectedListener = { position ->
 | 
			
		||||
            val readingModeType = ReadingModeType.fromSpinner(position)
 | 
			
		||||
            (context as ReaderActivity).viewModel.setMangaReadingMode(readingModeType.flagValue)
 | 
			
		||||
 | 
			
		||||
            val mangaViewer = (context as ReaderActivity).viewModel.getMangaReadingMode()
 | 
			
		||||
            if (mangaViewer == ReadingModeType.WEBTOON.flagValue || mangaViewer == ReadingModeType.CONTINUOUS_VERTICAL.flagValue) {
 | 
			
		||||
                initWebtoonPreferences()
 | 
			
		||||
            } else {
 | 
			
		||||
                initPagerPreferences()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        binding.viewer.setSelection((context as ReaderActivity).viewModel.manga?.readingModeType?.let { ReadingModeType.fromPreference(it.toInt()).prefValue } ?: ReadingModeType.DEFAULT.prefValue)
 | 
			
		||||
 | 
			
		||||
        binding.rotationMode.onItemSelectedListener = { position ->
 | 
			
		||||
            val rotationType = OrientationType.fromSpinner(position)
 | 
			
		||||
            (context as ReaderActivity).viewModel.setMangaOrientationType(rotationType.flagValue)
 | 
			
		||||
        }
 | 
			
		||||
        binding.rotationMode.setSelection((context as ReaderActivity).viewModel.manga?.orientationType?.let { OrientationType.fromPreference(it.toInt()).prefValue } ?: OrientationType.DEFAULT.prefValue)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Init the preferences for the pager reader.
 | 
			
		||||
     */
 | 
			
		||||
    private fun initPagerPreferences() {
 | 
			
		||||
        binding.webtoonPrefsGroup.root.isVisible = false
 | 
			
		||||
        binding.pagerPrefsGroup.root.isVisible = true
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.tappingInverted.bindToPreference(readerPreferences.pagerNavInverted(), ReaderPreferences.TappingInvertMode::class.java)
 | 
			
		||||
        binding.pagerPrefsGroup.navigatePan.bindToPreference(readerPreferences.navigateToPan())
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.pagerNav.bindToPreference(readerPreferences.navigationModePager())
 | 
			
		||||
        readerPreferences.navigationModePager().changes()
 | 
			
		||||
            .onEach {
 | 
			
		||||
                val isTappingEnabled = it != 5
 | 
			
		||||
                binding.pagerPrefsGroup.tappingInverted.isVisible = isTappingEnabled
 | 
			
		||||
                binding.pagerPrefsGroup.navigatePan.isVisible = isTappingEnabled
 | 
			
		||||
            }
 | 
			
		||||
            .launchIn((context as ReaderActivity).lifecycleScope)
 | 
			
		||||
        // Makes so that landscape zoom gets hidden away when image scale type is not fit screen
 | 
			
		||||
        binding.pagerPrefsGroup.scaleType.bindToPreference(readerPreferences.imageScaleType(), 1)
 | 
			
		||||
        readerPreferences.imageScaleType().changes()
 | 
			
		||||
            .onEach { binding.pagerPrefsGroup.landscapeZoom.isVisible = it == 1 }
 | 
			
		||||
            .launchIn((context as ReaderActivity).lifecycleScope)
 | 
			
		||||
        binding.pagerPrefsGroup.landscapeZoom.bindToPreference(readerPreferences.landscapeZoom())
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.zoomStart.bindToPreference(readerPreferences.zoomStart(), 1)
 | 
			
		||||
        binding.pagerPrefsGroup.cropBorders.bindToPreference(readerPreferences.cropBorders())
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.dualPageSplit.bindToPreference(readerPreferences.dualPageSplitPaged())
 | 
			
		||||
        readerPreferences.dualPageSplitPaged().changes()
 | 
			
		||||
            .onEach {
 | 
			
		||||
                binding.pagerPrefsGroup.dualPageInvert.isVisible = it
 | 
			
		||||
                if (it) {
 | 
			
		||||
                    binding.pagerPrefsGroup.dualPageRotateToFit.isChecked = false
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            .launchIn((context as ReaderActivity).lifecycleScope)
 | 
			
		||||
        binding.pagerPrefsGroup.dualPageInvert.bindToPreference(readerPreferences.dualPageInvertPaged())
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.dualPageRotateToFit.bindToPreference(readerPreferences.dualPageRotateToFit())
 | 
			
		||||
        readerPreferences.dualPageRotateToFit().changes()
 | 
			
		||||
            .onEach {
 | 
			
		||||
                binding.pagerPrefsGroup.dualPageRotateToFitInvert.isVisible = it
 | 
			
		||||
                if (it) {
 | 
			
		||||
                    binding.pagerPrefsGroup.dualPageSplit.isChecked = false
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            .launchIn((context as ReaderActivity).lifecycleScope)
 | 
			
		||||
        binding.pagerPrefsGroup.dualPageRotateToFitInvert.bindToPreference(readerPreferences.dualPageRotateToFitInvert())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Init the preferences for the webtoon reader.
 | 
			
		||||
     */
 | 
			
		||||
    private fun initWebtoonPreferences() {
 | 
			
		||||
        binding.pagerPrefsGroup.root.isVisible = false
 | 
			
		||||
        binding.webtoonPrefsGroup.root.isVisible = true
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.tappingInverted.bindToPreference(readerPreferences.webtoonNavInverted(), ReaderPreferences.TappingInvertMode::class.java)
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.webtoonNav.bindToPreference(readerPreferences.navigationModeWebtoon())
 | 
			
		||||
        readerPreferences.navigationModeWebtoon().changes()
 | 
			
		||||
            .onEach { binding.webtoonPrefsGroup.tappingInverted.isVisible = it != 5 }
 | 
			
		||||
            .launchIn((context as ReaderActivity).lifecycleScope)
 | 
			
		||||
        binding.webtoonPrefsGroup.cropBordersWebtoon.bindToPreference(readerPreferences.cropBordersWebtoon())
 | 
			
		||||
        binding.webtoonPrefsGroup.webtoonSidePadding.bindToIntPreference(readerPreferences.webtoonSidePadding(), R.array.webtoon_side_padding_values)
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.dualPageSplit.bindToPreference(readerPreferences.dualPageSplitWebtoon())
 | 
			
		||||
        // Makes it so that dual page invert gets hidden away when dual page split is turned off
 | 
			
		||||
        readerPreferences.dualPageSplitWebtoon().changes()
 | 
			
		||||
            .onEach { binding.webtoonPrefsGroup.dualPageInvert.isVisible = it }
 | 
			
		||||
            .launchIn((context as ReaderActivity).lifecycleScope)
 | 
			
		||||
        binding.webtoonPrefsGroup.dualPageInvert.bindToPreference(readerPreferences.dualPageInvertWebtoon())
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.longStripSplit.isVisible = !isReleaseBuildType
 | 
			
		||||
        binding.webtoonPrefsGroup.longStripSplit.bindToPreference(readerPreferences.longStripSplitWebtoon())
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.doubleTapZoom.bindToPreference(readerPreferences.webtoonDoubleTapZoomEnabled())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,54 +1,136 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.reader.setting
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import androidx.core.view.isVisible
 | 
			
		||||
import androidx.lifecycle.lifecycleScope
 | 
			
		||||
import com.google.android.material.bottomsheet.BottomSheetDialog
 | 
			
		||||
import eu.kanade.domain.manga.model.orientationType
 | 
			
		||||
import eu.kanade.domain.manga.model.readingModeType
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.databinding.CommonTabbedSheetBinding
 | 
			
		||||
import eu.kanade.tachiyomi.databinding.ReaderReadingModeSettingsBinding
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
 | 
			
		||||
import eu.kanade.tachiyomi.widget.ViewPagerAdapter
 | 
			
		||||
import eu.kanade.tachiyomi.widget.sheet.BaseBottomSheetDialog
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.bindToPreference
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
 | 
			
		||||
import kotlinx.coroutines.flow.launchIn
 | 
			
		||||
import kotlinx.coroutines.flow.onEach
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
class ReaderSettingsSheet(
 | 
			
		||||
    private val activity: ReaderActivity,
 | 
			
		||||
) : BaseBottomSheetDialog(activity) {
 | 
			
		||||
) : BottomSheetDialog(activity) {
 | 
			
		||||
 | 
			
		||||
    private val tabs = listOf(
 | 
			
		||||
        ReaderReadingModeSettings(activity) to R.string.pref_category_reading_mode,
 | 
			
		||||
    )
 | 
			
		||||
    private val readerPreferences: ReaderPreferences by injectLazy()
 | 
			
		||||
 | 
			
		||||
    private lateinit var binding: CommonTabbedSheetBinding
 | 
			
		||||
 | 
			
		||||
    override fun createView(inflater: LayoutInflater): View {
 | 
			
		||||
        binding = CommonTabbedSheetBinding.inflate(activity.layoutInflater)
 | 
			
		||||
 | 
			
		||||
        val adapter = Adapter()
 | 
			
		||||
        binding.pager.adapter = adapter
 | 
			
		||||
        binding.tabs.setupWithViewPager(binding.pager)
 | 
			
		||||
 | 
			
		||||
        return binding.root
 | 
			
		||||
    }
 | 
			
		||||
    private lateinit var binding: ReaderReadingModeSettingsBinding
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
 | 
			
		||||
        behavior.isFitToContents = false
 | 
			
		||||
        behavior.halfExpandedRatio = 0.25f
 | 
			
		||||
        binding = ReaderReadingModeSettingsBinding.inflate(activity.layoutInflater)
 | 
			
		||||
        setContentView(binding.root)
 | 
			
		||||
 | 
			
		||||
        initGeneralPreferences()
 | 
			
		||||
 | 
			
		||||
        when (activity.viewModel.state.value.viewer) {
 | 
			
		||||
            is PagerViewer -> initPagerPreferences()
 | 
			
		||||
            is WebtoonViewer -> initWebtoonPreferences()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private inner class Adapter : ViewPagerAdapter() {
 | 
			
		||||
    private fun initGeneralPreferences() {
 | 
			
		||||
        binding.viewer.onItemSelectedListener = { position ->
 | 
			
		||||
            val readingModeType = ReadingModeType.fromSpinner(position)
 | 
			
		||||
            activity.viewModel.setMangaReadingMode(readingModeType.flagValue)
 | 
			
		||||
 | 
			
		||||
        override fun createView(container: ViewGroup, position: Int): View {
 | 
			
		||||
            return tabs[position].first
 | 
			
		||||
            val mangaViewer = activity.viewModel.getMangaReadingMode()
 | 
			
		||||
            if (mangaViewer == ReadingModeType.WEBTOON.flagValue || mangaViewer == ReadingModeType.CONTINUOUS_VERTICAL.flagValue) {
 | 
			
		||||
                initWebtoonPreferences()
 | 
			
		||||
            } else {
 | 
			
		||||
                initPagerPreferences()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        binding.viewer.setSelection(activity.viewModel.manga?.readingModeType?.let { ReadingModeType.fromPreference(it.toInt()).prefValue } ?: ReadingModeType.DEFAULT.prefValue)
 | 
			
		||||
 | 
			
		||||
        override fun getCount(): Int {
 | 
			
		||||
            return tabs.size
 | 
			
		||||
        binding.rotationMode.onItemSelectedListener = { position ->
 | 
			
		||||
            val rotationType = OrientationType.fromSpinner(position)
 | 
			
		||||
            activity.viewModel.setMangaOrientationType(rotationType.flagValue)
 | 
			
		||||
        }
 | 
			
		||||
        binding.rotationMode.setSelection(activity.viewModel.manga?.orientationType?.let { OrientationType.fromPreference(it.toInt()).prefValue } ?: OrientationType.DEFAULT.prefValue)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        override fun getPageTitle(position: Int): CharSequence {
 | 
			
		||||
            return activity.resources!!.getString(tabs[position].second)
 | 
			
		||||
        }
 | 
			
		||||
    private fun initPagerPreferences() {
 | 
			
		||||
        binding.webtoonPrefsGroup.root.isVisible = false
 | 
			
		||||
        binding.pagerPrefsGroup.root.isVisible = true
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.tappingInverted.bindToPreference(readerPreferences.pagerNavInverted(), ReaderPreferences.TappingInvertMode::class.java)
 | 
			
		||||
        binding.pagerPrefsGroup.navigatePan.bindToPreference(readerPreferences.navigateToPan())
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.pagerNav.bindToPreference(readerPreferences.navigationModePager())
 | 
			
		||||
        readerPreferences.navigationModePager().changes()
 | 
			
		||||
            .onEach {
 | 
			
		||||
                val isTappingEnabled = it != 5
 | 
			
		||||
                binding.pagerPrefsGroup.tappingInverted.isVisible = isTappingEnabled
 | 
			
		||||
                binding.pagerPrefsGroup.navigatePan.isVisible = isTappingEnabled
 | 
			
		||||
            }
 | 
			
		||||
            .launchIn(activity.lifecycleScope)
 | 
			
		||||
        // Makes so that landscape zoom gets hidden away when image scale type is not fit screen
 | 
			
		||||
        binding.pagerPrefsGroup.scaleType.bindToPreference(readerPreferences.imageScaleType(), 1)
 | 
			
		||||
        readerPreferences.imageScaleType().changes()
 | 
			
		||||
            .onEach { binding.pagerPrefsGroup.landscapeZoom.isVisible = it == 1 }
 | 
			
		||||
            .launchIn(activity.lifecycleScope)
 | 
			
		||||
        binding.pagerPrefsGroup.landscapeZoom.bindToPreference(readerPreferences.landscapeZoom())
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.zoomStart.bindToPreference(readerPreferences.zoomStart(), 1)
 | 
			
		||||
        binding.pagerPrefsGroup.cropBorders.bindToPreference(readerPreferences.cropBorders())
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.dualPageSplit.bindToPreference(readerPreferences.dualPageSplitPaged())
 | 
			
		||||
        readerPreferences.dualPageSplitPaged().changes()
 | 
			
		||||
            .onEach {
 | 
			
		||||
                binding.pagerPrefsGroup.dualPageInvert.isVisible = it
 | 
			
		||||
                if (it) {
 | 
			
		||||
                    binding.pagerPrefsGroup.dualPageRotateToFit.isChecked = false
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            .launchIn(activity.lifecycleScope)
 | 
			
		||||
        binding.pagerPrefsGroup.dualPageInvert.bindToPreference(readerPreferences.dualPageInvertPaged())
 | 
			
		||||
 | 
			
		||||
        binding.pagerPrefsGroup.dualPageRotateToFit.bindToPreference(readerPreferences.dualPageRotateToFit())
 | 
			
		||||
        readerPreferences.dualPageRotateToFit().changes()
 | 
			
		||||
            .onEach {
 | 
			
		||||
                binding.pagerPrefsGroup.dualPageRotateToFitInvert.isVisible = it
 | 
			
		||||
                if (it) {
 | 
			
		||||
                    binding.pagerPrefsGroup.dualPageSplit.isChecked = false
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            .launchIn(activity.lifecycleScope)
 | 
			
		||||
        binding.pagerPrefsGroup.dualPageRotateToFitInvert.bindToPreference(readerPreferences.dualPageRotateToFitInvert())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun initWebtoonPreferences() {
 | 
			
		||||
        binding.pagerPrefsGroup.root.isVisible = false
 | 
			
		||||
        binding.webtoonPrefsGroup.root.isVisible = true
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.tappingInverted.bindToPreference(readerPreferences.webtoonNavInverted(), ReaderPreferences.TappingInvertMode::class.java)
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.webtoonNav.bindToPreference(readerPreferences.navigationModeWebtoon())
 | 
			
		||||
        readerPreferences.navigationModeWebtoon().changes()
 | 
			
		||||
            .onEach { binding.webtoonPrefsGroup.tappingInverted.isVisible = it != 5 }
 | 
			
		||||
            .launchIn(activity.lifecycleScope)
 | 
			
		||||
        binding.webtoonPrefsGroup.cropBordersWebtoon.bindToPreference(readerPreferences.cropBordersWebtoon())
 | 
			
		||||
        binding.webtoonPrefsGroup.webtoonSidePadding.bindToIntPreference(readerPreferences.webtoonSidePadding(), R.array.webtoon_side_padding_values)
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.dualPageSplit.bindToPreference(readerPreferences.dualPageSplitWebtoon())
 | 
			
		||||
        // Makes it so that dual page invert gets hidden away when dual page split is turned off
 | 
			
		||||
        readerPreferences.dualPageSplitWebtoon().changes()
 | 
			
		||||
            .onEach { binding.webtoonPrefsGroup.dualPageInvert.isVisible = it }
 | 
			
		||||
            .launchIn(activity.lifecycleScope)
 | 
			
		||||
        binding.webtoonPrefsGroup.dualPageInvert.bindToPreference(readerPreferences.dualPageInvertWebtoon())
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.longStripSplit.isVisible = !isReleaseBuildType
 | 
			
		||||
        binding.webtoonPrefsGroup.longStripSplit.bindToPreference(readerPreferences.longStripSplitWebtoon())
 | 
			
		||||
 | 
			
		||||
        binding.webtoonPrefsGroup.doubleTapZoom.bindToPreference(readerPreferences.webtoonDoubleTapZoomEnabled())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,55 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.widget.sheet
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.util.DisplayMetrics
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import com.google.android.material.bottomsheet.BottomSheetDialog
 | 
			
		||||
import com.google.android.material.bottomsheet.getElevation
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.displayCompat
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.isNightMode
 | 
			
		||||
import eu.kanade.tachiyomi.util.view.setNavigationBarTransparentCompat
 | 
			
		||||
 | 
			
		||||
abstract class BaseBottomSheetDialog(context: Context) : BottomSheetDialog(context) {
 | 
			
		||||
 | 
			
		||||
    abstract fun createView(inflater: LayoutInflater): View
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
 | 
			
		||||
        val rootView = createView(layoutInflater)
 | 
			
		||||
        setContentView(rootView)
 | 
			
		||||
 | 
			
		||||
        // Enforce max width for tablets
 | 
			
		||||
        val width = context.resources.getDimensionPixelSize(R.dimen.bottom_sheet_width)
 | 
			
		||||
        if (width > 0) {
 | 
			
		||||
            behavior.maxWidth = width
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Set peek height to 50% display height
 | 
			
		||||
        context.displayCompat?.let {
 | 
			
		||||
            val metrics = DisplayMetrics()
 | 
			
		||||
            it.getRealMetrics(metrics)
 | 
			
		||||
            behavior.peekHeight = metrics.heightPixels / 2
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Set navbar color to transparent for edge-to-edge bottom sheet if we can use light navigation bar
 | 
			
		||||
        // TODO Replace deprecated systemUiVisibility when material-components uses new API to modify status bar icons
 | 
			
		||||
        @Suppress("DEPRECATION")
 | 
			
		||||
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
 | 
			
		||||
            window?.setNavigationBarTransparentCompat(context, behavior.getElevation())
 | 
			
		||||
            val bottomSheet = rootView.parent as ViewGroup
 | 
			
		||||
            var flags = bottomSheet.systemUiVisibility
 | 
			
		||||
            flags = if (context.isNightMode()) {
 | 
			
		||||
                flags and View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.inv()
 | 
			
		||||
            } else {
 | 
			
		||||
                flags or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
 | 
			
		||||
            }
 | 
			
		||||
            bottomSheet.systemUiVisibility = flags
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,56 +0,0 @@
 | 
			
		||||
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