diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt
index 7d590311d..dc4f4bab5 100644
--- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt
+++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt
@@ -11,7 +11,9 @@ import android.graphics.Paint
import android.graphics.Rect
import android.graphics.drawable.Drawable
import android.os.BatteryManager
+import android.os.Build
import android.util.AttributeSet
+import android.view.RoundedCorner
import android.view.View
import android.view.WindowInsets
import androidx.annotation.AttrRes
@@ -46,8 +48,10 @@ class ReaderInfoBarView @JvmOverloads constructor(
private var insetLeft: Int = 0
private var insetRight: Int = 0
private var insetTop: Int = 0
- private var cutoutInsetLeft = 0
- private var cutoutInsetRight = 0
+ private val insetLeftFallback: Int
+ private val insetRightFallback: Int
+ private val insetTopFallback: Int
+ private val insetCornerFallback = getSystemUiDimensionOffset("rounded_corner_content_padding")
private val colorText = ColorUtils.setAlphaComponent(
context.getThemeColor(materialR.attr.colorOnSurface, Color.BLACK),
200,
@@ -80,14 +84,12 @@ class ReaderInfoBarView @JvmOverloads constructor(
paint.strokeWidth = getDimension(R.styleable.ReaderInfoBarView_android_strokeWidth, 2f)
paint.textSize = getDimension(R.styleable.ReaderInfoBarView_android_textSize, 16f)
}
- val insetCorner = getSystemUiDimensionOffset("rounded_corner_content_padding")
- val fallbackInset = resources.getDimensionPixelOffset(R.dimen.reader_bar_inset_fallback)
- val insetStart = getSystemUiDimensionOffset("status_bar_padding_start", fallbackInset) + insetCorner
- val insetEnd = getSystemUiDimensionOffset("status_bar_padding_end", fallbackInset) + insetCorner
+ val insetStart = getSystemUiDimensionOffset("status_bar_padding_start")
+ val insetEnd = getSystemUiDimensionOffset("status_bar_padding_end")
val isRtl = layoutDirection == LAYOUT_DIRECTION_RTL
- insetLeft = if (isRtl) insetEnd else insetStart
- insetRight = if (isRtl) insetStart else insetEnd
- insetTop = minOf(insetLeft, insetRight)
+ insetLeftFallback = if (isRtl) insetEnd else insetStart
+ insetRightFallback = if (isRtl) insetStart else insetEnd
+ insetTopFallback = minOf(insetLeftFallback, insetRightFallback)
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
@@ -110,12 +112,12 @@ class ReaderInfoBarView @JvmOverloads constructor(
paint.textAlign = Paint.Align.LEFT
canvas.drawTextOutline(
text,
- (paddingLeft + insetLeft + cutoutInsetLeft).toFloat(),
+ (paddingLeft + insetLeft).toFloat(),
paddingTop + insetTop + ty,
)
if (isTimeVisible) {
paint.textAlign = Paint.Align.RIGHT
- var endX = (width - paddingRight - insetRight - cutoutInsetRight).toFloat()
+ var endX = (width - paddingRight - insetRight).toFloat()
canvas.drawTextOutline(timeText, endX, paddingTop + insetTop + ty)
if (batteryText.isNotEmpty()) {
paint.getTextBounds(timeText, 0, timeText.length, textBounds)
@@ -221,15 +223,29 @@ class ReaderInfoBarView @JvmOverloads constructor(
}
private fun updateCutoutInsets(insetsCompat: WindowInsetsCompat?) {
- val cutouts = (insetsCompat ?: return).displayCutout?.boundingRects.orEmpty()
- cutoutInsetLeft = 0
- cutoutInsetRight = 0
- for (rect in cutouts) {
- if (rect.left <= paddingLeft) {
- cutoutInsetLeft += rect.width()
+ insetLeft = insetLeftFallback
+ insetRight = insetRightFallback
+ insetTop = insetTopFallback
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && insetsCompat != null) {
+ val nativeInsets = insetsCompat.toWindowInsets()
+ nativeInsets?.getRoundedCorner(RoundedCorner.POSITION_TOP_LEFT)?.let { corner ->
+ insetLeft += corner.radius
}
- if (rect.right >= width - paddingRight) {
- cutoutInsetRight += rect.width()
+ nativeInsets?.getRoundedCorner(RoundedCorner.POSITION_TOP_RIGHT)?.let { corner ->
+ insetRight += corner.radius
+ }
+ } else {
+ insetLeft += insetCornerFallback
+ insetRight += insetCornerFallback
+ }
+ insetsCompat?.displayCutout?.let { cutout ->
+ for (rect in cutout.boundingRects) {
+ if (rect.left <= paddingLeft) {
+ insetLeft += rect.width()
+ }
+ if (rect.right >= width - paddingRight) {
+ insetRight += rect.width()
+ }
}
}
}
diff --git a/app/src/main/res/layout-w600dp-land/activity_reader.xml b/app/src/main/res/layout-w600dp-land/activity_reader.xml
index e6c8c5317..4ee41c34a 100644
--- a/app/src/main/res/layout-w600dp-land/activity_reader.xml
+++ b/app/src/main/res/layout-w600dp-land/activity_reader.xml
@@ -18,6 +18,7 @@
android:layout_height="wrap_content"
android:layout_gravity="top"
android:paddingHorizontal="6dp"
+ android:paddingTop="8dp"
android:textSize="12sp"
android:visibility="gone"
tools:visibility="visible" />
diff --git a/app/src/main/res/layout/activity_reader.xml b/app/src/main/res/layout/activity_reader.xml
index 935edc3b3..3e9144c47 100644
--- a/app/src/main/res/layout/activity_reader.xml
+++ b/app/src/main/res/layout/activity_reader.xml
@@ -28,6 +28,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
+ android:padding="6dp"
android:textSize="12sp"
android:visibility="gone"
tools:visibility="visible" />
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 0db529f60..3939fff2a 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -29,7 +29,6 @@
10dp
116dp
84dp
- 8dp
12dp
120dp
80dp