diff options
| author | Jules Aguillon | 2021-04-18 23:58:35 +0200 |
|---|---|---|
| committer | Jules Aguillon | 2021-04-18 23:58:35 +0200 |
| commit | 471375d50c10a9a9bf60c3e9b3ebb509d56b5e2c (patch) | |
| tree | 1bae6496b0096b9e5c92c394bfdf6291cd7fb4e5 /srcs/juloo.keyboard2/KeyModifier.java | |
| parent | 2f8eae628f9ffe90a9e4254a800b6d69398abe6a (diff) | |
| download | unexpected-keyboard-471375d50c10a9a9bf60c3e9b3ebb509d56b5e2c.tar.gz unexpected-keyboard-471375d50c10a9a9bf60c3e9b3ebb509d56b5e2c.zip | |
Add function keys
Add the Fn modifier that change the digits into F1 to F10.
Diffstat (limited to 'srcs/juloo.keyboard2/KeyModifier.java')
| -rw-r--r-- | srcs/juloo.keyboard2/KeyModifier.java | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/srcs/juloo.keyboard2/KeyModifier.java b/srcs/juloo.keyboard2/KeyModifier.java index d14d254..969cc88 100644 --- a/srcs/juloo.keyboard2/KeyModifier.java +++ b/srcs/juloo.keyboard2/KeyModifier.java @@ -2,6 +2,7 @@ package juloo.keyboard2; import android.util.SparseArray; import android.view.KeyCharacterMap; +import android.view.KeyEvent; import java.util.HashMap; class KeyModifier @@ -19,24 +20,26 @@ class KeyModifier KeyValue r = ks.get(flags); if (r != null) // Found in cache return r; - char c = handleChar(k.char_, flags); - if (c == k.char_) // Don't override the symbol if the char didn't change - r = k; - else - r = k.withCharAndSymbol(String.valueOf(c), c); + if ((r = handleChar(k, flags)) != null) ; + else if ((r = handleFn(k, flags)) != null) ; + else r = k; ks.put(flags, r); return r; } - private static char handleChar(char c, int flags) + /* Returns [null] if had no effect. */ + private static KeyValue handleChar(KeyValue k, int flags) { + char c = k.char_; if (c == KeyValue.CHAR_NONE) - return c; + return null; if ((flags & KeyValue.FLAG_SHIFT) != 0) // Shift c = Character.toUpperCase(c); if ((flags & KeyValue.FLAGS_ACCENTS) != 0) // Accents, after shift is applied c = handleAccentChar(c, flags); - return c; + if (c == k.char_) + return null; + return k.withCharAndSymbol(String.valueOf(c), c); } private static char handleAccentChar(char c, int flags) @@ -56,6 +59,31 @@ class KeyModifier return (r == 0) ? c : r; } + private static KeyValue handleFn(KeyValue k, int flags) + { + if ((flags & KeyValue.FLAG_FN) == 0) + return null; + switch (k.char_) + { + case '1': return makeFnKey("F1", KeyEvent.KEYCODE_F1); + case '2': return makeFnKey("F2", KeyEvent.KEYCODE_F2); + case '3': return makeFnKey("F3", KeyEvent.KEYCODE_F3); + case '4': return makeFnKey("F4", KeyEvent.KEYCODE_F4); + case '5': return makeFnKey("F5", KeyEvent.KEYCODE_F5); + case '6': return makeFnKey("F6", KeyEvent.KEYCODE_F6); + case '7': return makeFnKey("F7", KeyEvent.KEYCODE_F7); + case '8': return makeFnKey("F8", KeyEvent.KEYCODE_F8); + case '9': return makeFnKey("F9", KeyEvent.KEYCODE_F9); + case '0': return makeFnKey("F10", KeyEvent.KEYCODE_F10); + default: return null; + } + } + + private static KeyValue makeFnKey(String symbol, int eventCode) + { + return new KeyValue(symbol, symbol, KeyValue.CHAR_NONE, eventCode, 0); + } + /* Lookup the cache entry for a key. Create it needed. */ private static SparseArray<KeyValue> cacheEntry(KeyValue k) { |
