diff options
author | 2010-11-13 00:16:34 -0800 | |
---|---|---|
committer | 2010-11-16 13:45:49 -0800 | |
commit | 10227a71a047706a2290ff0b57f3437d5add7b35 (patch) | |
tree | 797d975d605282b91447e278f615051d44867cff /java/src | |
parent | c1e2e827b5d1bba59eb99d322dc101657ec28768 (diff) | |
download | latinime-10227a71a047706a2290ff0b57f3437d5add7b35.tar.gz latinime-10227a71a047706a2290ff0b57f3437d5add7b35.tar.xz latinime-10227a71a047706a2290ff0b57f3437d5add7b35.zip |
Implement temporary upper case hint icon
This change partially implements the requested feature. The following
are not supported yet.
- Non-letter key handling on automatic temporary upper case layout.
- Non-letter key handling on shift chording in caps lock layout.
- Hint icons for manual temporary upper case layout are not final ones.
Bug: 3193390
Change-Id: I636da99d1be05b1337935d87c6f4d140661e1cc8
Diffstat (limited to 'java/src')
3 files changed, 23 insertions, 25 deletions
diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboard.java b/java/src/com/android/inputmethod/latin/BaseKeyboard.java index be0a6a28a..0f8b75d45 100644 --- a/java/src/com/android/inputmethod/latin/BaseKeyboard.java +++ b/java/src/com/android/inputmethod/latin/BaseKeyboard.java @@ -178,17 +178,23 @@ public class BaseKeyboard { * being the most important. */ public int[] codes; + /** The unicode that this key generates in manual temporary upper case mode. */ + public int manualTemporaryUpperCaseCode; /** Label to display */ public CharSequence label; - /** Label to display when keyboard is in temporary shift mode */ - public CharSequence temporaryShiftLabel; /** Icon to display instead of a label. Icon takes precedence over a label */ public Drawable icon; /** Hint icon to display on the key in conjunction with the label */ public Drawable hintIcon; /** Preview version of the icon, for the preview popup */ + /** + * The hint icon to display on the key when keyboard is in manual temporary upper case + * mode. + */ + public Drawable manualTemporaryUpperCaseHintIcon; + public Drawable iconPreview; /** Width of the key, not including the gap */ public int width; @@ -320,9 +326,13 @@ public class BaseKeyboard { setDefaultBounds(icon); hintIcon = a.getDrawable(R.styleable.BaseKeyboard_Key_keyHintIcon); setDefaultBounds(hintIcon); + manualTemporaryUpperCaseHintIcon = a.getDrawable( + R.styleable.BaseKeyboard_Key_manualTemporaryUpperCaseHintIcon); + setDefaultBounds(manualTemporaryUpperCaseHintIcon); label = a.getText(R.styleable.BaseKeyboard_Key_keyLabel); - temporaryShiftLabel = a.getText(R.styleable.BaseKeyboard_Key_temporaryShiftKeyLabel); + manualTemporaryUpperCaseCode = a.getInt( + R.styleable.BaseKeyboard_Key_manualTemporaryUpperCaseCode, 0); text = a.getText(R.styleable.BaseKeyboard_Key_keyOutputText); if (codes == null && !TextUtils.isEmpty(label)) { diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboardView.java b/java/src/com/android/inputmethod/latin/BaseKeyboardView.java index a31785f50..f2edd6b04 100644 --- a/java/src/com/android/inputmethod/latin/BaseKeyboardView.java +++ b/java/src/com/android/inputmethod/latin/BaseKeyboardView.java @@ -772,6 +772,8 @@ public class BaseKeyboardView extends View implements PointerTracker.UIProxy { final int kbdPaddingTop = getPaddingTop(); final Key[] keys = mKeys; final Key invalidKey = mInvalidatedKey; + final boolean isTemporaryUpperCase = (mKeyboard instanceof LatinKeyboard + && ((LatinKeyboard)mKeyboard).isTemporaryUpperCase()); paint.setColor(mKeyTextColor); boolean drawSingleKey = false; @@ -807,17 +809,6 @@ public class BaseKeyboardView extends View implements PointerTracker.UIProxy { boolean drawHintIcon = true; if (label != null) { - // If keyboard is multi-touch capable and in temporary upper case state and key has - // tempoarary shift label, label should be hint character and hint icon should not - // be drawn. - if (mHasDistinctMultitouch - && mKeyboard instanceof LatinKeyboard - && ((LatinKeyboard)mKeyboard).isTemporaryUpperCase() - && key.temporaryShiftLabel != null) { - label = key.temporaryShiftLabel.toString(); - drawHintIcon = false; - } - // For characters, use large font. For labels like "Done", use small font. final int labelSize; if (label.length() > 1 && key.codes.length < 2) { @@ -862,7 +853,10 @@ public class BaseKeyboardView extends View implements PointerTracker.UIProxy { int drawableHeight = key.height; int drawableX = 0; int drawableY = HINT_ICON_VERTICAL_ADJUSTMENT_PIXEL; - drawIcon(canvas, key.hintIcon, drawableX, drawableY, drawableWidth, drawableHeight); + Drawable icon = (isTemporaryUpperCase + && key.manualTemporaryUpperCaseHintIcon != null) + ? key.manualTemporaryUpperCaseHintIcon : key.hintIcon; + drawIcon(canvas, icon, drawableX, drawableY, drawableWidth, drawableHeight); } canvas.translate(-key.x - kbdPaddingLeft, -key.y - kbdPaddingTop); } diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java index c88a58d70..e76f8c705 100644 --- a/java/src/com/android/inputmethod/latin/PointerTracker.java +++ b/java/src/com/android/inputmethod/latin/PointerTracker.java @@ -419,12 +419,6 @@ public class PointerTracker { if (key.codes[0] == BaseKeyboard.KEYCODE_SHIFT) { mHandler.startLongPressShiftTimer(mLongPressShiftKeyTimeout, keyIndex, this); } else { - // If keyboard is in temporary upper case state and the key has temporary shift label, - // non-shift long press should not be started. On distinct multi touch device, when - // pressing shift key (in temporary upper case), hint icon should not be drawn on key - // top. So we should disable long press for such key. - if (isTemporaryUpperCase() && key.temporaryShiftLabel != null) - return; mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this); } } @@ -462,10 +456,10 @@ public class PointerTracker { code = key.codes[mTapCount]; } - // If keyboard is in temporary upper case state and key has temporary shift label, - // alternate character code should be sent. - if (isTemporaryUpperCase() && key.temporaryShiftLabel != null) { - code = key.temporaryShiftLabel.charAt(0); + // If keyboard is in manual temporary upper case state and key has manual temporary + // shift code, alternate character code should be sent. + if (isTemporaryUpperCase() && key.manualTemporaryUpperCaseCode != 0) { + code = key.manualTemporaryUpperCaseCode; codes[0] = code; } |