diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt index d8c315d05..230f2d542 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -25,6 +25,10 @@ object PreferenceKeys { const val showPageNumber = "pref_show_page_number_key" + const val landscapeVerticalSeekbar = "pref_show_vert_seekbar_landscape" + + const val leftVerticalSeekbar = "pref_left_handed_vertical_seekbar" + const val dualPageSplit = "pref_dual_page_split" const val dualPageInvert = "pref_dual_page_invert" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index 3e472c558..024e319f8 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -460,4 +460,8 @@ class PreferencesHelper(val context: Context) { fun extensionRepos() = flowPrefs.getStringSet(Keys.extensionRepos, emptySet()) fun cropBordersContinuesVertical() = flowPrefs.getBoolean(Keys.cropBordersContinuesVertical, false) + + fun landscapeVerticalSeekbar() = flowPrefs.getBoolean(Keys.landscapeVerticalSeekbar, false) + + fun leftVerticalSeekbar() = flowPrefs.getBoolean(Keys.leftVerticalSeekbar, false) } 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 6187b41e4..73dcfdb47 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 @@ -6,6 +6,7 @@ import android.app.ProgressDialog import android.content.ClipData import android.content.Context import android.content.Intent +import android.content.res.Configuration import android.graphics.Bitmap import android.graphics.Color import android.os.Build @@ -17,6 +18,7 @@ import android.view.View import android.view.WindowManager import android.view.animation.Animation import android.view.animation.AnimationUtils +import android.widget.RelativeLayout import android.widget.SeekBar import android.widget.Toast import androidx.core.view.ViewCompat @@ -387,36 +389,81 @@ class ReaderActivity : BaseRxActivity() } } + // SY --> // Init listeners on bottom menu - binding.pageSeekbar.setOnSeekBarChangeListener( - object : SimpleSeekBarListener() { - override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) { - if (viewer != null && fromUser) { - moveToPageIndex(value) - } - } - } - ) - - // Extra menu buttons - - binding.leftChapter.setOnClickListener { - if (viewer != null) { - if (viewer is R2LPagerViewer) { - loadNextChapter() - } else { - loadPreviousChapter() + val listener = object : SimpleSeekBarListener() { + override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) { + if (viewer != null && fromUser) { + moveToPageIndex(value) } } } - binding.rightChapter.setOnClickListener { - if (viewer != null) { - if (viewer is R2LPagerViewer) { - loadPreviousChapter() - } else { - loadNextChapter() - } + listOf(binding.pageSeekbar, binding.pageSeekbarVert) + .forEach { + it.setOnSeekBarChangeListener(listener) } + // SY <-- + + // Extra menu buttons + + // SY --> + listOf(binding.leftChapter, binding.aboveChapter).forEach { + it.clicks() + .onEach { + if (viewer != null) { + if (viewer is R2LPagerViewer) { + loadNextChapter() + } else { + loadPreviousChapter() + } + } + } + .launchIn(lifecycleScope) + } + listOf(binding.rightChapter, binding.belowChapter).forEach { + it.clicks() + .onEach { + if (viewer != null) { + if (viewer is R2LPagerViewer) { + loadPreviousChapter() + } else { + loadNextChapter() + } + } + } + .launchIn(lifecycleScope) + } + // SY <-- + + /*binding.actionRotation.setOnClickListener { + val newOrientation = OrientationType.getNextOrientation(preferences.rotation().get(), resources) + + preferences.rotation().set(newOrientation.prefValue) + setOrientation(newOrientation.flag) + + rotationToast?.cancel() + rotationToast = toast(newOrientation.stringRes) + } + preferences.rotation().asImmediateFlow { updateRotationShortcut(it) } + .onEach { + updateRotationShortcut(it) + } + .launchIn(lifecycleScope) + */ + + binding.actionCustomFilter.setOnClickListener { + val sheet = ReaderColorFilterSheet(this) + // Remove dimmed backdrop so changes can be previewed + .apply { window?.setDimAmount(0f) } + + // Hide toolbars while sheet is open for better preview + sheet.setOnDismissListener { setMenuVisibility(true) } + setMenuVisibility(false) + + sheet.show() + } + binding.actionSettings.setOnClickListener { + ReaderSettingsSheet(this).show() } /*binding.actionRotation.setOnClickListener { @@ -666,6 +713,14 @@ class ReaderActivity : BaseRxActivity() 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 (preferences.leftVerticalSeekbar().get() && binding.readerNavVert.isVisible) { + binding.seekbarVertContainer.startAnimation(vertAnimationLeft) + } else { + binding.seekbarVertContainer.startAnimation(vertAnimation) + } + val bottomAnimation = AnimationUtils.loadAnimation(this, R.anim.enter_from_bottom) binding.readerMenuBottom.startAnimation(bottomAnimation) } @@ -693,6 +748,14 @@ class ReaderActivity : BaseRxActivity() 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 (preferences.leftVerticalSeekbar().get() && binding.readerNavVert.isVisible) { + binding.seekbarVertContainer.startAnimation(vertAnimationLeft) + } else { + binding.seekbarVertContainer.startAnimation(vertAnimation) + } + val bottomAnimation = AnimationUtils.loadAnimation(this, R.anim.exit_to_bottom) binding.readerMenuBottom.startAnimation(bottomAnimation) } @@ -765,6 +828,31 @@ class ReaderActivity : BaseRxActivity() showReadingModeSnackbar(presenter.getMangaViewer()) } + // SY --> + + // --> Vertical seekbar hide on landscape + + if (((resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && preferences.landscapeVerticalSeekbar().get()) || resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) && (viewer is WebtoonViewer || viewer is VerticalPagerViewer)) { + binding.readerNavVert.isVisible = true + binding.readerNavHorz.isVisible = false + } else { + binding.readerNavVert.isVisible = false + binding.readerNavHorz.isVisible = true + } + + // <-- Vertical seekbar hide on landscape + + // --> Left-handed vertical seekbar + + val params = binding.readerNavVert.layoutParams as RelativeLayout.LayoutParams + if (preferences.leftVerticalSeekbar().get() && binding.readerNavVert.isVisible) { + params.removeRule(RelativeLayout.ALIGN_PARENT_END) + binding.readerNavVert.layoutParams = params + } + + // <-- Left-handed vertical seekbar + + // SY <-- binding.toolbar.title = manga.title binding.pageSeekbar.isRTL = newViewer is R2LPagerViewer @@ -872,8 +960,18 @@ class ReaderActivity : BaseRxActivity() binding.leftPageText.text = "${pages.size}" } + // SY --> + binding.abovePageText.text = "${page.number}" + binding.belowPageText.text = "${pages.size}" + // SY <-- + binding.pageSeekbar.max = pages.lastIndex binding.pageSeekbar.progress = page.index + + // SY --> + binding.pageSeekbarVert.max = pages.lastIndex + binding.pageSeekbarVert.progress = page.index + // SY <-- } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt index eb9e06289..e379e67aa 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt @@ -67,6 +67,8 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BaseBottomShee binding.rotationMode.bindToPreference(preferences.rotation(), 1) binding.backgroundColor.bindToIntPreference(preferences.readerTheme(), R.array.reader_themes_values) binding.showPageNumber.bindToPreference(preferences.showPageNumber()) + binding.landscapeVerticalSeekbar.bindToPreference(preferences.landscapeVerticalSeekbar()) + binding.leftVerticalSeekbar.bindToPreference(preferences.leftVerticalSeekbar()) binding.fullscreen.bindToPreference(preferences.fullscreen()) binding.dualPageSplit.bindToPreference(preferences.dualPageSplit()) binding.keepscreen.bindToPreference(preferences.keepScreenOn()) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt index ae0f74827..e7b6cd883 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt @@ -50,6 +50,18 @@ class SettingsReaderController : SettingsController() { summaryRes = R.string.pref_show_reading_mode_summary defaultValue = true } + switchPreference { + key = Keys.landscapeVerticalSeekbar + titleRes = R.string.pref_show_vert_seekbar_landscape + summaryRes = R.string.pref_show_vert_seekbar_landscape_summary + defaultValue = false + } + switchPreference { + key = Keys.leftVerticalSeekbar + titleRes = R.string.pref_left_handed_vertical_seekbar + summaryRes = R.string.pref_left_handed_vertical_seekbar_summary + defaultValue = false + } switchPreference { key = Keys.dualPageSplit titleRes = R.string.pref_dual_page_split diff --git a/app/src/main/res/anim/fade_in_side.xml b/app/src/main/res/anim/fade_in_side.xml new file mode 100644 index 000000000..dc88e8a23 --- /dev/null +++ b/app/src/main/res/anim/fade_in_side.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/anim/fade_in_side_left.xml b/app/src/main/res/anim/fade_in_side_left.xml new file mode 100644 index 000000000..f6a125f97 --- /dev/null +++ b/app/src/main/res/anim/fade_in_side_left.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/anim/fade_out_side.xml b/app/src/main/res/anim/fade_out_side.xml new file mode 100644 index 000000000..934862553 --- /dev/null +++ b/app/src/main/res/anim/fade_out_side.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/app/src/main/res/anim/fade_out_side_left.xml b/app/src/main/res/anim/fade_out_side_left.xml new file mode 100644 index 000000000..f5d5df0d9 --- /dev/null +++ b/app/src/main/res/anim/fade_out_side_left.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/drawable/reader_menu_bottom.xml b/app/src/main/res/drawable/reader_menu_bottom.xml deleted file mode 100644 index e411f9461..000000000 --- a/app/src/main/res/drawable/reader_menu_bottom.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/readernav_rounded.xml b/app/src/main/res/drawable/readernav_rounded.xml deleted file mode 100644 index 06220d555..000000000 --- a/app/src/main/res/drawable/readernav_rounded.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/reader_activity.xml b/app/src/main/res/layout/reader_activity.xml index 22eda0b8f..bf1761ecc 100755 --- a/app/src/main/res/layout/reader_activity.xml +++ b/app/src/main/res/layout/reader_activity.xml @@ -44,7 +44,7 @@ android:layout_height="match_parent" android:visibility="gone" /> - + app:elevation="0dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> @@ -207,8 +337,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:maxHeight="?attr/actionBarSize" - android:minHeight="?attr/actionBarSize" /> + android:maxHeight="40dp" + android:minHeight="40dp" /> - + + + + + + app:layout_constraintTop_toBottomOf="@id/left_vertical_seekbar" /> Show page number Show reading mode Briefly show current mode when reader is opened + Show vertical seekbar in landscape + Enables vertical seekbar when in landscape + Left-handed vertical seekbar + Switches which side the seekbar is on 32-bit color Reduces banding, but impacts performance Crop borders