diff --git a/check_layout.py b/check_layout.py index f0c1a34..27a1f36 100644 --- a/check_layout.py +++ b/check_layout.py @@ -50,8 +50,8 @@ def check_layout(layout): bottom_row_keys = [ "ctrl", "fn", "switch_numeric", "change_method", "switch_emoji", - "config", "switch_second", "enter", "action", "left", "up", "right", - "down", "space" + "config", "switch_forward", "switch_backward", "enter", "action", + "left", "up", "right", "down", "space" ] if root.get("bottom_row") == "false": diff --git a/gen_layouts.py b/gen_layouts.py index a8f13c8..44c3563 100644 --- a/gen_layouts.py +++ b/gen_layouts.py @@ -54,10 +54,10 @@ def generate_arrays(out, layouts): item.text = s elem.append(item) return elem - none_item = [ ("none", "None") ] + none_item = [ ("system", "@string/pref_layout_e_system") ] custom_item = [ ("custom", "@string/pref_layout_e_custom") ] values_items, entries_items = zip(*(none_item + layouts + custom_item)) # unzip - ids_items = map(lambda s: "@xml/%s" % s if s not in ["none", "custom"] else "-1", values_items) + ids_items = map(lambda s: "@xml/%s" % s if s not in ["system", "custom"] else "-1", values_items) root = XML.Element("resources") root.append(XML.Comment(text="DO NOT EDIT. This file is generated, see gen_layouts.py.")) root.append(mk_array("string-array", "pref_layout_values", values_items)) diff --git a/res/layout/pref_layouts_add_btn.xml b/res/layout/pref_layouts_add_btn.xml new file mode 100644 index 0000000..ab1b271 --- /dev/null +++ b/res/layout/pref_layouts_add_btn.xml @@ -0,0 +1,4 @@ + + + + diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 45f74d2..3288b73 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -10,9 +10,10 @@ Upravit průhlednost pozadí klávesnice Upravit průhlednost kláves Upravit průhlednost stisknutých kláves - Změnit rozvržení klávesnice Dle nastavení systému Vlastní rozvržení + + (Univerzální) Diakritická znaménka Zobrazovat znaménka pro všechny instalované systémové jazyky Zobrazovat znaménka pouze pro současně zvolený jazyk diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index f6ee617..b7adf18 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -10,9 +10,10 @@ Deckkraft des Tastaturhintergrunds anpassen Deckkraft der Tasten anpassen Deckkraft gedrückter Tasten anpassen - Tastaturlayout ändern Systemeinstellung Eigenes Layout + + Akzente Akzente für alle installierten Sprachen anzeigen Akzente nur für die gewählte Sprache anzeigen diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index c54106b..76ea16a 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -10,9 +10,10 @@ Ajustar opacidad del fondo del teclado Ajustar opacidad de teclas Ajustar opacidad de teclas apretadas - Cambiar formato de teclado Ajustes del sistema Formato personalizado + + Acentos Mostrar acentos para todos los lenguajes instalados Solo mostrar acentos para el lenguaje seleccionado diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 0104a3c..b8203e7 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -10,9 +10,10 @@ تنظیم کدر بودن پس‌زمینه صفحه کلید تنظیم کدر بودن کلید تنظیم کدر بودن کلید فشرده شده - تغییر طرح صفحه کلید تنظیمات سامانه طرح صفارشی + + لهجه‌ها نمایش لهجه‌ها برای تمام زبان‌هی نصب شده فقط نمایش لهجه‌ها برای زبان‌های انتخاب شده diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 4619ca4..0245dce 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -10,9 +10,10 @@ Transparence du clavier Transparence des touches Transparence des touches pressées - Disposition des touches Paramètre système Disposition personnalisée + + Accents Afficher les accents pour les langues installées Afficher les accents pour la langue sélectionnée diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 51643df..8d3f23a 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -10,9 +10,10 @@ - Cambia layout tastiera Impostazioni di sistema + + Accenti Mostra accenti per tutte le lingue installate Mostra accenti solo per le lingue selezionate diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 686532b..9e95e5d 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -10,9 +10,10 @@ - 키보드 레이아웃 변경 시스템 세팅 + + 악센트 설치된 모든 언어의 악센트 표시 선택한 언어의 악센트만 표시 diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 10ec311..31ce651 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -10,9 +10,10 @@ Pielāgot tastatūras fona necaurredzamību Pielāgot taustiņu necaurredzamību Pielāgot piespiesta taustiņa necaurredzamību - Mainīt tastatūras izkārtojumu Ierīces iestatījumi Pielāgots izkārtojums + + Uzsvara zīmes Rādīt uzsvara zīmes visām uzstādītajām valodām Rādīt uzsvara zīmes tikai atlasītajām valodām diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index f5e4e7b..fed2600 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -10,9 +10,10 @@ Nieprzezroczystość tła klawiatury Nieprzezroczystość klawisza Nieprzezroczystość naciśniętego klawisza - Zmień układ klawiatury Systemowy Własny układ + + Znaki diakrytyczne Pokaż znaki diakryt. dla wszystkich zainstalowanych języków Pokaż znaki diakryt. tylko dla wybranego języka diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index cc5a21c..991a58b 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -10,9 +10,10 @@ Ajustar opacidade do fundo do teclado Ajustar opacidade das teclas Ajustar opacidade das teclas pressionadas - Mudar layout do teclado Mesmo do sistema Layout personalizado + + Acentos Mostrar acentos para todos os idiomas instalados Mostrar acentos só para o idioma selecionado diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 3347004..d56bda3 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -10,9 +10,10 @@ Modifică opacitatea fundalului tastaturii Modifică opacitatea tastelor Modifică opacitatea tastei apăsate - Schimbă aranjamentul tastaturii Setări de Sistem Aranjament personalizat + + Accente Arată accentele pentru toate limbile instalate Aratp accentele doar pentru limba selectată diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index ed6caed..a8d38f8 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -10,9 +10,10 @@ Изменить прозрачность фона Изменить прозрачность клавиш Изменить прозрачность нажатой клавиши - Изменить раскладку клавиатуры Системные настройки Пользовательская раскладка + + Акцент Показывать акценты для всех установленных языков Показывать акценты только для выбранного языка diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index b318866..8c729a0 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -10,9 +10,10 @@ - Klavye Düzenini Değiştir Sistem Ayarları + + Aksanlar Yüklü tüm dillerin aksanlarını göster Sadece seçili dilin aksanlarını göster diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 96fadbe..991fa60 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -10,9 +10,10 @@ Tùy chỉnh độ trong suốt của bàn phím Tùy chỉnh độ trong suốt của phím Tùy chỉnh độ trong suốt của phím khi nhấn - Thay đổi bố cục bàn phím Hệ thống Tùy chỉnh bố cục + + Dấu phụ Hiển thị cho các ngôn ngữ đã cài đặt Chỉ hiển thị cho các ngôn ngữ đã chọn diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 01bc65d..6140208 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -10,9 +10,10 @@ 调整键盘背景透明度 调整按键透明度 调整按下的按键的透明度 - 改变键盘布局 系统设置 自定义布局 + + 声调 显示所有安装的语言的声调符号 只显示选择的语言的声调符号 diff --git a/res/values/layouts.xml b/res/values/layouts.xml index 3a972be..4c9779f 100644 --- a/res/values/layouts.xml +++ b/res/values/layouts.xml @@ -2,7 +2,7 @@ - none + system latn_qwerty_us latn_colemak latn_dvorak @@ -43,7 +43,7 @@ custom - None + @string/pref_layout_e_system QWERTY (US) Colemak Dvorak diff --git a/res/values/strings.xml b/res/values/strings.xml index 6a280f5..a3e50d3 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10,9 +10,10 @@ Adjust keyboard background opacity Adjust key opacity Adjust pressed key opacity - Change keyboard layout System settings Custom layout + Add an alternate layout + Layout %1$d: %2$s Accents Show accents for all installed languages Only show accents for the selected language diff --git a/res/xml/bottom_row.xml b/res/xml/bottom_row.xml index 56493dc..24705e1 100644 --- a/res/xml/bottom_row.xml +++ b/res/xml/bottom_row.xml @@ -2,7 +2,7 @@ - + diff --git a/res/xml/latn_bone.xml b/res/xml/latn_bone.xml index ea31131..9078f79 100644 --- a/res/xml/latn_bone.xml +++ b/res/xml/latn_bone.xml @@ -39,7 +39,7 @@ - + diff --git a/res/xml/latn_neo2.xml b/res/xml/latn_neo2.xml index 939e131..f8904f1 100644 --- a/res/xml/latn_neo2.xml +++ b/res/xml/latn_neo2.xml @@ -42,7 +42,7 @@ - + diff --git a/res/xml/settings.xml b/res/xml/settings.xml index e21e6a7..b735e5a 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -1,8 +1,7 @@ - - + diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java index 09db10d..b38604b 100644 --- a/srcs/juloo.keyboard2/Config.java +++ b/srcs/juloo.keyboard2/Config.java @@ -8,6 +8,7 @@ import android.os.Build; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.KeyEvent; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -25,8 +26,8 @@ final class Config public final float sublabelTextSize; // From preferences - public KeyboardData layout; // Or 'null' for the system defaults - public KeyboardData second_layout; // Or 'null' for none + /** [null] represent the [system] layout. */ + public List layouts; public KeyboardData custom_layout; // Might be 'null' public boolean show_numpad = false; // From the 'numpad_layout' option, also apply to the numeric pane. @@ -56,7 +57,6 @@ final class Config // Dynamically set public boolean shouldOfferSwitchingToNextInputMethod; - public boolean shouldOfferSwitchingToSecond; public boolean shouldOfferVoiceTyping; public String actionLabel; // Might be 'null' public int actionId; // Meaningful only when 'actionLabel' isn't 'null' @@ -80,7 +80,6 @@ final class Config refresh(res); // initialized later shouldOfferSwitchingToNextInputMethod = false; - shouldOfferSwitchingToSecond = false; shouldOfferVoiceTyping = false; actionLabel = null; actionId = 0; @@ -116,8 +115,10 @@ final class Config { keyboardHeightPercent = _prefs.getInt("keyboard_height", 35); } - layout = layout_of_string(res, _prefs.getString("layout", "none")); - second_layout = tweak_secondary_layout(layout_of_string(res, _prefs.getString("second_layout", "none"))); + List layout_names = LayoutsPreference.load_from_preferences(_prefs); + layouts = new ArrayList(); + for (String l : layout_names) + layouts.add(layout_of_string(res, l)); custom_layout = KeyboardData.load_string(_prefs.getString("custom_layout", "")); inverse_numpad = _prefs.getString("numpad_layout", "default").equals("low_first"); number_row = _prefs.getBoolean("number_row", false); @@ -214,8 +215,10 @@ final class Config case ACTION: return (swapEnterActionKey && action_key != null) ? KeyValue.getKeyByName("enter") : action_key; - case SWITCH_SECOND: - return shouldOfferSwitchingToSecond ? key : null; + case SWITCH_FORWARD: + return (layouts.size() > 1) ? key : null; + case SWITCH_BACKWARD: + return (layouts.size() > 2) ? key : null; case SWITCH_VOICE_TYPING: return shouldOfferVoiceTyping ? key : null; } @@ -287,23 +290,6 @@ final class Config }); } - /** Modify a layout to turn it into a secondary layout by changing the - "switch_second" key. */ - KeyboardData tweak_secondary_layout(KeyboardData layout) - { - if (layout == null) - return null; - return layout.mapKeys(new KeyboardData.MapKeyValues() { - public KeyValue apply(KeyValue key, boolean localized) - { - if (key.getKind() == KeyValue.Kind.Event - && key.getEvent() == KeyValue.Event.SWITCH_SECOND) - return KeyValue.getKeyByName("switch_second_back"); - return key; - } - }); - } - private float get_dip_pref(DisplayMetrics dm, String pref_name, float def) { float value; diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index b3008ca..84a214b 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -15,8 +15,8 @@ final class KeyValue CHANGE_METHOD, CHANGE_METHOD_PREV, ACTION, - SWITCH_SECOND, - SWITCH_SECOND_BACK, + SWITCH_FORWARD, + SWITCH_BACKWARD, SWITCH_GREEKMATH, CAPS_LOCK, SWITCH_VOICE_TYPING, @@ -346,8 +346,8 @@ final class KeyValue case "switch_numeric": return eventKey("123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT); case "switch_emoji": return eventKey(0x01, Event.SWITCH_EMOJI, FLAG_SMALLER_FONT); case "switch_back_emoji": return eventKey("ABC", Event.SWITCH_BACK_EMOJI, 0); - case "switch_second": return eventKey(0x13, Event.SWITCH_SECOND, FLAG_SMALLER_FONT); - case "switch_second_back": return eventKey(0x14, Event.SWITCH_SECOND_BACK, FLAG_SMALLER_FONT); + case "switch_forward": return eventKey(0x13, Event.SWITCH_FORWARD, FLAG_SMALLER_FONT); + case "switch_backward": return eventKey(0x14, Event.SWITCH_BACKWARD, FLAG_SMALLER_FONT); case "switch_greekmath": return eventKey("πλ∇¬", Event.SWITCH_GREEKMATH, FLAG_SMALLER_FONT); case "change_method": return eventKey(0x09, Event.CHANGE_METHOD, FLAG_SMALLER_FONT); case "change_method_prev": return eventKey(0x09, Event.CHANGE_METHOD_PREV, FLAG_SMALLER_FONT); diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java index 3606213..1b59e5e 100644 --- a/srcs/juloo.keyboard2/Keyboard2.java +++ b/srcs/juloo.keyboard2/Keyboard2.java @@ -30,7 +30,8 @@ public class Keyboard2 extends InputMethodService private KeyEventHandler _keyeventhandler; // If not 'null', the layout to use instead of [_currentTextLayout]. private KeyboardData _currentSpecialLayout; - private Current_text_layout _currentTextLayout; + /** Current layout index in [Config.layouts]. */ + private int _currentTextLayout; // Layout associated with the currently selected locale. Not 'null'. private KeyboardData _localeTextLayout; private ViewGroup _emojiPane = null; @@ -43,23 +44,31 @@ public class Keyboard2 extends InputMethodService { if (_currentSpecialLayout != null) return _currentSpecialLayout; - KeyboardData layout; - if (_currentTextLayout == Current_text_layout.SECONDARY) - layout = _config.second_layout; - else if (_config.layout == null) + KeyboardData layout = null; + if (_currentTextLayout >= _config.layouts.size()) + _currentTextLayout = 0; + if (_currentTextLayout < _config.layouts.size()) + layout = _config.layouts.get(_currentTextLayout); + if (layout == null) layout = _localeTextLayout; - else - layout = _config.layout; return _config.modify_layout(layout); } - void setTextLayout(Current_text_layout layout) + void setTextLayout(int l) { - _currentTextLayout = layout; + if (l == _currentTextLayout) + return; + _currentTextLayout = l; _currentSpecialLayout = null; _keyboardView.setKeyboard(current_layout()); } + void incrTextLayout(int delta) + { + int s = _config.layouts.size(); + setTextLayout((_currentTextLayout + delta + s) % s); + } + void setSpecialLayout(KeyboardData l) { _currentSpecialLayout = l; @@ -162,15 +171,6 @@ public class Keyboard2 extends InputMethodService if (default_layout == null) default_layout = loadLayout(R.xml.latn_qwerty_us); _localeTextLayout = default_layout; - if (_config.second_layout == null) - { - _config.shouldOfferSwitchingToSecond = false; - _currentTextLayout = Current_text_layout.PRIMARY; - } - else - { - _config.shouldOfferSwitchingToSecond = true; - } } private String actionLabel_of_imeAction(int action) @@ -419,13 +419,12 @@ public class Keyboard2 extends InputMethodService conn.performEditorAction(actionId); break; - case SWITCH_SECOND: - if (_config.second_layout != null) - setTextLayout(Current_text_layout.SECONDARY); + case SWITCH_FORWARD: + incrTextLayout(1); break; - case SWITCH_SECOND_BACK: - setTextLayout(Current_text_layout.PRIMARY); + case SWITCH_BACKWARD: + incrTextLayout(-1); break; case SWITCH_GREEKMATH: @@ -469,10 +468,4 @@ public class Keyboard2 extends InputMethodService { return View.inflate(new ContextThemeWrapper(this, _config.theme), layout, null); } - - private static enum Current_text_layout - { - PRIMARY, - SECONDARY - } } diff --git a/srcs/juloo.keyboard2/LayoutsPreference.java b/srcs/juloo.keyboard2/LayoutsPreference.java new file mode 100644 index 0000000..5d1d566 --- /dev/null +++ b/srcs/juloo.keyboard2/LayoutsPreference.java @@ -0,0 +1,89 @@ +package juloo.keyboard2; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.util.AttributeSet; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class LayoutsPreference extends ListGroupPreference +{ + static final String KEY = "layouts"; + static final List DEFAULT = Collections.singletonList("system"); + + /** Layout names as stored in the preferences. */ + String[] _layout_names; + /** Text displayed for each layout in the dialog list. */ + String[] _layout_display_names; + + public LayoutsPreference(Context ctx, AttributeSet attrs) + { + super(ctx, attrs); + setKey(KEY); + Resources res = ctx.getResources(); + _layout_names = res.getStringArray(R.array.pref_layout_values); + _layout_display_names = res.getStringArray(R.array.pref_layout_entries); + } + + public static List load_from_preferences(SharedPreferences prefs) + { + return load_from_preferences(KEY, prefs, DEFAULT); + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) + { + super.onSetInitialValue(restoreValue, defaultValue); + if (_values.size() == 0) + set_values(new ArrayList(DEFAULT), false); + } + + @Override + String label_of_value(String value, int i) + { + return getContext().getString(R.string.pref_layouts_item, i + 1, value); + } + + @Override + AddButton on_attach_add_button(AddButton prev_btn) + { + if (prev_btn == null) + return new LayoutsAddButton(getContext()); + return prev_btn; + } + + @Override + boolean should_allow_remove_item() + { + return (_values.size() > 1); + } + + void select(final SelectionCallback callback) + { + ArrayAdapter layouts = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, _layout_display_names); + new AlertDialog.Builder(getContext()) + .setView(R.layout.custom_extra_key_add_dialog) + .setAdapter(layouts, new DialogInterface.OnClickListener(){ + public void onClick(DialogInterface dialog, int which) + { + callback.select(_layout_names[which]); + } + }) + .show(); + } + + class LayoutsAddButton extends AddButton + { + public LayoutsAddButton(Context ctx) + { + super(ctx); + setLayoutResource(R.layout.pref_layouts_add_btn); + } + } +}