abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2
diff options
context:
space:
mode:
authorJules Aguillon2023-01-30 23:46:02 +0100
committerJules Aguillon2023-01-30 23:46:02 +0100
commit78a461f7406a5ac76b686c646e8229fc8bb2a0d0 (patch)
treed39a0aa97789bafee10ee61fd4bf7506f3432702 /srcs/juloo.keyboard2
parent90b7944129ae0facc5c789f0a416f7ff36925a90 (diff)
downloadunexpected-keyboard-78a461f7406a5ac76b686c646e8229fc8bb2a0d0.tar.gz
unexpected-keyboard-78a461f7406a5ac76b686c646e8229fc8bb2a0d0.zip
Modification step for the special layout
Refactor, follow up of 90b7944. Add a modification step to the "special" layouts: numpad, greekmath, pin entry. Remove the apply_key0 function, which is not expressive enough. Add an enum instead of yet an other "switch_" function.
Diffstat (limited to 'srcs/juloo.keyboard2')
-rw-r--r--srcs/juloo.keyboard2/Config.java69
-rw-r--r--srcs/juloo.keyboard2/KeyEventHandler.java27
-rw-r--r--srcs/juloo.keyboard2/Keyboard2.java57
-rw-r--r--srcs/juloo.keyboard2/KeyboardData.java7
4 files changed, 98 insertions, 62 deletions
diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java
index 691a424..db570e1 100644
--- a/srcs/juloo.keyboard2/Config.java
+++ b/srcs/juloo.keyboard2/Config.java
@@ -153,6 +153,13 @@ final class Config
extra_keys_param = ExtraKeyCheckBoxPreference.get_extra_keys(_prefs);
}
+ KeyValue action_key()
+ {
+ // Update the name to avoid caching in KeyModifier
+ return (actionLabel == null) ? null :
+ KeyValue.getKeyByName("action").withSymbol(actionLabel);
+ }
+
/** Update the layout according to the configuration.
* - Remove the switching key if it isn't needed
* - Remove "localized" keys from other locales (not in 'extra_keys')
@@ -161,9 +168,7 @@ final class Config
*/
public KeyboardData modify_layout(KeyboardData kw)
{
- // Update the name to avoid caching in KeyModifier
- final KeyValue action_key = (actionLabel == null) ? null :
- KeyValue.getKeyByName("action").withSymbol(actionLabel);
+ final KeyValue action_key = action_key();
// Extra keys are removed from the set as they are encountered during the
// first iteration then automatically added.
final Set<KeyValue> extra_keys = new HashSet<KeyValue>();
@@ -173,25 +178,6 @@ final class Config
if (show_numpad)
kw = kw.addNumPad();
kw = kw.mapKeys(new KeyboardData.MapKeyValues() {
- /** Apply to the center value only. Partial match, fallback to [apply]. */
- public KeyboardData.Corner apply_key0(KeyboardData.Corner corner)
- {
- if (corner == null)
- return null;
- KeyValue kv = corner.kv;
- switch (kv.getKind())
- {
- case Char:
- char c = kv.getChar();
- if (inverse_numpad)
- c = inverse_numpad_char(c);
- if (c != kv.getChar())
- return KeyboardData.Corner.of_kv(kv.withChar(c));
- break;
- }
- return super.apply(corner);
- }
-
public KeyValue apply(KeyValue key, boolean localized)
{
boolean is_extra_key = extra_keys.contains(key);
@@ -237,6 +223,45 @@ final class Config
return kw;
}
+ /**
+ * Handle the numpad layout.
+ */
+ public KeyboardData modify_numpad(KeyboardData kw)
+ {
+ final KeyValue action_key = action_key();
+ return kw.mapKeys(new KeyboardData.MapKeyValues() {
+ public KeyValue apply(KeyValue key, boolean localized)
+ {
+ switch (key.getKind())
+ {
+ case Event:
+ switch (key.getEvent())
+ {
+ case ACTION:
+ return (swapEnterActionKey && action_key != null) ?
+ KeyValue.getKeyByName("enter") : action_key;
+ }
+ break;
+ case Keyevent:
+ switch (key.getKeyevent())
+ {
+ case KeyEvent.KEYCODE_ENTER:
+ return (swapEnterActionKey && action_key != null) ? action_key : key;
+ }
+ break;
+ case Char:
+ char a = key.getChar(), b = a;
+ if (inverse_numpad)
+ b = inverse_numpad_char(a);
+ if (a != b)
+ return key.withChar(b);
+ break;
+ }
+ return key;
+ }
+ });
+ }
+
/** Modify a layout to turn it into a secondary layout by changing the
"switch_second" key. */
KeyboardData tweak_secondary_layout(KeyboardData layout)
diff --git a/srcs/juloo.keyboard2/KeyEventHandler.java b/srcs/juloo.keyboard2/KeyEventHandler.java
index 3031972..5b0762e 100644
--- a/srcs/juloo.keyboard2/KeyEventHandler.java
+++ b/srcs/juloo.keyboard2/KeyEventHandler.java
@@ -44,8 +44,8 @@ class KeyEventHandler implements Config.IKeyEventHandler
switch (key.getEvent())
{
case CONFIG: _recv.showKeyboardConfig(); break;
- case SWITCH_TEXT: _recv.switch_text(); break;
- case SWITCH_NUMERIC: _recv.switch_layout(R.xml.numeric); break;
+ case SWITCH_TEXT: _recv.set_layout(Layout.Current); break;
+ case SWITCH_NUMERIC: _recv.set_layout(Layout.Numeric); break;
case SWITCH_EMOJI: _recv.setPane_emoji(); break;
case SWITCH_BACK_EMOJI: _recv.setPane_normal(); break;
case CHANGE_METHOD: _recv.switchToNextInputMethod(); break;
@@ -54,9 +54,9 @@ class KeyEventHandler implements Config.IKeyEventHandler
if (conn != null)
conn.performEditorAction(actionId);
break;
- case SWITCH_SECOND: _recv.switch_second(); break;
- case SWITCH_SECOND_BACK: _recv.switch_primary(); break;
- case SWITCH_GREEKMATH: _recv.switch_layout(R.xml.greekmath); break;
+ case SWITCH_SECOND: _recv.set_layout(Layout.Secondary); break;
+ case SWITCH_SECOND_BACK: _recv.set_layout(Layout.Primary); break;
+ case SWITCH_GREEKMATH: _recv.set_layout(Layout.Greekmath); break;
case CAPS_LOCK: _recv.set_shift_state(true, true); break;
}
break;
@@ -168,20 +168,23 @@ class KeyEventHandler implements Config.IKeyEventHandler
conn.performContextMenuAction(id);
}
+ public enum Layout
+ {
+ Current, // The primary or secondary layout
+ Primary,
+ Secondary,
+ Numeric,
+ Greekmath
+ }
+
public static interface IReceiver
{
public void switchToNextInputMethod();
public void setPane_emoji();
public void setPane_normal();
public void showKeyboardConfig();
-
- public void switch_text();
- public void switch_primary();
- public void switch_second();
- public void switch_layout(int layout_id);
-
+ public void set_layout(Layout l);
public void set_shift_state(boolean state, boolean lock);
-
public InputConnection getCurrentInputConnection();
}
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java
index 5070439..0065e0d 100644
--- a/srcs/juloo.keyboard2/Keyboard2.java
+++ b/srcs/juloo.keyboard2/Keyboard2.java
@@ -64,6 +64,17 @@ public class Keyboard2 extends InputMethodService
_keyboardView.setKeyboard(current_layout());
}
+ void setSpecialLayout(KeyboardData l)
+ {
+ _currentSpecialLayout = l;
+ _keyboardView.setKeyboard(l);
+ }
+
+ KeyboardData loadLayout(int layout_id)
+ {
+ return KeyboardData.load(getResources(), layout_id);
+ }
+
@Override
public void onCreate()
{
@@ -248,7 +259,8 @@ public class Keyboard2 extends InputMethodService
case InputType.TYPE_CLASS_NUMBER:
case InputType.TYPE_CLASS_PHONE:
case InputType.TYPE_CLASS_DATETIME:
- _currentSpecialLayout = KeyboardData.load_pin_entry(getResources());
+ _currentSpecialLayout =
+ _config.modify_numpad(KeyboardData.load_pin_entry(getResources()));
break;
default:
_currentSpecialLayout = null;
@@ -317,8 +329,7 @@ public class Keyboard2 extends InputMethodService
/** Not static */
public class Receiver implements KeyEventHandler.IReceiver
{
- public void switchToNextInputMethod()
- {
+ public void switchToNextInputMethod() {
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.showInputMethodPicker();
// deprecated in version 28: imm.switchToNextInputMethod(getConnectionToken(), false);
@@ -342,26 +353,28 @@ public class Keyboard2 extends InputMethodService
_keyboardView.set_shift_state(state, lock);
}
- public void switch_text()
- {
- _currentSpecialLayout = null;
- _keyboardView.setKeyboard(current_layout());
- }
-
- public void switch_layout(int layout_id)
+ public void set_layout(KeyEventHandler.Layout l)
{
- _keyboardView.setKeyboard(KeyboardData.load(getResources(), layout_id));
- }
-
- public void switch_second()
- {
- if (_config.second_layout != null)
- setTextLayout(Current_text_layout.SECONDARY);
- }
-
- public void switch_primary()
- {
- setTextLayout(Current_text_layout.PRIMARY);
+ switch (l)
+ {
+ case Current:
+ _currentSpecialLayout = null;
+ _keyboardView.setKeyboard(current_layout());
+ break;
+ case Primary:
+ setTextLayout(Current_text_layout.PRIMARY);
+ break;
+ case Secondary:
+ if (_config.second_layout != null)
+ setTextLayout(Current_text_layout.SECONDARY);
+ break;
+ case Numeric:
+ setSpecialLayout(_config.modify_numpad(loadLayout(R.xml.numeric)));
+ break;
+ case Greekmath:
+ setSpecialLayout(_config.modify_numpad(loadLayout(R.xml.greekmath)));
+ break;
+ }
}
public void showKeyboardConfig()
diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java
index e3262bf..31112b5 100644
--- a/srcs/juloo.keyboard2/KeyboardData.java
+++ b/srcs/juloo.keyboard2/KeyboardData.java
@@ -458,16 +458,11 @@ class KeyboardData
public Key apply(Key k)
{
- return new Key(apply_key0(k.key0), apply(k.key1), apply(k.key2),
+ return new Key(apply(k.key0), apply(k.key1), apply(k.key2),
apply(k.key3), apply(k.key4), k.width, k.shift, k.edgekeys,
k.slider, k.indication);
}
- protected Corner apply_key0(Corner c)
- {
- return apply(c);
- }
-
protected Corner apply(Corner c)
{
if (c == null)