Use setFitsSystemWindows for bottom inset padding on Android15+.

Log versions on startup.
This commit is contained in:
eranl 2025-04-13 17:17:32 +03:00
parent e8f8441baa
commit 2cba77cdee
7 changed files with 15 additions and 55 deletions

View file

@ -148,6 +148,8 @@ public class KeyboardView extends View {
mPaint.setAntiAlias(true);
mTypeface = Settings.getInstance().getCustomTypeface();
setFitsSystemWindows(true);
}
@Nullable

View file

@ -121,7 +121,7 @@ public final class PopupKeysKeyboard extends Keyboard {
mBaseWidth = mOccupiedWidth = mNumColumns * mColumnWidth - mDividerWidth;
// Need to subtract the bottom row's gutter only.
mBaseHeight = mOccupiedHeight = mNumRows * mDefaultAbsoluteRowHeight - mVerticalGap
+ mTopPadding + mBottomPadding - ResourceUtils.getBottomPaddingAdjustment(context);
+ mTopPadding + mBottomPadding;
}
private int getFixedOrderTopRowAdjustment() {

View file

@ -37,8 +37,7 @@ class ClipboardLayoutParams(ctx: Context) {
defaultKeyboardWidth, defaultKeyboardWidth).toInt()
}
val bottomPadding = (res.getFraction(R.fraction.config_keyboard_bottom_padding_holo,
defaultKeyboardHeight, defaultKeyboardHeight) * sv.mBottomPaddingScale
+ ResourceUtils.getBottomPaddingAdjustment(ctx)).toInt()
defaultKeyboardHeight, defaultKeyboardHeight) * sv.mBottomPaddingScale).toInt()
val topPadding = res.getFraction(R.fraction.config_keyboard_top_padding_holo,
defaultKeyboardHeight, defaultKeyboardHeight).toInt()

View file

@ -33,8 +33,7 @@ internal class EmojiLayoutParams(ctx: Context) {
defaultKeyboardHeight, defaultKeyboardHeight).toInt()
}
val bottomPadding = (res.getFraction(R.fraction.config_keyboard_bottom_padding_holo,
defaultKeyboardHeight, defaultKeyboardHeight) * sv.mBottomPaddingScale
+ ResourceUtils.getBottomPaddingAdjustment(ctx)).toInt()
defaultKeyboardHeight, defaultKeyboardHeight) * sv.mBottomPaddingScale).toInt()
val topPadding = res.getFraction(R.fraction.config_keyboard_top_padding_holo,
defaultKeyboardHeight, defaultKeyboardHeight).toInt()

View file

@ -224,9 +224,7 @@ public class KeyboardParams {
R.styleable.Keyboard_keyboardTopPadding, height, height, 0);
mBottomPadding = (int) (keyboardAttr.getFraction(
R.styleable.Keyboard_keyboardBottomPadding, height, height, 0)
* Settings.getValues().mBottomPaddingScale)
+ ResourceUtils.getBottomPaddingAdjustment(context);
* Settings.getValues().mBottomPaddingScale);
mLeftPadding = (int) (keyboardAttr.getFraction(
R.styleable.Keyboard_keyboardLeftPadding, width, width, 0)
* Settings.getValues().mSidePaddingScale);

View file

@ -23,6 +23,7 @@ import helium314.keyboard.latin.utils.DictionaryInfoUtils.USER_DICTIONARY_SUFFIX
import helium314.keyboard.latin.utils.LayoutType
import helium314.keyboard.latin.utils.LayoutType.Companion.folder
import helium314.keyboard.latin.utils.LayoutUtilsCustom
import helium314.keyboard.latin.utils.Log
import helium314.keyboard.latin.utils.ScriptUtils.SCRIPT_LATIN
import helium314.keyboard.latin.utils.ScriptUtils.script
import helium314.keyboard.latin.utils.SubtypeSettings
@ -51,6 +52,14 @@ class App : Application() {
checkVersionUpgrade(this)
app = this
Defaults.initDynamicDefaults(this)
val packageInfo = packageManager.getPackageInfo(packageName, 0)
@Suppress("DEPRECATION")
Log.i(
"startup", "Starting ${applicationInfo.processName} version ${packageInfo.versionName} (${
packageInfo.versionCode
}) on Android ${android.os.Build.VERSION.RELEASE} (SDK ${android.os.Build.VERSION.SDK_INT})"
)
}
companion object {

View file

@ -6,9 +6,6 @@
package helium314.keyboard.latin.utils;
import java.util.function.BiFunction;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
@ -22,7 +19,6 @@ import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.WindowMetrics;
import androidx.annotation.RequiresApi;
import helium314.keyboard.latin.R;
import helium314.keyboard.latin.settings.SettingsValues;
@ -137,47 +133,4 @@ public final class ResourceUtils {
public static boolean isNight(final Resources res) {
return (res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
}
public static int getBottomPaddingAdjustment(Context context) {
if (Build.VERSION.SDK_INT < 35) {
return 0;
}
WindowManager wm = context.getSystemService(WindowManager.class);
logInsets(wm.getMaximumWindowMetrics(), "max-metrics");
logInsets(wm.getCurrentWindowMetrics(), "current-metrics");
WindowMetrics windowMetrics = wm.getMaximumWindowMetrics();
WindowInsets windowInsets = windowMetrics.getWindowInsets();
int insetTypes = WindowInsets.Type.navigationBars();
Insets insets = windowInsets.getInsetsIgnoringVisibility(insetTypes);
return insets.bottom + insets.top;
}
@RequiresApi(api = Build.VERSION_CODES.R)
private static void logInsets(WindowMetrics metrics, String metricsType) {
logInsets(metrics, metricsType, WindowInsets::getInsets, "insets");
logInsets(metrics, metricsType, WindowInsets::getInsetsIgnoringVisibility, "insetsIgnoringVisibility");
}
@RequiresApi(api = Build.VERSION_CODES.R)
private static void logInsets(WindowMetrics metrics, String metricsType,
BiFunction<WindowInsets, Integer, Insets> insetsGetter, String visibility) {
logInsets(metrics, metricsType, WindowInsets.Type.navigationBars(),"navigationBars",
insetsGetter, visibility);
logInsets(metrics, metricsType, WindowInsets.Type.systemBars(), "systemBars", insetsGetter, visibility);
logInsets(metrics, metricsType, WindowInsets.Type.statusBars(), "statusBars", insetsGetter, visibility);
logInsets(metrics, metricsType, WindowInsets.Type.displayCutout(),"displayCutout",
insetsGetter, visibility);
}
@RequiresApi(api = Build.VERSION_CODES.R)
@SuppressLint("DefaultLocale")
private static void logInsets(WindowMetrics metrics, String metricsType, int insetTypes, String insetsType,
BiFunction<WindowInsets, Integer, Insets> insetsGetter, String visibility) {
WindowInsets windowInsets = metrics.getWindowInsets();
Insets insets = insetsGetter.apply(windowInsets, insetTypes);
Log.i("insets", String.format("%s, %s, %s, bottom %d, top %d", metricsType, insetsType, visibility,
insets.bottom, insets.top));
}
}