diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CloudFlareActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CloudFlareActivity.kt index 20459349d..caf926f30 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CloudFlareActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CloudFlareActivity.kt @@ -48,8 +48,8 @@ class CloudFlareActivity : BaseActivity(), CloudFlareCal if (!catchingWebViewUnavailability { setContentView( ActivityBrowserBinding.inflate( - layoutInflater - ) + layoutInflater, + ), ) }) { return @@ -82,9 +82,11 @@ class CloudFlareActivity : BaseActivity(), CloudFlareCal } override fun onDestroy() { - viewBinding.webView.run { - stopLoading() - destroy() + runCatching { + viewBinding.webView + }.onSuccess { + it.stopLoading() + it.destroy() } super.onDestroy() } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/CubicSlider.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/CubicSlider.kt new file mode 100644 index 000000000..a75693982 --- /dev/null +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/CubicSlider.kt @@ -0,0 +1,74 @@ +package org.koitharu.kotatsu.core.ui.widgets + +import android.content.Context +import android.util.ArrayMap +import android.util.AttributeSet +import com.google.android.material.slider.Slider +import kotlin.math.cbrt +import kotlin.math.pow + +class CubicSlider @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, +) : Slider(context, attrs) { + + private val changeListeners = ArrayMap(1) + + override fun setValue(value: Float) { + super.setValue(value.unmap()) + } + + override fun getValue(): Float { + return super.getValue().map() + } + + override fun getValueFrom(): Float { + return super.getValueFrom().map() + } + + override fun setValueFrom(valueFrom: Float) { + super.setValueFrom(valueFrom.unmap()) + } + + override fun getValueTo(): Float { + return super.getValueTo().map() + } + + override fun setValueTo(valueTo: Float) { + super.setValueTo(valueTo.unmap()) + } + + override fun addOnChangeListener(listener: OnChangeListener) { + val mapper = OnChangeListenerMapper(listener) + super.addOnChangeListener(mapper) + changeListeners[listener] = mapper + } + + override fun removeOnChangeListener(listener: OnChangeListener) { + changeListeners.remove(listener)?.let { + super.removeOnChangeListener(it) + } + } + + override fun clearOnChangeListeners() { + super.clearOnChangeListeners() + changeListeners.clear() + } + + private fun Float.map(): Float { + return this.pow(3) + } + + private fun Float.unmap(): Float { + return cbrt(this) + } + + private inner class OnChangeListenerMapper( + private val delegate: OnChangeListener, + ) : OnChangeListener { + + override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) { + delegate.onValueChange(slider, value.map(), fromUser) + } + } +} diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/config/ReaderConfigSheet.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/config/ReaderConfigSheet.kt index 34dea5634..1de1f7a15 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/config/ReaderConfigSheet.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/config/ReaderConfigSheet.kt @@ -128,7 +128,7 @@ class ReaderConfigSheet : when (buttonView.id) { R.id.switch_scroll_timer -> { findCallback()?.isAutoScrollEnabled = isChecked - requireViewBinding().labelTimer.isVisible = isChecked + requireViewBinding().layoutTimer.isVisible = isChecked requireViewBinding().sliderTimer.isVisible = isChecked } } @@ -159,6 +159,7 @@ class ReaderConfigSheet : if (fromUser) { settings.readerAutoscrollSpeed = value } + (viewBinding ?: return).labelTimerValue.text = getString(R.string.speed_value, value * 10f) } override fun onActivityResult(result: Uri?) { diff --git a/app/src/main/res/layout/sheet_reader_config.xml b/app/src/main/res/layout/sheet_reader_config.xml index e444adc40..30dfaef37 100644 --- a/app/src/main/res/layout/sheet_reader_config.xml +++ b/app/src/main/res/layout/sheet_reader_config.xml @@ -119,18 +119,35 @@ android:textColor="?colorOnSurfaceVariant" app:drawableStartCompat="@drawable/ic_timer" /> - + tools:visibility="visible"> - + + + + + + Enable periodic backups Backups output directory Last successful backup: %s + x%.1f