1
0
Fork 0

enabled width and alignment adjustment for all layouts

This commit is contained in:
sspanak 2025-02-01 18:56:09 +02:00 committed by Dimo Karaivanov
parent b340058861
commit 78e559fe19
27 changed files with 204 additions and 175 deletions

View file

@ -49,7 +49,7 @@ public class ItemNumpadAlignment extends ItemDropDown {
void onLayoutChange(int mainViewLayout) {
if (item != null) {
item.setEnabled(mainViewLayout == SettingsStore.LAYOUT_NUMPAD);
item.setEnabled(mainViewLayout != SettingsStore.LAYOUT_STEALTH);
}
}
}

View file

@ -37,7 +37,7 @@ public class ItemNumpadWidth extends ItemDropDown {
void onLayoutChange(int mainViewLayout) {
if (item != null) {
item.setEnabled(mainViewLayout == SettingsStore.LAYOUT_NUMPAD);
item.setEnabled(mainViewLayout != SettingsStore.LAYOUT_STEALTH);
}
}
}

View file

@ -3,9 +3,11 @@ package io.github.sspanak.tt9.ui.main;
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 @@ abstract class BaseMainLayout {
}
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();

View file

@ -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 @@ class MainLayoutNumpad extends BaseMainLayout {
}
/**
* 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 @@ class MainLayoutNumpad extends BaseMainLayout {
return keys;
}
@Override
void render() {
getView();
setKeyHeight(getKeyHeightCompat());
setWidth(tt9.getSettings().getNumpadWidthPercent(), tt9.getSettings().getNumpadAlignment());
enableClickHandlers();
for (SoftKey key : getKeys()) {
key.render();
}
}
}

View file

@ -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() {}
}

View file

@ -72,16 +72,6 @@ class MainLayoutTray extends BaseMainLayout {
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<SoftKey> getKeys() {
@ -91,4 +81,15 @@ class MainLayoutTray extends BaseMainLayout {
}
return keys;
}
@Override
void render() {
getView();
setSoftKeysVisibility();
setWidth(tt9.getSettings().getNumpadWidthPercent(), tt9.getSettings().getNumpadAlignment());
enableClickHandlers();
for (SoftKey key : getKeys()) {
key.render();
}
}
}

View file

@ -57,10 +57,7 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha
}
}
@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) {}

View file

@ -8,6 +8,7 @@ import android.view.MotionEvent;
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 class SuggestionsBar {
private void configureAnimation() {
if (mView == null) {
return;
}
DefaultItemAnimator animator = new DefaultItemAnimator();
animator.setMoveDuration(SettingsStore.SUGGESTIONS_SELECT_ANIMATION_DURATION);
@ -77,6 +82,10 @@ public class SuggestionsBar {
private void initDataAdapter(Context context) {
if (mView == null) {
return;
}
mSuggestionsAdapter = new SuggestionsAdapter(
context,
this::handleItemClick,
@ -84,6 +93,7 @@ public class SuggestionsBar {
R.id.suggestion_list_item,
suggestions
);
mView.setAdapter(mSuggestionsAdapter);
setDarkTheme();
@ -91,6 +101,10 @@ public class SuggestionsBar {
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,8 +158,10 @@ public class SuggestionsBar {
public void setRTL(boolean yes) {
if (mView != null) {
mView.setLayoutDirection(yes ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
}
}
public void setSuggestions(List<String> newSuggestions, int initialSel, boolean containsGenerated) {
@ -275,6 +291,10 @@ public class SuggestionsBar {
* to set the selected index in the adapter.
*/
private void scrollView() {
if (mView == null) {
return;
}
if (containsStem() && selectedIndex == 1) {
mView.scrollToPosition(0);
} else {

View file

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/TTheme.FullScreenContainer"
android:id="@+id/full_screen_container">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/TTheme.FullScreenContainer">
<LinearLayout style="@style/TTheme.FullScreenContainer.SideBumper" android:id="@+id/numpad_bumper_left" />
<LinearLayout style="@style/TTheme.FullScreenContainer.SideBumper" android:id="@+id/bumper_left" />
<LinearLayout style="@style/TTheme.Numpad" android:id="@+id/numpad_container">
<LinearLayout style="@style/TTheme.Numpad" android:id="@+id/keyboard_container">
<View style="@style/TTheme.Keyboard.TopSeparator" />
<include layout="@layout/panel_numpad_status_bar" />
@ -22,6 +22,6 @@
</LinearLayout>
</LinearLayout>
<LinearLayout style="@style/TTheme.FullScreenContainer.SideBumper" android:id="@+id/numpad_bumper_right" />
<LinearLayout style="@style/TTheme.FullScreenContainer.SideBumper" android:id="@+id/bumper_right" />
</LinearLayout>

View file

@ -1,37 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/TTheme.MainSmall">
style="@style/TTheme.FullScreenContainer">
<LinearLayout style="@style/TTheme.FullScreenContainer.SideBumper" android:id="@+id/bumper_left" />
<LinearLayout style="@style/TTheme.MainSmall" android:id="@+id/keyboard_container">
<View style="@style/TTheme.Keyboard.TopSeparator" />
<FrameLayout
style="@style/TTheme.MainSmall.StatusBar.Wrapper"
android:defaultFocusHighlightEnabled="false"
android:focusable="false"
android:focusableInTouchMode="false">
<TextView
style="@style/TTheme.MainSmall.StatusBar.Status"
android:id="@+id/status_bar"
android:defaultFocusHighlightEnabled="false"
android:focusable="false"
android:focusableInTouchMode="false"
tools:text="@tools:sample/lorem" />
<androidx.recyclerview.widget.RecyclerView
style="@style/TTheme.MainSmall.StatusBar.SuggestionList"
android:id="@+id/suggestions_bar"
android:defaultFocusHighlightEnabled="false"
android:focusable="false"
android:focusableInTouchMode="false" />
</FrameLayout>
<include
layout="@layout/panel_small_function_keys"
android:id="@+id/main_soft_keys" />
<include layout="@layout/panel_small_status_bar" />
<include layout="@layout/panel_small_function_keys" android:id="@+id/main_soft_keys" />
<include
layout="@layout/panel_small_command_palette"
@ -42,5 +19,8 @@
layout="@layout/panel_small_text_editing"
android:id="@+id/text_editing_container"
android:visibility="gone" />
</LinearLayout>
<LinearLayout style="@style/TTheme.FullScreenContainer.SideBumper" android:id="@+id/bumper_right" />
</LinearLayout>

View file

@ -1,13 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_soft_keys"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/main_soft_keys"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/TTheme.MainSmall.StatusBar.Wrapper"
android:defaultFocusHighlightEnabled="false"
android:focusable="false"
android:focusableInTouchMode="false">
<TextView
style="@style/TTheme.MainSmall.StatusBar.Status"
android:id="@+id/status_bar"
android:defaultFocusHighlightEnabled="false"
android:focusable="false"
android:focusableInTouchMode="false"
tools:text="@tools:sample/lorem" />
<androidx.recyclerview.widget.RecyclerView
style="@style/TTheme.MainSmall.StatusBar.SuggestionList"
android:id="@+id/suggestions_bar"
android:defaultFocusHighlightEnabled="false"
android:focusable="false"
android:focusableInTouchMode="false" />
</FrameLayout>

View file

@ -190,4 +190,5 @@
<string name="punctuation_order_save">Запази подредбата</string>
<string name="punctuation_order_forbidden_char">Забранен символ:%1$s</string>
<string name="punctuation_order_forbidden_chars">Забранени символи:%1$s</string>
<string name="pref_category_geometry">Геометрия</string>
</resources>

View file

@ -178,4 +178,5 @@
<string name="punctuation_order_forbidden_char">Verbotenes Zeichen:%1$s</string>
<string name="punctuation_order_forbidden_chars">Verbotene Zeichen:%1$s</string>
<string name="function_filter_suggestions_not_available">Das Filtern ist in dieser Sprache nicht möglich.</string>
<string name="pref_category_geometry">Geometrie</string>
</resources>

View file

@ -188,4 +188,5 @@
<string name="punctuation_order_save">Guardar orden</string>
<string name="punctuation_order_forbidden_char">Carácter prohibido:%1$s</string>
<string name="punctuation_order_forbidden_chars">Caracteres prohibidos:%1$s</string>
<string name="pref_category_geometry">Geometría</string>
</resources>

View file

@ -186,4 +186,5 @@
<string name="punctuation_order_save">Enregistrer lordre</string>
<string name="punctuation_order_forbidden_char">Caractère interdit:%1$s</string>
<string name="punctuation_order_forbidden_chars">Caractères interdits:%1$s</string>
<string name="pref_category_geometry">Géométrie</string>
</resources>

View file

@ -178,5 +178,6 @@
<string name="punctuation_order_forbidden_char">Carattere vietato:%1$s</string>
<string name="punctuation_order_forbidden_chars">Caratteri vietati:%1$s</string>
<string name="function_filter_suggestions_not_available">Il filtraggio non è possibile in questa lingua.</string>
<string name="pref_category_geometry">Geometria</string>
</resources>

View file

@ -191,4 +191,5 @@
<string name="punctuation_order_forbidden_char">תו אסור:%1$s</string>
<string name="punctuation_order_forbidden_chars">תווים אסורים:%1$s</string>
<string name="function_filter_suggestions_not_available">לא ניתן לסנן בשפה זו.</string>
<string name="pref_category_geometry">גיאומטריה</string>
</resources>

View file

@ -197,4 +197,5 @@
<string name="punctuation_order_save">Išsaugoti tvarką</string>
<string name="punctuation_order_forbidden_char">Draudžiamas simbolis:%1$s</string>
<string name="punctuation_order_forbidden_chars">Draudžiami simboliai:%1$s</string>
<string name="pref_category_geometry">Geometrija</string>
</resources>

View file

@ -177,4 +177,5 @@
<string name="punctuation_order_forbidden_char">Verboden teken:%1$s</string>
<string name="punctuation_order_forbidden_chars">Verboden tekens:%1$s</string>
<string name="function_filter_suggestions_not_available">Het filteren is niet mogelijk in deze taal.</string>
<string name="pref_category_geometry">Geometrie</string>
</resources>

View file

@ -191,4 +191,5 @@
<string name="punctuation_order_forbidden_char">Caractere proibido:%1$s</string>
<string name="punctuation_order_forbidden_chars">Caracteres proibidos:%1$s</string>
<string name="function_filter_suggestions_not_available">Não é possível filtrar neste idioma.</string>
<string name="pref_category_geometry">Geometria</string>
</resources>

View file

@ -188,4 +188,5 @@
<string name="punctuation_order_save">Сохранить порядок</string>
<string name="punctuation_order_forbidden_char">Запрещённый символ:%1$s</string>
<string name="punctuation_order_forbidden_chars">Запрещённые символы:%1$s</string>
<string name="pref_category_geometry">Геометрия</string>
</resources>

View file

@ -191,4 +191,5 @@
<string name="punctuation_order_save">Sıralamayı kaydet</string>
<string name="punctuation_order_forbidden_char">Yasaklı karakter:%1$s</string>
<string name="punctuation_order_forbidden_chars">Yasaklı karakterler:%1$s</string>
<string name="pref_category_geometry">Geometri</string>
</resources>

View file

@ -199,4 +199,5 @@
<string name="punctuation_order_save">Зберегти порядок</string>
<string name="punctuation_order_forbidden_char">Заборонений символ:%1$s</string>
<string name="punctuation_order_forbidden_chars">Заборонені символи:%1$s</string>
<string name="pref_category_geometry">Геометрія</string>
</resources>

View file

@ -30,6 +30,7 @@
<string name="pref_category_abc_mode">ABC Mode</string>
<string name="pref_category_appearance">Appearance</string>
<string name="pref_category_custom_words">Added Words</string>
<string name="pref_category_geometry">Geometry</string>
<string name="pref_category_debug_options" translatable="false">Debug Options</string>
<string name="pref_category_delete_words">Delete Added Words</string>
<string name="pref_category_function_keys">Select Hotkeys</string>

View file

@ -6,6 +6,21 @@
<item name="windowNoTitle">true</item> <!-- hide some weird floating rectangle above the dialog -->
</style>
<style name="TTheme.FullScreenContainer" parent="">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layoutDirection">ltr</item>
<item name="android:orientation">horizontal</item>
</style>
<style name="TTheme.FullScreenContainer.SideBumper" parent="">
<item name="android:layout_height">1dp</item>
<item name="android:layout_width">0dp</item>
<item name="android:layout_weight">0</item>
<item name="android:layoutDirection">ltr</item>
<item name="android:orientation">horizontal</item>
</style>
<style name="TTheme.Preferences" parent="Theme.AppCompat.DayNight" />
<style name="TTheme.Keyboard" parent="TTheme">
@ -30,8 +45,9 @@
*******************************************-->
<style name="TTheme.MainSmall" parent="TTheme.Keyboard">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">0dp</item>
<item name="android:layout_weight">100</item>
<item name="android:orientation">vertical</item>
</style>
@ -140,21 +156,6 @@
Numpad
*******************************************-->
<style name="TTheme.FullScreenContainer" parent="">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layoutDirection">ltr</item>
<item name="android:orientation">horizontal</item>
</style>
<style name="TTheme.FullScreenContainer.SideBumper" parent="">
<item name="android:layout_height">1dp</item>
<item name="android:layout_width">0dp</item>
<item name="android:layout_weight">0</item>
<item name="android:layoutDirection">ltr</item>
<item name="android:orientation">horizontal</item>
</style>
<!-- The keyboard itself -->
<style name="TTheme.Numpad" parent="TTheme.Keyboard">
<item name="android:layout_height">wrap_content</item>

View file

@ -14,18 +14,18 @@
app:key="pref_layout_type"
app:title="@string/pref_layout" />
<PreferenceCategory app:title="@string/pref_layout_numpad">
<PreferenceCategory app:title="@string/pref_category_geometry">
<DropDownPreference
app:key="pref_numpad_key_height"
app:title="@string/pref_numpad_key_height" />
app:key="pref_numpad_alignment"
app:title="@string/pref_numpad_alignment" />
<DropDownPreference
app:key="pref_numpad_width"
app:title="@string/pref_numpad_width" />
<DropDownPreference
app:key="pref_numpad_alignment"
app:title="@string/pref_numpad_alignment" />
app:key="pref_numpad_key_height"
app:title="@string/pref_numpad_key_height" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/pref_category_hacks">