This commit is contained in:
Eran Leshem 2025-04-15 03:00:36 +03:00 committed by GitHub
commit 4a845c8d24
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 238 additions and 200 deletions

View file

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

View file

@ -16,6 +16,7 @@ import helium314.keyboard.keyboard.internal.KeyboardParams;
import helium314.keyboard.keyboard.internal.PopupKeySpec;
import helium314.keyboard.latin.R;
import helium314.keyboard.latin.common.StringUtils;
import helium314.keyboard.latin.utils.ResourceUtils;
import helium314.keyboard.latin.utils.TypefaceUtils;
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,
final int rowHeight, final int coordXInParent, final int parentKeyboardWidth,
final boolean isPopupKeysFixedColumn, final boolean isPopupKeysFixedOrder,
final int dividerWidth) {
final int dividerWidth, Context context) {
mIsPopupKeysFixedOrder = isPopupKeysFixedOrder;
if (parentKeyboardWidth / keyWidth < Math.min(numKeys, numColumn)) {
throw new IllegalArgumentException("Keyboard is too small to hold popup keys: "
@ -305,7 +306,7 @@ public final class PopupKeysKeyboard extends Keyboard {
: (spaceForKeys > 0 ? spaceForKeys : defaultColumns); // in last case setParameters will throw an exception
mParams.setParameters(popupKeys.length, finalNumColumns, keyWidth,
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,

View file

@ -71,6 +71,7 @@ class ClipboardHistoryView @JvmOverloads constructor(
getEnabledClipboardToolbarKeys(context.prefs())
.forEach { toolbarKeys.add(createToolbarKey(context, KeyboardIconsSet.instance, it)) }
keyboardAttr.recycle()
fitsSystemWindows = true
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {

View file

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

View file

@ -5,7 +5,7 @@
*/
package helium314.keyboard.keyboard.emoji
import android.content.res.Resources
import android.content.Context
import android.view.View
import android.widget.LinearLayout
import androidx.recyclerview.widget.RecyclerView
@ -14,13 +14,14 @@ import helium314.keyboard.latin.R
import helium314.keyboard.latin.settings.Settings
import helium314.keyboard.latin.utils.ResourceUtils
internal class EmojiLayoutParams(res: Resources) {
internal class EmojiLayoutParams(ctx: Context) {
private val emojiListBottomMargin: Int
val emojiKeyboardHeight: Int
private val emojiCategoryPageIdViewHeight: Int
val bottomRowKeyboardHeight: Int
init {
val res = ctx.resources
val sv = Settings.getValues()
val defaultKeyboardHeight = ResourceUtils.getKeyboardHeight(res, sv)

View file

@ -87,8 +87,7 @@ public final class EmojiPalettesView extends LinearLayout
super(context, attrs, defStyle);
mColors = Settings.getValues().mColors;
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(context, null);
final Resources res = context.getResources();
mEmojiLayoutParams = new EmojiLayoutParams(res);
mEmojiLayoutParams = new EmojiLayoutParams(context);
builder.setSubtype(RichInputMethodSubtype.Companion.getEmojiSubtype());
builder.setKeyboardGeometry(ResourceUtils.getKeyboardWidth(context, Settings.getValues()),
mEmojiLayoutParams.getEmojiKeyboardHeight());
@ -106,6 +105,7 @@ public final class EmojiPalettesView extends LinearLayout
R.styleable.EmojiPalettesView_categoryPageIndicatorColor, 0);
emojiPalettesViewAttr.recycle();
mEmojiLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
setFitsSystemWindows(true);
}
@Override

View file

@ -8,14 +8,9 @@ package helium314.keyboard.keyboard.internal;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Insets;
import android.os.Build;
import android.util.AttributeSet;
import android.util.SparseIntArray;
import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.WindowMetrics;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -230,16 +225,6 @@ public class KeyboardParams {
mBottomPadding = (int) (keyboardAttr.getFraction(
R.styleable.Keyboard_keyboardBottomPadding, height, height, 0)
* Settings.getValues().mBottomPaddingScale);
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(
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,6 +6,7 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
@ -20,6 +21,7 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
@ -58,7 +60,11 @@ fun SearchSettingsScreen(
content = {
if (content != null) content()
else {
Column(Modifier.verticalScroll(rememberScrollState())) {
Scaffold { innerPadding ->
Column(
Modifier.verticalScroll(rememberScrollState())
.then(Modifier.padding(bottom = innerPadding.calculateBottomPadding()))
) {
settings.forEach {
if (it is Int) {
PreferenceCategory(stringResource(it))
@ -89,6 +95,7 @@ fun SearchSettingsScreen(
// }
// }
}
}
},
filteredItems = { SettingsActivity.settingsContainer.filter(it) },
itemContent = { it.Preference() }
@ -195,7 +202,8 @@ fun <T: Any?> SearchScreen(
}
} else {
val items = filteredItems(searchText.text)
LazyColumn {
Scaffold { innerPadding ->
LazyColumn(contentPadding = PaddingValues.Absolute(bottom = innerPadding.calculateBottomPadding())) {
items(items) {
itemContent(it)
}
@ -204,6 +212,7 @@ fun <T: Any?> SearchScreen(
}
}
}
}
// from StreetComplete
/** Expandable text field that can be dismissed and requests focus when it is expanded */

View file

@ -13,6 +13,7 @@ import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
@ -140,8 +141,10 @@ fun SubtypeScreen(
itemContent = { },
filteredItems = { emptyList<String>() }
) {
Scaffold { innerPadding ->
Column(
modifier = Modifier.verticalScroll(scrollState).padding(horizontal = 12.dp),
modifier = Modifier.verticalScroll(scrollState).padding(horizontal = 12.dp)
.then(Modifier.padding(bottom = innerPadding.calculateBottomPadding())),
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
MainLayoutRow(currentSubtype, customMainLayouts) { setCurrentSubtype(it) }
@ -172,7 +175,10 @@ fun SubtypeScreen(
if (currentSubtype.locale.script() == ScriptUtils.SCRIPT_LATIN) {
WithSmallTitle(stringResource(R.string.show_popup_keys_title)) {
val explicitValue = currentSubtype.getExtraValueOf(ExtraValue.MORE_POPUPS)
val value = explicitValue ?: prefs.getString(Settings.PREF_MORE_POPUP_KEYS, Defaults.PREF_MORE_POPUP_KEYS)!!
val value = explicitValue ?: prefs.getString(
Settings.PREF_MORE_POPUP_KEYS,
Defaults.PREF_MORE_POPUP_KEYS
)!!
Row {
TextButton(onClick = { showMorePopupsDialog = true }, Modifier.weight(1f))
{ Text(stringResource(morePopupKeysResId(value))) }
@ -187,7 +193,10 @@ fun SubtypeScreen(
val checked = currentSubtype.getExtraValueOf(ExtraValue.LOCALIZED_NUMBER_ROW)?.toBoolean()
Text(stringResource(R.string.localized_number_row), Modifier.weight(1f))
Switch(
checked = checked ?: prefs.getBoolean(Settings.PREF_LOCALIZED_NUMBER_ROW, Defaults.PREF_LOCALIZED_NUMBER_ROW),
checked = checked ?: prefs.getBoolean(
Settings.PREF_LOCALIZED_NUMBER_ROW,
Defaults.PREF_LOCALIZED_NUMBER_ROW
),
onCheckedChange = {
setCurrentSubtype(currentSubtype.with(ExtraValue.LOCALIZED_NUMBER_ROW, it.toString()))
}
@ -198,7 +207,10 @@ fun SubtypeScreen(
}
}
HorizontalDivider()
Text(stringResource(R.string.settings_screen_secondary_layouts), style = MaterialTheme.typography.titleMedium)
Text(
stringResource(R.string.settings_screen_secondary_layouts),
style = MaterialTheme.typography.titleMedium
)
LayoutType.entries.forEach { type ->
if (type == LayoutType.MAIN) return@forEach
WithSmallTitle(stringResource(type.displayNameId)) {
@ -212,11 +224,14 @@ fun SubtypeScreen(
onSelected = {
setCurrentSubtype(currentSubtype.withLayout(type, it))
},
extraButton = { DefaultButton(explicitLayout == null) {
extraButton = {
DefaultButton(explicitLayout == null) {
setCurrentSubtype(currentSubtype.withoutLayout(type))
} },
}
},
) {
val displayName = if (LayoutUtilsCustom.isCustomLayout(it)) LayoutUtilsCustom.getDisplayName(it)
val displayName =
if (LayoutUtilsCustom.isCustomLayout(it)) LayoutUtilsCustom.getDisplayName(it)
else it.getStringResourceOrName("layout_", ctx)
var showLayoutEditDialog by remember { mutableStateOf(false) }
Row(
@ -226,7 +241,14 @@ fun SubtypeScreen(
) {
Text(displayName)
if (LayoutUtilsCustom.isCustomLayout(it))
IconButton({ showLayoutEditDialog = true }) { Icon(painterResource(R.drawable.ic_edit), stringResource(R.string.edit_layout)) }
IconButton({
showLayoutEditDialog = true
}) {
Icon(
painterResource(R.drawable.ic_edit),
stringResource(R.string.edit_layout)
)
}
}
if (showLayoutEditDialog)
LayoutEditDialog(
@ -260,7 +282,10 @@ fun SubtypeScreen(
val setting = currentSubtype.getExtraValueOf(ExtraValue.POPUP_ORDER)
PopupOrderDialog(
onDismissRequest = { showKeyOrderDialog = false },
initialValue = setting ?: prefs.getString(Settings.PREF_POPUP_KEYS_ORDER, Defaults.PREF_POPUP_KEYS_ORDER)!!,
initialValue = setting ?: prefs.getString(
Settings.PREF_POPUP_KEYS_ORDER,
Defaults.PREF_POPUP_KEYS_ORDER
)!!,
title = stringResource(R.string.popup_order),
showDefault = setting != null,
onConfirmed = {
@ -275,7 +300,10 @@ fun SubtypeScreen(
val setting = currentSubtype.getExtraValueOf(ExtraValue.HINT_ORDER)
PopupOrderDialog(
onDismissRequest = { showHintOrderDialog = false },
initialValue = setting ?: prefs.getString(Settings.PREF_POPUP_KEYS_LABELS_ORDER, Defaults.PREF_POPUP_KEYS_LABELS_ORDER)!!,
initialValue = setting ?: prefs.getString(
Settings.PREF_POPUP_KEYS_LABELS_ORDER,
Defaults.PREF_POPUP_KEYS_LABELS_ORDER
)!!,
title = stringResource(R.string.hint_source),
showDefault = setting != null,
onConfirmed = {
@ -299,6 +327,7 @@ fun SubtypeScreen(
)
}
}
}
// from ReorderSwitchPreference