diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
index f440340e2..140656115 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
@@ -31,6 +31,10 @@ import android.widget.RelativeLayout
import android.widget.TextView
import android.widget.Toast
import androidx.activity.viewModels
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.core.tween
+import androidx.compose.animation.slideInVertically
+import androidx.compose.animation.slideOutVertically
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -311,7 +315,7 @@ class ReaderActivity : BaseActivity() {
override fun onResume() {
super.onResume()
viewModel.restartReadTimer()
- setMenuVisibility(viewModel.state.value.menuVisible, animate = false)
+ setMenuVisibility(viewModel.state.value.menuVisible)
}
/**
@@ -321,7 +325,7 @@ class ReaderActivity : BaseActivity() {
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
- setMenuVisibility(viewModel.state.value.menuVisible, animate = false)
+ setMenuVisibility(viewModel.state.value.menuVisible)
}
}
@@ -649,68 +653,74 @@ class ReaderActivity : BaseActivity() {
val readerBottomButtons by readerPreferences.readerBottomButtons().collectAsState()
val dualPageSplitPaged by readerPreferences.dualPageSplitPaged().collectAsState()
- Column(
- verticalArrangement = Arrangement.spacedBy(8.dp),
+ AnimatedVisibility(
+ visible = state.menuVisible,
+ enter = slideInVertically(
+ initialOffsetY = { it },
+ animationSpec = tween(200),
+ ),
+ exit = slideOutVertically(
+ targetOffsetY = { it },
+ animationSpec = tween(200),
+ ),
) {
- // SY -->
- sliderContent(false)
- // SY <--
-
- BottomReaderBar(
- enabledButtons = readerBottomButtons,
- readingMode = ReadingModeType.fromPreference(
- viewModel.getMangaReadingMode(
- resolveDefault = false,
- ),
- ),
- onClickReadingMode = viewModel::openReadingModeSelectDialog,
- orientationMode = OrientationType.fromPreference(
- viewModel.getMangaOrientationType(
- resolveDefault = false,
- ),
- ),
- onClickOrientationMode = viewModel::openOrientationModeSelectDialog,
- cropEnabled = cropEnabled,
- onClickCropBorder = {
- val enabled = viewModel.toggleCropBorders()
-
- menuToggleToast?.cancel()
- menuToggleToast = toast(
- if (enabled) {
- R.string.on
- } else {
- R.string.off
- },
- )
- },
- onClickSettings = viewModel::openSettingsDialog,
+ Column(
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ ) {
// SY -->
- isHttpSource = remember {
- viewModel.getSource() != null
- },
- dualPageSplitEnabled = dualPageSplitPaged,
- doublePages = state.doublePages,
- onClickChapterList = viewModel::openChapterListDialog,
- onClickWebView = ::openChapterInWebView,
- onClickShare = {
- assistUrl?.let {
- val intent = it.toUri().toShareIntent(this@ReaderActivity, type = "text/plain")
- startActivity(Intent.createChooser(intent, getString(R.string.action_share)))
- }
- },
- onClickPageLayout = {
- if (readerPreferences.pageLayout().get() == PagerConfig.PageLayout.AUTOMATIC) {
- (viewModel.state.value.viewer as? PagerViewer)?.config?.let { config ->
- config.doublePages = !config.doublePages
- reloadChapters(config.doublePages, true)
- }
- } else {
- readerPreferences.pageLayout().set(1 - readerPreferences.pageLayout().get())
- }
- },
- onClickShiftPage = ::shiftDoublePages,
+ sliderContent(false)
// SY <--
- )
+
+ BottomReaderBar(
+ // SY -->
+ enabledButtons = readerBottomButtons,
+ // SY <--
+ readingMode = ReadingModeType.fromPreference(viewModel.getMangaReadingMode(resolveDefault = false)),
+ onClickReadingMode = viewModel::openReadingModeSelectDialog,
+ orientationMode = OrientationType.fromPreference(viewModel.getMangaOrientationType(resolveDefault = false)),
+ onClickOrientationMode = viewModel::openOrientationModeSelectDialog,
+ cropEnabled = cropEnabled,
+ onClickCropBorder = {
+ val enabled = viewModel.toggleCropBorders()
+
+ menuToggleToast?.cancel()
+ menuToggleToast = toast(
+ if (enabled) {
+ R.string.on
+ } else {
+ R.string.off
+ },
+ )
+ },
+ onClickSettings = viewModel::openSettingsDialog,
+ // SY -->
+ isHttpSource = remember {
+ viewModel.getSource() != null
+ },
+ dualPageSplitEnabled = dualPageSplitPaged,
+ doublePages = state.doublePages,
+ onClickChapterList = viewModel::openChapterListDialog,
+ onClickWebView = ::openChapterInWebView,
+ onClickShare = {
+ assistUrl?.let {
+ val intent = it.toUri().toShareIntent(this@ReaderActivity, type = "text/plain")
+ startActivity(Intent.createChooser(intent, getString(R.string.action_share)))
+ }
+ },
+ onClickPageLayout = {
+ if (readerPreferences.pageLayout().get() == PagerConfig.PageLayout.AUTOMATIC) {
+ (viewModel.state.value.viewer as? PagerViewer)?.config?.let { config ->
+ config.doublePages = !config.doublePages
+ reloadChapters(config.doublePages, true)
+ }
+ } else {
+ readerPreferences.pageLayout().set(1 - readerPreferences.pageLayout().get())
+ }
+ },
+ onClickShiftPage = ::shiftDoublePages,
+ // SY <--
+ )
+ }
}
}
@@ -942,74 +952,46 @@ class ReaderActivity : BaseActivity() {
// EXH <--
/**
- * Sets the visibility of the menu according to [visible] and with an optional parameter to
- * [animate] the views.
+ * Sets the visibility of the menu according to [visible].
*/
- private fun setMenuVisibility(visible: Boolean, animate: Boolean = true) {
+ private fun setMenuVisibility(visible: Boolean) {
viewModel.showMenus(visible)
if (visible) {
windowInsetsController.show(WindowInsetsCompat.Type.systemBars())
binding.readerMenu.isVisible = true
- if (animate) {
- val toolbarAnimation = AnimationUtils.loadAnimation(this, R.anim.enter_from_top)
- toolbarAnimation.applySystemAnimatorScale(this)
- toolbarAnimation.setAnimationListener(
- object : SimpleAnimationListener() {
- override fun onAnimationStart(animation: Animation) {
- // Fix status bar being translucent the first time it's opened.
- window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
- }
- },
- )
- // EXH -->
- binding.header.startAnimation(toolbarAnimation)
- // EXH <--
-
- val vertAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in_side)
- val vertAnimationLeft = AnimationUtils.loadAnimation(this, R.anim.fade_in_side_left)
- if (readerPreferences.leftVerticalSeekbar().get() && binding.readerNavVert.isVisible) {
- binding.seekbarVertContainer.startAnimation(vertAnimationLeft)
- } else {
- binding.seekbarVertContainer.startAnimation(vertAnimation)
- }
-
- val bottomAnimation = AnimationUtils.loadAnimation(this, R.anim.enter_from_bottom)
- bottomAnimation.applySystemAnimatorScale(this)
- binding.readerMenuBottom.startAnimation(bottomAnimation)
- }
+ val toolbarAnimation = AnimationUtils.loadAnimation(this, R.anim.enter_from_top)
+ toolbarAnimation.applySystemAnimatorScale(this)
+ toolbarAnimation.setAnimationListener(
+ object : SimpleAnimationListener() {
+ override fun onAnimationStart(animation: Animation) {
+ // Fix status bar being translucent the first time it's opened.
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
+ }
+ },
+ )
+ // EXH -->
+ binding.header.startAnimation(toolbarAnimation)
+ // EXH <--
} else {
if (readerPreferences.fullscreen().get()) {
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
- if (animate) {
- val toolbarAnimation = AnimationUtils.loadAnimation(this, R.anim.exit_to_top)
- toolbarAnimation.applySystemAnimatorScale(this)
- toolbarAnimation.setAnimationListener(
- object : SimpleAnimationListener() {
- override fun onAnimationEnd(animation: Animation) {
- binding.readerMenu.isVisible = false
- }
- },
- )
- // EXH -->
- binding.header.startAnimation(toolbarAnimation)
- // EXH <--
+ val toolbarAnimation = AnimationUtils.loadAnimation(this, R.anim.exit_to_top)
+ toolbarAnimation.applySystemAnimatorScale(this)
+ toolbarAnimation.setAnimationListener(
+ object : SimpleAnimationListener() {
+ override fun onAnimationEnd(animation: Animation) {
+ binding.readerMenu.isVisible = false
+ }
+ },
+ )
+ // EXH -->
+ binding.header.startAnimation(toolbarAnimation)
+ // EXH <--
- val vertAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out_side)
- val vertAnimationLeft = AnimationUtils.loadAnimation(this, R.anim.fade_out_side_left)
- if (readerPreferences.leftVerticalSeekbar().get() && binding.readerNavVert.isVisible) {
- binding.seekbarVertContainer.startAnimation(vertAnimationLeft)
- } else {
- binding.seekbarVertContainer.startAnimation(vertAnimation)
- }
-
- val bottomAnimation = AnimationUtils.loadAnimation(this, R.anim.exit_to_bottom)
- bottomAnimation.applySystemAnimatorScale(this)
- binding.readerMenuBottom.startAnimation(bottomAnimation)
- }
}
}
diff --git a/app/src/main/res/anim/enter_from_bottom.xml b/app/src/main/res/anim/enter_from_bottom.xml
deleted file mode 100755
index c9bd492a5..000000000
--- a/app/src/main/res/anim/enter_from_bottom.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/exit_to_bottom.xml b/app/src/main/res/anim/exit_to_bottom.xml
deleted file mode 100755
index d5d94c795..000000000
--- a/app/src/main/res/anim/exit_to_bottom.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
\ No newline at end of file