Respect rounded corners for page numbers (#1360)
This commit is contained in:
@@ -19,8 +19,8 @@ android {
|
||||
applicationId 'org.koitharu.kotatsu'
|
||||
minSdk = 21
|
||||
targetSdk = 35
|
||||
versionCode = 1007
|
||||
versionName = '8.1.1'
|
||||
versionCode = 1008
|
||||
versionName = '8.1.2'
|
||||
generatedDensities = []
|
||||
testInstrumentationRunner 'org.koitharu.kotatsu.HiltTestRunner'
|
||||
ksp {
|
||||
|
||||
@@ -26,6 +26,7 @@ class DetailsErrorObserver(
|
||||
|
||||
override suspend fun emit(value: Throwable) {
|
||||
val snackbar = Snackbar.make(host, value.getDisplayMessage(host.context.resources), Snackbar.LENGTH_SHORT)
|
||||
snackbar.setAnchorView(activity.viewBinding.containerBottomSheet)
|
||||
if (value is NotFoundException || value is UnsupportedSourceException) {
|
||||
snackbar.duration = Snackbar.LENGTH_INDEFINITE
|
||||
}
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
package org.koitharu.kotatsu.reader.ui.pager.reversed
|
||||
|
||||
import android.graphics.PointF
|
||||
import android.os.Build
|
||||
import android.view.Gravity
|
||||
import android.view.RoundedCorner
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowInsets
|
||||
import android.widget.FrameLayout
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver
|
||||
import org.koitharu.kotatsu.core.model.ZoomMode
|
||||
import org.koitharu.kotatsu.core.os.NetworkState
|
||||
import org.koitharu.kotatsu.core.util.ext.isRtl
|
||||
import org.koitharu.kotatsu.databinding.ItemPageBinding
|
||||
import org.koitharu.kotatsu.reader.domain.PageLoader
|
||||
import org.koitharu.kotatsu.reader.ui.config.ReaderSettings
|
||||
|
||||
@@ -2,10 +2,23 @@ package org.koitharu.kotatsu.reader.ui.pager.standard
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.PointF
|
||||
import android.os.Build
|
||||
import android.view.Gravity
|
||||
import android.view.RoundedCorner
|
||||
import android.view.View
|
||||
import android.view.WindowInsets
|
||||
import android.view.animation.DecelerateInterpolator
|
||||
import android.widget.FrameLayout
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.core.view.OnApplyWindowInsetsListener
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.setMargins
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver
|
||||
import org.koitharu.kotatsu.core.model.ZoomMode
|
||||
import org.koitharu.kotatsu.core.os.NetworkState
|
||||
@@ -30,10 +43,26 @@ open class PageHolder(
|
||||
networkState = networkState,
|
||||
exceptionResolver = exceptionResolver,
|
||||
lifecycleOwner = owner,
|
||||
), ZoomControl.ZoomControlListener {
|
||||
), ZoomControl.ZoomControlListener, OnApplyWindowInsetsListener {
|
||||
|
||||
override val ssiv = binding.ssiv
|
||||
|
||||
init {
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root, this)
|
||||
}
|
||||
|
||||
override fun onApplyWindowInsets(
|
||||
v: View,
|
||||
insets: WindowInsetsCompat
|
||||
): WindowInsetsCompat {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
insets.toWindowInsets()?.let {
|
||||
applyRoundedCorners(it)
|
||||
}
|
||||
}
|
||||
return insets
|
||||
}
|
||||
|
||||
override fun onConfigChanged(settings: ReaderSettings) {
|
||||
super.onConfigChanged(settings)
|
||||
binding.textViewNumber.isVisible = settings.isPagesNumbersEnabled
|
||||
@@ -93,6 +122,29 @@ open class PageHolder(
|
||||
scaleBy(0.8f)
|
||||
}
|
||||
|
||||
@SuppressLint("RtlHardcoded")
|
||||
@RequiresApi(Build.VERSION_CODES.S)
|
||||
protected open fun applyRoundedCorners(insets: WindowInsets) {
|
||||
binding.textViewNumber.updateLayoutParams<FrameLayout.LayoutParams> {
|
||||
val baseMargin = context.resources.getDimensionPixelOffset(R.dimen.margin_small)
|
||||
val absoluteGravity = Gravity.getAbsoluteGravity(gravity, layoutDirection)
|
||||
val corner = when {
|
||||
absoluteGravity and Gravity.LEFT == Gravity.LEFT -> {
|
||||
insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_LEFT)
|
||||
}
|
||||
|
||||
absoluteGravity and Gravity.RIGHT == Gravity.RIGHT -> {
|
||||
insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_RIGHT)
|
||||
}
|
||||
|
||||
else -> {
|
||||
null
|
||||
}
|
||||
}
|
||||
setMargins(baseMargin + (corner?.radius ?: 0))
|
||||
}
|
||||
}
|
||||
|
||||
private fun scaleBy(factor: Float) {
|
||||
val ssiv = binding.ssiv
|
||||
val center = ssiv.getCenter() ?: return
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end|bottom"
|
||||
android:layout_margin="8dp"
|
||||
android:layout_margin="@dimen/margin_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?attr/textAppearanceBodyMedium"
|
||||
android:textColor="?android:textColorTertiary"
|
||||
|
||||
@@ -31,7 +31,7 @@ material = "1.13.0-alpha12"
|
||||
moshi = "1.15.2"
|
||||
okhttp = "4.12.0"
|
||||
okio = "3.10.2"
|
||||
parsers = "b8376594"
|
||||
parsers = "20a24db949"
|
||||
preference = "1.2.1"
|
||||
recyclerview = "1.4.0"
|
||||
room = "2.6.1"
|
||||
|
||||
Reference in New Issue
Block a user