diff --git a/app/build.gradle b/app/build.gradle index 67f37754c..e876a0a6f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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 { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsErrorObserver.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsErrorObserver.kt index 0b6616569..a9ed8162d 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsErrorObserver.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsErrorObserver.kt @@ -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 } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPageHolder.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPageHolder.kt index dc8f1dc2c..df6da9e21 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPageHolder.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedPageHolder.kt @@ -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 diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt index 3f3e2bccd..f0d1dbf01 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/standard/PageHolder.kt @@ -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 { + 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 diff --git a/app/src/main/res/layout/item_page.xml b/app/src/main/res/layout/item_page.xml index c15be12c9..6f069f4c2 100644 --- a/app/src/main/res/layout/item_page.xml +++ b/app/src/main/res/layout/item_page.xml @@ -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" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eea244385..9d2e39e27 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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"