From b3afc8e7f2a8511e464efdbdd63a18a80250fac9 Mon Sep 17 00:00:00 2001 From: Yuriy Liskov Date: Sun, 22 Apr 2018 15:48:25 +0300 Subject: [PATCH] store up to two chars in one key label (Thai fix) --- .../leanback/ime/LeanbackKeyboardView.java | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/leankeykeyboard/src/main/java/com/google/android/leanback/ime/LeanbackKeyboardView.java b/leankeykeyboard/src/main/java/com/google/android/leanback/ime/LeanbackKeyboardView.java index 4d52fa2..021a615 100644 --- a/leankeykeyboard/src/main/java/com/google/android/leanback/ime/LeanbackKeyboardView.java +++ b/leankeykeyboard/src/main/java/com/google/android/leanback/ime/LeanbackKeyboardView.java @@ -94,10 +94,17 @@ public class LeanbackKeyboardView extends FrameLayout { mInactiveMiniKbAlpha = res.getInteger(R.integer.inactive_mini_kb_alpha); } - private CharSequence adjustCase(LeanbackKeyboardView.KeyHolder keyHolder) { - CharSequence label = keyHolder.key.label; - CharSequence result = label; - if (label != null && label.length() < 3) { + private void adjustCase(LeanbackKeyboardView.KeyHolder keyHolder) { + // store original label + // in case when two characters are stored in one label (e.g. "A|B") + if (keyHolder.key.text == null) { + keyHolder.key.text = keyHolder.key.label; + } + + CharSequence label = keyHolder.key.text; // source label (see above) + CharSequence result; + + if (label != null) { boolean flag; if (keyHolder.isInMiniKb && keyHolder.isInvertible) { flag = true; @@ -105,16 +112,35 @@ public class LeanbackKeyboardView extends FrameLayout { flag = false; } - if (this.mKeyboard.isShifted() ^ flag) { - result = label.toString().toUpperCase(); + // ^ equals to != + if (mKeyboard.isShifted() ^ flag) { + result = getSpecialUpperCase(label); } else { - result = label.toString().toLowerCase(); + result = getSpecialLowerCase(label); } keyHolder.key.label = result; } + } - return result; + private CharSequence getSpecialLowerCase(CharSequence label) { + String realLabel = label.toString(); + if (realLabel.contains("|")) { + String[] labels = realLabel.split("\\|"); + return labels[0]; + } + + return label.toString().toLowerCase(); + } + + private CharSequence getSpecialUpperCase(CharSequence label) { + String realLabel = label.toString(); + if (realLabel.contains("|")) { + String[] labels = realLabel.split("\\|"); + return labels[1]; + } + + return label.toString().toUpperCase(); } @SuppressLint("NewApi")