diff options
| -rw-r--r-- | res/values/arrays.xml | 10 | ||||
| -rw-r--r-- | res/values/strings.xml | 2 | ||||
| -rw-r--r-- | res/xml/bottom_row.xml | 2 | ||||
| -rw-r--r-- | res/xml/settings.xml | 1 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/Config.java | 13 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/KeyEventHandler.java | 10 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/KeyValue.java | 6 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/Keyboard2.java | 27 |
8 files changed, 58 insertions, 13 deletions
diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 0c968e4..7412d55 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -28,6 +28,16 @@ <item>Bulgarian (Phonetic Traditional)</item> <item>Dvorak</item> </string-array> + <string-array name="pref_programming_layout_values"> + <item>none</item> + <item>qwerty</item> + <item>dvorak</item> + </string-array> + <string-array name="pref_programming_layout_entries"> + <item>@string/pref_programming_layout_none</item> + <item>QWERTY</item> + <item>Dvorak</item> + </string-array> <string-array name="pref_accents_entries"> <item>@string/pref_accents_e_all_installed</item> <item>@string/pref_accents_e_selected</item> diff --git a/res/values/strings.xml b/res/values/strings.xml index 906803f..250c2ac 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11,6 +11,8 @@ <string name="pref_accents_e_selected">Only show accents for the selected language</string> <string name="pref_accents_e_all">Show all accents</string> <string name="pref_accents_e_none">Hide accents</string> + <string name="pref_programming_layout_title">Keyboard layout for programming</string> + <string name="pref_programming_layout_none">None</string> <string name="pref_category_typing">Typing</string> <string name="pref_swipe_dist_title">Swiping distance</string> <string name="pref_swipe_dist_summary">Distance of characters in the corners of the keys (%s)</string> diff --git a/res/xml/bottom_row.xml b/res/xml/bottom_row.xml index 3602605..1121aed 100644 --- a/res/xml/bottom_row.xml +++ b/res/xml/bottom_row.xml @@ -2,7 +2,7 @@ <row height="0.95"> <key width="1.8" key0="switch_numeric" key2="meta" key4="ctrl"/> <key width="1.2" key0="fn" key1="alt" key2="change_method" key3="switch_emoji" key4="config"/> - <key width="4.0" key0="space"/> + <key width="4.0" key0="space" key1="switch_programming" edgekeys="true"/> <key width="1.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/> <key width="1.8" key0="enter" key2="action"/> </row> diff --git a/res/xml/settings.xml b/res/xml/settings.xml index a3d4957..c6900cd 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -3,6 +3,7 @@ <PreferenceCategory android:title="@string/pref_category_layout"> <ListPreference android:key="layout" android:title="@string/pref_layout_title" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_layout_entries" android:entryValues="@array/pref_layout_values"/> <ListPreference android:key="accents" android:title="@string/pref_accents_title" android:summary="%s" android:defaultValue="1" android:entries="@array/pref_accents_entries" android:entryValues="@array/pref_accents_values"/> + <ListPreference android:key="programming_layout" android:title="@string/pref_programming_layout_title" android:summary="%s" android:defaultValue="none" android:entries="@array/pref_programming_layout_entries" android:entryValues="@array/pref_programming_layout_values"/> </PreferenceCategory> <PreferenceCategory android:title="@string/pref_category_typing"> <ListPreference android:key="swipe_dist" android:title="@string/pref_swipe_dist_title" android:summary="@string/pref_swipe_dist_summary" android:defaultValue="15" android:entries="@array/pref_swipe_dist_entries" android:entryValues="@array/pref_swipe_dist_values"/> diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java index 3c436c3..427b0f2 100644 --- a/srcs/juloo.keyboard2/Config.java +++ b/srcs/juloo.keyboard2/Config.java @@ -23,6 +23,7 @@ final class Config // From preferences public int layout; // Or '-1' for the system defaults + public int programming_layout; // Or '-1' for none public float swipe_dist_px; public boolean vibrateEnabled; public long vibrateDuration; @@ -41,6 +42,7 @@ final class Config // Dynamically set public boolean shouldOfferSwitchingToNextInputMethod; + public boolean shouldOfferSwitchingToProgramming; public String actionLabel; // Might be 'null' public int actionId; // Meaningful only when 'actionLabel' isn't 'null' public boolean swapEnterActionKey; // Swap the "enter" and "action" keys @@ -58,6 +60,7 @@ final class Config sublabelTextSize = res.getFloat(R.integer.sublabel_text_size); // default values layout = -1; + programming_layout = -1; vibrateEnabled = true; vibrateDuration = 20; longPressTimeout = 600; @@ -74,6 +77,7 @@ final class Config refresh(context); // initialized later shouldOfferSwitchingToNextInputMethod = false; + shouldOfferSwitchingToProgramming = false; actionLabel = null; actionId = 0; swapEnterActionKey = false; @@ -101,7 +105,10 @@ final class Config { keyboardHeightPercent = prefs.getInt("keyboard_height", 35); } - layout = layoutId_of_string(prefs.getString("layout", "system")); + String layout_s = prefs.getString("layout", "system"); + layout = layout_s.equals("system") ? -1 : layoutId_of_string(layout_s); + String prog_layout_s = prefs.getString("programming_layout", "none"); + programming_layout = prog_layout_s.equals("none") ? -1 : layoutId_of_string(prog_layout_s); // The swipe distance is defined relatively to the "exact physical pixels // per inch of the screen", which isn't affected by the scaling settings. // Take the mean of both dimensions as an approximation of the diagonal. @@ -156,6 +163,8 @@ final class Config case KeyValue.EVENT_ACTION: return (swapEnterActionKey && action_key != null) ? KeyValue.getKeyByName("enter") : action_key; + case KeyValue.EVENT_SWITCH_PROGRAMMING: + return shouldOfferSwitchingToProgramming ? key : null; default: if (key.flags != 0) { @@ -214,7 +223,7 @@ final class Config case "qwerty_sv_se": return R.xml.qwerty_sv_se; case "qwertz": return R.xml.qwertz; case "ru_jcuken": return R.xml.local_ru_jcuken; - case "system": default: return -1; + default: throw new IllegalArgumentException("layoutId_of_string: Unknown layout: " + name); } } diff --git a/srcs/juloo.keyboard2/KeyEventHandler.java b/srcs/juloo.keyboard2/KeyEventHandler.java index 217a2cd..8382737 100644 --- a/srcs/juloo.keyboard2/KeyEventHandler.java +++ b/srcs/juloo.keyboard2/KeyEventHandler.java @@ -18,12 +18,13 @@ class KeyEventHandler implements Config.IKeyEventHandler switch (key.eventCode) { case KeyValue.EVENT_CONFIG: _recv.showKeyboardConfig(); return; - case KeyValue.EVENT_SWITCH_TEXT: _recv.setLayout(-1); return; - case KeyValue.EVENT_SWITCH_NUMERIC: _recv.setLayout(R.xml.numeric); return; + case KeyValue.EVENT_SWITCH_TEXT: _recv.switchMain(); return; + case KeyValue.EVENT_SWITCH_NUMERIC: _recv.switchNumeric(); return; case KeyValue.EVENT_SWITCH_EMOJI: _recv.setPane_emoji(); return; case KeyValue.EVENT_SWITCH_BACK_EMOJI: _recv.setPane_normal(); return; case KeyValue.EVENT_CHANGE_METHOD: _recv.switchToNextInputMethod(); return; case KeyValue.EVENT_ACTION: _recv.performAction(); return; + case KeyValue.EVENT_SWITCH_PROGRAMMING: _recv.switchProgramming(); return; default: if ((flags & (KeyValue.FLAG_CTRL | KeyValue.FLAG_ALT | KeyValue.FLAG_META)) != 0) handleKeyUpWithModifier(key, flags); @@ -91,8 +92,9 @@ class KeyEventHandler implements Config.IKeyEventHandler public void showKeyboardConfig(); public void performAction(); - /** 'res_id' is '-1' for the currently selected layout. */ - public void setLayout(int res_id); + public void switchMain(); + public void switchNumeric(); + public void switchProgramming(); public void sendKeyEvent(int eventAction, int eventCode, int meta); diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index 9d747cb..3c7c305 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -14,6 +14,7 @@ class KeyValue public static final int EVENT_SWITCH_BACK_EMOJI = -6; public static final int EVENT_CHANGE_METHOD = -7; public static final int EVENT_ACTION = -8; + public static final int EVENT_SWITCH_PROGRAMMING = -9; public static final char CHAR_NONE = '\0'; // Behavior flags @@ -234,10 +235,11 @@ class KeyValue addCharKey('£', EVENT_NONE, FLAG_LOCALIZED); addSpecialKey("config", "\u0004", EVENT_CONFIG, FLAG_KEY_FONT | FLAG_SMALLER_FONT); - addSpecialKey("switch_text", "ABC", EVENT_SWITCH_TEXT | FLAG_SMALLER_FONT); - addSpecialKey("switch_numeric", "123+", EVENT_SWITCH_NUMERIC | FLAG_SMALLER_FONT); + addSpecialKey("switch_text", "ABC", EVENT_SWITCH_TEXT, FLAG_SMALLER_FONT); + addSpecialKey("switch_numeric", "123+", EVENT_SWITCH_NUMERIC, FLAG_SMALLER_FONT); addSpecialKey("switch_emoji", "\u0001" , EVENT_SWITCH_EMOJI, FLAG_KEY_FONT | FLAG_SMALLER_FONT); addSpecialKey("switch_back_emoji", "ABC", EVENT_SWITCH_BACK_EMOJI); + addSpecialKey("switch_programming", "Prog", EVENT_SWITCH_PROGRAMMING, FLAG_SMALLER_FONT); addSpecialKey("change_method", "\u0009", EVENT_CHANGE_METHOD, FLAG_KEY_FONT | FLAG_SMALLER_FONT); addSpecialKey("action", "Action", EVENT_ACTION, FLAG_SMALLER_FONT); // Will always be replaced diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java index 70c0892..abea412 100644 --- a/srcs/juloo.keyboard2/Keyboard2.java +++ b/srcs/juloo.keyboard2/Keyboard2.java @@ -139,6 +139,9 @@ public class Keyboard2 extends InputMethodService refreshSubtypeLayout(subtype); refreshAccentsOption(imm, subtype); } + _config.shouldOfferSwitchingToProgramming = + _config.programming_layout != -1 && + _currentTextLayout != _config.programming_layout; } private String actionLabel_of_imeAction(int action) @@ -276,11 +279,27 @@ public class Keyboard2 extends InputMethodService conn.performEditorAction(_config.actionId); } - public void setLayout(int res_id) + public void switchMain() { - if (res_id == -1) - res_id = _currentTextLayout; - _keyboardView.setKeyboard(getLayout(res_id)); + _keyboardView.setKeyboard(getLayout(_currentTextLayout)); + } + + public void switchNumeric() + { + _keyboardView.setKeyboard(getLayout(R.xml.numeric)); + } + + public void switchProgramming() + { + if (_config.programming_layout == -1) + return; + KeyboardData layout = + getLayout(_config.programming_layout).replaceKeys(key -> { + if (key != null && key.eventCode == KeyValue.EVENT_SWITCH_PROGRAMMING) + return KeyValue.getKeyByName("switch_text"); + return key; + }); + _keyboardView.setKeyboard(layout); } public void sendKeyEvent(int eventAction, int eventCode, int meta) |
