Change inset handling in reader
This commit is contained in:
@@ -3,7 +3,6 @@ package org.koitharu.kotatsu.reader.ui
|
||||
import android.app.assist.AssistContent
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.KeyEvent
|
||||
@@ -372,9 +371,7 @@ class ReaderActivity :
|
||||
viewBinding.infoBar.isTimeVisible = isFullscreen
|
||||
updateScrollTimerButton()
|
||||
systemUiController.setSystemUiVisible(isUiVisible || !isFullscreen)
|
||||
val topOffset = if (isUiVisible) viewBinding.appbarTop.height else 0
|
||||
val bottomOffset = if (isUiVisible) (viewBinding.toolbarDocked?.height ?: 0) else 0
|
||||
viewModel.setReaderUiOffsets(topOffset, bottomOffset)
|
||||
viewBinding.root.requestApplyInsets()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -396,12 +393,14 @@ class ReaderActivity :
|
||||
viewBinding.infoBar.updatePadding(
|
||||
top = systemBars.top,
|
||||
)
|
||||
viewModel.setReaderUiOffsets(
|
||||
(if (viewBinding.appbarTop.isVisible) viewBinding.appbarTop.height else 0) + systemBars.top,
|
||||
(if (viewBinding.toolbarDocked?.isVisible == true) (viewBinding.toolbarDocked?.height ?: 0) else 0) + systemBars.bottom,
|
||||
val innerInsets = Insets.of(
|
||||
systemBars.left,
|
||||
if (viewBinding.appbarTop.isVisible) viewBinding.appbarTop.height else systemBars.top,
|
||||
systemBars.right,
|
||||
viewBinding.toolbarDocked?.takeIf { it.isVisible }?.height ?: systemBars.bottom,
|
||||
)
|
||||
return WindowInsetsCompat.Builder(insets)
|
||||
.setInsets(WindowInsetsCompat.Type.systemBars(), Insets.NONE)
|
||||
.setInsets(WindowInsetsCompat.Type.systemBars(), innerInsets)
|
||||
.build()
|
||||
}
|
||||
|
||||
|
||||
@@ -120,9 +120,6 @@ class ReaderViewModel @Inject constructor(
|
||||
val onAskNsfwIncognito = MutableEventFlow<Unit>()
|
||||
val uiState = MutableStateFlow<ReaderUiState?>(null)
|
||||
|
||||
val readerUiTopOffset = MutableStateFlow(0)
|
||||
val readerUiBottomOffset = MutableStateFlow(0)
|
||||
|
||||
val isIncognitoMode = MutableStateFlow(savedStateHandle.get<Boolean>(ReaderIntent.EXTRA_INCOGNITO))
|
||||
|
||||
val content = MutableStateFlow(ReaderContent(emptyList(), null))
|
||||
@@ -230,11 +227,6 @@ class ReaderViewModel @Inject constructor(
|
||||
discordRpc.setIdle()
|
||||
}
|
||||
|
||||
fun setReaderUiOffsets(top: Int, bottom: Int) {
|
||||
readerUiTopOffset.value = top
|
||||
readerUiBottomOffset.value = bottom
|
||||
}
|
||||
|
||||
fun switchMode(newMode: ReaderMode) {
|
||||
launchJob {
|
||||
val manga = checkNotNull(getMangaOrNull())
|
||||
|
||||
@@ -2,9 +2,13 @@ package org.koitharu.kotatsu.reader.ui.pager.webtoon
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewGroup.MarginLayoutParams
|
||||
import android.view.animation.DecelerateInterpolator
|
||||
import android.widget.TextView
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
@@ -50,12 +54,6 @@ class WebtoonReaderFragment : BaseReaderFragment<FragmentReaderWebtoonBinding>()
|
||||
|
||||
override fun onViewBindingCreated(binding: FragmentReaderWebtoonBinding, savedInstanceState: Bundle?) {
|
||||
super.onViewBindingCreated(binding, savedInstanceState)
|
||||
viewModel.readerUiTopOffset.observe(viewLifecycleOwner) { top ->
|
||||
binding.feedbackTop.translationY = top.toFloat()
|
||||
}
|
||||
viewModel.readerUiBottomOffset.observe(viewLifecycleOwner) { bottom ->
|
||||
binding.feedbackBottom.translationY = -bottom.toFloat()
|
||||
}
|
||||
with(binding.recyclerView) {
|
||||
setHasFixedSize(true)
|
||||
adapter = readerAdapter
|
||||
@@ -101,6 +99,19 @@ class WebtoonReaderFragment : BaseReaderFragment<FragmentReaderWebtoonBinding>()
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
override fun onApplyWindowInsets(v: View, insets: WindowInsetsCompat): WindowInsetsCompat {
|
||||
val offsetInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
viewBinding?.apply {
|
||||
feedbackTop.updateLayoutParams<MarginLayoutParams> {
|
||||
topMargin = bottomMargin + offsetInsets.top
|
||||
}
|
||||
feedbackBottom.updateLayoutParams<MarginLayoutParams> {
|
||||
bottomMargin = topMargin + offsetInsets.bottom
|
||||
}
|
||||
}
|
||||
return super.onApplyWindowInsets(v, insets)
|
||||
}
|
||||
|
||||
override fun onCreateAdapter() = WebtoonAdapter(
|
||||
lifecycleOwner = viewLifecycleOwner,
|
||||
loader = pageLoader,
|
||||
|
||||
Reference in New Issue
Block a user