fix crap introduced with Android 15

using fixes from GrapheneOS
bdc88aaf46
3b7322437a

fixes #1186
This commit is contained in:
Helium314 2025-01-07 20:38:03 +01:00
parent 5251bcd989
commit 846ab1edef
8 changed files with 50 additions and 26 deletions

View file

@ -6,11 +6,20 @@
package helium314.keyboard.latin.utils;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Insets;
import android.graphics.Rect;
import android.os.Build;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Display;
import android.view.DisplayCutout;
import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.WindowMetrics;
import androidx.core.util.TypedValueCompat;
@ -26,17 +35,28 @@ public final class ResourceUtils {
// This utility class is not publicly instantiable.
}
public static int getKeyboardWidth(final Resources res, final SettingsValues settingsValues) {
final int defaultKeyboardWidth = getDefaultKeyboardWidth(res);
public static int getKeyboardWidth(final Context ctx, final SettingsValues settingsValues) {
final int defaultKeyboardWidth = getDefaultKeyboardWidth(ctx);
if (settingsValues.mOneHandedModeEnabled) {
return (int) (settingsValues.mOneHandedModeScale * defaultKeyboardWidth);
}
return defaultKeyboardWidth;
}
public static int getDefaultKeyboardWidth(final Resources res) {
final DisplayMetrics dm = res.getDisplayMetrics();
return dm.widthPixels;
public static int getDefaultKeyboardWidth(final Context ctx) {
if (Build.VERSION.SDK_INT < 35) {
final DisplayMetrics dm = ctx.getResources().getDisplayMetrics();
return dm.widthPixels;
}
// Since Android 15, insets aren't subtracted from DisplayMetrics.widthPixels, despite
// targetSdk remaining set to 30.
WindowManager wm = ctx.getSystemService(WindowManager.class);
WindowMetrics windowMetrics = wm.getCurrentWindowMetrics();
Rect windowBounds = windowMetrics.getBounds();
WindowInsets windowInsets = windowMetrics.getWindowInsets();
int insetTypes = WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout();
Insets insets = windowInsets.getInsetsIgnoringVisibility(insetTypes);
return windowBounds.width() - insets.left - insets.right;
}
public static int getKeyboardHeight(final Resources res, final SettingsValues settingsValues) {