mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-04-21 22:59:10 +00:00
Merge e8f8441baa
into 8fddf94121
This commit is contained in:
commit
6a72c6cdc4
6 changed files with 65 additions and 27 deletions
|
@ -16,6 +16,7 @@ import helium314.keyboard.keyboard.internal.KeyboardParams;
|
||||||
import helium314.keyboard.keyboard.internal.PopupKeySpec;
|
import helium314.keyboard.keyboard.internal.PopupKeySpec;
|
||||||
import helium314.keyboard.latin.R;
|
import helium314.keyboard.latin.R;
|
||||||
import helium314.keyboard.latin.common.StringUtils;
|
import helium314.keyboard.latin.common.StringUtils;
|
||||||
|
import helium314.keyboard.latin.utils.ResourceUtils;
|
||||||
import helium314.keyboard.latin.utils.TypefaceUtils;
|
import helium314.keyboard.latin.utils.TypefaceUtils;
|
||||||
|
|
||||||
public final class PopupKeysKeyboard extends Keyboard {
|
public final class PopupKeysKeyboard extends Keyboard {
|
||||||
|
@ -65,7 +66,7 @@ public final class PopupKeysKeyboard extends Keyboard {
|
||||||
public void setParameters(final int numKeys, final int numColumn, final int keyWidth,
|
public void setParameters(final int numKeys, final int numColumn, final int keyWidth,
|
||||||
final int rowHeight, final int coordXInParent, final int parentKeyboardWidth,
|
final int rowHeight, final int coordXInParent, final int parentKeyboardWidth,
|
||||||
final boolean isPopupKeysFixedColumn, final boolean isPopupKeysFixedOrder,
|
final boolean isPopupKeysFixedColumn, final boolean isPopupKeysFixedOrder,
|
||||||
final int dividerWidth) {
|
final int dividerWidth, Context context) {
|
||||||
mIsPopupKeysFixedOrder = isPopupKeysFixedOrder;
|
mIsPopupKeysFixedOrder = isPopupKeysFixedOrder;
|
||||||
if (parentKeyboardWidth / keyWidth < Math.min(numKeys, numColumn)) {
|
if (parentKeyboardWidth / keyWidth < Math.min(numKeys, numColumn)) {
|
||||||
throw new IllegalArgumentException("Keyboard is too small to hold popup keys: "
|
throw new IllegalArgumentException("Keyboard is too small to hold popup keys: "
|
||||||
|
@ -120,7 +121,7 @@ public final class PopupKeysKeyboard extends Keyboard {
|
||||||
mBaseWidth = mOccupiedWidth = mNumColumns * mColumnWidth - mDividerWidth;
|
mBaseWidth = mOccupiedWidth = mNumColumns * mColumnWidth - mDividerWidth;
|
||||||
// Need to subtract the bottom row's gutter only.
|
// Need to subtract the bottom row's gutter only.
|
||||||
mBaseHeight = mOccupiedHeight = mNumRows * mDefaultAbsoluteRowHeight - mVerticalGap
|
mBaseHeight = mOccupiedHeight = mNumRows * mDefaultAbsoluteRowHeight - mVerticalGap
|
||||||
+ mTopPadding + mBottomPadding;
|
+ mTopPadding + mBottomPadding - ResourceUtils.getBottomPaddingAdjustment(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getFixedOrderTopRowAdjustment() {
|
private int getFixedOrderTopRowAdjustment() {
|
||||||
|
@ -305,7 +306,7 @@ public final class PopupKeysKeyboard extends Keyboard {
|
||||||
: (spaceForKeys > 0 ? spaceForKeys : defaultColumns); // in last case setParameters will throw an exception
|
: (spaceForKeys > 0 ? spaceForKeys : defaultColumns); // in last case setParameters will throw an exception
|
||||||
mParams.setParameters(popupKeys.length, finalNumColumns, keyWidth,
|
mParams.setParameters(popupKeys.length, finalNumColumns, keyWidth,
|
||||||
rowHeight, key.getX() + key.getWidth() / 2, keyboard.mId.mWidth,
|
rowHeight, key.getX() + key.getWidth() / 2, keyboard.mId.mWidth,
|
||||||
key.isPopupKeysFixedColumn(), key.isPopupKeysFixedOrder(), dividerWidth);
|
key.isPopupKeysFixedColumn(), key.isPopupKeysFixedOrder(), dividerWidth, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getMaxKeyWidth(final Key parentKey, final int minKeyWidth,
|
private static int getMaxKeyWidth(final Key parentKey, final int minKeyWidth,
|
||||||
|
|
|
@ -37,9 +37,11 @@ class ClipboardLayoutParams(ctx: Context) {
|
||||||
defaultKeyboardWidth, defaultKeyboardWidth).toInt()
|
defaultKeyboardWidth, defaultKeyboardWidth).toInt()
|
||||||
}
|
}
|
||||||
val bottomPadding = (res.getFraction(R.fraction.config_keyboard_bottom_padding_holo,
|
val bottomPadding = (res.getFraction(R.fraction.config_keyboard_bottom_padding_holo,
|
||||||
defaultKeyboardHeight, defaultKeyboardHeight) * sv.mBottomPaddingScale).toInt()
|
defaultKeyboardHeight, defaultKeyboardHeight) * sv.mBottomPaddingScale
|
||||||
|
+ ResourceUtils.getBottomPaddingAdjustment(ctx)).toInt()
|
||||||
|
|
||||||
val topPadding = res.getFraction(R.fraction.config_keyboard_top_padding_holo,
|
val topPadding = res.getFraction(R.fraction.config_keyboard_top_padding_holo,
|
||||||
defaultKeyboardHeight, defaultKeyboardHeight).toInt()
|
defaultKeyboardHeight, defaultKeyboardHeight).toInt()
|
||||||
|
|
||||||
val rowCount = KeyboardParams.DEFAULT_KEYBOARD_ROWS + if (sv.mShowsNumberRow) 1 else 0
|
val rowCount = KeyboardParams.DEFAULT_KEYBOARD_ROWS + if (sv.mShowsNumberRow) 1 else 0
|
||||||
bottomRowKeyboardHeight = (defaultKeyboardHeight - bottomPadding - topPadding) / rowCount - keyVerticalGap / 2
|
bottomRowKeyboardHeight = (defaultKeyboardHeight - bottomPadding - topPadding) / rowCount - keyVerticalGap / 2
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
package helium314.keyboard.keyboard.emoji
|
package helium314.keyboard.keyboard.emoji
|
||||||
|
|
||||||
import android.content.res.Resources
|
import android.content.Context
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
@ -14,13 +14,14 @@ import helium314.keyboard.latin.R
|
||||||
import helium314.keyboard.latin.settings.Settings
|
import helium314.keyboard.latin.settings.Settings
|
||||||
import helium314.keyboard.latin.utils.ResourceUtils
|
import helium314.keyboard.latin.utils.ResourceUtils
|
||||||
|
|
||||||
internal class EmojiLayoutParams(res: Resources) {
|
internal class EmojiLayoutParams(ctx: Context) {
|
||||||
private val emojiListBottomMargin: Int
|
private val emojiListBottomMargin: Int
|
||||||
val emojiKeyboardHeight: Int
|
val emojiKeyboardHeight: Int
|
||||||
private val emojiCategoryPageIdViewHeight: Int
|
private val emojiCategoryPageIdViewHeight: Int
|
||||||
val bottomRowKeyboardHeight: Int
|
val bottomRowKeyboardHeight: Int
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
val res = ctx.resources
|
||||||
val sv = Settings.getValues()
|
val sv = Settings.getValues()
|
||||||
val defaultKeyboardHeight = ResourceUtils.getKeyboardHeight(res, sv)
|
val defaultKeyboardHeight = ResourceUtils.getKeyboardHeight(res, sv)
|
||||||
|
|
||||||
|
@ -32,7 +33,8 @@ internal class EmojiLayoutParams(res: Resources) {
|
||||||
defaultKeyboardHeight, defaultKeyboardHeight).toInt()
|
defaultKeyboardHeight, defaultKeyboardHeight).toInt()
|
||||||
}
|
}
|
||||||
val bottomPadding = (res.getFraction(R.fraction.config_keyboard_bottom_padding_holo,
|
val bottomPadding = (res.getFraction(R.fraction.config_keyboard_bottom_padding_holo,
|
||||||
defaultKeyboardHeight, defaultKeyboardHeight) * sv.mBottomPaddingScale).toInt()
|
defaultKeyboardHeight, defaultKeyboardHeight) * sv.mBottomPaddingScale
|
||||||
|
+ ResourceUtils.getBottomPaddingAdjustment(ctx)).toInt()
|
||||||
val topPadding = res.getFraction(R.fraction.config_keyboard_top_padding_holo,
|
val topPadding = res.getFraction(R.fraction.config_keyboard_top_padding_holo,
|
||||||
defaultKeyboardHeight, defaultKeyboardHeight).toInt()
|
defaultKeyboardHeight, defaultKeyboardHeight).toInt()
|
||||||
|
|
||||||
|
|
|
@ -87,8 +87,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
mColors = Settings.getValues().mColors;
|
mColors = Settings.getValues().mColors;
|
||||||
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(context, null);
|
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(context, null);
|
||||||
final Resources res = context.getResources();
|
mEmojiLayoutParams = new EmojiLayoutParams(context);
|
||||||
mEmojiLayoutParams = new EmojiLayoutParams(res);
|
|
||||||
builder.setSubtype(RichInputMethodSubtype.Companion.getEmojiSubtype());
|
builder.setSubtype(RichInputMethodSubtype.Companion.getEmojiSubtype());
|
||||||
builder.setKeyboardGeometry(ResourceUtils.getKeyboardWidth(context, Settings.getValues()),
|
builder.setKeyboardGeometry(ResourceUtils.getKeyboardWidth(context, Settings.getValues()),
|
||||||
mEmojiLayoutParams.getEmojiKeyboardHeight());
|
mEmojiLayoutParams.getEmojiKeyboardHeight());
|
||||||
|
|
|
@ -8,14 +8,9 @@ package helium314.keyboard.keyboard.internal;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.Insets;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.SparseIntArray;
|
import android.util.SparseIntArray;
|
||||||
|
|
||||||
import android.view.WindowInsets;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.WindowMetrics;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
@ -229,16 +224,8 @@ public class KeyboardParams {
|
||||||
R.styleable.Keyboard_keyboardTopPadding, height, height, 0);
|
R.styleable.Keyboard_keyboardTopPadding, height, height, 0);
|
||||||
mBottomPadding = (int) (keyboardAttr.getFraction(
|
mBottomPadding = (int) (keyboardAttr.getFraction(
|
||||||
R.styleable.Keyboard_keyboardBottomPadding, height, height, 0)
|
R.styleable.Keyboard_keyboardBottomPadding, height, height, 0)
|
||||||
* Settings.getValues().mBottomPaddingScale);
|
* Settings.getValues().mBottomPaddingScale)
|
||||||
|
+ ResourceUtils.getBottomPaddingAdjustment(context);
|
||||||
if (Build.VERSION.SDK_INT >= 35) {
|
|
||||||
WindowManager wm = context.getSystemService(WindowManager.class);
|
|
||||||
WindowMetrics windowMetrics = wm.getCurrentWindowMetrics();
|
|
||||||
WindowInsets windowInsets = windowMetrics.getWindowInsets();
|
|
||||||
int insetTypes = WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout();
|
|
||||||
Insets insets = windowInsets.getInsetsIgnoringVisibility(insetTypes);
|
|
||||||
mBottomPadding += insets.bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
mLeftPadding = (int) (keyboardAttr.getFraction(
|
mLeftPadding = (int) (keyboardAttr.getFraction(
|
||||||
R.styleable.Keyboard_keyboardLeftPadding, width, width, 0)
|
R.styleable.Keyboard_keyboardLeftPadding, width, width, 0)
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
|
|
||||||
package helium314.keyboard.latin.utils;
|
package helium314.keyboard.latin.utils;
|
||||||
|
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
@ -19,6 +22,7 @@ import android.view.WindowInsets;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.WindowMetrics;
|
import android.view.WindowMetrics;
|
||||||
|
|
||||||
|
import androidx.annotation.RequiresApi;
|
||||||
import helium314.keyboard.latin.R;
|
import helium314.keyboard.latin.R;
|
||||||
import helium314.keyboard.latin.settings.SettingsValues;
|
import helium314.keyboard.latin.settings.SettingsValues;
|
||||||
|
|
||||||
|
@ -133,4 +137,47 @@ public final class ResourceUtils {
|
||||||
public static boolean isNight(final Resources res) {
|
public static boolean isNight(final Resources res) {
|
||||||
return (res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue