Remove unused tabbed sheet layouts/classes
This commit is contained in:
parent
710ebfb7a5
commit
813d7e49cd
7 changed files with 113 additions and 342 deletions
|
@ -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
|
package eu.kanade.tachiyomi.ui.reader.setting
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import androidx.core.view.isVisible
|
||||||
import android.view.View
|
import androidx.lifecycle.lifecycleScope
|
||||||
import android.view.ViewGroup
|
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.R
|
||||||
import eu.kanade.tachiyomi.databinding.CommonTabbedSheetBinding
|
import eu.kanade.tachiyomi.databinding.ReaderReadingModeSettingsBinding
|
||||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||||
import eu.kanade.tachiyomi.widget.ViewPagerAdapter
|
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
|
||||||
import eu.kanade.tachiyomi.widget.sheet.BaseBottomSheetDialog
|
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(
|
class ReaderSettingsSheet(
|
||||||
private val activity: ReaderActivity,
|
private val activity: ReaderActivity,
|
||||||
) : BaseBottomSheetDialog(activity) {
|
) : BottomSheetDialog(activity) {
|
||||||
|
|
||||||
private val tabs = listOf(
|
private val readerPreferences: ReaderPreferences by injectLazy()
|
||||||
ReaderReadingModeSettings(activity) to R.string.pref_category_reading_mode,
|
|
||||||
)
|
|
||||||
|
|
||||||
private lateinit var binding: CommonTabbedSheetBinding
|
private lateinit var binding: ReaderReadingModeSettingsBinding
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
behavior.isFitToContents = false
|
binding = ReaderReadingModeSettingsBinding.inflate(activity.layoutInflater)
|
||||||
behavior.halfExpandedRatio = 0.25f
|
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 {
|
val mangaViewer = activity.viewModel.getMangaReadingMode()
|
||||||
return tabs[position].first
|
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)
|
||||||
|
|
||||||
|
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 getCount(): Int {
|
private fun initPagerPreferences() {
|
||||||
return tabs.size
|
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())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPageTitle(position: Int): CharSequence {
|
private fun initWebtoonPreferences() {
|
||||||
return activity.resources!!.getString(tabs[position].second)
|
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()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@drawable/transparent_tabs_background">
|
|
||||||
|
|
||||||
<!-- Remove background color so rounded sheet corners work -->
|
|
||||||
<com.google.android.material.tabs.TabLayout
|
|
||||||
android:id="@+id/tabs"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@android:color/transparent"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toStartOf="@+id/menu"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:tabGravity="fill"
|
|
||||||
app:tabMode="fixed" />
|
|
||||||
|
|
||||||
<ImageButton
|
|
||||||
android:id="@+id/menu"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?attr/selectableItemBackgroundBorderless"
|
|
||||||
android:contentDescription="@string/action_menu"
|
|
||||||
android:paddingStart="10dp"
|
|
||||||
android:paddingEnd="10dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:srcCompat="@drawable/ic_overflow_24dp"
|
|
||||||
app:tint="?attr/colorOnSurface"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
||||||
<eu.kanade.tachiyomi.widget.sheet.BottomSheetViewPager
|
|
||||||
android:id="@+id/pager"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
|
@ -1,5 +1,3 @@
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="bottom_sheet_width">480dp</dimen>
|
|
||||||
|
|
||||||
<dimen name="screen_edge_margin">24dp</dimen>
|
<dimen name="screen_edge_margin">24dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="bottom_sheet_width">0dp</dimen>
|
|
||||||
|
|
||||||
<dimen name="dialog_radius">8dp</dimen>
|
<dimen name="dialog_radius">8dp</dimen>
|
||||||
|
|
||||||
<dimen name="screen_edge_margin">16dp</dimen>
|
<dimen name="screen_edge_margin">16dp</dimen>
|
||||||
|
|
Reference in a new issue