automatic height adjustment to prevent eating up too much screen space
This commit is contained in:
parent
c2563112ec
commit
78832f2bd3
5 changed files with 72 additions and 18 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:tools="http://schemas.android.com/tools"
|
<manifest xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:versionCode="580"
|
android:versionCode="583"
|
||||||
android:versionName="34.7"
|
android:versionName="34.10"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <!-- allows displaying notifications on Android >= 13 -->
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <!-- allows displaying notifications on Android >= 13 -->
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,14 @@ import android.view.KeyEvent;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
public class DeviceInfo {
|
public class DeviceInfo {
|
||||||
|
public static boolean isLandscapeOrientation(Context context) {
|
||||||
|
return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getScreenHeight(Context context) {
|
||||||
|
return context.getResources().getDisplayMetrics().heightPixels;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean noKeyboard(Context context) {
|
public static boolean noKeyboard(Context context) {
|
||||||
// all Xiaomi phones are only touchscreen, but some of them report they have a keyboard
|
// all Xiaomi phones are only touchscreen, but some of them report they have a keyboard
|
||||||
// See: https://github.com/sspanak/tt9/issues/549
|
// See: https://github.com/sspanak/tt9/issues/549
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package io.github.sspanak.tt9.ime;
|
package io.github.sspanak.tt9.ime;
|
||||||
|
|
||||||
|
import android.view.OrientationEventListener;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import io.github.sspanak.tt9.ime.modes.ModeABC;
|
import io.github.sspanak.tt9.ime.modes.ModeABC;
|
||||||
|
|
@ -8,8 +10,26 @@ import io.github.sspanak.tt9.languages.Language;
|
||||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||||
import io.github.sspanak.tt9.ui.main.ResizableMainView;
|
import io.github.sspanak.tt9.ui.main.ResizableMainView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Informational methods for the on-screen keyboard
|
||||||
|
**/
|
||||||
abstract public class MainViewHandler extends HotkeyHandler {
|
abstract public class MainViewHandler extends HotkeyHandler {
|
||||||
/**** Informational methods for the on-screen keyboard ****/
|
@Override
|
||||||
|
protected void onInit() {
|
||||||
|
super.onInit();
|
||||||
|
|
||||||
|
OrientationEventListener orientationListener = new OrientationEventListener(getApplicationContext()) {
|
||||||
|
@Override
|
||||||
|
public void onOrientationChanged(int orientation) {
|
||||||
|
mainView.onOrientationChanged();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (orientationListener.canDetectOrientation()) {
|
||||||
|
orientationListener.enable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int getTextCase() {
|
public int getTextCase() {
|
||||||
return mInputMode.getTextCase();
|
return mInputMode.getTextCase();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import io.github.sspanak.tt9.R;
|
import io.github.sspanak.tt9.R;
|
||||||
|
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.ui.main.keys.SoftKey;
|
import io.github.sspanak.tt9.ui.main.keys.SoftKey;
|
||||||
import io.github.sspanak.tt9.ui.main.keys.SoftKeySettings;
|
import io.github.sspanak.tt9.ui.main.keys.SoftKeySettings;
|
||||||
|
|
@ -64,6 +65,25 @@ class MainLayoutNumpad extends BaseMainLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uses the key height from the settings, but if it takes up too much of the screen, it will
|
||||||
|
* be adjusted so that the entire Main View would take up around 50% of the screen in landscape mode
|
||||||
|
* and 75% in portrait mode. Returns the adjusted height of a single key.
|
||||||
|
*/
|
||||||
|
private int getKeyHeightCompat() {
|
||||||
|
int keyHeight = tt9.getSettings().getNumpadKeyHeight();
|
||||||
|
int screenHeight = DeviceInfo.getScreenHeight(tt9.getApplicationContext());
|
||||||
|
|
||||||
|
boolean isLandscape = DeviceInfo.isLandscapeOrientation(tt9.getApplicationContext());
|
||||||
|
double maxScreenHeight = isLandscape ? screenHeight * 0.75 : screenHeight * 0.8;
|
||||||
|
double maxKeyHeight = isLandscape ? screenHeight * 0.115 : screenHeight * 0.125;
|
||||||
|
|
||||||
|
// it's all very approximate but when it comes to screen dimensions,
|
||||||
|
// accuracy is not that important
|
||||||
|
return keyHeight * 5 > maxScreenHeight ? (int) Math.round(maxKeyHeight) : keyHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void setKeyHeight(int height) {
|
void setKeyHeight(int height) {
|
||||||
if (view == null || height <= 0) {
|
if (view == null || height <= 0) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -86,7 +106,7 @@ class MainLayoutNumpad extends BaseMainLayout {
|
||||||
int getHeight() {
|
int getHeight() {
|
||||||
if (height <= 0) {
|
if (height <= 0) {
|
||||||
Resources resources = tt9.getResources();
|
Resources resources = tt9.getResources();
|
||||||
height = tt9.getSettings().getNumpadKeyHeight() * 4
|
height = getKeyHeightCompat() * 4
|
||||||
+ resources.getDimensionPixelSize(R.dimen.numpad_candidate_height)
|
+ resources.getDimensionPixelSize(R.dimen.numpad_candidate_height)
|
||||||
+ resources.getDimensionPixelSize(R.dimen.numpad_padding_bottom) * 4;
|
+ resources.getDimensionPixelSize(R.dimen.numpad_padding_bottom) * 4;
|
||||||
}
|
}
|
||||||
|
|
@ -103,7 +123,7 @@ class MainLayoutNumpad extends BaseMainLayout {
|
||||||
@Override
|
@Override
|
||||||
void render() {
|
void render() {
|
||||||
getView();
|
getView();
|
||||||
setKeyHeight(tt9 != null ? tt9.getSettings().getNumpadKeyHeight() : -1);
|
setKeyHeight(getKeyHeightCompat());
|
||||||
enableClickHandlers();
|
enableClickHandlers();
|
||||||
for (SoftKey key : getKeys()) {
|
for (SoftKey key : getKeys()) {
|
||||||
key.render();
|
key.render();
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,16 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override public void onViewAttachedToWindow(@NonNull View v) { onCreateAdjustHeight(); }
|
||||||
|
@Override public void onViewDetachedFromWindow(@NonNull View v) {}
|
||||||
|
|
||||||
|
|
||||||
|
public void onOrientationChanged() {
|
||||||
|
calculateSnapHeights();
|
||||||
|
calculateInitialHeight();
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void onResizeStart(float startY) {
|
public void onResizeStart(float startY) {
|
||||||
resizeStartY = startY;
|
resizeStartY = startY;
|
||||||
|
|
@ -86,6 +96,15 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void onResizeThrottled(float currentY) {
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
if (now - lastResizeTime > SettingsStore.RESIZE_THROTTLING_TIME) {
|
||||||
|
lastResizeTime = now;
|
||||||
|
onResize(currentY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void onSnap() {
|
public void onSnap() {
|
||||||
SettingsStore settings = tt9.getSettings();
|
SettingsStore settings = tt9.getSettings();
|
||||||
|
|
||||||
|
|
@ -99,15 +118,6 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void onResizeThrottled(float currentY) {
|
|
||||||
long now = System.currentTimeMillis();
|
|
||||||
if (now - lastResizeTime > SettingsStore.RESIZE_THROTTLING_TIME) {
|
|
||||||
lastResizeTime = now;
|
|
||||||
onResize(currentY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void expand(int delta) {
|
private void expand(int delta) {
|
||||||
SettingsStore settings = tt9.getSettings();
|
SettingsStore settings = tt9.getSettings();
|
||||||
|
|
||||||
|
|
@ -193,8 +203,4 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha
|
||||||
main.getView().performHapticFeedback(Vibration.getPressVibration(null));
|
main.getView().performHapticFeedback(Vibration.getPressVibration(null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override public void onViewAttachedToWindow(@NonNull View v) { onCreateAdjustHeight(); }
|
|
||||||
@Override public void onViewDetachedFromWindow(@NonNull View v) {}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue