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