diff --git a/java/res/drawable/btn_keyboard_key_gingerbread.xml b/java/res/drawable/btn_keyboard_key_gingerbread.xml index 24a547974..4a113a8a1 100644 --- a/java/res/drawable/btn_keyboard_key_gingerbread.xml +++ b/java/res/drawable/btn_keyboard_key_gingerbread.xml @@ -16,10 +16,16 @@ <selector xmlns:android="http://schemas.android.com/apk/res/android"> + <!-- Functional keys. --> + + <item android:state_single="true" android:state_pressed="true" + android:drawable="@drawable/btn_keyboard_key_dark_pressed" /> + <item android:state_single="true" + android:drawable="@drawable/btn_keyboard_key_dark_normal" /> + <!-- Toggle keys. Use checkable/checked state. --> - <item android:state_checkable="true" android:state_checked="true" - android:state_pressed="true" + <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/btn_keyboard_key_dark_pressed_on" /> <item android:state_checkable="true" android:state_pressed="true" android:drawable="@drawable/btn_keyboard_key_dark_pressed_off" /> diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml index 59c61e4c8..d7d1ee0d5 100755 --- a/java/res/xml/kbd_qwerty.xml +++ b/java/res/xml/kbd_qwerty.xml @@ -18,6 +18,9 @@ */ --> +<!-- TODO: Add settings key to other languages --> +<!-- TODO: Add modifier attr to functional keys in other languages --> + <Keyboard xmlns:android="http://schemas.android.com/apk/res/android" android:keyWidth="10%p" android:horizontalGap="0px" @@ -106,75 +109,75 @@ <Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete" android:keyWidth="15%p" android:keyEdgeFlags="right" android:iconPreview="@drawable/sym_keyboard_feedback_delete" - android:isRepeatable="true"/> + android:isRepeatable="true" android:isModifier="true"/> </Row> <Row android:keyboardMode="@+id/mode_normal" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" - android:keyWidth="15%p" android:keyEdgeFlags="left"/> + android:keyWidth="15%p" android:keyEdgeFlags="left" android:isModifier="true"/> <Key android:codes="@integer/key_settings" android:keyIcon="@drawable/sym_keyboard_settings" android:iconPreview="@drawable/sym_keyboard_feedback_settings" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic" android:iconPreview="@drawable/sym_keyboard_feedback_mic" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:iconPreview="@drawable/sym_keyboard_feedback_space" - android:keyWidth="30%p" android:isRepeatable="true"/> + android:keyWidth="30%p" android:isRepeatable="true" android:isModifier="true"/> <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" android:iconPreview="@drawable/sym_keyboard_feedback_return" - android:keyWidth="25%p" android:keyEdgeFlags="right"/> + android:keyWidth="25%p" android:keyEdgeFlags="right" android:isModifier="true"/> </Row> <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" - android:keyWidth="15%p" android:keyEdgeFlags="left"/> + android:keyWidth="15%p" android:keyEdgeFlags="left" android:isModifier="true"/> <Key android:codes="@integer/key_settings" android:keyIcon="@drawable/sym_keyboard_settings" android:iconPreview="@drawable/sym_keyboard_feedback_settings" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:keyLabel="/" android:keyWidth="10%p"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:iconPreview="@drawable/sym_keyboard_feedback_space" - android:keyWidth="30%p" android:isRepeatable="true"/> + android:keyWidth="30%p" android:isRepeatable="true" android:isModifier="true"/> <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" android:iconPreview="@drawable/sym_keyboard_feedback_return" - android:keyWidth="25%p" android:keyEdgeFlags="right"/> + android:keyWidth="25%p" android:keyEdgeFlags="right" android:isModifier="true"/> </Row> <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" - android:keyWidth="15%p" android:keyEdgeFlags="left"/> + android:keyWidth="15%p" android:keyEdgeFlags="left" android:isModifier="true"/> <Key android:codes="@integer/key_settings" android:keyIcon="@drawable/sym_keyboard_settings" android:iconPreview="@drawable/sym_keyboard_feedback_settings" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:keyLabel="\@"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:iconPreview="@drawable/sym_keyboard_feedback_space" - android:keyWidth="30%p" android:isRepeatable="true"/> + android:keyWidth="30%p" android:isRepeatable="true" android:isModifier="true"/> <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/> <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" android:iconPreview="@drawable/sym_keyboard_feedback_return" - android:keyWidth="25%p" android:keyEdgeFlags="right"/> + android:keyWidth="25%p" android:keyEdgeFlags="right" android:isModifier="true"/> </Row> <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" - android:keyWidth="15%p" android:keyEdgeFlags="left"/> + android:keyWidth="15%p" android:keyEdgeFlags="left" android:isModifier="true"/> <Key android:codes="@integer/key_settings" android:keyIcon="@drawable/sym_keyboard_settings" android:iconPreview="@drawable/sym_keyboard_feedback_settings" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic" android:iconPreview="@drawable/sym_keyboard_feedback_mic" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:iconPreview="@drawable/sym_keyboard_feedback_space" - android:keyWidth="30%p" android:isRepeatable="true"/> + android:keyWidth="30%p" android:isRepeatable="true" android:isModifier="true"/> <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:keyLabel=":-)" android:keyOutputText=":-) " android:popupKeyboard="@xml/popup_smileys" android:keyWidth="25%p" android:keyEdgeFlags="right"/> @@ -182,23 +185,23 @@ <Row android:keyboardMode="@+id/mode_webentry" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" - android:keyWidth="10%p" android:keyEdgeFlags="left"/> + android:keyWidth="10%p" android:keyEdgeFlags="left" android:isModifier="true"/> <Key android:codes="@integer/key_settings" android:keyIcon="@drawable/sym_keyboard_settings" android:iconPreview="@drawable/sym_keyboard_feedback_settings" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic" android:iconPreview="@drawable/sym_keyboard_feedback_mic" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:iconPreview="@drawable/sym_keyboard_feedback_space" - android:keyWidth="20%p" android:isRepeatable="true"/> + android:keyWidth="20%p" android:isRepeatable="true" android:isModifier="true"/> <Key android:codes="9" android:keyIcon="@drawable/sym_keyboard_tab" android:iconPreview="@drawable/sym_keyboard_feedback_tab" - android:keyWidth="15%p"/> + android:keyWidth="15%p" android:isModifier="true"/> <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" android:iconPreview="@drawable/sym_keyboard_feedback_return" - android:keyWidth="15%p" android:keyEdgeFlags="right"/> + android:keyWidth="15%p" android:keyEdgeFlags="right" android:isModifier="true"/> </Row> </Keyboard> diff --git a/java/res/xml/kbd_qwerty_black.xml b/java/res/xml/kbd_qwerty_black.xml index 076359c95..286547283 100755 --- a/java/res/xml/kbd_qwerty_black.xml +++ b/java/res/xml/kbd_qwerty_black.xml @@ -201,5 +201,4 @@ android:iconPreview="@drawable/sym_keyboard_feedback_return" android:keyWidth="15%p" android:keyEdgeFlags="right"/> </Row> - </Keyboard> diff --git a/java/res/xml/kbd_symbols.xml b/java/res/xml/kbd_symbols.xml index 3f6b8ac85..fad3ebc10 100755 --- a/java/res/xml/kbd_symbols.xml +++ b/java/res/xml/kbd_symbols.xml @@ -118,25 +118,25 @@ /> <Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete" android:keyWidth="15%p" android:keyEdgeFlags="right" android:iconPreview="@drawable/sym_keyboard_feedback_delete" - android:isRepeatable="true"/> + android:isRepeatable="true" android:isModifier="true"/> </Row> <Row android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_alpha_key" - android:keyWidth="15%p" android:keyEdgeFlags="left"/> + android:keyWidth="15%p" android:keyEdgeFlags="left" android:isModifier="true"/> <Key android:codes="@integer/key_settings" android:keyIcon="@drawable/sym_keyboard_settings" android:iconPreview="@drawable/sym_keyboard_feedback_settings" - android:keyWidth="10%p"/> - <Key android:codes="@integer/key_f1" android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> + <Key android:codes="@integer/key_f1" android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:keyWidth="30%p" android:iconPreview="@drawable/sym_keyboard_feedback_space" - android:isRepeatable="true"/> + android:isRepeatable="true" android:isModifier="true"/> <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" - android:keyWidth="10%p"/> + android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" android:keyWidth="25%p" android:keyEdgeFlags="right" android:iconPreview="@drawable/sym_keyboard_feedback_return" - /> + android:isModifier="true"/> </Row> </Keyboard> diff --git a/java/res/xml/kbd_symbols_shift.xml b/java/res/xml/kbd_symbols_shift.xml index 0ec4c713c..b0693917e 100755 --- a/java/res/xml/kbd_symbols_shift.xml +++ b/java/res/xml/kbd_symbols_shift.xml @@ -85,24 +85,24 @@ /> <Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete" android:keyWidth="15%p" android:keyEdgeFlags="right" android:iconPreview="@drawable/sym_keyboard_feedback_delete" - android:isRepeatable="true"/> + android:isRepeatable="true" android:isModifier="true"/> </Row> <Row android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_alpha_key" android:keyWidth="15%p" - android:keyEdgeFlags="left"/> + android:keyEdgeFlags="left" android:isModifier="true"/> <Key android:codes="@integer/key_settings" android:keyIcon="@drawable/sym_keyboard_settings" android:iconPreview="@drawable/sym_keyboard_feedback_settings" - android:keyWidth="10%p"/> - <Key android:keyLabel="„" android:keyWidth="10%p" /> + android:keyWidth="10%p" android:isModifier="true"/> + <Key android:keyLabel="„" android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:keyWidth="30%p" android:iconPreview="@drawable/sym_keyboard_feedback_space" - android:isRepeatable="true"/> - <Key android:keyLabel="…" android:keyWidth="10%p" /> + android:isRepeatable="true" android:isModifier="true"/> + <Key android:keyLabel="…" android:keyWidth="10%p" android:isModifier="true"/> <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" android:keyWidth="25%p" android:keyEdgeFlags="right" android:iconPreview="@drawable/sym_keyboard_feedback_return" - /> + android:isModifier="true"/> </Row> </Keyboard> diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index 15e22f318..33519e4be 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -628,9 +628,20 @@ public class LatinKeyboard extends Keyboard { } class LatinKey extends Keyboard.Key { - + + // functional normal state (with properties) + private final int[] KEY_STATE_FUNCTIONAL_NORMAL = { + android.R.attr.state_single + }; + + // functional pressed state (with properties) + private final int[] KEY_STATE_FUNCTIONAL_PRESSED = { + android.R.attr.state_single, + android.R.attr.state_pressed + }; + private boolean mShiftLockEnabled; - + public LatinKey(Resources res, Keyboard.Row parent, int x, int y, XmlResourceParser parser) { super(res, parent, x, y, parser); @@ -639,11 +650,17 @@ public class LatinKeyboard extends Keyboard { popupResId = 0; } } - - void enableShiftLock() { + + private void enableShiftLock() { mShiftLockEnabled = true; } + // sticky is used for shift key. If a key is not sticky and is modifier, + // the key will be treated as functional. + private boolean isFunctionalKey() { + return !sticky && modifier; + } + @Override public void onReleased(boolean inside) { if (!mShiftLockEnabled) { @@ -665,6 +682,18 @@ public class LatinKeyboard extends Keyboard { boolean isInsideSuper(int x, int y) { return super.isInside(x, y); } + + @Override + public int[] getCurrentDrawableState() { + if (isFunctionalKey()) { + if (pressed) { + return KEY_STATE_FUNCTIONAL_PRESSED; + } else { + return KEY_STATE_FUNCTIONAL_NORMAL; + } + } + return super.getCurrentDrawableState(); + } } /**