From 62698ae769655c066a16cce19cf5e22d825f2cf2 Mon Sep 17 00:00:00 2001 From: jainv4156 Date: Wed, 22 Jan 2025 15:44:45 +0530 Subject: [PATCH] Fix getsize() and getMatrix Depreciation --- .../java/com/ichi2/anki/noteeditor/Toolbar.kt | 24 +++++++++++++++---- .../main/java/com/ichi2/utils/DisplayUtils.kt | 20 ++++++++++++++-- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt index 29ac505d0861..04d7be0be48a 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt @@ -21,9 +21,11 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Color +import android.graphics.Insets import android.graphics.Paint import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable +import android.os.Build import android.util.AttributeSet import android.util.DisplayMetrics import android.util.TypedValue @@ -33,6 +35,7 @@ import android.view.KeyEvent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.WindowInsets import android.widget.FrameLayout import android.widget.LinearLayout import androidx.annotation.ColorInt @@ -234,10 +237,23 @@ class Toolbar : FrameLayout { private val screenWidth: Int get() { val displayMetrics = DisplayMetrics() - (context as Activity) - .windowManager - .defaultDisplay - .getMetrics(displayMetrics) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val windowMetrics = + (context as Activity) + .windowManager + .currentWindowMetrics + val insets: Insets = + windowMetrics.getWindowInsets().getInsetsIgnoringVisibility( + WindowInsets.Type.navigationBars() + or WindowInsets.Type.displayCutout(), + ) + displayMetrics.widthPixels = windowMetrics.bounds.width() - (insets.right + insets.left) + } else { + (context as Activity) + .windowManager + .defaultDisplay + .getMetrics(displayMetrics) + } return displayMetrics.widthPixels } diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/DisplayUtils.kt b/AnkiDroid/src/main/java/com/ichi2/utils/DisplayUtils.kt index 6dbf155462c5..692f744e663f 100644 --- a/AnkiDroid/src/main/java/com/ichi2/utils/DisplayUtils.kt +++ b/AnkiDroid/src/main/java/com/ichi2/utils/DisplayUtils.kt @@ -17,8 +17,11 @@ package com.ichi2.utils import android.content.Context +import android.graphics.Insets import android.graphics.Point +import android.os.Build import android.view.Window +import android.view.WindowInsets import android.view.WindowManager import com.ichi2.anki.AnkiDroidApp import kotlin.math.roundToInt @@ -26,9 +29,22 @@ import kotlin.math.roundToInt object DisplayUtils { @Suppress("DEPRECATION") // #9333: defaultDisplay & getSize fun getDisplayDimensions(wm: WindowManager): Point { - val display = wm.defaultDisplay val point = Point() - display.getSize(point) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val bounds = wm.currentWindowMetrics.bounds + val insets: Insets = + wm.currentWindowMetrics + .getWindowInsets() + .getInsetsIgnoringVisibility( + WindowInsets.Type.navigationBars() + or WindowInsets.Type.displayCutout(), + ) + point.x = bounds.width() - (insets.right + insets.left) + point.y = bounds.height() - (insets.top + insets.bottom) + } else { + val display = wm.defaultDisplay + display.getSize(point) + } return point }