diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt index acf48cf9a..5b51d143b 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt @@ -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() } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt index d1804e2f0..e951521d2 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt @@ -120,9 +120,6 @@ class ReaderViewModel @Inject constructor( val onAskNsfwIncognito = MutableEventFlow() val uiState = MutableStateFlow(null) - val readerUiTopOffset = MutableStateFlow(0) - val readerUiBottomOffset = MutableStateFlow(0) - val isIncognitoMode = MutableStateFlow(savedStateHandle.get(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()) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonReaderFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonReaderFragment.kt index 725f6aaf6..75280ce10 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonReaderFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonReaderFragment.kt @@ -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() 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() super.onDestroyView() } + override fun onApplyWindowInsets(v: View, insets: WindowInsetsCompat): WindowInsetsCompat { + val offsetInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + viewBinding?.apply { + feedbackTop.updateLayoutParams { + topMargin = bottomMargin + offsetInsets.top + } + feedbackBottom.updateLayoutParams { + bottomMargin = topMargin + offsetInsets.bottom + } + } + return super.onApplyWindowInsets(v, insets) + } + override fun onCreateAdapter() = WebtoonAdapter( lifecycleOwner = viewLifecycleOwner, loader = pageLoader,