diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadAlignment.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadAlignment.java index 8214ba139..5be59d798 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadAlignment.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadAlignment.java @@ -49,7 +49,7 @@ public ItemDropDown populate() { void onLayoutChange(int mainViewLayout) { if (item != null) { - item.setEnabled(mainViewLayout == SettingsStore.LAYOUT_NUMPAD); + item.setEnabled(mainViewLayout != SettingsStore.LAYOUT_STEALTH); } } } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadWidth.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadWidth.java index 5c1b3c457..ce4cb2e46 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadWidth.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadWidth.java @@ -37,7 +37,7 @@ public ItemDropDown populate() { void onLayoutChange(int mainViewLayout) { if (item != null) { - item.setEnabled(mainViewLayout == SettingsStore.LAYOUT_NUMPAD); + item.setEnabled(mainViewLayout != SettingsStore.LAYOUT_STEALTH); } } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java index b60900e6d..6db532d62 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java @@ -3,9 +3,11 @@ import android.graphics.Insets; import android.os.Build; import android.view.ContextThemeWrapper; +import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; +import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; @@ -135,7 +137,73 @@ boolean setHeight(int height) { } - void setWidth(int widthPercent) {} + /** + * Adjusts the width of the keyboard to the given percentage of the screen width. + */ + private void setKeyboardWidth(int widthPercent) { + View keyboard = view != null ? view.findViewById(R.id.keyboard_container) : null; + if (keyboard == null) { + return; + } + + LinearLayout.LayoutParams layout = (LinearLayout.LayoutParams) keyboard.getLayoutParams(); + if (layout != null) { + layout.weight = widthPercent; + keyboard.setLayoutParams(layout); + } + } + + + /** + * Adjust the padding on both sides of the keyboard to make it centered, or aligned to the + * left or right. + */ + private void setBumperWidth(int widthPercent, int gravity) { + View leftBumper = view.findViewById(R.id.bumper_left); + View rightBumper = view.findViewById(R.id.bumper_right); + if (leftBumper == null || rightBumper == null) { + return; + } + + int leftPadding = 0; + int rightPadding = 0; + + switch (gravity) { + case Gravity.CENTER_HORIZONTAL: + leftPadding = rightPadding = (100 - widthPercent) / 2; + break; + + case Gravity.START: + rightPadding = 100 - widthPercent; + break; + + case Gravity.END: + leftPadding = 100 - widthPercent; + break; + } + + LinearLayout.LayoutParams layout = (LinearLayout.LayoutParams) leftBumper.getLayoutParams(); + if (layout != null) { + layout.weight = leftPadding; + leftBumper.setLayoutParams(layout); + } + + layout = (LinearLayout.LayoutParams) rightBumper.getLayoutParams(); + if (layout != null) { + layout.weight = rightPadding; + rightBumper.setLayoutParams(layout); + } + } + + + void setWidth(int widthPercent, int gravity) { + if (view == null || widthPercent <= 0 || widthPercent > 100) { + return; + } + + setBumperWidth(widthPercent, gravity); + setKeyboardWidth(widthPercent); + } abstract void showCommandPalette(); diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java index ef25d880b..d48b3dd34 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java @@ -1,8 +1,6 @@ package io.github.sspanak.tt9.ui.main; import android.content.res.Resources; -import android.view.Gravity; -import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.widget.LinearLayout; @@ -164,87 +162,6 @@ int getHeight(boolean forceRecalculate) { } - /** - * Adjusts the width of the keyboard to the given percentage of the screen width. - */ - private void setKeyboardWidth(int widthPercent) { - View keyboard = view != null ? view.findViewById(R.id.numpad_container) : null; - if (keyboard == null) { - return; - } - - LinearLayout.LayoutParams layout = (LinearLayout.LayoutParams) keyboard.getLayoutParams(); - if (layout != null) { - layout.weight = widthPercent; - keyboard.setLayoutParams(layout); - } - } - - - /** - * Adjust the padding on both sides of the keyboard to make it centered, or aligned to the - * left or right. - */ - private void setBumperWidth(int widthPercent, int gravity) { - View leftBumper = view.findViewById(R.id.numpad_bumper_left); - View rightBumper = view.findViewById(R.id.numpad_bumper_right); - if (leftBumper == null || rightBumper == null) { - return; - } - - int leftPadding = 0; - int rightPadding = 0; - - switch (gravity) { - case Gravity.CENTER_HORIZONTAL: - leftPadding = rightPadding = (100 - widthPercent) / 2; - break; - - case Gravity.START: - rightPadding = 100 - widthPercent; - break; - - case Gravity.END: - leftPadding = 100 - widthPercent; - break; - } - - LinearLayout.LayoutParams layout = (LinearLayout.LayoutParams) leftBumper.getLayoutParams(); - if (layout != null) { - layout.weight = leftPadding; - leftBumper.setLayoutParams(layout); - } - - layout = (LinearLayout.LayoutParams) rightBumper.getLayoutParams(); - if (layout != null) { - layout.weight = rightPadding; - rightBumper.setLayoutParams(layout); - } - } - - - void setWidth(int widthPercent, int gravity) { - if (view == null || widthPercent <= 0 || widthPercent > 100) { - return; - } - - setBumperWidth(widthPercent, gravity); - setKeyboardWidth(widthPercent); - } - - - @Override - void render() { - getView(); - setKeyHeight(getKeyHeightCompat()); - setWidth(tt9.getSettings().getNumpadWidthPercent(), tt9.getSettings().getNumpadAlignment()); - enableClickHandlers(); - for (SoftKey key : getKeys()) { - key.render(); - } - } - - @Override protected void enableClickHandlers() { super.enableClickHandlers(); @@ -307,4 +224,16 @@ protected ArrayList getKeys() { return keys; } + + + @Override + void render() { + getView(); + setKeyHeight(getKeyHeightCompat()); + setWidth(tt9.getSettings().getNumpadWidthPercent(), tt9.getSettings().getNumpadAlignment()); + enableClickHandlers(); + for (SoftKey key : getKeys()) { + key.render(); + } + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutStealth.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutStealth.java index 91f5c8c7a..5ea7f85f6 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutStealth.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutStealth.java @@ -22,6 +22,6 @@ class MainLayoutStealth extends BaseMainLayout { } @Override void hideTextEditingPalette() { isTextEditingPaletteShown = false; } @Override boolean isTextEditingPaletteShown() { return isTextEditingPaletteShown; } - + @Override void setWidth(int w, int g) {} @Override void render() {} } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutTray.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutTray.java index 615069839..30b8405a9 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutTray.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutTray.java @@ -72,16 +72,6 @@ boolean isTextEditingPaletteShown() { return view != null && view.findViewById(R.id.text_editing_container).getVisibility() == LinearLayout.VISIBLE; } - @Override - void render() { - getView(); - enableClickHandlers(); - setSoftKeysVisibility(); - for (SoftKey key : getKeys()) { - key.render(); - } - } - @NonNull @Override protected ArrayList getKeys() { @@ -91,4 +81,15 @@ protected ArrayList getKeys() { } return keys; } + + @Override + void render() { + getView(); + setSoftKeysVisibility(); + setWidth(tt9.getSettings().getNumpadWidthPercent(), tt9.getSettings().getNumpadAlignment()); + enableClickHandlers(); + for (SoftKey key : getKeys()) { + key.render(); + } + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java index 6898c0fa8..34288a38e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java @@ -57,10 +57,7 @@ public void removeListeners() { } } - @Override public void onViewAttachedToWindow(@NonNull View v) { - setHeight(height, heightSmall, heightNumpad); - main.setWidth(tt9.getSettings().getNumpadWidthPercent()); - } + @Override public void onViewAttachedToWindow(@NonNull View v) { setHeight(height, heightSmall, heightNumpad); } @Override public void onViewDetachedFromWindow(@NonNull View v) {} diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java index d04a55f7f..e7f24940a 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java @@ -8,6 +8,7 @@ import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.DividerItemDecoration; @@ -36,7 +37,7 @@ public class SuggestionsBar { private final ResizableMainView mainView; private final Runnable onItemClick; - private final RecyclerView mView; + @Nullable private final RecyclerView mView; private final SettingsStore settings; private SuggestionsAdapter mSuggestionsAdapter; private Vibration vibration; @@ -65,6 +66,10 @@ public SuggestionsBar(@NonNull SettingsStore settings, @NonNull ResizableMainVie private void configureAnimation() { + if (mView == null) { + return; + } + DefaultItemAnimator animator = new DefaultItemAnimator(); animator.setMoveDuration(SettingsStore.SUGGESTIONS_SELECT_ANIMATION_DURATION); @@ -77,6 +82,10 @@ private void configureAnimation() { private void initDataAdapter(Context context) { + if (mView == null) { + return; + } + mSuggestionsAdapter = new SuggestionsAdapter( context, this::handleItemClick, @@ -84,6 +93,7 @@ private void initDataAdapter(Context context) { R.id.suggestion_list_item, suggestions ); + mView.setAdapter(mSuggestionsAdapter); setDarkTheme(); @@ -91,6 +101,10 @@ private void initDataAdapter(Context context) { private void initSeparator(Context context) { + if (mView == null) { + return; + } + // Extra XML is required instead of a ColorDrawable object, because setting the highlight color // erases the borders defined using the ColorDrawable. Drawable separatorDrawable = ContextCompat.getDrawable(context, R.drawable.suggestion_separator); @@ -144,7 +158,9 @@ public String getSuggestion(int id) { public void setRTL(boolean yes) { - mView.setLayoutDirection(yes ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR); + if (mView != null) { + mView.setLayoutDirection(yes ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR); + } } @@ -275,6 +291,10 @@ private void scrollToIndex() { * to set the selected index in the adapter. */ private void scrollView() { + if (mView == null) { + return; + } + if (containsStem() && selectedIndex == 1) { mView.scrollToPosition(0); } else { diff --git a/app/src/main/res/layout/main_numpad.xml b/app/src/main/res/layout/main_numpad.xml index 8ae71b737..594a94afa 100644 --- a/app/src/main/res/layout/main_numpad.xml +++ b/app/src/main/res/layout/main_numpad.xml @@ -1,11 +1,11 @@ - + - + - + @@ -22,6 +22,6 @@ - + diff --git a/app/src/main/res/layout/main_small.xml b/app/src/main/res/layout/main_small.xml index 5e1a004de..5c9155742 100644 --- a/app/src/main/res/layout/main_small.xml +++ b/app/src/main/res/layout/main_small.xml @@ -1,46 +1,26 @@ + style="@style/TTheme.FullScreenContainer"> - + - + + + + - + - + + - - - - - - - + diff --git a/app/src/main/res/layout/main_stealth.xml b/app/src/main/res/layout/main_stealth.xml index cf2d0b08c..c66522318 100644 --- a/app/src/main/res/layout/main_stealth.xml +++ b/app/src/main/res/layout/main_stealth.xml @@ -1,13 +1,8 @@ - + android:layout_height="match_parent" /> - - - diff --git a/app/src/main/res/layout/panel_small_status_bar.xml b/app/src/main/res/layout/panel_small_status_bar.xml new file mode 100644 index 000000000..72944245f --- /dev/null +++ b/app/src/main/res/layout/panel_small_status_bar.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index d21819d86..62e8a06c3 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -190,4 +190,5 @@ Запази подредбата Забранен символ:%1$s Забранени символи:%1$s + Геометрия diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 095f385c2..83f1da860 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -178,4 +178,5 @@ Verbotenes Zeichen:%1$s Verbotene Zeichen:%1$s Das Filtern ist in dieser Sprache nicht möglich. + Geometrie diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 5bffef611..fada00ad1 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -188,4 +188,5 @@ Guardar orden Carácter prohibido:%1$s Caracteres prohibidos:%1$s + Geometría diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index da9304a08..72710a4f5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -186,4 +186,5 @@ Enregistrer l’ordre Caractère interdit:%1$s Caractères interdits:%1$s + Géométrie diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c52669b3f..578c8b400 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -178,5 +178,6 @@ Carattere vietato:%1$s Caratteri vietati:%1$s Il filtraggio non è possibile in questa lingua. + Geometria diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index ddddf8f5d..1b70932cd 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -191,4 +191,5 @@ תו אסור:%1$s תווים אסורים:%1$s לא ניתן לסנן בשפה זו. + גיאומטריה diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 89b8f16e5..0fdeac719 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -197,4 +197,5 @@ Išsaugoti tvarką Draudžiamas simbolis:%1$s Draudžiami simboliai:%1$s + Geometrija diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3d4f97a6c..12bb2b85b 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -177,4 +177,5 @@ Verboden teken:%1$s Verboden tekens:%1$s Het filteren is niet mogelijk in deze taal. + Geometrie diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1caa986bf..fd6d56cd4 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -191,4 +191,5 @@ Caractere proibido:%1$s Caracteres proibidos:%1$s Não é possível filtrar neste idioma. + Geometria diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1f9f5400b..cb4b91c65 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -188,4 +188,5 @@ Сохранить порядок Запрещённый символ:%1$s Запрещённые символы:%1$s + Геометрия diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c88b4a311..321893afe 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -191,4 +191,5 @@ Sıralamayı kaydet Yasaklı karakter:%1$s Yasaklı karakterler:%1$s + Geometri diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 3b50abf78..cd8659285 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -199,4 +199,5 @@ Зберегти порядок Заборонений символ:%1$s Заборонені символи:%1$s + Геометрія diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d7b775a12..643ece482 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,6 +30,7 @@ ABC Mode Appearance Added Words + Geometry Debug Options Delete Added Words Select Hotkeys diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 70839abc1..204a6bf5c 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -6,6 +6,21 @@ true + + + + @@ -140,21 +156,6 @@ Numpad *******************************************--> - - - -