mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-04-28 02:29:09 +00:00
fix crap introduced with Android 15
using fixes from GrapheneOSbdc88aaf46
3b7322437a
fixes #1186
This commit is contained in:
parent
5251bcd989
commit
846ab1edef
8 changed files with 50 additions and 26 deletions
|
@ -220,7 +220,7 @@ public final class KeyboardLayoutSet {
|
|||
builder.mParams.mMode = KeyboardId.MODE_TEXT;
|
||||
// always full width, but height should consider scale and number row to align nicely
|
||||
// actually the keyboard does not have full height, but at this point we use it to get correct key heights
|
||||
final int width = ResourceUtils.getDefaultKeyboardWidth(context.getResources());
|
||||
final int width = ResourceUtils.getDefaultKeyboardWidth(context);
|
||||
final int height = ResourceUtils.getKeyboardHeight(context.getResources(), Settings.getInstance().getCurrent());
|
||||
builder.setKeyboardGeometry(width, height);
|
||||
builder.setSubtype(RichInputMethodManager.getInstance().getCurrentSubtype());
|
||||
|
|
|
@ -137,9 +137,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
|||
final int currentAutoCapsState, final int currentRecapitalizeState) {
|
||||
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
|
||||
mThemeContext, editorInfo);
|
||||
final Resources res = mThemeContext.getResources();
|
||||
final int keyboardWidth = ResourceUtils.getKeyboardWidth(res, settingsValues);
|
||||
final int keyboardHeight = ResourceUtils.getKeyboardHeight(res, settingsValues);
|
||||
final int keyboardWidth = ResourceUtils.getKeyboardWidth(mThemeContext, settingsValues);
|
||||
final int keyboardHeight = ResourceUtils.getKeyboardHeight(mThemeContext.getResources(), settingsValues);
|
||||
final boolean oneHandedModeEnabled = settingsValues.mOneHandedModeEnabled;
|
||||
mKeyboardLayoutSet = builder.setKeyboardGeometry(keyboardWidth, keyboardHeight)
|
||||
.setSubtype(mRichImm.getCurrentSubtype())
|
||||
|
|
|
@ -43,7 +43,7 @@ class ClipboardHistoryView @JvmOverloads constructor(
|
|||
) : LinearLayout(context, attrs, defStyle), View.OnClickListener,
|
||||
ClipboardHistoryManager.OnHistoryChangeListener, OnKeyEventListener, View.OnLongClickListener {
|
||||
|
||||
private val clipboardLayoutParams = ClipboardLayoutParams(context.resources)
|
||||
private val clipboardLayoutParams = ClipboardLayoutParams(context)
|
||||
private val pinIconId: Int
|
||||
private val keyBackgroundId: Int
|
||||
private var initialized = false
|
||||
|
@ -78,7 +78,7 @@ class ClipboardHistoryView @JvmOverloads constructor(
|
|||
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
|
||||
val res = context.resources
|
||||
// The main keyboard expands to the entire this {@link KeyboardView}.
|
||||
val width = ResourceUtils.getKeyboardWidth(res, Settings.getInstance().current) + paddingLeft + paddingRight
|
||||
val width = ResourceUtils.getKeyboardWidth(context, Settings.getInstance().current) + paddingLeft + paddingRight
|
||||
val height = ResourceUtils.getKeyboardHeight(res, Settings.getInstance().current) + paddingTop + paddingBottom
|
||||
setMeasuredDimension(width, height)
|
||||
}
|
||||
|
@ -166,7 +166,7 @@ class ClipboardHistoryView @JvmOverloads constructor(
|
|||
}
|
||||
clipboardRecyclerView.apply {
|
||||
adapter = clipboardAdapter
|
||||
layoutParams.width = ResourceUtils.getKeyboardWidth(context.resources, Settings.getInstance().current)
|
||||
layoutParams.width = ResourceUtils.getKeyboardWidth(context, Settings.getInstance().current)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
package helium314.keyboard.keyboard.clipboard
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
|
@ -11,7 +12,7 @@ import helium314.keyboard.latin.R
|
|||
import helium314.keyboard.latin.settings.Settings
|
||||
import helium314.keyboard.latin.utils.ResourceUtils
|
||||
|
||||
class ClipboardLayoutParams(res: Resources) {
|
||||
class ClipboardLayoutParams(ctx: Context) {
|
||||
|
||||
private val keyVerticalGap: Int
|
||||
private val keyHorizontalGap: Int
|
||||
|
@ -19,9 +20,10 @@ class ClipboardLayoutParams(res: Resources) {
|
|||
val bottomRowKeyboardHeight: Int
|
||||
|
||||
init {
|
||||
val res = ctx.resources
|
||||
val sv = Settings.getInstance().current
|
||||
val defaultKeyboardHeight = ResourceUtils.getKeyboardHeight(res, sv)
|
||||
val defaultKeyboardWidth = ResourceUtils.getKeyboardWidth(res, sv)
|
||||
val defaultKeyboardWidth = ResourceUtils.getKeyboardWidth(ctx, sv)
|
||||
|
||||
if (sv.mNarrowKeyGaps) {
|
||||
keyVerticalGap = res.getFraction(R.fraction.config_key_vertical_gap_holo_narrow,
|
||||
|
|
|
@ -6,11 +6,14 @@
|
|||
|
||||
package helium314.keyboard.keyboard.emoji;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
|
||||
import helium314.keyboard.latin.utils.DeviceProtectedUtils;
|
||||
import helium314.keyboard.latin.utils.Log;
|
||||
|
||||
import androidx.core.graphics.PaintCompat;
|
||||
|
@ -114,6 +117,7 @@ final class EmojiCategory {
|
|||
|
||||
private final SharedPreferences mPrefs;
|
||||
private final Resources mRes;
|
||||
private final Context mContext;
|
||||
private final int mMaxRecentsKeyCount;
|
||||
private final KeyboardLayoutSet mLayoutSet;
|
||||
private final HashMap<String, Integer> mCategoryNameToIdMap = new HashMap<>();
|
||||
|
@ -124,11 +128,11 @@ final class EmojiCategory {
|
|||
private int mCurrentCategoryId = EmojiCategory.ID_UNSPECIFIED;
|
||||
private int mCurrentCategoryPageId = 0;
|
||||
|
||||
public EmojiCategory(final SharedPreferences prefs, final Resources res,
|
||||
final KeyboardLayoutSet layoutSet, final TypedArray emojiPaletteViewAttr) {
|
||||
mPrefs = prefs;
|
||||
mRes = res;
|
||||
mMaxRecentsKeyCount = res.getInteger(R.integer.config_emoji_keyboard_max_recents_key_count);
|
||||
public EmojiCategory(final Context ctx, final KeyboardLayoutSet layoutSet, final TypedArray emojiPaletteViewAttr) {
|
||||
mPrefs = DeviceProtectedUtils.getSharedPreferences(ctx);
|
||||
mRes = ctx.getResources();
|
||||
mContext = ctx;
|
||||
mMaxRecentsKeyCount = mRes.getInteger(R.integer.config_emoji_keyboard_max_recents_key_count);
|
||||
mLayoutSet = layoutSet;
|
||||
for (int i = 0; i < sCategoryName.length; ++i) {
|
||||
mCategoryNameToIdMap.put(sCategoryName[i], i);
|
||||
|
@ -297,7 +301,7 @@ final class EmojiCategory {
|
|||
return mCategoryKeyboardMap.get(categoryKeyboardMapKey);
|
||||
}
|
||||
|
||||
final int currentWidth = ResourceUtils.getKeyboardWidth(mRes, Settings.getInstance().getCurrent());
|
||||
final int currentWidth = ResourceUtils.getKeyboardWidth(mContext, Settings.getInstance().getCurrent());
|
||||
if (categoryId == EmojiCategory.ID_RECENTS) {
|
||||
final DynamicGridKeyboard kbd = new DynamicGridKeyboard(mPrefs,
|
||||
mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS),
|
||||
|
@ -330,7 +334,7 @@ final class EmojiCategory {
|
|||
private int computeMaxKeyCountPerPage() {
|
||||
final DynamicGridKeyboard tempKeyboard = new DynamicGridKeyboard(mPrefs,
|
||||
mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS),
|
||||
0, 0, ResourceUtils.getKeyboardWidth(mRes, Settings.getInstance().getCurrent()));
|
||||
0, 0, ResourceUtils.getKeyboardWidth(mContext, Settings.getInstance().getCurrent()));
|
||||
return MAX_LINE_COUNT_PER_PAGE * tempKeyboard.getColumnsCount();
|
||||
}
|
||||
|
||||
|
|
|
@ -90,13 +90,12 @@ public final class EmojiPalettesView extends LinearLayout
|
|||
final Resources res = context.getResources();
|
||||
mEmojiLayoutParams = new EmojiLayoutParams(res);
|
||||
builder.setSubtype(RichInputMethodSubtype.getEmojiSubtype());
|
||||
builder.setKeyboardGeometry(ResourceUtils.getKeyboardWidth(res, Settings.getInstance().getCurrent()),
|
||||
builder.setKeyboardGeometry(ResourceUtils.getKeyboardWidth(context, Settings.getInstance().getCurrent()),
|
||||
mEmojiLayoutParams.getEmojiKeyboardHeight());
|
||||
final KeyboardLayoutSet layoutSet = builder.build();
|
||||
final TypedArray emojiPalettesViewAttr = context.obtainStyledAttributes(attrs,
|
||||
R.styleable.EmojiPalettesView, defStyle, R.style.EmojiPalettesView);
|
||||
mEmojiCategory = new EmojiCategory(DeviceProtectedUtils.getSharedPreferences(context),
|
||||
res, layoutSet, emojiPalettesViewAttr);
|
||||
mEmojiCategory = new EmojiCategory(context, layoutSet, emojiPalettesViewAttr);
|
||||
mCategoryIndicatorEnabled = emojiPalettesViewAttr.getBoolean(
|
||||
R.styleable.EmojiPalettesView_categoryIndicatorEnabled, false);
|
||||
mCategoryIndicatorDrawableResId = emojiPalettesViewAttr.getResourceId(
|
||||
|
@ -114,7 +113,7 @@ public final class EmojiPalettesView extends LinearLayout
|
|||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
final Resources res = getContext().getResources();
|
||||
// The main keyboard expands to the entire this {@link KeyboardView}.
|
||||
final int width = ResourceUtils.getKeyboardWidth(res, Settings.getInstance().getCurrent())
|
||||
final int width = ResourceUtils.getKeyboardWidth(getContext(), Settings.getInstance().getCurrent())
|
||||
+ getPaddingLeft() + getPaddingRight();
|
||||
final int height = ResourceUtils.getKeyboardHeight(res, Settings.getInstance().getCurrent())
|
||||
+ getPaddingTop() + getPaddingBottom();
|
||||
|
|
|
@ -43,7 +43,7 @@ class EmojiParser(private val params: KeyboardParams, private val context: Conte
|
|||
|
||||
// determine key width for default settings (no number row, no one-handed mode, 100% height and bottom padding scale)
|
||||
// this is a bit long, but ensures that emoji size stays the same, independent of these settings
|
||||
val defaultKeyWidth = (ResourceUtils.getDefaultKeyboardWidth(context.resources) - params.mLeftPadding - params.mRightPadding) * params.mDefaultKeyWidth
|
||||
val defaultKeyWidth = (ResourceUtils.getDefaultKeyboardWidth(context) - params.mLeftPadding - params.mRightPadding) * params.mDefaultKeyWidth
|
||||
val keyWidth = defaultKeyWidth * sqrt(Settings.getInstance().current.mKeyboardHeightScale)
|
||||
val defaultKeyboardHeight = ResourceUtils.getDefaultKeyboardHeight(context.resources, false)
|
||||
val defaultBottomPadding = context.resources.getFraction(R.fraction.config_keyboard_bottom_padding_holo, defaultKeyboardHeight, defaultKeyboardHeight)
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue