1
0
Fork 0

Fixed some text scaling issues. The keyboard should now look 'the same' on all screen sizes

This commit is contained in:
sspanak 2025-02-01 16:28:51 +02:00 committed by Dimo Karaivanov
parent d23efc4e60
commit 7d32a3fe4e
9 changed files with 85 additions and 26 deletions

View file

@ -3,6 +3,7 @@ package io.github.sspanak.tt9.hacks;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build; import android.os.Build;
import android.view.KeyCharacterMap; import android.view.KeyCharacterMap;
import android.view.KeyEvent; import android.view.KeyEvent;
@ -10,16 +11,33 @@ import android.view.KeyEvent;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
public class DeviceInfo { public class DeviceInfo {
private static Resources resources;
private static Resources getResources(Context context) {
if (resources == null) {
resources = context.getResources();
}
return resources;
}
public static boolean isLandscapeOrientation(Context context) { public static boolean isLandscapeOrientation(Context context) {
return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; return getResources(context).getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
} }
public static int getScreenWidth(Context context) { public static int getScreenWidth(Context context) {
return context.getResources().getDisplayMetrics().widthPixels; return getResources(context).getDisplayMetrics().widthPixels;
} }
public static int getScreenHeight(Context context) { public static int getScreenHeight(Context context) {
return context.getResources().getDisplayMetrics().heightPixels; return getResources(context).getDisplayMetrics().heightPixels;
}
public static float getScreenHeightDp(Context context) {
return getScreenHeight(context) / getResources(context).getDisplayMetrics().density;
}
public static float getScreenWidthDp(Context context) {
return getScreenWidth(context) / getResources(context).getDisplayMetrics().density;
} }
public static boolean noBackspaceKey() { public static boolean noBackspaceKey() {

View file

@ -24,7 +24,9 @@ public class SettingsStore extends SettingsUI {
public final static byte SLOW_QUERY_TIME = 50; // ms public final static byte SLOW_QUERY_TIME = 50; // ms
public final static int SLOW_QUERY_TIMEOUT = 3000; // ms public final static int SLOW_QUERY_TIMEOUT = 3000; // ms
public final static float SOFT_KEY_AMOUNT_OF_KEY_SIZE_FOR_SWIPE = 0.5f; // 1 = full key size public final static float SOFT_KEY_AMOUNT_OF_KEY_SIZE_FOR_SWIPE = 0.5f; // 1 = full key size
public final static float SOFT_KEY_CONTENT_DEFAULT_SCALE = 1.15f; // % / 100 public final static float SOFT_KEY_SCALE_SCREEN_COMPENSATION_NORMAL_HEIGHT = 360; // dp
public final static float SOFT_KEY_SCALE_SCREEN_COMPENSATION_NORMAL_WIDTH = 640; // dp
public final static float SOFT_KEY_SCALE_SCREEN_COMPENSATION_MAX = 1.4f;
public final static int SOFT_KEY_DOUBLE_CLICK_DELAY = 500; // ms public final static int SOFT_KEY_DOUBLE_CLICK_DELAY = 500; // ms
public final static int SOFT_KEY_REPEAT_DELAY = 40; // ms public final static int SOFT_KEY_REPEAT_DELAY = 40; // ms
public final static int SOFT_KEY_TITLE_MAX_CHARS = 5; public final static int SOFT_KEY_TITLE_MAX_CHARS = 5;

View file

@ -19,6 +19,7 @@ import android.widget.TextView;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.content.res.AppCompatResources;
import io.github.sspanak.tt9.hacks.DeviceInfo;
import io.github.sspanak.tt9.ime.TraditionalT9; import io.github.sspanak.tt9.ime.TraditionalT9;
import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.preferences.settings.SettingsStore;
import io.github.sspanak.tt9.ui.Vibration; import io.github.sspanak.tt9.ui.Vibration;
@ -44,6 +45,9 @@ public class SoftKey extends com.google.android.material.button.MaterialButton i
private Drawable holdIcon = null; private Drawable holdIcon = null;
private RelativeLayout overlay = null; private RelativeLayout overlay = null;
private static float screenScaleX = 0;
private static float screenScaleY = 0;
public SoftKey(Context context) { public SoftKey(Context context) {
super(context); super(context);
@ -82,6 +86,34 @@ public class SoftKey extends com.google.android.material.button.MaterialButton i
} }
protected float getScreenScaleX() {
if (screenScaleX == 0) {
boolean isLandscape = DeviceInfo.isLandscapeOrientation(getContext());
float width = isLandscape ? DeviceInfo.getScreenWidthDp(getContext()) : DeviceInfo.getScreenHeightDp(getContext());
screenScaleX = Math.min(
width / SettingsStore.SOFT_KEY_SCALE_SCREEN_COMPENSATION_NORMAL_WIDTH,
SettingsStore.SOFT_KEY_SCALE_SCREEN_COMPENSATION_MAX
);
}
return screenScaleX;
}
protected float getScreenScaleY() {
if (screenScaleY == 0) {
boolean isLandscape = DeviceInfo.isLandscapeOrientation(getContext());
float height = isLandscape ? DeviceInfo.getScreenHeightDp(getContext()) : DeviceInfo.getScreenWidthDp(getContext());
screenScaleY = Math.min(
height / SettingsStore.SOFT_KEY_SCALE_SCREEN_COMPENSATION_NORMAL_HEIGHT,
SettingsStore.SOFT_KEY_SCALE_SCREEN_COMPENSATION_MAX
);
}
return screenScaleY;
}
protected float getTT9Width() { protected float getTT9Width() {
return tt9 != null ? tt9.getSettings().getNumpadWidthPercent() / 100f : 1; return tt9 != null ? tt9.getSettings().getNumpadWidthPercent() / 100f : 1;
} }
@ -305,10 +337,12 @@ public class SoftKey extends com.google.android.material.button.MaterialButton i
/** /**
* Multiplier for the main text font size. Used for automatically adjusting the font size to fit * Multiplier for the main text font size. Used for automatically adjusting the font size to fit
* the key when changing the keyboard dimensions. * the key when changing the keyboard dimensions, and to look good on different screen sizes.
*/ */
protected float getTitleScale() { protected float getTitleScale() {
return SettingsStore.SOFT_KEY_CONTENT_DEFAULT_SCALE * Math.min(getTT9Width(), getTT9Height()); float keyboardSizeScale = Math.max(0.7f, Math.min(getTT9Width(), getTT9Height()));
float screenSizeScale = Math.min(getScreenScaleX(), getScreenScaleY());
return keyboardSizeScale * screenSizeScale;
} }
@ -316,8 +350,9 @@ public class SoftKey extends com.google.android.material.button.MaterialButton i
* Same as getTitleScale(), but for keys that have icons instead of text. * Same as getTitleScale(), but for keys that have icons instead of text.
*/ */
protected float getCentralIconScale() { protected float getCentralIconScale() {
float width = getTT9Width(); float keyboardSizeScale = Math.max(0.7f, Math.min(getTT9Width(), getTT9Height()));
return width > 0.95f ? Math.min(1.15f, getTT9Height()) : Math.min(width, getTT9Height()); keyboardSizeScale = Math.min(1.15f, keyboardSizeScale);
return keyboardSizeScale * Math.min(getScreenScaleX(), getScreenScaleY());
} }
@ -325,7 +360,8 @@ public class SoftKey extends com.google.android.material.button.MaterialButton i
* Similar to getTitleScale(), adjusts the font size of the hold text or icon * Similar to getTitleScale(), adjusts the font size of the hold text or icon
*/ */
protected float getHoldElementScale() { protected float getHoldElementScale() {
return SettingsStore.SOFT_KEY_CONTENT_DEFAULT_SCALE * Math.min(1, getTT9Height()); float keyboardSizeScale = Math.min(1, Math.max(getTT9Width(), getTT9Height()));
return keyboardSizeScale * Math.min(getScreenScaleX(), getScreenScaleY());
} }

View file

@ -143,7 +143,7 @@ public class SoftKeyBackspace extends SwipeableKey {
@Override @Override
protected float getTitleScale() { protected float getTitleScale() {
float scale = tt9 != null && tt9.getSettings().isMainLayoutNumpad() ? super.getTitleScale() : SettingsStore.SOFT_KEY_CONTENT_DEFAULT_SCALE; float scale = tt9 != null && tt9.getSettings().isMainLayoutNumpad() ? super.getTitleScale() : 1;
return scale * 1.1f; return scale * 1.1f;
} }

View file

@ -49,7 +49,7 @@ public class SoftKeyFilter extends SoftKey {
@Override protected int getCentralIcon() { return isKorean() ? 0 : R.drawable.ic_fn_filter; } @Override protected int getCentralIcon() { return isKorean() ? 0 : R.drawable.ic_fn_filter; }
@Override protected int getHoldIcon() { return isKorean() ? 0 : R.drawable.ic_fn_filter_off; } @Override protected int getHoldIcon() { return isKorean() ? 0 : R.drawable.ic_fn_filter_off; }
@Override protected float getTitleScale() { return isKorean() ? 1.5f * getTT9Height() : 1; } @Override protected float getTitleScale() { return isKorean() ? 1.3f * Math.min(1, getTT9Height()) * getScreenScaleY() : super.getTitleScale(); }
@Override @Override
public void render() { public void render() {

View file

@ -80,9 +80,12 @@ public class SoftKeyLF4 extends SwipeableKey {
if (areThereManyLanguages() && isKeySmall()) { if (areThereManyLanguages() && isKeySmall()) {
setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
} else { setPaddingRelative(0, 0, 0, 10);
} else if (areThereManyLanguages()) {
setPaddingRelative(0, 20, 0, 0); setPaddingRelative(0, 20, 0, 0);
setGravity(Gravity.CENTER); setGravity(Gravity.CENTER);
} else {
setGravity(Gravity.CENTER);
} }

View file

@ -63,7 +63,7 @@ public class SoftKeyNumber0 extends SoftKeyNumber {
@Override @Override
protected float getTitleScale() { protected float getTitleScale() {
if (tt9 != null && !tt9.isInputModeNumeric() && !LanguageKind.isKorean(tt9.getLanguage())) { if (tt9 != null && !tt9.isInputModeNumeric() && !LanguageKind.isKorean(tt9.getLanguage())) {
return 1.5f * getTT9Height(); return 1.3f * Math.min(1, getTT9Height()) * getScreenScaleY();
} }
return super.getTitleScale(); return super.getTitleScale();

View file

@ -5,8 +5,8 @@
to ignore the Android text size scale. We can't allow scaling because it breaks the layout. to ignore the Android text size scale. We can't allow scaling because it breaks the layout.
--> -->
<!-- standard font size for keys --> <!-- standard text size for keys -->
<dimen name="key_text_size">18dp</dimen> <dimen name="key_text_size">21dp</dimen>
<!-- Status Bar --> <!-- Status Bar -->
<dimen name="status_bar_height">26sp</dimen> <dimen name="status_bar_height">26sp</dimen>
@ -18,15 +18,16 @@
<dimen name="main_small_main_key_wrapper_height">46dp</dimen> <!-- key height + margin --> <dimen name="main_small_main_key_wrapper_height">46dp</dimen> <!-- key height + margin -->
<dimen name="main_small_command_palette_height">66dp</dimen> <dimen name="main_small_command_palette_height">66dp</dimen>
<dimen name="main_small_command_palette_key_text_size">18dp</dimen>
<!-- Preferences, default font size --> <!-- Preferences, default text size -->
<dimen name="pref_custom_min_height">48dp</dimen> <dimen name="pref_custom_min_height">48dp</dimen>
<dimen name="pref_custom_spacing_horizontal">16dp</dimen> <dimen name="pref_custom_spacing_horizontal">16dp</dimen>
<dimen name="pref_custom_spacing_vertical">12dp</dimen> <dimen name="pref_custom_spacing_vertical">12dp</dimen>
<dimen name="pref_deletable_word_icon_size">32sp</dimen> <dimen name="pref_deletable_word_icon_size">32sp</dimen>
<dimen name="pref_search_height">72dp</dimen> <dimen name="pref_search_height">72dp</dimen>
<!-- Preferences, large font size --> <!-- Preferences, large text size -->
<dimen name="large_pref_category_spacing_top">30dp</dimen> <dimen name="large_pref_category_spacing_top">30dp</dimen>
<dimen name="large_pref_category_spacing_bottom">12dp</dimen> <dimen name="large_pref_category_spacing_bottom">12dp</dimen>
@ -49,16 +50,16 @@
<dimen name="numpad_key_overlay_z">666dp</dimen> <dimen name="numpad_key_overlay_z">666dp</dimen>
<dimen name="numpad_key_overlay_side_text_size">9dp</dimen> <dimen name="numpad_key_overlay_side_text_size">9dp</dimen>
<dimen name="numpad_key_overlay_hold_icon_size">13dp</dimen> <dimen name="numpad_key_overlay_hold_icon_size">15dp</dimen>
<dimen name="numpad_key_overlay_hold_text_size">11dp</dimen> <dimen name="numpad_key_overlay_hold_text_size">13dp</dimen>
<dimen name="numpad_key_overlay_side_text_spacing">2dp</dimen> <dimen name="numpad_key_overlay_side_text_spacing">2dp</dimen>
<dimen name="numpad_key_overlay_hold_icon_spacing_top">4dp</dimen> <dimen name="numpad_key_overlay_hold_icon_spacing_top">1dp</dimen>
<dimen name="numpad_key_overlay_hold_icon_spacing_right">3dp</dimen> <dimen name="numpad_key_overlay_hold_icon_spacing_right">1dp</dimen>
<dimen name="numpad_key_overlay_hold_text_spacing_top">3dp</dimen> <dimen name="numpad_key_overlay_hold_text_spacing_top">2dp</dimen>
<dimen name="numpad_key_overlay_hold_text_spacing_right">5dp</dimen> <dimen name="numpad_key_overlay_hold_text_spacing_right">5dp</dimen>
<dimen name="numpad_suggestion_font_size">17sp</dimen> <dimen name="numpad_suggestion_text_size">17sp</dimen>
<dimen name="numpad_suggestion_height">40sp</dimen> <dimen name="numpad_suggestion_height">40sp</dimen>
<dimen name="numpad_suggestion_min_width">36sp</dimen> <dimen name="numpad_suggestion_min_width">36sp</dimen>
</resources> </resources>

View file

@ -132,6 +132,7 @@
<item name="android:paddingRight">0dp</item> <item name="android:paddingRight">0dp</item>
<item name="android:paddingBottom">2dp</item> <item name="android:paddingBottom">2dp</item>
<item name="android:paddingLeft">0dp</item> <item name="android:paddingLeft">0dp</item>
<item name="android:textSize">@dimen/main_small_command_palette_key_text_size</item>
</style> </style>
@ -193,7 +194,7 @@
<item name="android:paddingLeft">@dimen/main_small_suggestion_spacing_horizontal</item> <item name="android:paddingLeft">@dimen/main_small_suggestion_spacing_horizontal</item>
<item name="android:paddingRight">@dimen/main_small_suggestion_spacing_horizontal</item> <item name="android:paddingRight">@dimen/main_small_suggestion_spacing_horizontal</item>
<item name="android:textSize">@dimen/numpad_suggestion_font_size</item> <item name="android:textSize">@dimen/numpad_suggestion_text_size</item>
</style> </style>
@ -308,8 +309,6 @@
<item name="android:layout_marginRight">@dimen/numpad_key_spacing</item> <item name="android:layout_marginRight">@dimen/numpad_key_spacing</item>
<item name="android:padding">0dp</item> <item name="android:padding">0dp</item>
<item name="android:textSize">@dimen/key_text_size</item>
<item name="android:textColor">@color/key_fn_text</item> <item name="android:textColor">@color/key_fn_text</item>
<item name="backgroundTint">@color/key_fn_background</item> <item name="backgroundTint">@color/key_fn_background</item>
<item name="rippleColor">@color/key_fn_ripple</item> <item name="rippleColor">@color/key_fn_ripple</item>