Horis пре 1 година
родитељ
комит
0d42d37279
1 измењених фајлова са 15 додато и 58 уклоњено
  1. 15 58
      app/src/main/java/io/legado/app/ui/widget/ReaderInfoBarView.kt

+ 15 - 58
app/src/main/java/io/legado/app/ui/widget/ReaderInfoBarView.kt

@@ -10,20 +10,15 @@ import android.graphics.Paint
 import android.graphics.Rect
 import android.graphics.Rect
 import android.util.AttributeSet
 import android.util.AttributeSet
 import android.view.View
 import android.view.View
-import android.view.WindowInsets
 import androidx.annotation.AttrRes
 import androidx.annotation.AttrRes
 import androidx.core.content.ContextCompat
 import androidx.core.content.ContextCompat
 import androidx.core.content.res.use
 import androidx.core.content.res.use
 import androidx.core.graphics.ColorUtils
 import androidx.core.graphics.ColorUtils
-import androidx.core.view.ViewCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsCompat
-import io.legado.app.R
-import splitties.dimensions.dp
-import java.text.DecimalFormat
-import java.text.NumberFormat
+import io.legado.app.utils.dpToPx
+import io.legado.app.utils.setOnApplyWindowInsetsListenerCompat
 import java.text.SimpleDateFormat
 import java.text.SimpleDateFormat
 import java.util.Date
 import java.util.Date
-import java.util.Locale
 import kotlin.math.min
 import kotlin.math.min
 import com.google.android.material.R as materialR
 import com.google.android.material.R as materialR
 
 
@@ -74,13 +69,23 @@ class ReaderInfoBarView @JvmOverloads constructor(
         get() = width - paddingLeft - paddingRight - insetLeft - insetRight
         get() = width - paddingLeft - paddingRight - insetLeft - insetRight
 
 
     init {
     init {
-        val insetStart = dp(10f).toInt()
-        val insetEnd = dp(10f).toInt()
-        paint.strokeWidth = dp(2f)
+        val insetStart = 10.dpToPx()
+        val insetEnd = 10.dpToPx()
+        paint.strokeWidth = 2f.dpToPx()
         paint.setShadowLayer(2f, 1f, 1f, Color.GRAY)
         paint.setShadowLayer(2f, 1f, 1f, Color.GRAY)
         insetLeft = insetStart
         insetLeft = insetStart
         insetRight = insetEnd
         insetRight = insetEnd
         insetTop = minOf(insetLeft, insetRight)
         insetTop = minOf(insetLeft, insetRight)
+        setOnApplyWindowInsetsListenerCompat { _, windowInsets ->
+            val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
+            if (insets.left >= paddingLeft) {
+                cutoutInsetLeft = insets.left
+            }
+            if (insets.right >= paddingRight) {
+                cutoutInsetRight = insets.right
+            }
+            windowInsets
+        }
     }
     }
 
 
     override fun onDraw(canvas: Canvas) {
     override fun onDraw(canvas: Canvas) {
@@ -119,15 +124,9 @@ class ReaderInfoBarView @JvmOverloads constructor(
 
 
     override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
     override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
         super.onSizeChanged(w, h, oldw, oldh)
         super.onSizeChanged(w, h, oldw, oldh)
-        updateCutoutInsets(ViewCompat.getRootWindowInsets(this))
         updateTextSize()
         updateTextSize()
     }
     }
 
 
-    override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
-        updateCutoutInsets(WindowInsetsCompat.toWindowInsetsCompat(insets))
-        return super.onApplyWindowInsets(insets)
-    }
-
     override fun onAttachedToWindow() {
     override fun onAttachedToWindow() {
         super.onAttachedToWindow()
         super.onAttachedToWindow()
         ContextCompat.registerReceiver(
         ContextCompat.registerReceiver(
@@ -136,7 +135,6 @@ class ReaderInfoBarView @JvmOverloads constructor(
             IntentFilter(Intent.ACTION_TIME_TICK),
             IntentFilter(Intent.ACTION_TIME_TICK),
             ContextCompat.RECEIVER_EXPORTED,
             ContextCompat.RECEIVER_EXPORTED,
         )
         )
-        updateCutoutInsets(ViewCompat.getRootWindowInsets(this))
     }
     }
 
 
     override fun onDetachedFromWindow() {
     override fun onDetachedFromWindow() {
@@ -150,33 +148,6 @@ class ReaderInfoBarView @JvmOverloads constructor(
         invalidate()
         invalidate()
     }
     }
 
 
-    private fun Number.format(
-        decimals: Int = 0,
-        decPoint: Char = '.',
-        thousandsSep: Char? = ' '
-    ): String {
-        val formatter = NumberFormat.getInstance(Locale.US) as DecimalFormat
-        val symbols = formatter.decimalFormatSymbols
-        if (thousandsSep != null) {
-            symbols.groupingSeparator = thousandsSep
-            formatter.isGroupingUsed = true
-        } else {
-            formatter.isGroupingUsed = false
-        }
-        symbols.decimalSeparator = decPoint
-        formatter.decimalFormatSymbols = symbols
-        formatter.minimumFractionDigits = decimals
-        formatter.maximumFractionDigits = decimals
-        return when (this) {
-            is Float,
-            is Double,
-                -> formatter.format(this.toDouble())
-
-            else -> formatter.format(this.toLong())
-        }
-    }
-
-
     private fun updateTextSize() {
     private fun updateTextSize() {
         val testTextSize = 48f
         val testTextSize = 48f
         paint.textSize = testTextSize
         paint.textSize = testTextSize
@@ -213,20 +184,6 @@ class ReaderInfoBarView @JvmOverloads constructor(
         drawText(text, x, y, paint)
         drawText(text, x, y, paint)
     }
     }
 
 
-    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()
-            }
-            if (rect.right >= width - paddingRight) {
-                cutoutInsetRight += rect.width()
-            }
-        }
-    }
-
     private inner class TimeReceiver : BroadcastReceiver() {
     private inner class TimeReceiver : BroadcastReceiver() {
 
 
         override fun onReceive(context: Context?, intent: Intent?) {
         override fun onReceive(context: Context?, intent: Intent?) {