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 0e0815bfd..7d44f05aa 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 @@ -28,7 +28,6 @@ import android.view.animation.Animation import android.view.animation.AnimationUtils import android.widget.FrameLayout import android.widget.RelativeLayout -import android.widget.SeekBar import android.widget.Toast import androidx.annotation.ColorInt import androidx.core.graphics.ColorUtils @@ -42,6 +41,7 @@ import androidx.lifecycle.lifecycleScope import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.shape.MaterialShapeDrawable +import com.google.android.material.slider.Slider import dev.chrisbanes.insetter.applyInsetter import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Chapter @@ -89,10 +89,10 @@ import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.popupMenu import eu.kanade.tachiyomi.util.view.setTooltip import eu.kanade.tachiyomi.widget.listener.SimpleAnimationListener -import eu.kanade.tachiyomi.widget.listener.SimpleSeekBarListener import exh.log.xLogE import exh.source.isEhBasedSource import exh.util.defaultReaderType +import exh.util.floor import exh.util.mangaType import exh.util.seconds import kotlinx.coroutines.Dispatchers @@ -424,27 +424,18 @@ class ReaderActivity : BaseRxActivity() // SY --> // Init listeners on bottom menu - val listener = object : SimpleSeekBarListener() { - override fun onStartTrackingTouch(seekBar: SeekBar) { - super.onStartTrackingTouch(seekBar) + val listener = object : Slider.OnSliderTouchListener { + override fun onStartTrackingTouch(slider: Slider) { isScrollingThroughPages = true } - override fun onStopTrackingTouch(seekBar: SeekBar) { - super.onStopTrackingTouch(seekBar) + override fun onStopTrackingTouch(slider: Slider) { isScrollingThroughPages = false } - - override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) { - if (viewer != null && fromUser) { - moveToPageIndex(value) - binding.pageSeekbar.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) - } - } } - listOf(binding.pageSeekbar, binding.pageSeekbarVert) + listOf(binding.pageSlider, binding.pageSliderVert) .forEach { - it.setOnSeekBarChangeListener(listener) + it.addOnSliderTouchListener(listener) } // SY <-- @@ -860,8 +851,8 @@ class ReaderActivity : BaseRxActivity() if (doublePages) { // If we're moving from singe to double, we want the current page to be the first page pViewer.config.shiftDoublePage = ( - binding.pageSeekbar.progress + - (currentChapter?.pages?.take(binding.pageSeekbar.progress)?.count { it.fullPage || it.isolatedPage } ?: 0) + binding.pageSlider.value.floor() + + (currentChapter?.pages?.take(binding.pageSlider.value.floor())?.count { it.fullPage || it.isolatedPage } ?: 0) ) % 2 != 0 } presenter.viewerChaptersRelay.value?.let { @@ -1102,7 +1093,7 @@ class ReaderActivity : BaseRxActivity() // SY <-- binding.toolbar.title = manga.title - binding.pageSeekbar.isRTL = newViewer is R2LPagerViewer + binding.pageSlider.isRTL = newViewer is R2LPagerViewer if (newViewer is R2LPagerViewer) { binding.leftChapter.setTooltip(R.string.action_next_chapter) binding.rightChapter.setTooltip(R.string.action_previous_chapter) @@ -1263,7 +1254,7 @@ class ReaderActivity : BaseRxActivity() binding.pageNumber.text = "$currentPage/${pages.size}" // binding.pageText.text = "${page.number}/${pages.size}" - // Set seekbar page number + // Set page numbers if (viewer !is R2LPagerViewer) { binding.leftPageText.text = currentPage binding.rightPageText.text = "${pages.size}" @@ -1272,18 +1263,19 @@ class ReaderActivity : BaseRxActivity() binding.leftPageText.text = "${pages.size}" } + // Set slider progress + binding.pageSlider.valueTo = pages.lastIndex.toFloat() + binding.pageSlider.value = page.index.toFloat() + + // SY --> + binding.pageSliderVert.valueTo = pages.lastIndex.toFloat() + binding.pageSliderVert.value = page.index.toFloat() + // SY <-- + // SY --> binding.abovePageText.text = currentPage 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/ReaderSeekBar.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSeekBar.kt deleted file mode 100644 index 4ecc3dc53..000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSeekBar.kt +++ /dev/null @@ -1,55 +0,0 @@ -package eu.kanade.tachiyomi.ui.reader - -import android.content.Context -import android.content.res.ColorStateList -import android.graphics.Canvas -import android.util.AttributeSet -import android.view.MotionEvent -import androidx.appcompat.widget.AppCompatSeekBar -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.util.system.getThemeColor - -/** - * Seekbar to show current chapter progress. - */ -class ReaderSeekBar @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null -) : AppCompatSeekBar(context, attrs) { - - /** - * Whether the seekbar should draw from right to left. - */ - var isRTL = false - - /** - * Draws the seekbar, translating the canvas if using a right to left reader. - */ - override fun draw(canvas: Canvas) { - if (isRTL) { - val px = width / 2f - val py = height / 2f - - canvas.scale(-1f, 1f, px, py) - } - super.draw(canvas) - } - - /** - * Handles touch events, translating coordinates if using a right to left reader. - */ - override fun onTouchEvent(event: MotionEvent): Boolean { - if (isRTL) { - event.setLocation(width - event.x, event.y) - } - return super.onTouchEvent(event) - } - - init { - // Set color to onPrimary when ColoredBars theme is applied - if (context.getThemeColor(R.attr.colorToolbar) == context.getThemeColor(R.attr.colorPrimary)) { - thumbTintList = ColorStateList.valueOf(context.getThemeColor(R.attr.colorOnPrimary)) - progressTintList = thumbTintList - } - } -} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSlider.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSlider.kt new file mode 100644 index 000000000..43a0d7a7d --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSlider.kt @@ -0,0 +1,31 @@ +package eu.kanade.tachiyomi.ui.reader + +import android.content.Context +import android.util.AttributeSet +import com.google.android.material.slider.Slider + +/** + * Slider to show current chapter progress. + */ +class ReaderSlider @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null +) : Slider(context, attrs) { + + init { + isTickVisible = false + stepSize = 1f + setLabelFormatter { value -> + (value.toInt() + 1).toString() + } + } + + /** + * Whether the slider should draw from right to left. + */ + var isRTL: Boolean + set(value) { + layoutDirection = if (value) LAYOUT_DIRECTION_RTL else LAYOUT_DIRECTION_LTR + } + get() = layoutDirection == LAYOUT_DIRECTION_RTL +} diff --git a/app/src/main/res/layout/reader_activity.xml b/app/src/main/res/layout/reader_activity.xml index 933c21012..ac88408bb 100755 --- a/app/src/main/res/layout/reader_activity.xml +++ b/app/src/main/res/layout/reader_activity.xml @@ -227,8 +227,8 @@ app:layout_constraintEnd_toEndOf="parent" tools:text="1" /> - -