Improved autoscroll

This commit is contained in:
NerdNumber9 2018-06-10 01:26:01 -04:00
parent b6a3f6ebd2
commit 34df0759f3
3 changed files with 37 additions and 38 deletions

View File

@ -171,7 +171,5 @@ object PreferenceKeys {
const val eh_readerInstantRetry = "eh_reader_instant_retry" const val eh_readerInstantRetry = "eh_reader_instant_retry"
const val eh_utilAutoscrollState = "eh_util_autoscroll_state"
const val eh_utilAutoscrollInterval = "eh_util_autoscroll_interval" const val eh_utilAutoscrollInterval = "eh_util_autoscroll_interval"
} }

View File

@ -243,7 +243,5 @@ class PreferencesHelper(val context: Context) {
fun eh_readerInstantRetry() = rxPrefs.getBoolean(Keys.eh_readerInstantRetry, true) fun eh_readerInstantRetry() = rxPrefs.getBoolean(Keys.eh_readerInstantRetry, true)
fun eh_utilAutoscrollState() = rxPrefs.getBoolean(Keys.eh_utilAutoscrollState, false)
fun eh_utilAutoscrollInterval() = rxPrefs.getFloat(Keys.eh_utilAutoscrollInterval, 3f) fun eh_utilAutoscrollInterval() = rxPrefs.getFloat(Keys.eh_utilAutoscrollInterval, 3f)
} }

View File

@ -8,6 +8,8 @@ import android.graphics.Color
import android.os.Build import android.os.Build
import android.os.Build.VERSION_CODES.KITKAT import android.os.Build.VERSION_CODES.KITKAT
import android.os.Bundle import android.os.Bundle
import android.support.v4.graphics.drawable.DrawableCompat.applyTheme
import android.support.v4.view.ViewCompat.setRotation
import android.text.Editable import android.text.Editable
import android.text.TextWatcher import android.text.TextWatcher
import android.view.* import android.view.*
@ -20,6 +22,7 @@ import com.jakewharton.rxbinding.view.clicks
import com.jakewharton.rxbinding.widget.checkedChanges import com.jakewharton.rxbinding.widget.checkedChanges
import com.jakewharton.rxbinding.widget.textChanges import com.jakewharton.rxbinding.widget.textChanges
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.R.id.*
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
@ -164,40 +167,37 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
setEhUtilsVisibility(ehUtilsVisible) setEhUtilsVisibility(ehUtilsVisible)
} }
subscriptions += preferences.eh_utilAutoscrollState().asObservable() eh_autoscroll_freq.setText(preferences.eh_utilAutoscrollInterval().getOrDefault().let {
.combineLatest(preferences.eh_utilAutoscrollInterval().asObservable()) { state, interval -> if(it == -1f)
state to interval ""
}.observeOn(AndroidSchedulers.mainThread()) else it.toString()
.subscribe { (state, interval) -> })
if(state && interval != -1f) {
setupAutoscroll(interval)
} else {
autoscrollSubscription?.unsubscribe()
autoscrollSubscription = null
}
eh_autoscroll.isChecked = state subscriptions += eh_autoscroll.checkedChanges()
if(interval != -1f && eh_autoscroll_freq.text?.toString()?.toFloatOrNull() != interval) .observeOn(AndroidSchedulers.mainThread())
eh_autoscroll_freq.setText(interval.toString()) .subscribe {
setupAutoscroll(if(it)
preferences.eh_utilAutoscrollInterval().getOrDefault()
else -1f)
} }
subscriptions += eh_autoscroll.checkedChanges().subscribe { subscriptions += eh_autoscroll_freq.textChanges()
preferences.eh_utilAutoscrollState().set(it) .observeOn(AndroidSchedulers.mainThread())
} .subscribe {
val parsed = it?.toString()?.toFloatOrNull()
subscriptions += eh_autoscroll_freq.textChanges().subscribe { if (parsed == null || parsed <= 0 || parsed > 9999) {
val parsed = it?.toString()?.toFloatOrNull() eh_autoscroll_freq.error = "Invalid frequency"
preferences.eh_utilAutoscrollInterval().set(-1f)
if(parsed == null || parsed <= 0 || parsed > 9999) { eh_autoscroll.isEnabled = false
eh_autoscroll_freq.error = "Invalid frequency" setupAutoscroll(-1f)
preferences.eh_utilAutoscrollInterval().set(-1f) } else {
eh_autoscroll.isEnabled = false eh_autoscroll_freq.error = null
} else { preferences.eh_utilAutoscrollInterval().set(parsed)
eh_autoscroll_freq.error = null eh_autoscroll.isEnabled = true
preferences.eh_utilAutoscrollInterval().set(parsed) setupAutoscroll(if(eh_autoscroll.isChecked) parsed else -1f)
eh_autoscroll.isEnabled = true }
} }
}
subscriptions += eh_autoscroll_help.clicks().subscribe { subscriptions += eh_autoscroll_help.clicks().subscribe {
MaterialDialog.Builder(this) MaterialDialog.Builder(this)
@ -501,16 +501,16 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
private fun setRotation(rotation: Int) { private fun setRotation(rotation: Int) {
when (rotation) { when (rotation) {
// Rotation free // Rotation free
1 -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED 1 -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
// Lock in current rotation // Lock in current rotation
2 -> { 2 -> {
val currentOrientation = resources.configuration.orientation val currentOrientation = resources.configuration.orientation
setRotation(if (currentOrientation == Configuration.ORIENTATION_PORTRAIT) 3 else 4) setRotation(if (currentOrientation == Configuration.ORIENTATION_PORTRAIT) 3 else 4)
} }
// Lock in portrait // Lock in portrait
3 -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT 3 -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
// Lock in landscape // Lock in landscape
4 -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE 4 -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
} }
} }
@ -697,6 +697,9 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
// --> EH // --> EH
private fun setupAutoscroll(interval: Float) { private fun setupAutoscroll(interval: Float) {
autoscrollSubscription?.unsubscribe() autoscrollSubscription?.unsubscribe()
autoscrollSubscription = null
if(interval == -1f) return
val intervalMs = (interval * 1000).roundToLong() val intervalMs = (interval * 1000).roundToLong()
val sub = Observable.interval(intervalMs, intervalMs, TimeUnit.MILLISECONDS) val sub = Observable.interval(intervalMs, intervalMs, TimeUnit.MILLISECONDS)