From a96d8a11e84ef9219eb40a815e82ad8a3d852ca5 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 23 Sep 2010 13:06:03 +0900 Subject: Use SystemClock.uptimeMillis() for event time Change-Id: If20f289992f829ae3a0a2a1eb60a4fc9b35c308a --- java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index dafbb669e..eeccb965c 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -33,6 +33,7 @@ import android.inputmethodservice.Keyboard; import android.inputmethodservice.Keyboard.Key; import android.os.Handler; import android.os.Message; +import android.os.SystemClock; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; @@ -1157,7 +1158,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mMiniKeyboardPopup.showAtLocation(this, Gravity.NO_GRAVITY, x, y); // Inject down event on the key to mini keyboard. - long eventTime = System.currentTimeMillis(); + long eventTime = SystemClock.uptimeMillis(); mMiniKeyboardPopupTime = eventTime; MotionEvent downEvent = generateMiniKeyboardMotionEvent(MotionEvent.ACTION_DOWN, popupKey.x + popupKey.width / 2, popupKey.y + popupKey.height / 2, eventTime); -- cgit v1.2.3-83-g751a From 77542988b809fba6a59aa86982eb4d9e4269477e Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 23 Sep 2010 15:53:05 +0900 Subject: Tune left and right padding of popup mini keyboard This change also fix popup window display position calculation. Bug: 3029284 Change-Id: I28bf3e4deb46a428dc8422a3a165183e00608604 --- java/res/layout/keyboard_popup.xml | 2 ++ java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/layout/keyboard_popup.xml b/java/res/layout/keyboard_popup.xml index 9a52e2cbd..27388e06b 100644 --- a/java/res/layout/keyboard_popup.xml +++ b/java/res/layout/keyboard_popup.xml @@ -23,6 +23,8 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:background="@drawable/keyboard_popup_panel_background" + android:paddingLeft="16dip" + android:paddingRight="16dip" > Date: Thu, 23 Sep 2010 20:04:13 +0900 Subject: Fixed popup mini-keyboard position This change reverts I28bf3e4deb46a428dc8422a3a165183e00608604 partly Bug: 3029284 Change-Id: I0701ab9dfa1cfddbecbef3d32e525c0a143fc297 --- java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 92266c5f1..eeccb965c 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -1129,7 +1129,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (isNumberAtLeftmost) { popupX -= container.getPaddingLeft(); } else { - popupX += popupKey.width + container.getPaddingLeft(); + popupX += popupKey.width + getPaddingLeft(); popupX -= container.getMeasuredWidth(); popupX += container.getPaddingRight(); } -- cgit v1.2.3-83-g751a From 0ae817c9aee319584cbb4df5b1fa74bca684eb06 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 16 Sep 2010 14:54:45 +0900 Subject: Add enter/exit animation style to prevew and mini keyboard TODO This animation style API of PopupWindow can be called only in Gingrebread or later. We should refactor this using reflection to be able to be compatible with Froyo. Bug: 3004787 Bug: 2973989 Change-Id: I2abfcc853b1a0af2bccee7bdf5fbd723456b7d34 --- java/res/anim/key_preview_fadein.xml | 29 ++++++++++++++++++++++ java/res/anim/key_preview_fadeout.xml | 29 ++++++++++++++++++++++ java/res/anim/mini_keyboard_fadein.xml | 29 ++++++++++++++++++++++ java/res/anim/mini_keyboard_fadeout.xml | 29 ++++++++++++++++++++++ java/res/values/config.xml | 28 +++++++++++++++++++++ java/res/values/styles.xml | 8 ++++++ .../inputmethod/latin/LatinKeyboardBaseView.java | 27 ++++++++++---------- 7 files changed, 166 insertions(+), 13 deletions(-) create mode 100644 java/res/anim/key_preview_fadein.xml create mode 100644 java/res/anim/key_preview_fadeout.xml create mode 100644 java/res/anim/mini_keyboard_fadein.xml create mode 100644 java/res/anim/mini_keyboard_fadeout.xml create mode 100644 java/res/values/config.xml (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/anim/key_preview_fadein.xml b/java/res/anim/key_preview_fadein.xml new file mode 100644 index 000000000..9fad7b9a7 --- /dev/null +++ b/java/res/anim/key_preview_fadein.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/java/res/anim/key_preview_fadeout.xml b/java/res/anim/key_preview_fadeout.xml new file mode 100644 index 000000000..7de5123cd --- /dev/null +++ b/java/res/anim/key_preview_fadeout.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/java/res/anim/mini_keyboard_fadein.xml b/java/res/anim/mini_keyboard_fadein.xml new file mode 100644 index 000000000..9fad7b9a7 --- /dev/null +++ b/java/res/anim/mini_keyboard_fadein.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/java/res/anim/mini_keyboard_fadeout.xml b/java/res/anim/mini_keyboard_fadeout.xml new file mode 100644 index 000000000..7de5123cd --- /dev/null +++ b/java/res/anim/mini_keyboard_fadeout.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/java/res/values/config.xml b/java/res/values/config.xml new file mode 100644 index 000000000..6e941baaf --- /dev/null +++ b/java/res/values/config.xml @@ -0,0 +1,28 @@ + + + + + 0 + 10 + 0 + 90 + 0 + 100 + diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 60fffe873..5e239482f 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -33,4 +33,12 @@ 0.5 white + + diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index eeccb965c..3761dab14 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -154,8 +154,6 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } // Timing constants - private static final int DELAY_BEFORE_PREVIEW = 0; - private static final int DELAY_AFTER_PREVIEW = 100; private static final int REPEAT_INTERVAL = PointerTracker.REPEAT_INTERVAL; // Miscellaneous constants @@ -194,6 +192,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private int mPopupPreviewOffsetY; private int mWindowY; private int mPopupPreviewDisplayedY; + private final int mDelayBeforePreview; + private final int mDelayAfterPreview; // Popup mini keyboard private PopupWindow mMiniKeyboardPopup; @@ -255,7 +255,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx showKey(msg.arg1, (PointerTracker)msg.obj); break; case MSG_DISMISS_PREVIEW: - mPreviewText.setVisibility(INVISIBLE); + mPreviewPopup.dismiss(); break; case MSG_REPEAT_KEY: { final PointerTracker tracker = (PointerTracker)msg.obj; @@ -460,6 +460,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } } + final Resources res = getResources(); + mPreviewPopup = new PopupWindow(context); if (previewLayout != 0) { mPreviewText = (TextView) inflate.inflate(previewLayout, null); @@ -470,10 +472,14 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mShowPreview = false; } mPreviewPopup.setTouchable(false); - mMiniKeyboardParent = this; + mPreviewPopup.setAnimationStyle(R.style.KeyPreviewAnimation); + mDelayBeforePreview = res.getInteger(R.integer.config_delay_before_preview); + mDelayAfterPreview = res.getInteger(R.integer.config_delay_after_preview); + mMiniKeyboardParent = this; mMiniKeyboardPopup = new PopupWindow(context); mMiniKeyboardPopup.setBackgroundDrawable(null); + mMiniKeyboardPopup.setAnimationStyle(R.style.MiniKeyboardAnimation); mPaint = new Paint(); mPaint.setAntiAlias(true); @@ -485,7 +491,6 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mMiniKeyboardCache = new HashMap(); mKeyBackground.getPadding(mPadding); - final Resources res = getResources(); mSwipeThreshold = (int) (500 * res.getDisplayMetrics().density); // TODO: Refer frameworks/base/core/res/res/values/config.xml mDisambiguateSwipe = res.getBoolean(R.bool.config_swipeDisambiguation); @@ -657,9 +662,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx public void setPopupOffset(int x, int y) { mPopupPreviewOffsetX = x; mPopupPreviewOffsetY = y; - if (mPreviewPopup.isShowing()) { - mPreviewPopup.dismiss(); - } + mPreviewPopup.dismiss(); } /** @@ -895,9 +898,9 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx || (hidePreviewOrShowSpaceKeyPreview && isLanguageSwitchEnabled))) { if (keyIndex == NOT_A_KEY) { mHandler.cancelPopupPreview(); - mHandler.dismissPreview(DELAY_AFTER_PREVIEW); + mHandler.dismissPreview(mDelayAfterPreview); } else if (tracker != null) { - mHandler.popupPreview(DELAY_BEFORE_PREVIEW, keyIndex, tracker); + mHandler.popupPreview(mDelayBeforePreview, keyIndex, tracker); } } } @@ -1375,9 +1378,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } public void closing() { - if (mPreviewPopup.isShowing()) { - mPreviewPopup.dismiss(); - } + mPreviewPopup.dismiss(); mHandler.cancelAllMessages(); dismissPopupKeyboard(); -- cgit v1.2.3-83-g751a From afb353277928b9c13a97f2aefde7412f432e060a Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Wed, 29 Sep 2010 04:17:36 +0900 Subject: Mini keyboard works even while shift is being pressed Bug: 3038861 Change-Id: I94011ca80710ff6eb24e940104f7d9d3bb86840a --- .../android/inputmethod/latin/LatinKeyboardBaseView.java | 14 +++++++++++--- java/src/com/android/inputmethod/latin/PointerTracker.java | 5 +++-- 2 files changed, 14 insertions(+), 5 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 3761dab14..75ef691c8 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -205,6 +205,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private long mMiniKeyboardPopupTime; private int[] mWindowOffset; private final float mMiniKeyboardSlideAllowance; + private int mMiniKeyboardTrackerId; /** Listener for {@link OnKeyboardActionListener}. */ private OnKeyboardActionListener mKeyboardActionListener; @@ -1023,6 +1024,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (result) { dismissKeyPreview(); tracker.setAlreadyProcessed(); + mMiniKeyboardTrackerId = tracker.mPointerId; } return result; } @@ -1258,9 +1260,15 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Needs to be called after the gesture detector gets a turn, as it may have // displayed the mini keyboard if (mMiniKeyboard != null) { - MotionEvent translated = generateMiniKeyboardMotionEvent(action, x, y, eventTime); - mMiniKeyboard.onTouchEvent(translated); - translated.recycle(); + final int miniKeyboardPointerIndex = me.findPointerIndex(mMiniKeyboardTrackerId); + if (miniKeyboardPointerIndex >= 0 && miniKeyboardPointerIndex < pointerCount) { + final int miniKeyboardX = (int)me.getX(miniKeyboardPointerIndex); + final int miniKeyboardY = (int)me.getY(miniKeyboardPointerIndex); + MotionEvent translated = generateMiniKeyboardMotionEvent(action, + miniKeyboardX, miniKeyboardY, eventTime); + mMiniKeyboard.onTouchEvent(translated); + translated.recycle(); + } return true; } diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java index b56974ccf..b416a984c 100644 --- a/java/src/com/android/inputmethod/latin/PointerTracker.java +++ b/java/src/com/android/inputmethod/latin/PointerTracker.java @@ -515,7 +515,8 @@ public class PointerTracker { int primaryCode = key.codes[0]; code = String.format((primaryCode < 0) ? "%4d" : "0x%02x", primaryCode); } - Log.d(TAG, String.format("%s [%d] %3d,%3d %3d(%s) %s", title, mPointerId, x, y, keyIndex, - code, isModifier() ? "modifier" : "")); + Log.d(TAG, String.format("%s%s[%d] %3d,%3d %3d(%s) %s", title, + (mKeyAlreadyProcessed ? "-" : " "), mPointerId, x, y, keyIndex, code, + (isModifier() ? "modifier" : ""))); } } -- cgit v1.2.3-83-g751a From 4fc510a7890976d9968d73ceacf3983e77f489d2 Mon Sep 17 00:00:00 2001 From: satok Date: Fri, 1 Oct 2010 19:40:44 +0900 Subject: Unbundle Keyboard.java to BaseKeyboard.java Change-Id: I8b310c2c0cae1a151e53c22001c586697346982c --- java/res/values/attrs.xml | 56 ++ java/res/xml-da/kbd_qwerty.xml | 830 ++++++++++----------- java/res/xml-da/kbd_qwerty_black.xml | 620 +++++++-------- java/res/xml-de/kbd_qwerty.xml | 808 ++++++++++---------- java/res/xml-de/kbd_qwerty_black.xml | 598 +++++++-------- java/res/xml-fr/kbd_qwerty.xml | 808 ++++++++++---------- java/res/xml-fr/kbd_qwerty_black.xml | 598 +++++++-------- java/res/xml-iw/kbd_qwerty.xml | 726 +++++++++--------- java/res/xml-iw/kbd_qwerty_black.xml | 516 ++++++------- java/res/xml-nb/kbd_qwerty.xml | 830 ++++++++++----------- java/res/xml-nb/kbd_qwerty_black.xml | 620 +++++++-------- java/res/xml-ru/kbd_qwerty.xml | 794 ++++++++++---------- java/res/xml-ru/kbd_qwerty_black.xml | 584 +++++++-------- java/res/xml-sr/kbd_qwerty.xml | 780 +++++++++---------- java/res/xml-sr/kbd_qwerty_black.xml | 570 +++++++------- java/res/xml-sv/kbd_qwerty.xml | 828 ++++++++++---------- java/res/xml-sv/kbd_qwerty_black.xml | 620 +++++++-------- java/res/xml-xlarge/kbd_popup_template.xml | 10 +- java/res/xml-xlarge/kbd_qwerty.xml | 304 ++++---- java/res/xml-xlarge/kbd_symbols.xml | 164 ++-- java/res/xml-xlarge/kbd_symbols_shift.xml | 164 ++-- java/res/xml/kbd_phone.xml | 104 +-- java/res/xml/kbd_phone_black.xml | 104 +-- java/res/xml/kbd_phone_symbols.xml | 92 +-- java/res/xml/kbd_phone_symbols_black.xml | 92 +-- java/res/xml/kbd_popup_template.xml | 10 +- java/res/xml/kbd_qwerty.xml | 788 +++++++++---------- java/res/xml/kbd_qwerty_black.xml | 578 +++++++------- java/res/xml/kbd_symbols.xml | 290 +++---- java/res/xml/kbd_symbols_black.xml | 248 +++--- java/res/xml/kbd_symbols_shift.xml | 244 +++--- java/res/xml/kbd_symbols_shift_black.xml | 202 ++--- java/res/xml/popup_comma.xml | 22 +- java/res/xml/popup_domains.xml | 32 +- java/res/xml/popup_mic.xml | 24 +- java/res/xml/popup_punctuation.xml | 50 +- java/res/xml/popup_smileys.xml | 86 +-- .../android/inputmethod/latin/BaseKeyboard.java | 804 ++++++++++++++++++++ .../com/android/inputmethod/latin/KeyDetector.java | 7 +- .../com/android/inputmethod/latin/LatinIME.java | 21 +- .../android/inputmethod/latin/LatinImeLogger.java | 3 +- .../android/inputmethod/latin/LatinKeyboard.java | 7 +- .../inputmethod/latin/LatinKeyboardBaseView.java | 23 +- .../inputmethod/latin/LatinKeyboardView.java | 16 +- .../inputmethod/latin/MiniKeyboardKeyDetector.java | 2 +- .../android/inputmethod/latin/PointerTracker.java | 11 +- .../inputmethod/latin/ProximityKeyDetector.java | 2 +- .../android/inputmethod/latin/TextEntryState.java | 3 +- 48 files changed, 8275 insertions(+), 7418 deletions(-) create mode 100644 java/src/com/android/inputmethod/latin/BaseKeyboard.java (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 995373e84..943a43b70 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -69,4 +69,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/res/xml-da/kbd_qwerty.xml b/java/res/xml-da/kbd_qwerty.xml index 084795463..4aef4b448 100644 --- a/java/res/xml-da/kbd_qwerty.xml +++ b/java/res/xml-da/kbd_qwerty.xml @@ -25,498 +25,498 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" /> + latin:keyLabel="å" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel="æ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_ae" /> + latin:keyLabel="ø" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_oe" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml-da/kbd_qwerty_black.xml b/java/res/xml-da/kbd_qwerty_black.xml index 9a64e869d..e3b676802 100644 --- a/java/res/xml-da/kbd_qwerty_black.xml +++ b/java/res/xml-da/kbd_qwerty_black.xml @@ -25,440 +25,440 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" /> + latin:keyLabel="å" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel="æ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_ae" /> + latin:keyLabel="ø" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_oe" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_bkeyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml-de/kbd_qwerty.xml b/java/res/xml-de/kbd_qwerty.xml index b60c50dd6..6318a9d53 100644 --- a/java/res/xml-de/kbd_qwerty.xml +++ b/java/res/xml-de/kbd_qwerty.xml @@ -19,483 +19,483 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:horizontalGap="5%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml-de/kbd_qwerty_black.xml b/java/res/xml-de/kbd_qwerty_black.xml index 5cca5a622..dfa7ef600 100644 --- a/java/res/xml-de/kbd_qwerty_black.xml +++ b/java/res/xml-de/kbd_qwerty_black.xml @@ -19,425 +19,425 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:horizontalGap="5%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_bkeyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml-fr/kbd_qwerty.xml b/java/res/xml-fr/kbd_qwerty.xml index ab78b37bb..80d4d25de 100644 --- a/java/res/xml-fr/kbd_qwerty.xml +++ b/java/res/xml-fr/kbd_qwerty.xml @@ -19,484 +19,484 @@ --> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel="m" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="\'" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml-fr/kbd_qwerty_black.xml b/java/res/xml-fr/kbd_qwerty_black.xml index 97b55dccd..28bf3f9ef 100644 --- a/java/res/xml-fr/kbd_qwerty_black.xml +++ b/java/res/xml-fr/kbd_qwerty_black.xml @@ -19,426 +19,426 @@ --> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel="m" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_bkeyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="\'" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml-iw/kbd_qwerty.xml b/java/res/xml-iw/kbd_qwerty.xml index a48c849d0..97d9ccbf4 100644 --- a/java/res/xml-iw/kbd_qwerty.xml +++ b/java/res/xml-iw/kbd_qwerty.xml @@ -19,442 +19,442 @@ --> + latin:keyLabel="ק" + latin:horizontalGap="5%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ר" /> + latin:keyLabel="א" /> + latin:keyLabel="ט" /> + latin:keyLabel="ו" /> + latin:keyLabel="ן" /> + latin:keyLabel="ם" /> + latin:keyLabel="פ" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="13.75%p" + latin:isModifier="true" + latin:horizontalGap="1.25%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:keyLabel="ש" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ד" /> + latin:keyLabel="ג" /> + latin:keyLabel="כ" /> + latin:keyLabel="ע" /> + latin:keyLabel="י" /> + latin:keyLabel="ח" /> + latin:keyLabel="ל" /> + latin:keyLabel="ך" /> + latin:keyLabel="ף" + latin:keyEdgeFlags="right" /> + latin:keyLabel="ז" + latin:horizontalGap="5%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ס" /> + latin:keyLabel="ב" /> + latin:keyLabel="ה" /> + latin:keyLabel="נ" /> + latin:keyLabel="מ" /> + latin:keyLabel="צ" /> + latin:keyLabel="ת" /> + latin:keyLabel="ץ" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml-iw/kbd_qwerty_black.xml b/java/res/xml-iw/kbd_qwerty_black.xml index a72b036f4..a7c5a99ea 100644 --- a/java/res/xml-iw/kbd_qwerty_black.xml +++ b/java/res/xml-iw/kbd_qwerty_black.xml @@ -19,384 +19,384 @@ --> + latin:keyLabel="ק" + latin:horizontalGap="5%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ר" /> + latin:keyLabel="א" /> + latin:keyLabel="ט" /> + latin:keyLabel="ו" /> + latin:keyLabel="ן" /> + latin:keyLabel="ם" /> + latin:keyLabel="פ" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="13.75%p" + latin:horizontalGap="1.25%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:keyLabel="ש" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ד" /> + latin:keyLabel="ג" /> + latin:keyLabel="כ" /> + latin:keyLabel="ע" /> + latin:keyLabel="י" /> + latin:keyLabel="ח" /> + latin:keyLabel="ל" /> + latin:keyLabel="ך" /> + latin:keyLabel="ף" + latin:keyEdgeFlags="right" /> + latin:keyLabel="ז" + latin:horizontalGap="5%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ס" /> + latin:keyLabel="ב" /> + latin:keyLabel="ה" /> + latin:keyLabel="נ" /> + latin:keyLabel="מ" /> + latin:keyLabel="צ" /> + latin:keyLabel="ת" /> + latin:keyLabel="ץ" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml-nb/kbd_qwerty.xml b/java/res/xml-nb/kbd_qwerty.xml index 7e1610684..8921d5353 100644 --- a/java/res/xml-nb/kbd_qwerty.xml +++ b/java/res/xml-nb/kbd_qwerty.xml @@ -25,498 +25,498 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" /> + latin:keyLabel="å" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel="ø" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_oe" /> + latin:keyLabel="æ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_ae" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml-nb/kbd_qwerty_black.xml b/java/res/xml-nb/kbd_qwerty_black.xml index f6a034ee9..1497d6796 100644 --- a/java/res/xml-nb/kbd_qwerty_black.xml +++ b/java/res/xml-nb/kbd_qwerty_black.xml @@ -25,440 +25,440 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" /> + latin:keyLabel="å" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel="ø" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_oe" /> + latin:keyLabel="æ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_ae" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_bkeyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml-ru/kbd_qwerty.xml b/java/res/xml-ru/kbd_qwerty.xml index 9f16b9b7d..80ce4d0c6 100644 --- a/java/res/xml-ru/kbd_qwerty.xml +++ b/java/res/xml-ru/kbd_qwerty.xml @@ -19,482 +19,482 @@ --> + latin:keyLabel="й" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="1" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ц" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="2" /> + latin:keyLabel="у" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="3" /> + latin:keyLabel="к" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="4" /> + latin:keyLabel="е" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_cyrillic_e" /> + latin:keyLabel="н" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="6" /> + latin:keyLabel="г" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="7" /> + latin:keyLabel="ш" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="8" /> + latin:keyLabel="щ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="9" /> + latin:keyLabel="з" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="0" /> + latin:keyLabel="х" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="ф" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ы" /> + latin:keyLabel="в" /> + latin:keyLabel="а" /> + latin:keyLabel="п" /> + latin:keyLabel="р" /> + latin:keyLabel="о" /> + latin:keyLabel="л" /> + latin:keyLabel="д" /> + latin:keyLabel="ж" /> + latin:keyLabel="э" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="11.75%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="я" /> + latin:keyLabel="ч" /> + latin:keyLabel="с" /> + latin:keyLabel="м" /> + latin:keyLabel="и" /> + latin:keyLabel="т" /> + latin:keyLabel="ь" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_cyrillic_soft_sign" /> + latin:keyLabel="б" /> + latin:keyLabel="ю" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="11.75%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml-ru/kbd_qwerty_black.xml b/java/res/xml-ru/kbd_qwerty_black.xml index 73008befd..c3f120ad2 100644 --- a/java/res/xml-ru/kbd_qwerty_black.xml +++ b/java/res/xml-ru/kbd_qwerty_black.xml @@ -19,424 +19,424 @@ --> + latin:keyLabel="й" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="1" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ц" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="2" /> + latin:keyLabel="у" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="3" /> + latin:keyLabel="к" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="4" /> + latin:keyLabel="е" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_cyrillic_e" /> + latin:keyLabel="н" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="6" /> + latin:keyLabel="г" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="7" /> + latin:keyLabel="ш" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="8" /> + latin:keyLabel="щ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="9" /> + latin:keyLabel="з" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="0" /> + latin:keyLabel="х" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="ф" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ы" /> + latin:keyLabel="в" /> + latin:keyLabel="а" /> + latin:keyLabel="п" /> + latin:keyLabel="р" /> + latin:keyLabel="о" /> + latin:keyLabel="л" /> + latin:keyLabel="д" /> + latin:keyLabel="ж" /> + latin:keyLabel="э" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_bkeyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="11.75%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="я" /> + latin:keyLabel="ч" /> + latin:keyLabel="с" /> + latin:keyLabel="м" /> + latin:keyLabel="и" /> + latin:keyLabel="т" /> + latin:keyLabel="ь" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_cyrillic_soft_sign" /> + latin:keyLabel="б" /> + latin:keyLabel="ю" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="11.75%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml-sr/kbd_qwerty.xml b/java/res/xml-sr/kbd_qwerty.xml index c671166d1..7cc477070 100644 --- a/java/res/xml-sr/kbd_qwerty.xml +++ b/java/res/xml-sr/kbd_qwerty.xml @@ -20,474 +20,474 @@ + latin:keyLabel="љ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="1" + latin:keyEdgeFlags="left" /> + latin:keyLabel="њ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="2" /> + latin:keyLabel="е" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="3" /> + latin:keyLabel="р" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="4" /> + latin:keyLabel="т" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="5" /> + latin:keyLabel="з" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="6" /> + latin:keyLabel="у" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="7" /> + latin:keyLabel="и" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="8" /> + latin:keyLabel="о" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="9" /> + latin:keyLabel="п" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="0" /> + latin:keyLabel="ш" + latin:keyEdgeFlags="right" /> + latin:keyLabel="а" + latin:keyEdgeFlags="left" /> + latin:keyLabel="с" /> + latin:keyLabel="д" /> + latin:keyLabel="ф" /> + latin:keyLabel="г" /> + latin:keyLabel="х" /> + latin:keyLabel="ј" /> + latin:keyLabel="к" /> + latin:keyLabel="л" /> + latin:keyLabel="ч" /> + latin:keyLabel="ћ" /> + latin:keyLabel="ђ" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="11.75%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ж" /> + latin:keyLabel="џ" /> + latin:keyLabel="ц" /> + latin:keyLabel="в" /> + latin:keyLabel="б" /> + latin:keyLabel="н" /> + latin:keyLabel="м" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="11.75%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml-sr/kbd_qwerty_black.xml b/java/res/xml-sr/kbd_qwerty_black.xml index 5e5bceec0..d61ff3e8f 100644 --- a/java/res/xml-sr/kbd_qwerty_black.xml +++ b/java/res/xml-sr/kbd_qwerty_black.xml @@ -20,416 +20,416 @@ + latin:keyLabel="љ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="1" + latin:keyEdgeFlags="left" /> + latin:keyLabel="њ" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="2" /> + latin:keyLabel="е" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="3" /> + latin:keyLabel="р" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="4" /> + latin:keyLabel="т" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="5" /> + latin:keyLabel="з" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="6" /> + latin:keyLabel="у" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="7" /> + latin:keyLabel="и" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="8" /> + latin:keyLabel="о" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="9" /> + latin:keyLabel="п" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="0" /> + latin:keyLabel="ш" + latin:keyEdgeFlags="right" /> + latin:keyLabel="а" + latin:keyEdgeFlags="left" /> + latin:keyLabel="с" /> + latin:keyLabel="д" /> + latin:keyLabel="ф" /> + latin:keyLabel="г" /> + latin:keyLabel="х" /> + latin:keyLabel="ј" /> + latin:keyLabel="к" /> + latin:keyLabel="л" /> + latin:keyLabel="ч" /> + latin:keyLabel="ћ" /> + latin:keyLabel="ђ" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_bkeyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="11.75%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="ж" /> + latin:keyLabel="џ" /> + latin:keyLabel="ц" /> + latin:keyLabel="в" /> + latin:keyLabel="б" /> + latin:keyLabel="н" /> + latin:keyLabel="м" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="11.75%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml-sv/kbd_qwerty.xml b/java/res/xml-sv/kbd_qwerty.xml index 44117fc1f..2c584e26f 100644 --- a/java/res/xml-sv/kbd_qwerty.xml +++ b/java/res/xml-sv/kbd_qwerty.xml @@ -27,497 +27,497 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" /> + latin:keyLabel="å" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel="ö" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o_umlaut" /> + latin:keyLabel="ä" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a_umlaut" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml-sv/kbd_qwerty_black.xml b/java/res/xml-sv/kbd_qwerty_black.xml index 13ed3d1bf..90dca89bc 100644 --- a/java/res/xml-sv/kbd_qwerty_black.xml +++ b/java/res/xml-sv/kbd_qwerty_black.xml @@ -27,440 +27,440 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" /> + latin:keyLabel="å" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel="ö" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o_umlaut" /> + latin:keyLabel="ä" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a_umlaut" + latin:keyWidth="8.75%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_bkeyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml-xlarge/kbd_popup_template.xml b/java/res/xml-xlarge/kbd_popup_template.xml index 0e67a18d4..382d90afc 100644 --- a/java/res/xml-xlarge/kbd_popup_template.xml +++ b/java/res/xml-xlarge/kbd_popup_template.xml @@ -18,10 +18,10 @@ */ --> - diff --git a/java/res/xml-xlarge/kbd_qwerty.xml b/java/res/xml-xlarge/kbd_qwerty.xml index 80fb8884e..a76eff05a 100644 --- a/java/res/xml-xlarge/kbd_qwerty.xml +++ b/java/res/xml-xlarge/kbd_qwerty.xml @@ -19,198 +19,198 @@ --> - - - - - - - - - - - - + latin:codes="@integer/key_tab" + latin:keyLabel="Tab" + latin:keyEdgeFlags="left" /> + + + + + + + + + + + + + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="8.75%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" /> + latin:keyLabel=";" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters=":" /> + latin:keyLabel="\'" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters=""" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_keyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="8.75%p" + latin:isModifier="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="12.5%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:keyLabel="," + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="*" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="!" /> + latin:keyLabel="/" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="\?" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="12.5%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="right" /> + latin:keyLabel="(" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="<" + latin:horizontalGap="16.25%p" /> + latin:keyLabel=")" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters=">" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_keyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="37.5%p" + latin:isModifier="true" /> + latin:keyLabel="_" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="\@" /> + latin:keyLabel="-" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="#" /> diff --git a/java/res/xml-xlarge/kbd_symbols.xml b/java/res/xml-xlarge/kbd_symbols.xml index 462672623..7d23dc540 100644 --- a/java/res/xml-xlarge/kbd_symbols.xml +++ b/java/res/xml-xlarge/kbd_symbols.xml @@ -19,140 +19,140 @@ --> + latin:codes="@integer/key_tab" + latin:keyLabel="Tab" + latin:keyEdgeFlags="left" /> + latin:keyLabel="1" /> + latin:keyLabel="2" /> + latin:keyLabel="3" /> + latin:keyLabel="4" /> + latin:keyLabel="5" /> + latin:keyLabel="6" /> + latin:keyLabel="7" /> + latin:keyLabel="8" /> + latin:keyLabel="9" /> + latin:keyLabel="0" /> + latin:keyLabel="~" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="10.5%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="8.75%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:keyLabel="#" /> + latin:keyLabel="$" /> + latin:keyLabel="%" /> + latin:keyLabel="^" /> + latin:keyLabel="&" /> + latin:keyLabel="*" /> + latin:keyLabel="-" /> + latin:keyLabel="+" /> + latin:keyLabel="(" /> + latin:keyLabel=")" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_keyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="8.75%p" + latin:isModifier="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="12.5%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="!" /> + latin:keyLabel=""" /> + latin:keyLabel="\'" /> + latin:keyLabel=":" /> + latin:keyLabel=";" /> + latin:keyLabel="/" /> + latin:keyLabel="\\" /> + latin:keyLabel="," /> + latin:keyLabel="." /> + latin:keyLabel="\?" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="12.5%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="right" /> + latin:keyLabel="<" + latin:horizontalGap="16.25%p" /> + latin:keyLabel=">" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_keyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="37.5%p" + latin:isModifier="true" /> + latin:keyLabel="[" /> + latin:keyLabel="]" /> diff --git a/java/res/xml-xlarge/kbd_symbols_shift.xml b/java/res/xml-xlarge/kbd_symbols_shift.xml index f02174a91..6680d9655 100644 --- a/java/res/xml-xlarge/kbd_symbols_shift.xml +++ b/java/res/xml-xlarge/kbd_symbols_shift.xml @@ -19,140 +19,140 @@ --> + latin:codes="@integer/key_tab" + latin:keyLabel="Tab" + latin:keyEdgeFlags="left" /> + latin:keyLabel="∞" /> + latin:keyLabel="±" /> + latin:keyLabel="|" /> + latin:keyLabel="•" /> + latin:keyLabel="√" /> + latin:keyLabel="π" /> + latin:keyLabel="÷" /> + latin:keyLabel="×" /> + latin:keyLabel="±" /> + latin:keyLabel="∆" /> + latin:keyLabel="≈" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="10.5%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="8.75%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="£" /> + latin:keyLabel="¢" /> + latin:keyLabel="¥" /> + latin:keyLabel="€" /> + latin:keyLabel="¼" /> + latin:keyLabel="½" /> + latin:keyLabel="¾" /> + latin:keyLabel="_" /> + latin:keyLabel="=" /> + latin:keyLabel="{" /> + latin:keyLabel="}" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_keyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="8.75%p" + latin:isModifier="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="12.5%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="¡" /> + latin:keyLabel="°" /> + latin:keyLabel="©" /> + latin:keyLabel="®" /> + latin:keyLabel="¶" /> + latin:keyLabel="§" /> + latin:keyLabel="¤" /> + latin:keyLabel="¬" /> + latin:keyLabel="…" /> + latin:keyLabel="¿" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="12.5%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="right" /> + latin:keyLabel="≤" + latin:horizontalGap="16.25%p" /> + latin:keyLabel="≥" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_keyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="37.5%p" + latin:isModifier="true" /> + latin:keyLabel="²" /> + latin:keyLabel="³" /> diff --git a/java/res/xml/kbd_phone.xml b/java/res/xml/kbd_phone.xml index 9f381b905..e036cd6d9 100644 --- a/java/res/xml/kbd_phone.xml +++ b/java/res/xml/kbd_phone.xml @@ -19,83 +19,83 @@ --> + latin:codes="49" + latin:keyIcon="@drawable/sym_keyboard_num1" + latin:keyEdgeFlags="left" /> + latin:codes="50" + latin:keyIcon="@drawable/sym_keyboard_num2" /> + latin:codes="51" + latin:keyIcon="@drawable/sym_keyboard_num3" /> + latin:keyLabel="-" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="52" + latin:keyIcon="@drawable/sym_keyboard_num4" + latin:keyEdgeFlags="left" /> + latin:codes="53" + latin:keyIcon="@drawable/sym_keyboard_num5" /> + latin:codes="54" + latin:keyIcon="@drawable/sym_keyboard_num6" /> + latin:keyLabel="." + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="55" + latin:keyIcon="@drawable/sym_keyboard_num7" + latin:keyEdgeFlags="left" /> + latin:codes="56" + latin:keyIcon="@drawable/sym_keyboard_num8" /> + latin:codes="57" + latin:keyIcon="@drawable/sym_keyboard_num9" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="20%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyIcon="@drawable/sym_keyboard_numalt" + latin:iconPreview="@drawable/sym_keyboard_feedback_numalt" /> + latin:codes="48" + latin:keyIcon="@drawable/sym_keyboard_num0" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_keyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_keyboard_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/kbd_phone_black.xml b/java/res/xml/kbd_phone_black.xml index 7a956b796..52479459c 100644 --- a/java/res/xml/kbd_phone_black.xml +++ b/java/res/xml/kbd_phone_black.xml @@ -19,83 +19,83 @@ --> + latin:codes="49" + latin:keyIcon="@drawable/sym_bkeyboard_num1" + latin:keyEdgeFlags="left" /> + latin:codes="50" + latin:keyIcon="@drawable/sym_bkeyboard_num2" /> + latin:codes="51" + latin:keyIcon="@drawable/sym_bkeyboard_num3" /> + latin:keyLabel="-" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="52" + latin:keyIcon="@drawable/sym_bkeyboard_num4" + latin:keyEdgeFlags="left" /> + latin:codes="53" + latin:keyIcon="@drawable/sym_bkeyboard_num5" /> + latin:codes="54" + latin:keyIcon="@drawable/sym_bkeyboard_num6" /> + latin:keyLabel="." + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="55" + latin:keyIcon="@drawable/sym_bkeyboard_num7" + latin:keyEdgeFlags="left" /> + latin:codes="56" + latin:keyIcon="@drawable/sym_bkeyboard_num8" /> + latin:codes="57" + latin:keyIcon="@drawable/sym_bkeyboard_num9" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="20%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyIcon="@drawable/sym_bkeyboard_numalt" + latin:iconPreview="@drawable/sym_keyboard_feedback_numalt" /> + latin:codes="48" + latin:keyIcon="@drawable/sym_bkeyboard_num0" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/kbd_phone_symbols.xml b/java/res/xml/kbd_phone_symbols.xml index 598e211f5..09146e7af 100644 --- a/java/res/xml/kbd_phone_symbols.xml +++ b/java/res/xml/kbd_phone_symbols.xml @@ -19,80 +19,80 @@ --> + latin:keyLabel="(" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:keyLabel=")" /> + latin:keyLabel="-" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="N" + latin:keyEdgeFlags="left" /> + latin:codes="44" + latin:keyLabel="Pause" /> + latin:keyLabel="," /> + latin:keyLabel="." + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="42" + latin:keyIcon="@drawable/sym_keyboard_numstar" + latin:keyEdgeFlags="left" /> + latin:codes="59" + latin:keyLabel="Wait" /> + latin:codes="35" + latin:keyIcon="@drawable/sym_keyboard_numpound" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="20%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_phone_key" + latin:keyEdgeFlags="left" /> + latin:keyLabel="+" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_keyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_keyboard_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/kbd_phone_symbols_black.xml b/java/res/xml/kbd_phone_symbols_black.xml index 5bc628965..8b683cc6c 100644 --- a/java/res/xml/kbd_phone_symbols_black.xml +++ b/java/res/xml/kbd_phone_symbols_black.xml @@ -19,80 +19,80 @@ --> + latin:keyLabel="(" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:keyLabel=")" /> + latin:keyLabel="-" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="N" + latin:keyEdgeFlags="left" /> + latin:codes="44" + latin:keyLabel="Pause" /> + latin:keyLabel="," /> + latin:keyLabel="." + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="42" + latin:keyIcon="@drawable/sym_bkeyboard_numstar" + latin:keyEdgeFlags="left" /> + latin:codes="59" + latin:keyLabel="Wait" /> + latin:codes="35" + latin:keyIcon="@drawable/sym_bkeyboard_numpound" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="20%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_phone_key" + latin:keyEdgeFlags="left" /> + latin:keyLabel="+" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/kbd_popup_template.xml b/java/res/xml/kbd_popup_template.xml index aca46930f..cbb705835 100644 --- a/java/res/xml/kbd_popup_template.xml +++ b/java/res/xml/kbd_popup_template.xml @@ -18,10 +18,10 @@ */ --> - diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml index 446467fa4..5e68fd688 100644 --- a/java/res/xml/kbd_qwerty.xml +++ b/java/res/xml/kbd_qwerty.xml @@ -19,473 +19,473 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:horizontalGap="5%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_keyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + - - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + + diff --git a/java/res/xml/kbd_qwerty_black.xml b/java/res/xml/kbd_qwerty_black.xml index f44c24fad..fff409340 100644 --- a/java/res/xml/kbd_qwerty_black.xml +++ b/java/res/xml/kbd_qwerty_black.xml @@ -19,415 +19,415 @@ --> + latin:keyLabel="q" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_q" + latin:keyEdgeFlags="left" /> + latin:keyLabel="w" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_w" /> + latin:keyLabel="e" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_e" /> + latin:keyLabel="r" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_r" /> + latin:keyLabel="t" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_t" /> + latin:keyLabel="y" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_y" /> + latin:keyLabel="u" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_u" /> + latin:keyLabel="i" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_i" /> + latin:keyLabel="o" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_o" /> + latin:keyLabel="p" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_p" + latin:keyEdgeFlags="right" /> + latin:keyLabel="a" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_a" + latin:horizontalGap="5%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="s" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_s" /> + latin:keyLabel="d" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_d" /> + latin:keyLabel="f" /> + latin:keyLabel="g" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_g" /> + latin:keyLabel="h" /> + latin:keyLabel="j" /> + latin:keyLabel="k" /> + latin:keyLabel="l" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_l" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyIcon="@drawable/sym_bkeyboard_shift" + latin:iconPreview="@drawable/sym_keyboard_feedback_shift" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="z" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_z" /> + latin:keyLabel="x" /> + latin:keyLabel="c" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_c" /> + latin:keyLabel="v" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_v" /> + latin:keyLabel="b" /> + latin:keyLabel="n" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="@string/alternates_for_n" /> + latin:keyLabel="m" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="20%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" + latin:keyWidth="20%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="/" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="\@" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:popupKeyboard="@xml/popup_smileys" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_symbol_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:codes="@integer/key_tab" + latin:keyIcon="@drawable/sym_bkeyboard_tab" + latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="15%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/kbd_symbols.xml b/java/res/xml/kbd_symbols.xml index cb8b3b38f..4cdc53947 100644 --- a/java/res/xml/kbd_symbols.xml +++ b/java/res/xml/kbd_symbols.xml @@ -19,194 +19,194 @@ --> + latin:keyLabel="1" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="¹½⅓¼⅛" + latin:keyEdgeFlags="left" /> + latin:keyLabel="2" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="²⅔" /> + latin:keyLabel="3" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="³¾⅜" /> + latin:keyLabel="4" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="⁴" /> + latin:keyLabel="5" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="⅝" /> + latin:keyLabel="6" /> + latin:keyLabel="7" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="⅞" /> + latin:keyLabel="8" /> + latin:keyLabel="9" /> + latin:keyLabel="0" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="ⁿ∅" + latin:keyEdgeFlags="right" /> + latin:keyLabel="\@" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\#" /> + latin:keyLabel="$" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="¢£€¥₣₤₱" /> + latin:keyLabel="%" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="‰" /> + latin:keyLabel="&" /> + latin:keyLabel="*" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="†‡★" /> + latin:keyLabel="-" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="_–—" /> + latin:keyLabel="+" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="±" /> + latin:keyLabel="(" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="[{<" /> + latin:keyLabel=")" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="]}>" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyLabel="@string/label_alt_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="!" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="¡" /> + latin:keyLabel=""" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="“”«»˝" /> + latin:keyLabel="\'" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="‘’" /> + latin:keyLabel=":" /> + latin:keyLabel=";" /> + latin:keyLabel="/" /> + latin:keyLabel="\?" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="¿" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + diff --git a/java/res/xml/kbd_symbols_black.xml b/java/res/xml/kbd_symbols_black.xml index bfb1646f4..cb695f534 100644 --- a/java/res/xml/kbd_symbols_black.xml +++ b/java/res/xml/kbd_symbols_black.xml @@ -19,182 +19,182 @@ --> + latin:keyLabel="1" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="¹½⅓¼⅛" + latin:keyEdgeFlags="left" /> + latin:keyLabel="2" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="²⅔" /> + latin:keyLabel="3" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="³¾⅜" /> + latin:keyLabel="4" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="⁴" /> + latin:keyLabel="5" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="⅝" /> + latin:keyLabel="6" /> + latin:keyLabel="7" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="⅞" /> + latin:keyLabel="8" /> + latin:keyLabel="9" /> + latin:keyLabel="0" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="ⁿ∅" + latin:keyEdgeFlags="right" /> + latin:keyLabel="\@" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\#" /> + latin:keyLabel="$" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="¢£€¥₣₤₱" /> + latin:keyLabel="%" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="‰" /> + latin:keyLabel="&" /> + latin:keyLabel="*" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="†‡★" /> + latin:keyLabel="-" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="_–—" /> + latin:keyLabel="+" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="±" /> + latin:keyLabel="(" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="[{<" /> + latin:keyLabel=")" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="]}>" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyLabel="@string/label_alt_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="!" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="¡" /> + latin:keyLabel=""" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="“”«»˝" /> + latin:keyLabel="\'" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="‘’" /> + latin:keyLabel=":" /> + latin:keyLabel=";" /> + latin:keyLabel="/" /> + latin:keyLabel="\?" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="¿" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="." + latin:popupKeyboard="@xml/popup_punctuation" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/kbd_symbols_shift.xml b/java/res/xml/kbd_symbols_shift.xml index 21cbb7132..e346384aa 100644 --- a/java/res/xml/kbd_symbols_shift.xml +++ b/java/res/xml/kbd_symbols_shift.xml @@ -19,171 +19,171 @@ --> + latin:keyLabel="~" + latin:keyEdgeFlags="left" /> + latin:keyLabel="`" /> + latin:keyLabel="|" /> + latin:keyLabel="•" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="♪♥♠♦♣" /> + latin:keyLabel="√" /> + latin:keyLabel="π" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="Π" /> + latin:keyLabel="÷" /> + latin:keyLabel="×" /> + latin:keyLabel="{" /> + latin:keyLabel="}" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_tab" + latin:keyLabel="\u21E5" + latin:keyEdgeFlags="left" /> + latin:keyLabel="£" /> + latin:keyLabel="¢" /> + latin:keyLabel="€" /> + latin:keyLabel="°" /> + latin:keyLabel="^" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="↑↓←→" /> + latin:keyLabel="_" /> + latin:keyLabel="=" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="≠≈∞" /> + latin:keyLabel="[" /> + latin:keyLabel="]" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyLabel="@string/label_alt_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="™" /> + latin:keyLabel="®" /> + latin:keyLabel="©" /> + latin:keyLabel="¶" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="§" /> + latin:keyLabel="\\" /> + latin:keyLabel="<" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="≤«‹" /> + latin:keyLabel=">" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="≥»›" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_keyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="20%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + - - - - - + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:keyEdgeFlags="left" /> + + + + + diff --git a/java/res/xml/kbd_symbols_shift_black.xml b/java/res/xml/kbd_symbols_shift_black.xml index d5d49ce0d..a15749212 100644 --- a/java/res/xml/kbd_symbols_shift_black.xml +++ b/java/res/xml/kbd_symbols_shift_black.xml @@ -19,159 +19,159 @@ --> + latin:keyLabel="~" + latin:keyEdgeFlags="left" /> + latin:keyLabel="`" /> + latin:keyLabel="|" /> + latin:keyLabel="•" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="♪♥♠♦♣" /> + latin:keyLabel="√" /> + latin:keyLabel="π" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="Π" /> + latin:keyLabel="÷" /> + latin:keyLabel="×" /> + latin:keyLabel="{" /> + latin:keyLabel="}" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_tab" + latin:keyLabel="\u21E5" + latin:keyEdgeFlags="left" /> + latin:keyLabel="£" /> + latin:keyLabel="¢" /> + latin:keyLabel="€" /> + latin:keyLabel="°" /> + latin:keyLabel="^" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="↑↓←→" /> + latin:keyLabel="_" /> + latin:keyLabel="=" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="≠≈∞" /> + latin:keyLabel="[" /> + latin:keyLabel="]" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_shift" + latin:keyLabel="@string/label_alt_key" + latin:keyWidth="15%p" + latin:isModifier="true" + latin:isSticky="true" + latin:keyEdgeFlags="left" /> + latin:keyLabel="™" /> + latin:keyLabel="®" /> + latin:keyLabel="©" /> + latin:keyLabel="¶" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="§" /> + latin:keyLabel="\\" /> + latin:keyLabel="<" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="≤«‹" /> + latin:keyLabel=">" + latin:popupKeyboard="@xml/kbd_popup_template" + latin:popupCharacters="≥»›" /> + latin:codes="@integer/key_delete" + latin:keyIcon="@drawable/sym_bkeyboard_delete" + latin:iconPreview="@drawable/sym_keyboard_feedback_delete" + latin:keyWidth="15%p" + latin:isRepeatable="true" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="20%p" + latin:keyEdgeFlags="left" /> + latin:keyLabel="„" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="40%p" /> + latin:keyLabel="…" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="20%p" + latin:keyEdgeFlags="right" /> + latin:codes="@integer/key_symbol" + latin:keyLabel="@string/label_alpha_key" + latin:keyWidth="15%p" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_bkeyboard_settings" + latin:iconPreview="@drawable/sym_keyboard_feedback_settings" /> + latin:keyLabel="„" /> + latin:codes="@integer/key_space" + latin:keyIcon="@drawable/sym_bkeyboard_space" + latin:iconPreview="@drawable/sym_keyboard_feedback_space" + latin:keyWidth="30%p" /> + latin:keyLabel="…" /> + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:keyWidth="25%p" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/popup_comma.xml b/java/res/xml/popup_comma.xml index 540dc9615..4e88f26c4 100644 --- a/java/res/xml/popup_comma.xml +++ b/java/res/xml/popup_comma.xml @@ -19,21 +19,21 @@ --> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_keyboard_settings" + latin:keyEdgeFlags="left" /> + latin:keyLabel="," + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/popup_domains.xml b/java/res/xml/popup_domains.xml index 0f7d97691..c110ef6c2 100644 --- a/java/res/xml/popup_domains.xml +++ b/java/res/xml/popup_domains.xml @@ -19,28 +19,28 @@ --> + latin:keyLabel="@string/popular_domain_1" + latin:keyOutputText="@string/popular_domain_1" + latin:keyEdgeFlags="left" /> + latin:keyLabel="@string/popular_domain_2" + latin:keyOutputText="@string/popular_domain_2" /> + latin:keyLabel="@string/popular_domain_3" + latin:keyOutputText="@string/popular_domain_3" /> + latin:keyLabel="@string/popular_domain_4" + latin:keyOutputText="@string/popular_domain_4" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/popup_mic.xml b/java/res/xml/popup_mic.xml index f3cc63817..f5ef6eeb0 100644 --- a/java/res/xml/popup_mic.xml +++ b/java/res/xml/popup_mic.xml @@ -19,22 +19,22 @@ --> + latin:codes="@integer/key_settings" + latin:keyIcon="@drawable/sym_keyboard_settings" + latin:keyEdgeFlags="left" /> + latin:codes="@integer/key_voice" + latin:keyIcon="@drawable/sym_keyboard_mic" + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/popup_punctuation.xml b/java/res/xml/popup_punctuation.xml index ee1feabec..ecbf09f72 100644 --- a/java/res/xml/popup_punctuation.xml +++ b/java/res/xml/popup_punctuation.xml @@ -19,50 +19,50 @@ --> + latin:keyLabel=":" + latin:keyEdgeFlags="left" /> + latin:keyLabel="/" /> + latin:keyLabel="&" /> + latin:keyLabel="(" /> + latin:keyLabel=")" /> + latin:keyLabel="-" /> + latin:keyLabel="+" + latin:keyEdgeFlags="right" /> + latin:keyLabel=";" + latin:keyEdgeFlags="left" /> + latin:keyLabel="\@" /> + latin:keyLabel="\'" /> + latin:keyLabel=""" /> + latin:keyLabel="\?" /> + latin:keyLabel="!" /> + latin:keyLabel="," + latin:keyEdgeFlags="right" /> diff --git a/java/res/xml/popup_smileys.xml b/java/res/xml/popup_smileys.xml index 3b556da77..33006f6ec 100644 --- a/java/res/xml/popup_smileys.xml +++ b/java/res/xml/popup_smileys.xml @@ -19,71 +19,71 @@ --> + latin:keyLabel=":-)" + latin:keyOutputText=":-) " + latin:keyEdgeFlags="left" /> + latin:keyLabel=":-(" + latin:keyOutputText=":-( " /> + latin:keyLabel=";-)" + latin:keyOutputText=";-) " /> + latin:keyLabel=":-P" + latin:keyOutputText=":-P " /> + latin:keyLabel="=-O" + latin:keyOutputText="=-O " + latin:keyEdgeFlags="right" /> + latin:keyLabel=":-*" + latin:keyOutputText=":-* " + latin:keyEdgeFlags="left" /> + latin:keyLabel=":O" + latin:keyOutputText=":O " /> + latin:keyLabel="B-)" + latin:keyOutputText="B-) " /> + latin:keyLabel=":-$" + latin:keyOutputText=":-$ " /> + latin:keyLabel=":-!" + latin:keyOutputText=":-! " + latin:keyEdgeFlags="right" /> + latin:keyLabel=":-[" + latin:keyOutputText=":-[ " + latin:keyEdgeFlags="left" /> + latin:keyLabel="O:-)" + latin:keyOutputText="O:-) " /> + latin:keyLabel=":-\\" + latin:keyOutputText=":-\\ " /> + latin:keyLabel=":'(" + latin:keyOutputText=":'( " /> + latin:keyLabel=":-D" + latin:keyOutputText=":-D " + latin:keyEdgeFlags="right" /> diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboard.java b/java/src/com/android/inputmethod/latin/BaseKeyboard.java new file mode 100644 index 000000000..f1a08cb4a --- /dev/null +++ b/java/src/com/android/inputmethod/latin/BaseKeyboard.java @@ -0,0 +1,804 @@ +/* + * Copyright (C) 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.android.inputmethod.latin; + +import org.xmlpull.v1.XmlPullParserException; + +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.Log; +import android.util.TypedValue; +import android.util.Xml; +import android.util.DisplayMetrics; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + + +/** + * Loads an XML description of a keyboard and stores the attributes of the keys. A keyboard + * consists of rows of keys. + *

The layout file for a keyboard contains XML that looks like the following snippet:

+ *
+ * <Keyboard
+ *         latin:keyWidth="%10p"
+ *         latin:keyHeight="50px"
+ *         latin:horizontalGap="2px"
+ *         latin:verticalGap="2px" >
+ *     <Row latin:keyWidth="32px" >
+ *         <Key latin:keyLabel="A" />
+ *         ...
+ *     </Row>
+ *     ...
+ * </Keyboard>
+ * 
+ */ +public class BaseKeyboard { + + static final String TAG = "BaseKeyboard"; + + // Keyboard XML Tags + private static final String TAG_KEYBOARD = "Keyboard"; + private static final String TAG_ROW = "Row"; + private static final String TAG_KEY = "Key"; + + public static final int EDGE_LEFT = 0x01; + public static final int EDGE_RIGHT = 0x02; + public static final int EDGE_TOP = 0x04; + public static final int EDGE_BOTTOM = 0x08; + + public static final int KEYCODE_SHIFT = -1; + public static final int KEYCODE_MODE_CHANGE = -2; + public static final int KEYCODE_CANCEL = -3; + public static final int KEYCODE_DONE = -4; + public static final int KEYCODE_DELETE = -5; + public static final int KEYCODE_ALT = -6; + + /** Horizontal gap default for all rows */ + private int mDefaultHorizontalGap; + + /** Default key width */ + private int mDefaultWidth; + + /** Default key height */ + private int mDefaultHeight; + + /** Default gap between rows */ + private int mDefaultVerticalGap; + + /** Is the keyboard in the shifted state */ + private boolean mShifted; + + /** Key instance for the shift key, if present */ + private Key mShiftKey; + + /** Key index for the shift key, if present */ + private int mShiftKeyIndex = -1; + + /** Total height of the keyboard, including the padding and keys */ + private int mTotalHeight; + + /** + * Total width of the keyboard, including left side gaps and keys, but not any gaps on the + * right side. + */ + private int mTotalWidth; + + /** List of keys in this keyboard */ + private List mKeys; + + /** List of modifier keys such as Shift & Alt, if any */ + private List mModifierKeys; + + /** Width of the screen available to fit the keyboard */ + private int mDisplayWidth; + + /** Height of the screen */ + private int mDisplayHeight; + + /** Keyboard mode, or zero, if none. */ + private int mKeyboardMode; + + // Variables for pre-computing nearest keys. + + private static final int GRID_WIDTH = 10; + private static final int GRID_HEIGHT = 5; + private static final int GRID_SIZE = GRID_WIDTH * GRID_HEIGHT; + private int mCellWidth; + private int mCellHeight; + private int[][] mGridNeighbors; + private int mProximityThreshold; + /** Number of key widths from current touch point to search for nearest keys. */ + private static float SEARCH_DISTANCE = 1.8f; + + /** + * Container for keys in the keyboard. All keys in a row are at the same Y-coordinate. + * Some of the key size defaults can be overridden per row from what the {@link Keyboard} + * defines. + */ + public static class Row { + /** Default width of a key in this row. */ + public int defaultWidth; + /** Default height of a key in this row. */ + public int defaultHeight; + /** Default horizontal gap between keys in this row. */ + public int defaultHorizontalGap; + /** Vertical gap following this row. */ + public int verticalGap; + /** + * Edge flags for this row of keys. Possible values that can be assigned are + * {@link Keyboard#EDGE_TOP EDGE_TOP} and {@link Keyboard#EDGE_BOTTOM EDGE_BOTTOM} + */ + public int rowEdgeFlags; + + /** The keyboard mode for this row */ + public int mode; + + private BaseKeyboard parent; + + public Row(BaseKeyboard parent) { + this.parent = parent; + } + + public Row(Resources res, BaseKeyboard parent, XmlResourceParser parser) { + this.parent = parent; + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.BaseKeyboard); + defaultWidth = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_keyWidth, + parent.mDisplayWidth, parent.mDefaultWidth); + defaultHeight = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_keyHeight, + parent.mDisplayHeight, parent.mDefaultHeight); + defaultHorizontalGap = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_horizontalGap, + parent.mDisplayWidth, parent.mDefaultHorizontalGap); + verticalGap = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_verticalGap, + parent.mDisplayHeight, parent.mDefaultVerticalGap); + a.recycle(); + a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.BaseKeyboard_Row); + rowEdgeFlags = a.getInt(R.styleable.BaseKeyboard_Row_rowEdgeFlags, 0); + mode = a.getResourceId(R.styleable.BaseKeyboard_Row_keyboardMode, + 0); + } + } + + /** + * Class for describing the position and characteristics of a single key in the keyboard. + */ + public static class Key { + /** + * All the key codes (unicode or custom code) that this key could generate, zero'th + * being the most important. + */ + public int[] codes; + + /** Label to display */ + public CharSequence label; + + /** Icon to display instead of a label. Icon takes precedence over a label */ + public Drawable icon; + /** Preview version of the icon, for the preview popup */ + public Drawable iconPreview; + /** Width of the key, not including the gap */ + public int width; + /** Height of the key, not including the gap */ + public int height; + /** The horizontal gap before this key */ + public int gap; + /** Whether this key is sticky, i.e., a toggle key */ + public boolean sticky; + /** X coordinate of the key in the keyboard layout */ + public int x; + /** Y coordinate of the key in the keyboard layout */ + public int y; + /** The current pressed state of this key */ + public boolean pressed; + /** If this is a sticky key, is it on? */ + public boolean on; + /** Text to output when pressed. This can be multiple characters, like ".com" */ + public CharSequence text; + /** Popup characters */ + public CharSequence popupCharacters; + + /** + * Flags that specify the anchoring to edges of the keyboard for detecting touch events + * that are just out of the boundary of the key. This is a bit mask of + * {@link Keyboard#EDGE_LEFT}, {@link Keyboard#EDGE_RIGHT}, {@link Keyboard#EDGE_TOP} and + * {@link Keyboard#EDGE_BOTTOM}. + */ + public int edgeFlags; + /** Whether this is a modifier key, such as Shift or Alt */ + public boolean modifier; + /** The BaseKeyboard that this key belongs to */ + private BaseKeyboard keyboard; + /** + * If this key pops up a mini keyboard, this is the resource id for the XML layout for that + * keyboard. + */ + public int popupResId; + /** Whether this key repeats itself when held down */ + public boolean repeatable; + + + private final static int[] KEY_STATE_NORMAL_ON = { + android.R.attr.state_checkable, + android.R.attr.state_checked + }; + + private final static int[] KEY_STATE_PRESSED_ON = { + android.R.attr.state_pressed, + android.R.attr.state_checkable, + android.R.attr.state_checked + }; + + private final static int[] KEY_STATE_NORMAL_OFF = { + android.R.attr.state_checkable + }; + + private final static int[] KEY_STATE_PRESSED_OFF = { + android.R.attr.state_pressed, + android.R.attr.state_checkable + }; + + private final static int[] KEY_STATE_NORMAL = { + }; + + private final static int[] KEY_STATE_PRESSED = { + android.R.attr.state_pressed + }; + + /** Create an empty key with no attributes. */ + public Key(Row parent) { + keyboard = parent.parent; + height = parent.defaultHeight; + width = parent.defaultWidth; + gap = parent.defaultHorizontalGap; + edgeFlags = parent.rowEdgeFlags; + } + + /** Create a key with the given top-left coordinate and extract its attributes from + * the XML parser. + * @param res resources associated with the caller's context + * @param parent the row that this key belongs to. The row must already be attached to + * a {@link Keyboard}. + * @param x the x coordinate of the top-left + * @param y the y coordinate of the top-left + * @param parser the XML parser containing the attributes for this key + */ + public Key(Resources res, Row parent, int x, int y, XmlResourceParser parser) { + this(parent); + + this.x = x; + this.y = y; + + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.BaseKeyboard); + + width = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_keyWidth, + keyboard.mDisplayWidth, parent.defaultWidth); + height = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_keyHeight, + keyboard.mDisplayHeight, parent.defaultHeight); + gap = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_horizontalGap, + keyboard.mDisplayWidth, parent.defaultHorizontalGap); + a.recycle(); + a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.BaseKeyboard_Key); + this.x += gap; + TypedValue codesValue = new TypedValue(); + a.getValue(R.styleable.BaseKeyboard_Key_codes, + codesValue); + if (codesValue.type == TypedValue.TYPE_INT_DEC + || codesValue.type == TypedValue.TYPE_INT_HEX) { + codes = new int[] { codesValue.data }; + } else if (codesValue.type == TypedValue.TYPE_STRING) { + codes = parseCSV(codesValue.string.toString()); + } + + iconPreview = a.getDrawable(R.styleable.BaseKeyboard_Key_iconPreview); + if (iconPreview != null) { + iconPreview.setBounds(0, 0, iconPreview.getIntrinsicWidth(), + iconPreview.getIntrinsicHeight()); + } + popupCharacters = a.getText( + R.styleable.BaseKeyboard_Key_popupCharacters); + popupResId = a.getResourceId( + R.styleable.BaseKeyboard_Key_popupKeyboard, 0); + repeatable = a.getBoolean( + R.styleable.BaseKeyboard_Key_isRepeatable, false); + modifier = a.getBoolean( + R.styleable.BaseKeyboard_Key_isModifier, false); + sticky = a.getBoolean( + R.styleable.BaseKeyboard_Key_isSticky, false); + edgeFlags = a.getInt(R.styleable.BaseKeyboard_Key_keyEdgeFlags, 0); + edgeFlags |= parent.rowEdgeFlags; + + icon = a.getDrawable( + R.styleable.BaseKeyboard_Key_keyIcon); + if (icon != null) { + icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight()); + } + label = a.getText(R.styleable.BaseKeyboard_Key_keyLabel); + text = a.getText(R.styleable.BaseKeyboard_Key_keyOutputText); + + if (codes == null && !TextUtils.isEmpty(label)) { + codes = new int[] { label.charAt(0) }; + } + a.recycle(); + } + + /** + * Informs the key that it has been pressed, in case it needs to change its appearance or + * state. + * @see #onReleased(boolean) + */ + public void onPressed() { + pressed = !pressed; + } + + /** + * Changes the pressed state of the key. If it is a sticky key, it will also change the + * toggled state of the key if the finger was release inside. + * @param inside whether the finger was released inside the key + * @see #onPressed() + */ + public void onReleased(boolean inside) { + pressed = !pressed; + if (sticky) { + on = !on; + } + } + + int[] parseCSV(String value) { + int count = 0; + int lastIndex = 0; + if (value.length() > 0) { + count++; + while ((lastIndex = value.indexOf(",", lastIndex + 1)) > 0) { + count++; + } + } + int[] values = new int[count]; + count = 0; + StringTokenizer st = new StringTokenizer(value, ","); + while (st.hasMoreTokens()) { + try { + values[count++] = Integer.parseInt(st.nextToken()); + } catch (NumberFormatException nfe) { + Log.e(TAG, "Error parsing keycodes " + value); + } + } + return values; + } + + /** + * Detects if a point falls inside this key. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return whether or not the point falls inside the key. If the key is attached to an edge, + * it will assume that all points between the key and the edge are considered to be inside + * the key. + */ + public boolean isInside(int x, int y) { + boolean leftEdge = (edgeFlags & EDGE_LEFT) > 0; + boolean rightEdge = (edgeFlags & EDGE_RIGHT) > 0; + boolean topEdge = (edgeFlags & EDGE_TOP) > 0; + boolean bottomEdge = (edgeFlags & EDGE_BOTTOM) > 0; + if ((x >= this.x || (leftEdge && x <= this.x + this.width)) + && (x < this.x + this.width || (rightEdge && x >= this.x)) + && (y >= this.y || (topEdge && y <= this.y + this.height)) + && (y < this.y + this.height || (bottomEdge && y >= this.y))) { + return true; + } else { + return false; + } + } + + /** + * Returns the square of the distance between the center of the key and the given point. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return the square of the distance of the point from the center of the key + */ + public int squaredDistanceFrom(int x, int y) { + int xDist = this.x + width / 2 - x; + int yDist = this.y + height / 2 - y; + return xDist * xDist + yDist * yDist; + } + + /** + * Returns the drawable state for the key, based on the current state and type of the key. + * @return the drawable state of the key. + * @see android.graphics.drawable.StateListDrawable#setState(int[]) + */ + public int[] getCurrentDrawableState() { + int[] states = KEY_STATE_NORMAL; + + if (on) { + if (pressed) { + states = KEY_STATE_PRESSED_ON; + } else { + states = KEY_STATE_NORMAL_ON; + } + } else { + if (sticky) { + if (pressed) { + states = KEY_STATE_PRESSED_OFF; + } else { + states = KEY_STATE_NORMAL_OFF; + } + } else { + if (pressed) { + states = KEY_STATE_PRESSED; + } + } + } + return states; + } + } + + /** + * Creates a keyboard from the given xml key layout file. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + */ + public BaseKeyboard(Context context, int xmlLayoutResId) { + this(context, xmlLayoutResId, 0); + } + + /** + * Creates a keyboard from the given xml key layout file. Weeds out rows + * that have a keyboard mode defined but don't match the specified mode. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + * @param modeId keyboard mode identifier + * @param width sets width of keyboard + * @param height sets height of keyboard + */ + public BaseKeyboard(Context context, int xmlLayoutResId, int modeId, int width, int height) { + mDisplayWidth = width; + mDisplayHeight = height; + + mDefaultHorizontalGap = 0; + mDefaultWidth = mDisplayWidth / 10; + mDefaultVerticalGap = 0; + mDefaultHeight = mDefaultWidth; + mKeys = new ArrayList(); + mModifierKeys = new ArrayList(); + mKeyboardMode = modeId; + loadKeyboard(context, context.getResources().getXml(xmlLayoutResId)); + } + + /** + * Creates a keyboard from the given xml key layout file. Weeds out rows + * that have a keyboard mode defined but don't match the specified mode. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + * @param modeId keyboard mode identifier + */ + public BaseKeyboard(Context context, int xmlLayoutResId, int modeId) { + DisplayMetrics dm = context.getResources().getDisplayMetrics(); + mDisplayWidth = dm.widthPixels; + mDisplayHeight = dm.heightPixels; + //Log.v(TAG, "keyboard's display metrics:" + dm); + + mDefaultHorizontalGap = 0; + mDefaultWidth = mDisplayWidth / 10; + mDefaultVerticalGap = 0; + mDefaultHeight = mDefaultWidth; + mKeys = new ArrayList(); + mModifierKeys = new ArrayList(); + mKeyboardMode = modeId; + loadKeyboard(context, context.getResources().getXml(xmlLayoutResId)); + } + + /** + *

Creates a blank keyboard from the given resource file and populates it with the specified + * characters in left-to-right, top-to-bottom fashion, using the specified number of columns. + *

+ *

If the specified number of columns is -1, then the keyboard will fit as many keys as + * possible in each row.

+ * @param context the application or service context + * @param layoutTemplateResId the layout template file, containing no keys. + * @param characters the list of characters to display on the keyboard. One key will be created + * for each character. + * @param columns the number of columns of keys to display. If this number is greater than the + * number of keys that can fit in a row, it will be ignored. If this number is -1, the + * keyboard will fit as many keys as possible in each row. + */ + public BaseKeyboard(Context context, int layoutTemplateResId, + CharSequence characters, int columns, int horizontalPadding) { + this(context, layoutTemplateResId); + int x = 0; + int y = 0; + int column = 0; + mTotalWidth = 0; + + Row row = new Row(this); + row.defaultHeight = mDefaultHeight; + row.defaultWidth = mDefaultWidth; + row.defaultHorizontalGap = mDefaultHorizontalGap; + row.verticalGap = mDefaultVerticalGap; + row.rowEdgeFlags = EDGE_TOP | EDGE_BOTTOM; + final int maxColumns = columns == -1 ? Integer.MAX_VALUE : columns; + for (int i = 0; i < characters.length(); i++) { + char c = characters.charAt(i); + if (column >= maxColumns + || x + mDefaultWidth + horizontalPadding > mDisplayWidth) { + x = 0; + y += mDefaultVerticalGap + mDefaultHeight; + column = 0; + } + final Key key = new Key(row); + key.x = x; + key.y = y; + key.label = String.valueOf(c); + key.codes = new int[] { c }; + column++; + x += key.width + key.gap; + mKeys.add(key); + if (x > mTotalWidth) { + mTotalWidth = x; + } + } + mTotalHeight = y + mDefaultHeight; + } + + public List getKeys() { + return mKeys; + } + + public List getModifierKeys() { + return mModifierKeys; + } + + protected int getHorizontalGap() { + return mDefaultHorizontalGap; + } + + protected void setHorizontalGap(int gap) { + mDefaultHorizontalGap = gap; + } + + protected int getVerticalGap() { + return mDefaultVerticalGap; + } + + protected void setVerticalGap(int gap) { + mDefaultVerticalGap = gap; + } + + protected int getKeyHeight() { + return mDefaultHeight; + } + + protected void setKeyHeight(int height) { + mDefaultHeight = height; + } + + protected int getKeyWidth() { + return mDefaultWidth; + } + + protected void setKeyWidth(int width) { + mDefaultWidth = width; + } + + /** + * Returns the total height of the keyboard + * @return the total height of the keyboard + */ + public int getHeight() { + return mTotalHeight; + } + + public int getMinWidth() { + return mTotalWidth; + } + + public boolean setShifted(boolean shiftState) { + if (mShiftKey != null) { + mShiftKey.on = shiftState; + } + if (mShifted != shiftState) { + mShifted = shiftState; + return true; + } + return false; + } + + public boolean isShifted() { + return mShifted; + } + + public int getShiftKeyIndex() { + return mShiftKeyIndex; + } + + private void computeNearestNeighbors() { + // Round-up so we don't have any pixels outside the grid + mCellWidth = (getMinWidth() + GRID_WIDTH - 1) / GRID_WIDTH; + mCellHeight = (getHeight() + GRID_HEIGHT - 1) / GRID_HEIGHT; + mGridNeighbors = new int[GRID_SIZE][]; + int[] indices = new int[mKeys.size()]; + final int gridWidth = GRID_WIDTH * mCellWidth; + final int gridHeight = GRID_HEIGHT * mCellHeight; + for (int x = 0; x < gridWidth; x += mCellWidth) { + for (int y = 0; y < gridHeight; y += mCellHeight) { + int count = 0; + for (int i = 0; i < mKeys.size(); i++) { + final Key key = mKeys.get(i); + if (key.squaredDistanceFrom(x, y) < mProximityThreshold || + key.squaredDistanceFrom(x + mCellWidth - 1, y) < mProximityThreshold || + key.squaredDistanceFrom(x + mCellWidth - 1, y + mCellHeight - 1) + < mProximityThreshold || + key.squaredDistanceFrom(x, y + mCellHeight - 1) < mProximityThreshold) { + indices[count++] = i; + } + } + int [] cell = new int[count]; + System.arraycopy(indices, 0, cell, 0, count); + mGridNeighbors[(y / mCellHeight) * GRID_WIDTH + (x / mCellWidth)] = cell; + } + } + } + + /** + * Returns the indices of the keys that are closest to the given point. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return the array of integer indices for the nearest keys to the given point. If the given + * point is out of range, then an array of size zero is returned. + */ + public int[] getNearestKeys(int x, int y) { + if (mGridNeighbors == null) computeNearestNeighbors(); + if (x >= 0 && x < getMinWidth() && y >= 0 && y < getHeight()) { + int index = (y / mCellHeight) * GRID_WIDTH + (x / mCellWidth); + if (index < GRID_SIZE) { + return mGridNeighbors[index]; + } + } + return new int[0]; + } + + protected Row createRowFromXml(Resources res, XmlResourceParser parser) { + return new Row(res, this, parser); + } + + protected Key createKeyFromXml(Resources res, Row parent, int x, int y, + XmlResourceParser parser) { + return new Key(res, parent, x, y, parser); + } + + private void loadKeyboard(Context context, XmlResourceParser parser) { + boolean inKey = false; + boolean inRow = false; + int row = 0; + int x = 0; + int y = 0; + Key key = null; + Row currentRow = null; + Resources res = context.getResources(); + boolean skipRow = false; + + try { + int event; + while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) { + if (event == XmlResourceParser.START_TAG) { + String tag = parser.getName(); + if (TAG_ROW.equals(tag)) { + inRow = true; + x = 0; + currentRow = createRowFromXml(res, parser); + skipRow = currentRow.mode != 0 && currentRow.mode != mKeyboardMode; + if (skipRow) { + skipToEndOfRow(parser); + inRow = false; + } + } else if (TAG_KEY.equals(tag)) { + inKey = true; + key = createKeyFromXml(res, currentRow, x, y, parser); + mKeys.add(key); + if (key.codes[0] == KEYCODE_SHIFT) { + mShiftKey = key; + mShiftKeyIndex = mKeys.size()-1; + mModifierKeys.add(key); + } else if (key.codes[0] == KEYCODE_ALT) { + mModifierKeys.add(key); + } + } else if (TAG_KEYBOARD.equals(tag)) { + parseKeyboardAttributes(res, parser); + } + } else if (event == XmlResourceParser.END_TAG) { + if (inKey) { + inKey = false; + x += key.gap + key.width; + if (x > mTotalWidth) { + mTotalWidth = x; + } + } else if (inRow) { + inRow = false; + y += currentRow.verticalGap; + y += currentRow.defaultHeight; + row++; + } else { + // TODO: error or extend? + } + } + } + } catch (Exception e) { + Log.e(TAG, "Parse error:" + e); + e.printStackTrace(); + } + mTotalHeight = y - mDefaultVerticalGap; + } + + private void skipToEndOfRow(XmlResourceParser parser) + throws XmlPullParserException, IOException { + int event; + while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) { + if (event == XmlResourceParser.END_TAG + && parser.getName().equals(TAG_ROW)) { + break; + } + } + } + + private void parseKeyboardAttributes(Resources res, XmlResourceParser parser) { + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.BaseKeyboard); + + mDefaultWidth = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_keyWidth, + mDisplayWidth, mDisplayWidth / 10); + mDefaultHeight = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_keyHeight, + mDisplayHeight, 50); + mDefaultHorizontalGap = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_horizontalGap, + mDisplayWidth, 0); + mDefaultVerticalGap = getDimensionOrFraction(a, + R.styleable.BaseKeyboard_verticalGap, + mDisplayHeight, 0); + mProximityThreshold = (int) (mDefaultWidth * SEARCH_DISTANCE); + mProximityThreshold = mProximityThreshold * mProximityThreshold; + a.recycle(); + } + + static int getDimensionOrFraction(TypedArray a, int index, int base, int defValue) { + TypedValue value = a.peekValue(index); + if (value == null) return defValue; + if (value.type == TypedValue.TYPE_DIMENSION) { + return a.getDimensionPixelOffset(index, defValue); + } else if (value.type == TypedValue.TYPE_FRACTION) { + // Round it to avoid values like 47.9999 from getting truncated + return Math.round(a.getFraction(index, base, base, defValue)); + } + return defValue; + } +} diff --git a/java/src/com/android/inputmethod/latin/KeyDetector.java b/java/src/com/android/inputmethod/latin/KeyDetector.java index 76fe1200e..3902b60a3 100644 --- a/java/src/com/android/inputmethod/latin/KeyDetector.java +++ b/java/src/com/android/inputmethod/latin/KeyDetector.java @@ -16,14 +16,13 @@ package com.android.inputmethod.latin; -import android.inputmethodservice.Keyboard; -import android.inputmethodservice.Keyboard.Key; +import com.android.inputmethod.latin.BaseKeyboard.Key; import java.util.Arrays; import java.util.List; abstract class KeyDetector { - protected Keyboard mKeyboard; + protected BaseKeyboard mKeyboard; private Key[] mKeys; @@ -35,7 +34,7 @@ abstract class KeyDetector { protected int mProximityThresholdSquare; - public Key[] setKeyboard(Keyboard keyboard, float correctionX, float correctionY) { + public Key[] setKeyboard(BaseKeyboard keyboard, float correctionX, float correctionY) { if (keyboard == null) throw new NullPointerException(); mCorrectionX = (int)correctionX; diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 692183dbf..b41c2aa23 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -34,7 +34,6 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.inputmethodservice.InputMethodService; -import android.inputmethodservice.Keyboard; import android.media.AudioManager; import android.os.Debug; import android.os.Handler; @@ -1170,29 +1169,29 @@ public class LatinIME extends InputMethodService public void onKey(int primaryCode, int[] keyCodes, int x, int y) { long when = SystemClock.uptimeMillis(); - if (primaryCode != Keyboard.KEYCODE_DELETE || + if (primaryCode != BaseKeyboard.KEYCODE_DELETE || when > mLastKeyTime + QUICK_PRESS) { mDeleteCount = 0; } mLastKeyTime = when; final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch(); switch (primaryCode) { - case Keyboard.KEYCODE_DELETE: + case BaseKeyboard.KEYCODE_DELETE: handleBackspace(); mDeleteCount++; LatinImeLogger.logOnDelete(); break; - case Keyboard.KEYCODE_SHIFT: + case BaseKeyboard.KEYCODE_SHIFT: // Shift key is handled in onPress() when device has distinct multi-touch panel. if (!distinctMultiTouch) handleShift(); break; - case Keyboard.KEYCODE_MODE_CHANGE: + case BaseKeyboard.KEYCODE_MODE_CHANGE: // Symbol key is handled in onPress() when device has distinct multi-touch panel. if (!distinctMultiTouch) changeKeyboardMode(); break; - case Keyboard.KEYCODE_CANCEL: + case BaseKeyboard.KEYCODE_CANCEL: if (!isShowingOptionDialog()) { handleClose(); } @@ -2266,10 +2265,10 @@ public class LatinIME extends InputMethodService vibrate(); playKeyClick(primaryCode); final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch(); - if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_SHIFT) { + if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_SHIFT) { mShiftKeyState.onPress(); handleShift(); - } else if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_MODE_CHANGE) { + } else if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_MODE_CHANGE) { mSymbolKeyState.onPress(); changeKeyboardMode(); } else { @@ -2283,11 +2282,11 @@ public class LatinIME extends InputMethodService ((LatinKeyboard) mKeyboardSwitcher.getInputView().getKeyboard()).keyReleased(); //vibrate(); final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch(); - if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_SHIFT) { + if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_SHIFT) { if (mShiftKeyState.isMomentary()) resetShift(); mShiftKeyState.onRelease(); - } else if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_MODE_CHANGE) { + } else if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_MODE_CHANGE) { if (mSymbolKeyState.isMomentary()) changeKeyboardMode(); mSymbolKeyState.onRelease(); @@ -2346,7 +2345,7 @@ public class LatinIME extends InputMethodService // FIXME: These should be triggered after auto-repeat logic int sound = AudioManager.FX_KEYPRESS_STANDARD; switch (primaryCode) { - case Keyboard.KEYCODE_DELETE: + case BaseKeyboard.KEYCODE_DELETE: sound = AudioManager.FX_KEYPRESS_DELETE; break; case KEYCODE_ENTER: diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java index a8ab9cc98..dd7bc8ac1 100644 --- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java +++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java @@ -20,7 +20,6 @@ import com.android.inputmethod.latin.Dictionary.DataType; import android.content.Context; import android.content.SharedPreferences; -import android.inputmethodservice.Keyboard; import java.util.List; public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -65,7 +64,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang public static void onAddSuggestedWord(String word, int typeId, DataType dataType) { } - public static void onSetKeyboard(Keyboard kb) { + public static void onSetKeyboard(BaseKeyboard kb) { } } diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index 31394d1cc..9c252e6c6 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -30,7 +30,6 @@ import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.inputmethodservice.Keyboard; import android.text.TextPaint; import android.util.Log; import android.view.ViewConfiguration; @@ -41,7 +40,7 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; -public class LatinKeyboard extends Keyboard { +public class LatinKeyboard extends BaseKeyboard { private static final boolean DEBUG_PREFERRED_LETTER = false; private static final String TAG = "LatinKeyboard"; @@ -744,7 +743,7 @@ public class LatinKeyboard extends Keyboard { return textSize; } - class LatinKey extends Keyboard.Key { + class LatinKey extends BaseKeyboard.Key { // functional normal state (with properties) private final int[] KEY_STATE_FUNCTIONAL_NORMAL = { @@ -759,7 +758,7 @@ public class LatinKeyboard extends Keyboard { private boolean mShiftLockEnabled; - public LatinKey(Resources res, Keyboard.Row parent, int x, int y, + public LatinKey(Resources res, BaseKeyboard.Row parent, int x, int y, XmlResourceParser parser) { super(res, parent, x, y, parser); if (popupCharacters != null && popupCharacters.length() == 0) { diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 75ef691c8..264e2f18f 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -16,6 +16,8 @@ package com.android.inputmethod.latin; +import com.android.inputmethod.latin.BaseKeyboard.Key; + import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; @@ -29,8 +31,6 @@ import android.graphics.Rect; import android.graphics.Region.Op; import android.graphics.Typeface; import android.graphics.drawable.Drawable; -import android.inputmethodservice.Keyboard; -import android.inputmethodservice.Keyboard.Key; import android.os.Handler; import android.os.Message; import android.os.SystemClock; @@ -177,7 +177,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private int mPopupLayout; // Main keyboard - private Keyboard mKeyboard; + private BaseKeyboard mKeyboard; private Key[] mKeys; // Key preview popup @@ -566,7 +566,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx * @see #getKeyboard() * @param keyboard the keyboard to display in this view */ - public void setKeyboard(Keyboard keyboard) { + public void setKeyboard(BaseKeyboard keyboard) { if (mKeyboard != null) { dismissKeyPreview(); } @@ -593,7 +593,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx * @return the currently attached keyboard * @see #setKeyboard(Keyboard) */ - public Keyboard getKeyboard() { + public BaseKeyboard getKeyboard() { return mKeyboard; } @@ -713,7 +713,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx * the touch distance from a key's center to avoid taking a square root. * @param keyboard */ - private void computeProximityThreshold(Keyboard keyboard) { + private void computeProximityThreshold(BaseKeyboard keyboard) { if (keyboard == null) return; final Key[] keys = mKeys; if (keys == null) return; @@ -1072,12 +1072,12 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Override default ProximityKeyDetector. miniKeyboard.mKeyDetector = new MiniKeyboardKeyDetector(mMiniKeyboardSlideAllowance); - Keyboard keyboard; + BaseKeyboard keyboard; if (popupKey.popupCharacters != null) { - keyboard = new Keyboard(getContext(), popupKeyboardId, popupKey.popupCharacters, + keyboard = new BaseKeyboard(getContext(), popupKeyboardId, popupKey.popupCharacters, -1, getPaddingLeft() + getPaddingRight()); } else { - keyboard = new Keyboard(getContext(), popupKeyboardId); + keyboard = new BaseKeyboard(getContext(), popupKeyboardId); } miniKeyboard.setKeyboard(keyboard); miniKeyboard.setPopupParent(this); @@ -1088,7 +1088,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx return container; } - private static boolean isOneRowKeyboard(Keyboard keyboard) { + private static boolean isOneRowKeyboard(BaseKeyboard keyboard) { final List keys = keyboard.getKeys(); if (keys.size() == 0) return false; final int edgeFlags = keys.get(0).edgeFlags; @@ -1098,7 +1098,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // and bottom edge flags on. // When you want to use one row mini-keyboard from xml file, make sure that the row has // both top and bottom edge flags set. - return (edgeFlags & Keyboard.EDGE_TOP) != 0 && (edgeFlags & Keyboard.EDGE_BOTTOM) != 0; + return (edgeFlags & BaseKeyboard.EDGE_TOP) != 0 + && (edgeFlags & BaseKeyboard.EDGE_BOTTOM) != 0; } /** diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java index 22d39f7aa..912af7e2a 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java @@ -16,11 +16,11 @@ package com.android.inputmethod.latin; +import com.android.inputmethod.latin.BaseKeyboard.Key; + import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; -import android.inputmethodservice.Keyboard; -import android.inputmethodservice.Keyboard.Key; import android.os.Handler; import android.os.Message; import android.os.SystemClock; @@ -39,7 +39,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { static final int KEYCODE_NEXT_LANGUAGE = -104; static final int KEYCODE_PREV_LANGUAGE = -105; - private Keyboard mPhoneKeyboard; + private BaseKeyboard mPhoneKeyboard; /** Whether we've started dropping move events because we found a big jump */ private boolean mDroppingEvents; @@ -61,7 +61,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { super(context, attrs, defStyle); } - public void setPhoneKeyboard(Keyboard phoneKeyboard) { + public void setPhoneKeyboard(BaseKeyboard phoneKeyboard) { mPhoneKeyboard = phoneKeyboard; } @@ -76,7 +76,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { } @Override - public void setKeyboard(Keyboard k) { + public void setKeyboard(BaseKeyboard k) { super.setKeyboard(k); // One-seventh of the keyboard width seems like a reasonable threshold mJumpThresholdSquare = k.getMinWidth() / 7; @@ -108,7 +108,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { @Override protected CharSequence adjustCase(CharSequence label) { - Keyboard keyboard = getKeyboard(); + BaseKeyboard keyboard = getKeyboard(); if (keyboard.isShifted() && keyboard instanceof LatinKeyboard && ((LatinKeyboard) keyboard).isAlphaKeyboard() @@ -120,7 +120,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { } public boolean setShiftLocked(boolean shiftLocked) { - Keyboard keyboard = getKeyboard(); + BaseKeyboard keyboard = getKeyboard(); if (keyboard instanceof LatinKeyboard) { ((LatinKeyboard)keyboard).setShiftLocked(shiftLocked); invalidateAllKeys(); @@ -257,7 +257,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { private int mLastY; private Paint mPaint; - private void setKeyboardLocal(Keyboard k) { + private void setKeyboardLocal(BaseKeyboard k) { if (DEBUG_AUTO_PLAY) { findKeys(); if (mHandler2 == null) { diff --git a/java/src/com/android/inputmethod/latin/MiniKeyboardKeyDetector.java b/java/src/com/android/inputmethod/latin/MiniKeyboardKeyDetector.java index 356e62d48..5f4c93734 100644 --- a/java/src/com/android/inputmethod/latin/MiniKeyboardKeyDetector.java +++ b/java/src/com/android/inputmethod/latin/MiniKeyboardKeyDetector.java @@ -16,7 +16,7 @@ package com.android.inputmethod.latin; -import android.inputmethodservice.Keyboard.Key; +import com.android.inputmethod.latin.BaseKeyboard.Key; class MiniKeyboardKeyDetector extends KeyDetector { private static final int MAX_NEARBY_KEYS = 1; diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java index b416a984c..cf4f7d5c2 100644 --- a/java/src/com/android/inputmethod/latin/PointerTracker.java +++ b/java/src/com/android/inputmethod/latin/PointerTracker.java @@ -16,11 +16,10 @@ package com.android.inputmethod.latin; +import com.android.inputmethod.latin.BaseKeyboard.Key; import com.android.inputmethod.latin.LatinKeyboardBaseView.OnKeyboardActionListener; import com.android.inputmethod.latin.LatinKeyboardBaseView.UIHandler; -import android.inputmethodservice.Keyboard; -import android.inputmethodservice.Keyboard.Key; import android.util.Log; import android.view.MotionEvent; import android.view.ViewConfiguration; @@ -45,7 +44,7 @@ public class PointerTracker { // Miscellaneous constants private static final int NOT_A_KEY = LatinKeyboardBaseView.NOT_A_KEY; - private static final int[] KEY_DELETE = { Keyboard.KEYCODE_DELETE }; + private static final int[] KEY_DELETE = { BaseKeyboard.KEYCODE_DELETE }; private final UIProxy mProxy; private final UIHandler mHandler; @@ -202,8 +201,8 @@ public class PointerTracker { if (key == null) return false; int primaryCode = key.codes[0]; - return primaryCode == Keyboard.KEYCODE_SHIFT - || primaryCode == Keyboard.KEYCODE_MODE_CHANGE; + return primaryCode == BaseKeyboard.KEYCODE_SHIFT + || primaryCode == BaseKeyboard.KEYCODE_MODE_CHANGE; } public boolean isModifier() { @@ -437,7 +436,7 @@ public class PointerTracker { // Multi-tap if (mInMultiTap) { if (mTapCount != -1) { - mListener.onKey(Keyboard.KEYCODE_DELETE, KEY_DELETE, x, y); + mListener.onKey(BaseKeyboard.KEYCODE_DELETE, KEY_DELETE, x, y); } else { mTapCount = 0; } diff --git a/java/src/com/android/inputmethod/latin/ProximityKeyDetector.java b/java/src/com/android/inputmethod/latin/ProximityKeyDetector.java index d17bedb56..a6ff8cf8c 100644 --- a/java/src/com/android/inputmethod/latin/ProximityKeyDetector.java +++ b/java/src/com/android/inputmethod/latin/ProximityKeyDetector.java @@ -16,7 +16,7 @@ package com.android.inputmethod.latin; -import android.inputmethodservice.Keyboard.Key; +import com.android.inputmethod.latin.BaseKeyboard.Key; import java.util.Arrays; diff --git a/java/src/com/android/inputmethod/latin/TextEntryState.java b/java/src/com/android/inputmethod/latin/TextEntryState.java index 9011191f1..1d7659ca3 100644 --- a/java/src/com/android/inputmethod/latin/TextEntryState.java +++ b/java/src/com/android/inputmethod/latin/TextEntryState.java @@ -16,8 +16,9 @@ package com.android.inputmethod.latin; +import com.android.inputmethod.latin.BaseKeyboard.Key; + import android.content.Context; -import android.inputmethodservice.Keyboard.Key; import android.text.format.DateFormat; import android.util.Log; -- cgit v1.2.3-83-g751a From 66e306d01c6820d4f4d8b2209438ec086b48ac51 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Sat, 2 Oct 2010 15:17:27 +0900 Subject: Add keyHintIcon attribute to BaseKeyboard.Key class This keyHintIcon attribute is used to specify hint icon drawable at top right corner of Key. Change-Id: Icaa91e63c4473b2513396bd3fbeb8ed6fd73586c --- java/res/drawable-mdpi/keyboard_hint_at.9.png | Bin 0 -> 1180 bytes java/res/drawable-mdpi/keyboard_hint_colon.9.png | Bin 0 -> 1082 bytes .../drawable-mdpi/keyboard_hint_doublecross.9.png | Bin 0 -> 1157 bytes .../drawable-mdpi/keyboard_hint_exclamation.9.png | Bin 0 -> 1095 bytes java/res/drawable-mdpi/keyboard_hint_greater.9.png | Bin 0 -> 1133 bytes java/res/drawable-mdpi/keyboard_hint_plus.9.png | Bin 0 -> 1116 bytes .../res/drawable-mdpi/keyboard_hint_question.9.png | Bin 0 -> 1140 bytes java/res/drawable-mdpi/keyboard_hint_quote.9.png | Bin 0 -> 1077 bytes java/res/drawable-mdpi/keyboard_hint_smaller.9.png | Bin 0 -> 1130 bytes java/res/drawable-mdpi/keyboard_hint_star.9.png | Bin 0 -> 1136 bytes java/res/values/attrs.xml | 4 ++ java/res/values/strings.xml | 2 + java/res/xml-da/kbd_qwerty.xml | 10 +++ java/res/xml-da/kbd_qwerty_black.xml | 10 +++ java/res/xml-de/kbd_qwerty.xml | 10 +++ java/res/xml-de/kbd_qwerty_black.xml | 10 +++ java/res/xml-fr/kbd_qwerty.xml | 10 +++ java/res/xml-fr/kbd_qwerty_black.xml | 10 +++ java/res/xml-nb/kbd_qwerty.xml | 10 +++ java/res/xml-nb/kbd_qwerty_black.xml | 10 +++ java/res/xml-ru/kbd_qwerty.xml | 10 +++ java/res/xml-ru/kbd_qwerty_black.xml | 10 +++ java/res/xml-sr/kbd_qwerty.xml | 10 +++ java/res/xml-sr/kbd_qwerty_black.xml | 10 +++ java/res/xml-sv/kbd_qwerty.xml | 10 +++ java/res/xml-sv/kbd_qwerty_black.xml | 10 +++ java/res/xml-xlarge/kbd_qwerty.xml | 31 +++++++++ java/res/xml-xlarge/kbd_symbols.xml | 5 +- java/res/xml-xlarge/kbd_symbols_shift.xml | 5 +- java/res/xml/kbd_qwerty.xml | 10 +++ java/res/xml/kbd_qwerty_black.xml | 10 +++ .../android/inputmethod/latin/BaseKeyboard.java | 60 +++++++++-------- .../android/inputmethod/latin/LatinKeyboard.java | 74 +++------------------ .../inputmethod/latin/LatinKeyboardBaseView.java | 62 ++++++++--------- .../inputmethod/latin/LatinKeyboardView.java | 4 +- .../android/inputmethod/latin/PointerTracker.java | 37 +++++++++-- 36 files changed, 308 insertions(+), 136 deletions(-) create mode 100644 java/res/drawable-mdpi/keyboard_hint_at.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_colon.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_doublecross.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_exclamation.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_greater.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_plus.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_question.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_quote.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_smaller.9.png create mode 100644 java/res/drawable-mdpi/keyboard_hint_star.9.png (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/drawable-mdpi/keyboard_hint_at.9.png b/java/res/drawable-mdpi/keyboard_hint_at.9.png new file mode 100644 index 000000000..69baedef4 Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_at.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_colon.9.png b/java/res/drawable-mdpi/keyboard_hint_colon.9.png new file mode 100644 index 000000000..9d0d7cbab Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_colon.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_doublecross.9.png b/java/res/drawable-mdpi/keyboard_hint_doublecross.9.png new file mode 100644 index 000000000..d24aa0f07 Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_doublecross.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_exclamation.9.png b/java/res/drawable-mdpi/keyboard_hint_exclamation.9.png new file mode 100644 index 000000000..f6cc7fe84 Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_exclamation.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_greater.9.png b/java/res/drawable-mdpi/keyboard_hint_greater.9.png new file mode 100644 index 000000000..5210392bf Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_greater.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_plus.9.png b/java/res/drawable-mdpi/keyboard_hint_plus.9.png new file mode 100644 index 000000000..d1d85ac87 Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_plus.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_question.9.png b/java/res/drawable-mdpi/keyboard_hint_question.9.png new file mode 100644 index 000000000..37f6e5f36 Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_question.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_quote.9.png b/java/res/drawable-mdpi/keyboard_hint_quote.9.png new file mode 100644 index 000000000..e7d2cb5e3 Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_quote.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_smaller.9.png b/java/res/drawable-mdpi/keyboard_hint_smaller.9.png new file mode 100644 index 000000000..76553cf96 Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_smaller.9.png differ diff --git a/java/res/drawable-mdpi/keyboard_hint_star.9.png b/java/res/drawable-mdpi/keyboard_hint_star.9.png new file mode 100644 index 000000000..47978c46c Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_hint_star.9.png differ diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 943a43b70..19002140c 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -106,8 +106,12 @@ + + + + diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index 94fe76d54..a05d29192 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -212,6 +212,8 @@ ABC ALT + + More diff --git a/java/res/xml-da/kbd_qwerty.xml b/java/res/xml-da/kbd_qwerty.xml index 4aef4b448..431c5d7a6 100644 --- a/java/res/xml-da/kbd_qwerty.xml +++ b/java/res/xml-da/kbd_qwerty.xml @@ -34,44 +34,54 @@ diff --git a/java/res/xml-de/kbd_qwerty_black.xml b/java/res/xml-de/kbd_qwerty_black.xml index dfa7ef600..fc0ede3c5 100644 --- a/java/res/xml-de/kbd_qwerty_black.xml +++ b/java/res/xml-de/kbd_qwerty_black.xml @@ -28,43 +28,53 @@ diff --git a/java/res/xml-fr/kbd_qwerty.xml b/java/res/xml-fr/kbd_qwerty.xml index 80d4d25de..c18339cb3 100644 --- a/java/res/xml-fr/kbd_qwerty.xml +++ b/java/res/xml-fr/kbd_qwerty.xml @@ -28,43 +28,53 @@ diff --git a/java/res/xml-fr/kbd_qwerty_black.xml b/java/res/xml-fr/kbd_qwerty_black.xml index 28bf3f9ef..c0f263f25 100644 --- a/java/res/xml-fr/kbd_qwerty_black.xml +++ b/java/res/xml-fr/kbd_qwerty_black.xml @@ -28,43 +28,53 @@ diff --git a/java/res/xml-nb/kbd_qwerty.xml b/java/res/xml-nb/kbd_qwerty.xml index 8921d5353..ea7fb3042 100644 --- a/java/res/xml-nb/kbd_qwerty.xml +++ b/java/res/xml-nb/kbd_qwerty.xml @@ -34,44 +34,54 @@ diff --git a/java/res/xml-xlarge/kbd_symbols.xml b/java/res/xml-xlarge/kbd_symbols.xml index 7d23dc540..8391ef761 100644 --- a/java/res/xml-xlarge/kbd_symbols.xml +++ b/java/res/xml-xlarge/kbd_symbols.xml @@ -30,6 +30,7 @@ @@ -102,7 +103,7 @@ @@ -102,7 +103,7 @@ diff --git a/java/res/xml/kbd_qwerty_black.xml b/java/res/xml/kbd_qwerty_black.xml index fff409340..a35731815 100644 --- a/java/res/xml/kbd_qwerty_black.xml +++ b/java/res/xml/kbd_qwerty_black.xml @@ -28,43 +28,53 @@ diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboard.java b/java/src/com/android/inputmethod/latin/BaseKeyboard.java index 6f32f9c1a..0bf4f4eaa 100644 --- a/java/src/com/android/inputmethod/latin/BaseKeyboard.java +++ b/java/src/com/android/inputmethod/latin/BaseKeyboard.java @@ -194,9 +194,13 @@ public class BaseKeyboard { /** 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 */ public Drawable iconPreview; /** Width of the key, not including the gap */ @@ -294,22 +298,17 @@ public class BaseKeyboard { TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.BaseKeyboard); - width = getDimensionOrFraction(a, - R.styleable.BaseKeyboard_keyWidth, + width = getDimensionOrFraction(a, R.styleable.BaseKeyboard_keyWidth, keyboard.mDisplayWidth, parent.defaultWidth); - height = getDimensionOrFraction(a, - R.styleable.BaseKeyboard_keyHeight, + height = getDimensionOrFraction(a, R.styleable.BaseKeyboard_keyHeight, keyboard.mDisplayHeight, parent.defaultHeight); - gap = getDimensionOrFraction(a, - R.styleable.BaseKeyboard_horizontalGap, + gap = getDimensionOrFraction(a, R.styleable.BaseKeyboard_horizontalGap, keyboard.mDisplayWidth, parent.defaultHorizontalGap); a.recycle(); - a = res.obtainAttributes(Xml.asAttributeSet(parser), - R.styleable.BaseKeyboard_Key); + a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.BaseKeyboard_Key); this.x += gap; TypedValue codesValue = new TypedValue(); - a.getValue(R.styleable.BaseKeyboard_Key_codes, - codesValue); + a.getValue(R.styleable.BaseKeyboard_Key_codes, codesValue); if (codesValue.type == TypedValue.TYPE_INT_DEC || codesValue.type == TypedValue.TYPE_INT_HEX) { codes = new int[] { codesValue.data }; @@ -318,29 +317,22 @@ public class BaseKeyboard { } iconPreview = a.getDrawable(R.styleable.BaseKeyboard_Key_iconPreview); - if (iconPreview != null) { - iconPreview.setBounds(0, 0, iconPreview.getIntrinsicWidth(), - iconPreview.getIntrinsicHeight()); - } - popupCharacters = a.getText( - R.styleable.BaseKeyboard_Key_popupCharacters); - popupResId = a.getResourceId( - R.styleable.BaseKeyboard_Key_popupKeyboard, 0); - repeatable = a.getBoolean( - R.styleable.BaseKeyboard_Key_isRepeatable, false); - modifier = a.getBoolean( - R.styleable.BaseKeyboard_Key_isModifier, false); - sticky = a.getBoolean( - R.styleable.BaseKeyboard_Key_isSticky, false); + setDefaultBounds(iconPreview); + popupCharacters = a.getText(R.styleable.BaseKeyboard_Key_popupCharacters); + popupResId = a.getResourceId(R.styleable.BaseKeyboard_Key_popupKeyboard, 0); + repeatable = a.getBoolean(R.styleable.BaseKeyboard_Key_isRepeatable, false); + modifier = a.getBoolean(R.styleable.BaseKeyboard_Key_isModifier, false); + sticky = a.getBoolean(R.styleable.BaseKeyboard_Key_isSticky, false); edgeFlags = a.getInt(R.styleable.BaseKeyboard_Key_keyEdgeFlags, 0); edgeFlags |= parent.rowEdgeFlags; - icon = a.getDrawable( - R.styleable.BaseKeyboard_Key_keyIcon); - if (icon != null) { - icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight()); - } + icon = a.getDrawable(R.styleable.BaseKeyboard_Key_keyIcon); + setDefaultBounds(icon); + hintIcon = a.getDrawable(R.styleable.BaseKeyboard_Key_keyHintIcon); + setDefaultBounds(hintIcon); + label = a.getText(R.styleable.BaseKeyboard_Key_keyLabel); + temporaryShiftLabel = a.getText(R.styleable.BaseKeyboard_Key_temporaryShiftKeyLabel); text = a.getText(R.styleable.BaseKeyboard_Key_keyOutputText); if (codes == null && !TextUtils.isEmpty(label)) { @@ -679,10 +671,12 @@ public class BaseKeyboard { return new int[0]; } + // TODO should be private protected Row createRowFromXml(Resources res, XmlResourceParser parser) { return new Row(res, this, parser); } + // TODO should be private protected Key createKeyFromXml(Resources res, Row parent, int x, int y, XmlResourceParser parser) { return new Key(res, parent, x, y, parser); @@ -707,6 +701,7 @@ public class BaseKeyboard { if (TAG_ROW.equals(tag)) { inRow = true; x = 0; + // TODO createRowFromXml should not be called from BaseKeyboard constructor. currentRow = createRowFromXml(res, parser); skipRow = currentRow.mode != 0 && currentRow.mode != mKeyboardMode; if (skipRow) { @@ -715,6 +710,7 @@ public class BaseKeyboard { } } else if (TAG_KEY.equals(tag)) { inKey = true; + // TODO createKeyFromXml should not be called from BaseKeyboard constructor. key = createKeyFromXml(res, currentRow, x, y, parser); mKeys.add(key); if (key.codes[0] == KEYCODE_SHIFT) { @@ -793,4 +789,10 @@ public class BaseKeyboard { } return defValue; } + + protected static void setDefaultBounds(Drawable drawable) { + if (drawable != null) + drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), + drawable.getIntrinsicHeight()); + } } diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index 53ccf3629..3fc484d09 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -62,9 +62,6 @@ public class LatinKeyboard extends BaseKeyboard { private Key mF1Key; private Key mSpaceKey; private Key m123Key; - private final int NUMBER_HINT_COUNT = 10; - private Key[] mNumberHintKeys; - private Drawable[] mNumberHintIcons = new Drawable[NUMBER_HINT_COUNT]; private int mSpaceKeyIndex = -1; private int mSpaceDragStartX; private int mSpaceDragLastDiff; @@ -119,9 +116,7 @@ public class LatinKeyboard extends BaseKeyboard { mRes = res; mShiftLockIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked); mShiftLockPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_shift_locked); - mShiftLockPreviewIcon.setBounds(0, 0, - mShiftLockPreviewIcon.getIntrinsicWidth(), - mShiftLockPreviewIcon.getIntrinsicHeight()); + setDefaultBounds(mShiftLockPreviewIcon); mSpaceIcon = res.getDrawable(R.drawable.sym_keyboard_space); mSpaceAutoCompletionIndicator = res.getDrawable(R.drawable.sym_keyboard_space_led); mSpacePreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_space); @@ -138,37 +133,11 @@ public class LatinKeyboard extends BaseKeyboard { mIsAlphaKeyboard = xmlLayoutResId == R.xml.kbd_qwerty || xmlLayoutResId == R.xml.kbd_qwerty_black; mSpaceKeyIndex = indexOf(LatinIME.KEYCODE_SPACE); - initializeNumberHintResources(context); - } - - private void initializeNumberHintResources(Context context) { - final Resources res = context.getResources(); - mNumberHintIcons[0] = res.getDrawable(R.drawable.keyboard_hint_0); - mNumberHintIcons[1] = res.getDrawable(R.drawable.keyboard_hint_1); - mNumberHintIcons[2] = res.getDrawable(R.drawable.keyboard_hint_2); - mNumberHintIcons[3] = res.getDrawable(R.drawable.keyboard_hint_3); - mNumberHintIcons[4] = res.getDrawable(R.drawable.keyboard_hint_4); - mNumberHintIcons[5] = res.getDrawable(R.drawable.keyboard_hint_5); - mNumberHintIcons[6] = res.getDrawable(R.drawable.keyboard_hint_6); - mNumberHintIcons[7] = res.getDrawable(R.drawable.keyboard_hint_7); - mNumberHintIcons[8] = res.getDrawable(R.drawable.keyboard_hint_8); - mNumberHintIcons[9] = res.getDrawable(R.drawable.keyboard_hint_9); - } - - // TODO: delete this method and do initialization in constructor. - private void initializeMemberVariablesAsNeeded() { - if (mNumberHintKeys == null) - mNumberHintKeys = new Key[NUMBER_HINT_COUNT]; } @Override protected Key createKeyFromXml(Resources res, Row parent, int x, int y, XmlResourceParser parser) { - // TODO: This initialization is needed because this protected method is being called from - // the base class constructor before this class constructor gets called. We need to fix - // this. - initializeMemberVariablesAsNeeded(); - Key key = new LatinKey(res, parent, x, y, parser); switch (key.codes[0]) { case LatinIME.KEYCODE_ENTER: @@ -186,17 +155,6 @@ public class LatinKeyboard extends BaseKeyboard { break; } - // For number hints on the upper-right corner of key - int hintNumber = -1; - if (LatinKeyboardBaseView.isNumberAtLeftmostPopupChar(key)) { - hintNumber = key.popupCharacters.charAt(0) - '0'; - } else if (LatinKeyboardBaseView.isNumberAtRightmostPopupChar(key)) { - hintNumber = key.popupCharacters.charAt(key.popupCharacters.length() - 1) - '0'; - } - if (hintNumber >= 0 && hintNumber <= 9) { - mNumberHintKeys[hintNumber] = key; - } - return key; } @@ -251,11 +209,7 @@ public class LatinKeyboard extends BaseKeyboard { break; } // Set the initial size of the preview icon - if (mEnterKey.iconPreview != null) { - mEnterKey.iconPreview.setBounds(0, 0, - mEnterKey.iconPreview.getIntrinsicWidth(), - mEnterKey.iconPreview.getIntrinsicHeight()); - } + setDefaultBounds(mEnterKey.iconPreview); } } @@ -279,7 +233,7 @@ public class LatinKeyboard extends BaseKeyboard { public boolean isShiftLocked() { return mShiftState == SHIFT_LOCKED; } - + @Override public boolean setShifted(boolean shiftState) { boolean shiftChanged = false; @@ -314,6 +268,10 @@ public class LatinKeyboard extends BaseKeyboard { } } + public boolean isTemporaryUpperCase() { + return mIsAlphaKeyboard && isShifted() && !isShiftLocked(); + } + /* package */ boolean isAlphaKeyboard() { return mIsAlphaKeyboard; } @@ -335,11 +293,6 @@ public class LatinKeyboard extends BaseKeyboard { if (mSpaceKey != null) { updateSpaceBarForLocale(isAutoCompletion, isBlack); } - updateNumberHintKeys(); - } - - private void setDefaultBounds(Drawable drawable) { - drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); } public void setVoiceMode(boolean hasVoiceButton, boolean hasVoice) { @@ -385,14 +338,6 @@ public class LatinKeyboard extends BaseKeyboard { return mSpaceKey; } - private void updateNumberHintKeys() { - for (int i = 0; i < mNumberHintKeys.length; ++i) { - if (mNumberHintKeys[i] != null) { - mNumberHintKeys[i].icon = mNumberHintIcons[i]; - } - } - } - public boolean isLanguageSwitchEnabled() { return mLocale != null; } @@ -828,8 +773,7 @@ public class LatinKeyboard extends BaseKeyboard { public SlidingLocaleDrawable(Drawable background, int width, int height) { mBackground = background; - mBackground.setBounds(0, 0, - mBackground.getIntrinsicWidth(), mBackground.getIntrinsicHeight()); + setDefaultBounds(mBackground); mWidth = width; mHeight = height; mTextPaint = new TextPaint(); @@ -887,7 +831,7 @@ public class LatinKeyboard extends BaseKeyboard { canvas.drawText(mNextLanguage, diff - width / 2, baseline, paint); canvas.drawText(mPrevLanguage, diff + width + width / 2, baseline, paint); - lArrow.setBounds(0, 0, lArrow.getIntrinsicWidth(), lArrow.getIntrinsicHeight()); + setDefaultBounds(lArrow); rArrow.setBounds(width - rArrow.getIntrinsicWidth(), 0, width, rArrow.getIntrinsicHeight()); lArrow.draw(canvas); diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 264e2f18f..05b29b9b5 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -578,7 +578,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mKeys = mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(), -getPaddingTop() + mVerticalCorrection); for (PointerTracker tracker : mPointerTrackers) { - tracker.setKeyboard(mKeys, mKeyHysteresisDistance); + tracker.setKeyboard(keyboard, mKeys, mKeyHysteresisDistance); } requestLayout(); // Hint to reallocate the buffer if the size changed @@ -802,8 +802,19 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop); keyBackground.draw(canvas); - boolean shouldDrawIcon = true; + 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. if (label.length() > 1 && key.codes.length < 2) { paint.setTextSize(mLabelTextSize); @@ -823,25 +834,26 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx paint); // Turn off drop shadow paint.setShadowLayer(0, 0, 0, 0); - - // Usually don't draw icon if label is not null, but we draw icon for the number - // hint. - shouldDrawIcon = isNumberAtEdgeOfPopupChars(key); } - if (key.icon != null && shouldDrawIcon) { - // Special handing for the upper-right number hint icons - final int drawableWidth = isNumberAtEdgeOfPopupChars(key) ? - key.width : key.icon.getIntrinsicWidth(); - final int drawableHeight = isNumberAtEdgeOfPopupChars(key) ? - key.height : key.icon.getIntrinsicHeight(); + Drawable icon = null; + if (key.label == null && key.icon != null) + icon = key.icon; + if (icon == null && key.hintIcon != null && drawHintIcon) + icon = key.hintIcon; + if (icon != null) { + // Hack for key hint icon displaying at the top right corner of the key. + final int drawableWidth = icon == key.hintIcon + ? key.width : icon.getIntrinsicWidth(); + final int drawableHeight = icon == key.hintIcon + ? key.height : icon.getIntrinsicHeight(); final int drawableX = (key.width - padding.left - padding.right - drawableWidth) / 2 + padding.left; final int drawableY = (key.height - padding.top - padding.bottom - drawableHeight) / 2 + padding.top; canvas.translate(drawableX, drawableY); - key.icon.setBounds(0, 0, drawableWidth, drawableHeight); - key.icon.draw(canvas); + icon.setBounds(0, 0, drawableWidth, drawableHeight); + icon.draw(canvas); canvas.translate(-drawableX, -drawableY); } canvas.translate(-key.x - kbdPaddingLeft, -key.y - kbdPaddingTop); @@ -906,16 +918,18 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } } + // TODO Must fix popup preview on xlarge layout private void showKey(final int keyIndex, PointerTracker tracker) { Key key = tracker.getKey(keyIndex); if (key == null) return; // Should not draw number hint icons - if (key.icon != null && !isNumberAtEdgeOfPopupChars(key)) { + if (key.icon != null && key.label == null) { mPreviewText.setCompoundDrawables(null, null, null, key.iconPreview != null ? key.iconPreview : key.icon); mPreviewText.setText(null); } else { + // TODO Should take care of temporaryShiftLabel here. mPreviewText.setCompoundDrawables(null, null, null, null); mPreviewText.setText(adjustCase(tracker.getPreviewText(key))); if (key.label.length() > 1 && key.codes.length < 2) { @@ -997,7 +1011,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx * Invalidates a key so that it will be redrawn on the next repaint. Use this method if only * one key is changing it's content. Any changes that affect the position or size of the key * may not be honored. - * @param key key in the attached {@link Keyboard}. + * @param key key in the attached {@link BaseKeyboard}. * @see #invalidateAllKeys */ public void invalidateKey(Key key) { @@ -1182,11 +1196,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx return false; } - private static boolean isNumberAtEdgeOfPopupChars(Key key) { - return isNumberAtLeftmostPopupChar(key) || isNumberAtRightmostPopupChar(key); - } - - /* package */ static boolean isNumberAtLeftmostPopupChar(Key key) { + private static boolean isNumberAtLeftmostPopupChar(Key key) { if (key.popupCharacters != null && key.popupCharacters.length() > 0 && isAsciiDigit(key.popupCharacters.charAt(0))) { return true; @@ -1194,14 +1204,6 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx return false; } - /* package */ static boolean isNumberAtRightmostPopupChar(Key key) { - if (key.popupCharacters != null && key.popupCharacters.length() > 0 - && isAsciiDigit(key.popupCharacters.charAt(key.popupCharacters.length() - 1))) { - return true; - } - return false; - } - private static boolean isAsciiDigit(char c) { return (c < 0x80) && Character.isDigit(c); } @@ -1221,7 +1223,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx final PointerTracker tracker = new PointerTracker(i, mHandler, mKeyDetector, this, mHasDistinctMultitouch); if (keys != null) - tracker.setKeyboard(keys, mKeyHysteresisDistance); + tracker.setKeyboard(mKeyboard, keys, mKeyHysteresisDistance); if (listener != null) tracker.setOnKeyboardActionListener(listener); pointers.add(tracker); diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java index 912af7e2a..f3d045bec 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java @@ -109,9 +109,9 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { @Override protected CharSequence adjustCase(CharSequence label) { BaseKeyboard keyboard = getKeyboard(); - if (keyboard.isShifted() - && keyboard instanceof LatinKeyboard + if (keyboard instanceof LatinKeyboard && ((LatinKeyboard) keyboard).isAlphaKeyboard() + && keyboard.isShifted() && !TextUtils.isEmpty(label) && label.length() < 3 && Character.isLowerCase(label.charAt(0))) { label = label.toString().toUpperCase(); diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java index cf4f7d5c2..6517a206e 100644 --- a/java/src/com/android/inputmethod/latin/PointerTracker.java +++ b/java/src/com/android/inputmethod/latin/PointerTracker.java @@ -52,6 +52,7 @@ public class PointerTracker { private OnKeyboardActionListener mListener; private final boolean mHasDistinctMultitouch; + private BaseKeyboard mKeyboard; private Key[] mKeys; private int mKeyHysteresisDistanceSquared = -1; @@ -179,9 +180,10 @@ public class PointerTracker { mListener = listener; } - public void setKeyboard(Key[] keys, float keyHysteresisDistance) { - if (keys == null || keyHysteresisDistance < 0) + public void setKeyboard(BaseKeyboard keyboard, Key[] keys, float keyHysteresisDistance) { + if (keyboard == null || keys == null || keyHysteresisDistance < 0) throw new IllegalArgumentException(); + mKeyboard = keyboard; mKeys = keys; mKeyHysteresisDistanceSquared = (int)(keyHysteresisDistance * keyHysteresisDistance); // Update current key index because keyboard layout has been changed. @@ -280,7 +282,7 @@ public class PointerTracker { mHandler.startKeyRepeatTimer(REPEAT_START_DELAY, keyIndex, this); mIsRepeatableKey = true; } - mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this); + startLongPressTimer(keyIndex); } showKeyPreviewAndUpdateKey(keyIndex); } @@ -292,14 +294,15 @@ public class PointerTracker { return; KeyState keyState = mKeyState; int keyIndex = keyState.onMoveKey(x, y); - if (isValidKeyIndex(keyIndex)) { + Key key = getKey(keyIndex); + if (key != null) { if (keyState.getKeyIndex() == NOT_A_KEY) { keyState.onMoveToNewKey(keyIndex, x, y); - mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this); + startLongPressTimer(keyIndex); } else if (!isMinorMoveBounce(x, y, keyIndex)) { resetMultiTap(); keyState.onMoveToNewKey(keyIndex, x, y); - mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this); + startLongPressTimer(keyIndex); } } else { if (keyState.getKeyIndex() != NOT_A_KEY) { @@ -415,6 +418,20 @@ public class PointerTracker { } } + private void startLongPressTimer(int keyIndex) { + Key key = getKey(keyIndex); + // If keyboard is in temporary upper case state and the key has temporary shift label, + // long press should not be started. + if (isTemporaryUpperCase() && key.temporaryShiftLabel != null) + return; + mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this); + } + + private boolean isTemporaryUpperCase() { + return mKeyboard instanceof LatinKeyboard + && ((LatinKeyboard)mKeyboard).isTemporaryUpperCase(); + } + private void detectAndSendKey(int index, int x, int y, long eventTime) { final OnKeyboardActionListener listener = mListener; final Key key = getKey(index); @@ -442,6 +459,14 @@ 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); + codes[0] = code; + } + /* * Swap the first and second values in the codes array if the primary code is not * the first value but the second value in the array. This happens when key -- cgit v1.2.3-83-g751a From 5e02930a7f40b704f357f127d3d38fbdc193ffa1 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 8 Oct 2010 12:51:15 +0900 Subject: Reduce delay before mini popup keyboard is shown Before this change, the delay was 500 ms that came from ViewConfiguration.getLongPressTimeout(). This change reduces the delay to 400 ms. Bug: 3074984 Change-Id: Ia5af5e877a3c4bb29211ef4040c728ac09a9fe85 --- java/res/layout/input_trans.xml | 32 ---------------------- java/res/values/config.xml | 4 +++ .../inputmethod/latin/LatinKeyboardBaseView.java | 7 +++-- .../android/inputmethod/latin/PointerTracker.java | 27 ++++++++++-------- 4 files changed, 23 insertions(+), 47 deletions(-) delete mode 100644 java/res/layout/input_trans.xml (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/layout/input_trans.xml b/java/res/layout/input_trans.xml deleted file mode 100644 index 4c0979c04..000000000 --- a/java/res/layout/input_trans.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - diff --git a/java/res/values/config.xml b/java/res/values/config.xml index 6e941baaf..b11236a23 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -25,4 +25,8 @@ 90 0 100 + 400 + 50 + 400 + 800 diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 75ef691c8..bcd1bb056 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -154,7 +154,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } // Timing constants - private static final int REPEAT_INTERVAL = PointerTracker.REPEAT_INTERVAL; + private final int mKeyRepeatInterval; // Miscellaneous constants /* package */ static final int NOT_A_KEY = -1; @@ -261,7 +261,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx case MSG_REPEAT_KEY: { final PointerTracker tracker = (PointerTracker)msg.obj; tracker.repeatKey(msg.arg1); - startKeyRepeatTimer(REPEAT_INTERVAL, msg.arg1, tracker); + startKeyRepeatTimer(mKeyRepeatInterval, msg.arg1, tracker); break; } case MSG_LONGPRESS_KEY: { @@ -542,6 +542,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mHasDistinctMultitouch = context.getPackageManager() .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT); + mKeyRepeatInterval = res.getInteger(R.integer.config_key_repeat_interval); } public void setOnKeyboardActionListener(OnKeyboardActionListener listener) { @@ -1218,7 +1219,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Create pointer trackers until we can get 'id+1'-th tracker, if needed. for (int i = pointers.size(); i <= id; i++) { final PointerTracker tracker = - new PointerTracker(i, mHandler, mKeyDetector, this, mHasDistinctMultitouch); + new PointerTracker(i, mHandler, mKeyDetector, this, getResources()); if (keys != null) tracker.setKeyboard(keys, mKeyHysteresisDistance); if (listener != null) diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java index b416a984c..448e27910 100644 --- a/java/src/com/android/inputmethod/latin/PointerTracker.java +++ b/java/src/com/android/inputmethod/latin/PointerTracker.java @@ -19,11 +19,11 @@ package com.android.inputmethod.latin; import com.android.inputmethod.latin.LatinKeyboardBaseView.OnKeyboardActionListener; import com.android.inputmethod.latin.LatinKeyboardBaseView.UIHandler; +import android.content.res.Resources; import android.inputmethodservice.Keyboard; import android.inputmethodservice.Keyboard.Key; import android.util.Log; import android.view.MotionEvent; -import android.view.ViewConfiguration; public class PointerTracker { private static final String TAG = "PointerTracker"; @@ -33,15 +33,15 @@ public class PointerTracker { public interface UIProxy { public void invalidateKey(Key key); public void showPreview(int keyIndex, PointerTracker tracker); + public boolean hasDistinctMultitouch(); } public final int mPointerId; // Timing constants - private static final int REPEAT_START_DELAY = 400; - /* package */ static final int REPEAT_INTERVAL = 50; // ~20 keys per second - private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout(); - private static final int MULTITAP_INTERVAL = 800; // milliseconds + private final int mDelayBeforeKeyRepeatStart; + private final int mLongPressKeyTimeout; + private final int mMultiTapKeyTimeout; // Miscellaneous constants private static final int NOT_A_KEY = LatinKeyboardBaseView.NOT_A_KEY; @@ -164,7 +164,7 @@ public class PointerTracker { } public PointerTracker(int id, UIHandler handler, KeyDetector keyDetector, UIProxy proxy, - boolean hasDistinctMultitouch) { + Resources res) { if (proxy == null || handler == null || keyDetector == null) throw new NullPointerException(); mPointerId = id; @@ -172,7 +172,10 @@ public class PointerTracker { mHandler = handler; mKeyDetector = keyDetector; mKeyState = new KeyState(keyDetector); - mHasDistinctMultitouch = hasDistinctMultitouch; + mHasDistinctMultitouch = proxy.hasDistinctMultitouch(); + mDelayBeforeKeyRepeatStart = res.getInteger(R.integer.config_delay_before_key_repeat_start); + mLongPressKeyTimeout = res.getInteger(R.integer.config_long_press_key_timeout); + mMultiTapKeyTimeout = res.getInteger(R.integer.config_multi_tap_key_timeout); resetMultiTap(); } @@ -278,10 +281,10 @@ public class PointerTracker { if (isValidKeyIndex(keyIndex)) { if (mKeys[keyIndex].repeatable) { repeatKey(keyIndex); - mHandler.startKeyRepeatTimer(REPEAT_START_DELAY, keyIndex, this); + mHandler.startKeyRepeatTimer(mDelayBeforeKeyRepeatStart, keyIndex, this); mIsRepeatableKey = true; } - mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this); + mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this); } showKeyPreviewAndUpdateKey(keyIndex); } @@ -296,11 +299,11 @@ public class PointerTracker { if (isValidKeyIndex(keyIndex)) { if (keyState.getKeyIndex() == NOT_A_KEY) { keyState.onMoveToNewKey(keyIndex, x, y); - mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this); + mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this); } else if (!isMinorMoveBounce(x, y, keyIndex)) { resetMultiTap(); keyState.onMoveToNewKey(keyIndex, x, y); - mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this); + mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this); } } else { if (keyState.getKeyIndex() != NOT_A_KEY) { @@ -489,7 +492,7 @@ public class PointerTracker { return; final boolean isMultiTap = - (eventTime < mLastTapTime + MULTITAP_INTERVAL && keyIndex == mLastSentIndex); + (eventTime < mLastTapTime + mMultiTapKeyTimeout && keyIndex == mLastSentIndex); if (key.codes.length > 1) { mInMultiTap = true; if (isMultiTap) { -- cgit v1.2.3-83-g751a From 7e1f5a2d5a96c74691b3b09fa986efb7161e5a12 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 8 Oct 2010 22:17:16 +0900 Subject: Make sure to set symbol keyboard shifted To avoid a corner case of bug#3070963, in toggleShift() method of KeyboardSwitcher, the shifted symbol keyboard will be set if current keyboard is symbol keyboard or is not shifted symbol keyboard. This change also implements mini keyboard cache with WeakHashMap. Bug: 3070963 Change-Id: I868fc072e2f21bddded1622b800a53b9a6a43e91 --- .../inputmethod/latin/KeyboardSwitcher.java | 19 ++++++++++------ .../com/android/inputmethod/latin/LatinIME.java | 25 +++++++++++----------- .../inputmethod/latin/LatinKeyboardBaseView.java | 6 ++---- 3 files changed, 27 insertions(+), 23 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java index ebf2f4e60..86dbf1f60 100644 --- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java @@ -23,9 +23,9 @@ import android.preference.PreferenceManager; import android.view.InflateException; import java.lang.ref.SoftReference; +import java.util.Arrays; import java.util.HashMap; import java.util.Locale; -import java.util.Map; public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -105,7 +105,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha private KeyboardId mSymbolsShiftedId; private KeyboardId mCurrentId; - private final Map> mKeyboards; + private final HashMap> mKeyboards; private int mMode = MODE_NONE; /** One of the MODE_XXX values */ private int mImeOptions; @@ -194,11 +194,17 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha public final boolean mEnableShiftLock; public final boolean mHasVoice; + private final int mHashCode; + public KeyboardId(int xml, int mode, boolean enableShiftLock, boolean hasVoice) { this.mXml = xml; this.mKeyboardMode = mode; this.mEnableShiftLock = enableShiftLock; this.mHasVoice = hasVoice; + + this.mHashCode = Arrays.hashCode(new Object[] { + xml, mode, enableShiftLock, hasVoice + }); } public KeyboardId(int xml, boolean hasVoice) { @@ -219,8 +225,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha @Override public int hashCode() { - return (mXml + 1) * (mKeyboardMode + 1) * (mEnableShiftLock ? 2 : 1) - * (mHasVoice ? 4 : 8); + return mHashCode; } } @@ -378,7 +383,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha } public void toggleShift() { - if (mCurrentId.equals(mSymbolsId)) { + if (isAlphabetMode()) + return; + if (mCurrentId.equals(mSymbolsId) || !mCurrentId.equals(mSymbolsShiftedId)) { LatinKeyboard symbolsShiftedKeyboard = getKeyboard(mSymbolsShiftedId); mCurrentId = mSymbolsShiftedId; mInputView.setKeyboard(symbolsShiftedKeyboard); @@ -390,7 +397,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha symbolsShiftedKeyboard.setShiftLocked(true); symbolsShiftedKeyboard.setImeOptions(mInputMethodService.getResources(), mMode, mImeOptions); - } else if (mCurrentId.equals(mSymbolsShiftedId)) { + } else { LatinKeyboard symbolsKeyboard = getKeyboard(mSymbolsId); mCurrentId = mSymbolsId; mInputView.setKeyboard(symbolsKeyboard); diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 8eeae8600..7f84ed775 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -159,7 +159,7 @@ public class LatinIME extends InputMethodService private AlertDialog mOptionsDialog; private AlertDialog mVoiceWarningDialog; - KeyboardSwitcher mKeyboardSwitcher; + /* package */ KeyboardSwitcher mKeyboardSwitcher; private UserDictionary mUserDictionary; private UserBigramDictionary mUserBigramDictionary; @@ -168,7 +168,7 @@ public class LatinIME extends InputMethodService private Hints mHints; - Resources mResources; + private Resources mResources; private String mInputLocale; private String mSystemLocale; @@ -307,7 +307,7 @@ public class LatinIME extends InputMethodService } } - Handler mHandler = new Handler() { + /* package */ Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { @@ -339,7 +339,8 @@ public class LatinIME extends InputMethodService } }; - @Override public void onCreate() { + @Override + public void onCreate() { LatinImeLogger.init(this); super.onCreate(); //setStatusIcon(R.drawable.ime_qwerty); @@ -396,7 +397,7 @@ public class LatinIME extends InputMethodService * Loads a dictionary or multiple separated dictionary * @return returns array of dictionary resource ids */ - static int[] getDictionary(Resources res) { + /* package */ static int[] getDictionary(Resources res) { String packageName = LatinIME.class.getPackage().getName(); XmlResourceParser xrp = res.getXml(R.xml.dictionary); ArrayList dictionaries = new ArrayList(); @@ -1013,9 +1014,6 @@ public class LatinIME extends InputMethodService } private void reloadKeyboards() { - if (mKeyboardSwitcher == null) { - mKeyboardSwitcher = new KeyboardSwitcher(this); - } mKeyboardSwitcher.setLanguageSwitcher(mLanguageSwitcher); if (mKeyboardSwitcher.getInputView() != null && mKeyboardSwitcher.getKeyboardMode() != KeyboardSwitcher.MODE_NONE) { @@ -2406,20 +2404,20 @@ public class LatinIME extends InputMethodService mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_START_TUTORIAL), 500); } - void tutorialDone() { + /* package */ void tutorialDone() { mTutorial = null; } - void promoteToUserDictionary(String word, int frequency) { + /* package */ void promoteToUserDictionary(String word, int frequency) { if (mUserDictionary.isValidWord(word)) return; mUserDictionary.addWord(word, frequency); } - WordComposer getCurrentWord() { + /* package */ WordComposer getCurrentWord() { return mWord; } - boolean getPopupOn() { + /* package */ boolean getPopupOn() { return mPopupOn; } @@ -2576,7 +2574,8 @@ public class LatinIME extends InputMethodService return list; } - @Override protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) { + @Override + protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) { super.dump(fd, fout, args); final Printer p = new PrintWriterPrinter(fout); diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index bcd1bb056..f96a3599d 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -47,10 +47,9 @@ import android.widget.PopupWindow; import android.widget.TextView; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; -import java.util.Map; +import java.util.WeakHashMap; /** * A view that renders a virtual {@link LatinKeyboard}. It handles rendering of keys and @@ -199,7 +198,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private PopupWindow mMiniKeyboardPopup; private LatinKeyboardBaseView mMiniKeyboard; private View mMiniKeyboardParent; - private Map mMiniKeyboardCache; + private final WeakHashMap mMiniKeyboardCache = new WeakHashMap(); private int mMiniKeyboardOriginX; private int mMiniKeyboardOriginY; private long mMiniKeyboardPopupTime; @@ -489,7 +488,6 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mPaint.setAlpha(255); mPadding = new Rect(0, 0, 0, 0); - mMiniKeyboardCache = new HashMap(); mKeyBackground.getPadding(mPadding); mSwipeThreshold = (int) (500 * res.getDisplayMetrics().density); -- cgit v1.2.3-83-g751a From c2d7ac79bdadb4335ed69a4e9631e0ec2e3058f6 Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Sun, 10 Oct 2010 15:40:54 +0900 Subject: Tweak key width for 'o'-popup chars. We'll merge this to master for now, but we should have new attr (such as popupCharWidth) to handle this reasonably in the newly created BaseKeyboard class. bug: 3082178 Change-Id: I024b946aafbbeb07b865a09f489dacb56f0478d0 --- java/res/xml/kbd_popup_narrow_template.xml | 27 ++++++++++++++++++++++ java/res/xml/kbd_qwerty.xml | 2 +- java/res/xml/kbd_qwerty_black.xml | 2 +- .../inputmethod/latin/LatinKeyboardBaseView.java | 22 +++++++++++++----- 4 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 java/res/xml/kbd_popup_narrow_template.xml (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/xml/kbd_popup_narrow_template.xml b/java/res/xml/kbd_popup_narrow_template.xml new file mode 100644 index 000000000..ed3b13003 --- /dev/null +++ b/java/res/xml/kbd_popup_narrow_template.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml index 446467fa4..c6113abf7 100644 --- a/java/res/xml/kbd_qwerty.xml +++ b/java/res/xml/kbd_qwerty.xml @@ -61,7 +61,7 @@ android:popupCharacters="@string/alternates_for_i" /> keys = keyboard.getKeys(); + private static boolean isOneRowKeys(List keys) { if (keys.size() == 0) return false; final int edgeFlags = keys.get(0).edgeFlags; // HACK: The first key of mini keyboard which was inflated from xml and has multiple rows, @@ -1125,24 +1124,35 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx getLocationInWindow(mWindowOffset); } + // Get width of a key in the mini popup keyboard = "miniKeyWidth". + // On the other hand, "popupKey.width" is width of the pressed key on the main keyboard. + // We adjust the position of mini popup keyboard with the edge key in it: + // a) When we have the leftmost key in popup keyboard directly above the pressed key + // Right edges of both keys should be aligned for consistent default selection + // b) When we have the rightmost key in popup keyboard directly above the pressed key + // Left edges of both keys should be aligned for consistent default selection + final List miniKeys = mMiniKeyboard.getKeyboard().getKeys(); + final int miniKeyWidth = miniKeys.size() > 0 ? miniKeys.get(0).width : 0; + // HACK: Have the leftmost number in the popup characters right above the key boolean isNumberAtLeftmost = hasMultiplePopupChars(popupKey) && isNumberAtLeftmostPopupChar(popupKey); int popupX = popupKey.x + mWindowOffset[0]; - int popupY = popupKey.y + mWindowOffset[1]; + popupX += getPaddingLeft(); if (isNumberAtLeftmost) { + popupX += popupKey.width - miniKeyWidth; // adjustment for a) described above popupX -= container.getPaddingLeft(); } else { - popupX += popupKey.width + getPaddingLeft(); + popupX += miniKeyWidth; // adjustment for b) described above popupX -= container.getMeasuredWidth(); popupX += container.getPaddingRight(); } + int popupY = popupKey.y + mWindowOffset[1]; popupY += getPaddingTop(); popupY -= container.getMeasuredHeight(); popupY += container.getPaddingBottom(); final int x = popupX; - final int y = mShowPreview && isOneRowKeyboard(mMiniKeyboard.getKeyboard()) - ? mPopupPreviewDisplayedY : popupY; + final int y = mShowPreview && isOneRowKeys(miniKeys) ? mPopupPreviewDisplayedY : popupY; int adjustedX = x; if (x < 0) { -- cgit v1.2.3-83-g751a From 3d20d999025bbaab96b41d172225a39f7a1017b7 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Tue, 12 Oct 2010 15:02:44 +0900 Subject: Specify keyboard metrics with physical unit "inch" (DO NOT MERGE) This change also introduces the key background drawables which has no fixed bottom padding. Instead of relying on bottom padding in drawable, this change also specifies Keyboard.verticalGap with physical unit. Other keyboard related length, distance and size are also specified by physical unit. Bug: 3066107 Change-Id: I44f3b2eef8086d6e0b0db53d38f08487549060c6 --- .../btn_keyboard_key_dark_normal.9.png | Bin 521 -> 511 bytes .../btn_keyboard_key_dark_normal_off.9.png | Bin 783 -> 760 bytes .../btn_keyboard_key_dark_normal_on.9.png | Bin 1112 -> 1088 bytes .../btn_keyboard_key_dark_pressed.9.png | Bin 747 -> 730 bytes .../btn_keyboard_key_dark_pressed_off.9.png | Bin 962 -> 940 bytes .../btn_keyboard_key_dark_pressed_on.9.png | Bin 1282 -> 1260 bytes .../btn_keyboard_key_light_normal.9.png | Bin 481 -> 461 bytes .../btn_keyboard_key_light_pressed.9.png | Bin 1643 -> 811 bytes .../btn_keyboard_key_dark_normal.9.png | Bin 385 -> 377 bytes .../btn_keyboard_key_dark_normal_off.9.png | Bin 550 -> 545 bytes .../btn_keyboard_key_dark_normal_on.9.png | Bin 813 -> 806 bytes .../btn_keyboard_key_dark_pressed.9.png | Bin 518 -> 514 bytes .../btn_keyboard_key_dark_pressed_off.9.png | Bin 700 -> 687 bytes .../btn_keyboard_key_dark_pressed_on.9.png | Bin 950 -> 940 bytes .../btn_keyboard_key_light_normal.9.png | Bin 358 -> 355 bytes .../btn_keyboard_key_light_pressed.9.png | Bin 530 -> 526 bytes java/res/layout/input_gingerbread.xml | 1 + java/res/values-land/dimens.xml | 14 ++-- java/res/values/dimens.xml | 26 +++--- java/res/xml-da/kbd_qwerty.xml | 6 +- java/res/xml-da/kbd_qwerty_black.xml | 6 +- java/res/xml-de/kbd_qwerty.xml | 6 +- java/res/xml-de/kbd_qwerty_black.xml | 6 +- java/res/xml-fr/kbd_qwerty.xml | 6 +- java/res/xml-fr/kbd_qwerty_black.xml | 6 +- java/res/xml-iw/kbd_qwerty.xml | 6 +- java/res/xml-iw/kbd_qwerty_black.xml | 6 +- java/res/xml-nb/kbd_qwerty.xml | 6 +- java/res/xml-nb/kbd_qwerty_black.xml | 6 +- java/res/xml-ru/kbd_qwerty.xml | 6 +- java/res/xml-ru/kbd_qwerty_black.xml | 6 +- java/res/xml-sr/kbd_qwerty.xml | 6 +- java/res/xml-sr/kbd_qwerty_black.xml | 6 +- java/res/xml-sv/kbd_qwerty.xml | 6 +- java/res/xml-sv/kbd_qwerty_black.xml | 6 +- java/res/xml/kbd_phone.xml | 2 +- java/res/xml/kbd_phone_black.xml | 2 +- java/res/xml/kbd_phone_symbols.xml | 2 +- java/res/xml/kbd_phone_symbols_black.xml | 2 +- java/res/xml/kbd_popup_narrow_template.xml | 2 +- java/res/xml/kbd_popup_template.xml | 2 +- java/res/xml/kbd_qwerty.xml | 6 +- java/res/xml/kbd_qwerty_black.xml | 6 +- java/res/xml/kbd_symbols.xml | 2 +- java/res/xml/kbd_symbols_black.xml | 2 +- java/res/xml/kbd_symbols_shift.xml | 2 +- java/res/xml/kbd_symbols_shift_black.xml | 2 +- java/res/xml/popup_comma.xml | 2 +- java/res/xml/popup_domains.xml | 2 +- java/res/xml/popup_mic.xml | 2 +- java/res/xml/popup_punctuation.xml | 2 +- java/res/xml/popup_smileys.xml | 2 +- .../android/inputmethod/latin/LatinKeyboard.java | 32 +++++--- .../inputmethod/latin/LatinKeyboardBaseView.java | 89 ++++++++++++++------- 54 files changed, 196 insertions(+), 104 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png index 0c4820b34..01fc8ca78 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png index 5a20da1db..af4017e2c 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png index 4ec703d6c..4c35aca95 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png index 93322d2e2..174f3452c 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png index 5a9c722ce..1fcbd9a88 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png index 99b6cb170..072753f37 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png index 7dc59bf82..1ad746053 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png index c150341e3..ccd59d5fa 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png index 53fe9c97d..4e337fa08 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png index 649ef9773..fe18497d8 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png index 93f7d87c2..00aab3d5a 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png index 8560b3ba7..ac0bfd3c1 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png index 778abaf24..ea2f35789 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png index 2a23945e5..6195ac0d4 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png index 6af2d8d0c..50cd06ae3 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png index fdaf69966..7ce52f0f5 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png differ diff --git a/java/res/layout/input_gingerbread.xml b/java/res/layout/input_gingerbread.xml index 8f59cae21..73cf0a3fa 100644 --- a/java/res/layout/input_gingerbread.xml +++ b/java/res/layout/input_gingerbread.xml @@ -25,6 +25,7 @@ android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingBottom="@dimen/keyboard_bottom_padding" android:background="@drawable/keyboard_dark_background" android:textStyle="bold" diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml index 1396bff9b..043f4b363 100644 --- a/java/res/values-land/dimens.xml +++ b/java/res/values-land/dimens.xml @@ -19,13 +19,17 @@ --> - 47dip + + 0.250in + 0.020in + 0.270in + 0.0in 38dip 63dip 2dip - - 79.9dip - - -47dip + + 0.459in + + -0.270in diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index 1378be72c..c00c56a89 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -19,7 +19,11 @@ --> - 54dip + + 0.290in + 0.035in + 0.325in + 0.06in 22dip 42dip 63dip @@ -27,18 +31,20 @@ 2.5in - 22sp - 14sp - 0dip - 80dip + 0.13in + 0.083in + 0.236in + 0.000in + + 0.464in - - 91.8dip - - -54dip + + 0.553in + + -0.325in 0.05in - -0.06in + -0.05in 0.3in diff --git a/java/res/xml-da/kbd_qwerty.xml b/java/res/xml-da/kbd_qwerty.xml index 084795463..6e2e69208 100644 --- a/java/res/xml-da/kbd_qwerty.xml +++ b/java/res/xml-da/kbd_qwerty.xml @@ -28,10 +28,12 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:keyWidth="9.09%p" android:horizontalGap="0px" - android:verticalGap="0px" + android:verticalGap="@dimen/key_bottom_gap" android:keyHeight="@dimen/key_height" > - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/java/res/xml/kbd_popup_template.xml b/java/res/xml/kbd_popup_template.xml index aca46930f..a287be1fd 100644 --- a/java/res/xml/kbd_popup_template.xml +++ b/java/res/xml/kbd_popup_template.xml @@ -22,6 +22,6 @@ android:keyWidth="10%p" android:horizontalGap="0px" android:verticalGap="0px" - android:keyHeight="@dimen/key_height" + android:keyHeight="@dimen/popup_key_height" > diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml index c6113abf7..a2c9b2b8e 100644 --- a/java/res/xml/kbd_qwerty.xml +++ b/java/res/xml/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:keyWidth="10%p" android:horizontalGap="0px" - android:verticalGap="0px" + android:verticalGap="@dimen/key_bottom_gap" android:keyHeight="@dimen/key_height" > - + - + mTextHeightCache = new HashMap(); + // Distance from horizontal center of the key, proportional to key label text height. + private final float KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR = 0.55f; + private final String KEY_LABEL_HEIGHT_REFERENCE_CHAR = "H"; private final UIHandler mHandler = new UIHandler(); @@ -465,7 +474,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mPreviewPopup = new PopupWindow(context); if (previewLayout != 0) { mPreviewText = (TextView) inflate.inflate(previewLayout, null); - mPreviewTextSizeLarge = (int) mPreviewText.getTextSize(); + mPreviewTextSizeLarge = (int) res.getDimension(R.dimen.key_preview_text_size_large); mPreviewPopup.setContentView(mPreviewText); mPreviewPopup.setBackgroundDrawable(null); } else { @@ -576,6 +585,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx LatinImeLogger.onSetKeyboard(keyboard); mKeys = mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(), -getPaddingTop() + mVerticalCorrection); + mKeyboardVerticalGap = (int)getResources().getDimension(R.dimen.key_bottom_gap); for (PointerTracker tracker : mPointerTrackers) { tracker.setKeyboard(mKeys, mKeyHysteresisDistance); } @@ -720,7 +730,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx int dimensionSum = 0; for (int i = 0; i < length; i++) { Key key = keys[i]; - dimensionSum += Math.min(key.width, key.height) + key.gap; + dimensionSum += Math.min(key.width, key.height + mKeyboardVerticalGap) + key.gap; } if (dimensionSum < 0 || length == 0) return; mKeyDetector.setProximityThreshold((int) (dimensionSum * 1.4f / length)); @@ -772,13 +782,14 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx paint.setColor(mKeyTextColor); boolean drawSingleKey = false; if (invalidKey != null && canvas.getClipBounds(clipRegion)) { - // Is clipRegion completely contained within the invalidated key? - if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && - invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && - invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && - invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { - drawSingleKey = true; - } + // TODO we should use Rect.inset and Rect.contains here. + // Is clipRegion completely contained within the invalidated key? + if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && + invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && + invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && + invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { + drawSingleKey = true; + } } canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR); final int keyCount = keys.length; @@ -794,8 +805,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx String label = key.label == null? null : adjustCase(key.label).toString(); final Rect bounds = keyBackground.getBounds(); - if (key.width != bounds.right || - key.height != bounds.bottom) { + if (key.width != bounds.right || key.height != bounds.bottom) { keyBackground.setBounds(0, 0, key.width, key.height); } canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop); @@ -804,22 +814,34 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx boolean shouldDrawIcon = true; if (label != null) { // For characters, use large font. For labels like "Done", use small font. + final int labelSize; if (label.length() > 1 && key.codes.length < 2) { - paint.setTextSize(mLabelTextSize); + labelSize = mLabelTextSize; paint.setTypeface(Typeface.DEFAULT_BOLD); } else { - paint.setTextSize(mKeyTextSize); + labelSize = mKeyTextSize; paint.setTypeface(mKeyTextStyle); } + paint.setTextSize(labelSize); + + Integer labelHeightValue = mTextHeightCache.get(labelSize); + final int labelHeight; + if (labelHeightValue != null) { + labelHeight = labelHeightValue; + } else { + Rect textBounds = new Rect(); + paint.getTextBounds(KEY_LABEL_HEIGHT_REFERENCE_CHAR, 0, 1, textBounds); + labelHeight = textBounds.height(); + mTextHeightCache.put(labelSize, labelHeight); + } + // Draw a drop shadow for the text paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor); - // Draw the text - canvas.drawText(label, - (key.width - padding.left - padding.right) / 2 - + padding.left, - (key.height - padding.top - padding.bottom) / 2 - + (paint.getTextSize() - paint.descent()) / 2 + padding.top, - paint); + final int centerX = (key.width + padding.left - padding.right) / 2; + final int centerY = (key.height + padding.top - padding.bottom) / 2; + final float baseline = centerY + + labelHeight * KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR; + canvas.drawText(label, centerX, baseline, paint); // Turn off drop shadow paint.setShadowLayer(0, 0, 0, 0); @@ -829,15 +851,23 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } if (key.icon != null && shouldDrawIcon) { // Special handing for the upper-right number hint icons - final int drawableWidth = isNumberAtEdgeOfPopupChars(key) ? - key.width : key.icon.getIntrinsicWidth(); - final int drawableHeight = isNumberAtEdgeOfPopupChars(key) ? - key.height : key.icon.getIntrinsicHeight(); - - final int drawableX = (key.width - padding.left - padding.right - - drawableWidth) / 2 + padding.left; - final int drawableY = (key.height - padding.top - padding.bottom - - drawableHeight) / 2 + padding.top; + final int drawableWidth; + final int drawableHeight; + final int drawableX; + final int drawableY; + if (isNumberAtEdgeOfPopupChars(key)) { + drawableWidth = key.width; + drawableHeight = key.height; + drawableX = 0; + drawableY = NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL; + } else { + drawableWidth = key.icon.getIntrinsicWidth(); + drawableHeight = key.icon.getIntrinsicHeight(); + drawableX = (key.width - padding.left - padding.right - drawableWidth) + / 2 + padding.left; + drawableY = (key.height - padding.top - padding.bottom - drawableHeight) + / 2 + padding.top; + } canvas.translate(drawableX, drawableY); key.icon.setBounds(0, 0, drawableWidth, drawableHeight); key.icon.draw(canvas); @@ -1003,6 +1033,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (key == null) return; mInvalidatedKey = key; + // TODO we should clean up this and record key's region to use in onBufferDraw. mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(), key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); onBufferDraw(); -- cgit v1.2.3-83-g751a From 179fa2c03e749df736f43e0838200bec52b4808a Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Tue, 12 Oct 2010 16:16:38 +0900 Subject: DO NOT MERGE. Add visual indicator that long press , or mic key will bring up Settings bug:3084022 Change-Id: I8b38e2803eb32469653484701882af35108eb69a --- java/res/drawable-hdpi/hint_settings.9.png | Bin 0 -> 236 bytes java/res/drawable-mdpi/hint_settings.9.png | Bin 0 -> 222 bytes .../android/inputmethod/latin/LatinKeyboard.java | 34 +++++++++++++++++++-- .../inputmethod/latin/LatinKeyboardBaseView.java | 12 ++++++-- 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 java/res/drawable-hdpi/hint_settings.9.png create mode 100644 java/res/drawable-mdpi/hint_settings.9.png (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/drawable-hdpi/hint_settings.9.png b/java/res/drawable-hdpi/hint_settings.9.png new file mode 100644 index 000000000..85c183a61 Binary files /dev/null and b/java/res/drawable-hdpi/hint_settings.9.png differ diff --git a/java/res/drawable-mdpi/hint_settings.9.png b/java/res/drawable-mdpi/hint_settings.9.png new file mode 100644 index 000000000..5077f3e6a Binary files /dev/null and b/java/res/drawable-mdpi/hint_settings.9.png differ diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index f0d5ef60a..cf702f391 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -61,6 +61,7 @@ public class LatinKeyboard extends Keyboard { private Key mShiftKey; private Key mEnterKey; private Key mF1Key; + private Drawable mF1HintIcon; private Key mSpaceKey; private Key m123Key; private final int NUMBER_HINT_COUNT = 10; @@ -135,6 +136,7 @@ public class LatinKeyboard extends Keyboard { mButtonArrowRightIcon = res.getDrawable(R.drawable.sym_keyboard_language_arrows_right); m123MicIcon = res.getDrawable(R.drawable.sym_keyboard_123_mic); m123MicPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_123_mic); + mF1HintIcon = res.getDrawable(R.drawable.hint_settings); setDefaultBounds(m123MicPreviewIcon); sSpacebarVerticalCorrection = res.getDimensionPixelOffset( R.dimen.spacebar_vertical_correction); @@ -368,13 +370,18 @@ public class LatinKeyboard extends Keyboard { if (mHasVoiceButton && mVoiceEnabled) { mF1Key.codes = new int[] { LatinKeyboardView.KEYCODE_VOICE }; mF1Key.label = null; - mF1Key.icon = mMicIcon; + // HACK: draw mMicIcon and mF1HintIcon at the same time + mF1Key.icon = new BitmapDrawable(mRes, drawSynthesizedSettingsHintImage( + mF1Key.width, mF1Key.height + mVerticalGap, mMicIcon, mF1HintIcon)); mF1Key.iconPreview = mMicPreviewIcon; mF1Key.popupResId = R.xml.popup_mic; } else { mF1Key.label = ","; mF1Key.codes = new int[] { ',' }; - mF1Key.icon = null; + // HACK: draw only mF1HintIcon on offscreen buffer to adjust position of '...' to the + // above synthesized icon + mF1Key.icon = new BitmapDrawable(mRes, drawSynthesizedSettingsHintImage( + mF1Key.width, mF1Key.height + mVerticalGap, null, mF1HintIcon)); mF1Key.iconPreview = null; mF1Key.popupResId = R.xml.popup_comma; } @@ -424,6 +431,29 @@ public class LatinKeyboard extends Keyboard { return bounds.width(); } + // Overlay two images. Note that mainIcon can be null. + private Bitmap drawSynthesizedSettingsHintImage( + int width, int height, Drawable mainIcon, Drawable hintIcon) { + if (hintIcon == null) + return null; + final Bitmap buffer = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + final Canvas canvas = new Canvas(buffer); + canvas.drawColor(mRes.getColor(R.color.latinkeyboard_transparent), PorterDuff.Mode.CLEAR); + // draw main icon at centered position + if (mainIcon != null) { + setDefaultBounds(mainIcon); + final int drawableX = (width - mainIcon.getIntrinsicWidth()) / 2; + final int drawableY = (height - mainIcon.getIntrinsicHeight()) / 2; + canvas.translate(drawableX, drawableY); + mainIcon.draw(canvas); + canvas.translate(-drawableX, -drawableY); + } + // draw hint icon fully in the key + hintIcon.setBounds(0, 0, width, height); + hintIcon.draw(canvas); + return buffer; + } + // Layout local language name and left and right arrow on space bar. private static String layoutSpaceBar(Paint paint, Locale locale, Drawable lArrow, Drawable rArrow, int width, int height, float origTextSize, diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 9ff7b9aef..b3f1364d8 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -847,7 +847,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Usually don't draw icon if label is not null, but we draw icon for the number // hint. - shouldDrawIcon = isNumberAtEdgeOfPopupChars(key); + shouldDrawIcon = isCommaKeyLabelOrNumberAtEdgeOfPopupChars(key); } if (key.icon != null && shouldDrawIcon) { // Special handing for the upper-right number hint icons @@ -940,7 +940,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (key == null) return; // Should not draw number hint icons - if (key.icon != null && !isNumberAtEdgeOfPopupChars(key)) { + if (key.icon != null && !isCommaKeyLabelOrNumberAtEdgeOfPopupChars(key)) { mPreviewText.setCompoundDrawables(null, null, null, key.iconPreview != null ? key.iconPreview : key.icon); mPreviewText.setText(null); @@ -1221,6 +1221,14 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx return false; } + private static boolean isCommaKeyLabelOrNumberAtEdgeOfPopupChars(Key key) { + return isNumberAtEdgeOfPopupChars(key) || isCommaKeyLabel(key); + } + + private static boolean isCommaKeyLabel(Key key) { + return ",".equals(key.label); + } + private static boolean isNumberAtEdgeOfPopupChars(Key key) { return isNumberAtLeftmostPopupChar(key) || isNumberAtRightmostPopupChar(key); } -- cgit v1.2.3-83-g751a From 8a26e85387d7fb964b76af502a6e89574d85d58d Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Fri, 15 Oct 2010 17:56:05 +0900 Subject: Fix an issue of adding extra character. LatinKeyboardBaseView should have removed "long pressed" pointer tracker from the multi-touch pointer queue. bug: 3099130 Change-Id: I3d358a373b0de07558a204e9ff5a95e9ece38bcc --- java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index b3f1364d8..c1b1008b0 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -214,7 +214,10 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private OnKeyboardActionListener mKeyboardActionListener; private final ArrayList mPointerTrackers = new ArrayList(); + + // TODO: Let the PointerTracker class manage this pointer queue private final PointerQueue mPointerQueue = new PointerQueue(); + private final boolean mHasDistinctMultitouch; private int mOldPointerCount = 1; @@ -1053,8 +1056,10 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx boolean result = onLongPress(popupKey); if (result) { dismissKeyPreview(); - tracker.setAlreadyProcessed(); mMiniKeyboardTrackerId = tracker.mPointerId; + // Mark this tracker "already processed" and remove it from the pointer queue + tracker.setAlreadyProcessed(); + mPointerQueue.remove(tracker); } return result; } -- cgit v1.2.3-83-g751a From cd7b7d3e8febcfbcab4628d1fc5b87e809ce56cc Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Tue, 12 Oct 2010 15:02:44 +0900 Subject: Specify keyboard metrics with physical unit "inch" Cherrypick I44f3b2eef8086d6e0b0db53d38f08487549060c6 from Gingerbread This change also introduces the key background drawables which has no fixed bottom padding. Instead of relying on bottom padding in drawable, this change also specifies Keyboard.verticalGap with physical unit. Other keyboard related length, distance and size are also specified by physical unit. Bug: 3066107 Change-Id: Ib38355ebfc2f8d5b1d26c4e90eba87196fbeddfa --- .../btn_keyboard_key_dark_normal.9.png | Bin 521 -> 511 bytes .../btn_keyboard_key_dark_normal_off.9.png | Bin 783 -> 760 bytes .../btn_keyboard_key_dark_normal_on.9.png | Bin 1112 -> 1088 bytes .../btn_keyboard_key_dark_pressed.9.png | Bin 747 -> 730 bytes .../btn_keyboard_key_dark_pressed_off.9.png | Bin 962 -> 940 bytes .../btn_keyboard_key_dark_pressed_on.9.png | Bin 1282 -> 1260 bytes .../btn_keyboard_key_light_normal.9.png | Bin 481 -> 461 bytes .../btn_keyboard_key_light_pressed.9.png | Bin 1643 -> 811 bytes .../btn_keyboard_key_dark_normal.9.png | Bin 385 -> 377 bytes .../btn_keyboard_key_dark_normal_off.9.png | Bin 550 -> 545 bytes .../btn_keyboard_key_dark_normal_on.9.png | Bin 813 -> 806 bytes .../btn_keyboard_key_dark_pressed.9.png | Bin 518 -> 514 bytes .../btn_keyboard_key_dark_pressed_off.9.png | Bin 700 -> 687 bytes .../btn_keyboard_key_dark_pressed_on.9.png | Bin 950 -> 940 bytes .../btn_keyboard_key_light_normal.9.png | Bin 358 -> 355 bytes .../btn_keyboard_key_light_pressed.9.png | Bin 530 -> 526 bytes java/res/layout/input_gingerbread.xml | 1 + java/res/values-land/dimens.xml | 14 ++-- java/res/values-xlarge/dimens.xml | 28 ++++--- java/res/values/dimens.xml | 37 +++++---- java/res/xml-da/kbd_qwerty.xml | 6 +- java/res/xml-da/kbd_qwerty_black.xml | 6 +- java/res/xml-de/kbd_qwerty.xml | 6 +- java/res/xml-de/kbd_qwerty_black.xml | 6 +- java/res/xml-fr/kbd_qwerty.xml | 6 +- java/res/xml-fr/kbd_qwerty_black.xml | 6 +- java/res/xml-iw/kbd_qwerty.xml | 6 +- java/res/xml-iw/kbd_qwerty_black.xml | 6 +- java/res/xml-nb/kbd_qwerty.xml | 6 +- java/res/xml-nb/kbd_qwerty_black.xml | 6 +- java/res/xml-ru/kbd_qwerty.xml | 6 +- java/res/xml-ru/kbd_qwerty_black.xml | 6 +- java/res/xml-sr/kbd_qwerty.xml | 6 +- java/res/xml-sr/kbd_qwerty_black.xml | 6 +- java/res/xml-sv/kbd_qwerty.xml | 6 +- java/res/xml-sv/kbd_qwerty_black.xml | 6 +- java/res/xml-xlarge/kbd_qwerty.xml | 2 +- java/res/xml-xlarge/popup_smileys.xml | 2 +- java/res/xml/kbd_phone.xml | 2 +- java/res/xml/kbd_phone_black.xml | 2 +- java/res/xml/kbd_phone_symbols.xml | 2 +- java/res/xml/kbd_phone_symbols_black.xml | 2 +- java/res/xml/kbd_popup_narrow_template.xml | 2 +- java/res/xml/kbd_popup_template.xml | 2 +- java/res/xml/kbd_qwerty.xml | 6 +- java/res/xml/kbd_qwerty_black.xml | 6 +- java/res/xml/kbd_symbols.xml | 2 +- java/res/xml/kbd_symbols_black.xml | 2 +- java/res/xml/kbd_symbols_shift.xml | 2 +- java/res/xml/kbd_symbols_shift_black.xml | 2 +- java/res/xml/popup_comma.xml | 2 +- java/res/xml/popup_domains.xml | 2 +- java/res/xml/popup_mic.xml | 2 +- java/res/xml/popup_punctuation.xml | 2 +- java/res/xml/popup_smileys.xml | 2 +- .../android/inputmethod/latin/LatinKeyboard.java | 65 +++++++++------ .../inputmethod/latin/LatinKeyboardBaseView.java | 89 ++++++++++++++------- 57 files changed, 240 insertions(+), 136 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png index 0c4820b34..01fc8ca78 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png index 5a20da1db..af4017e2c 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png index 4ec703d6c..4c35aca95 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png index 93322d2e2..174f3452c 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png index 5a9c722ce..1fcbd9a88 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png index 99b6cb170..072753f37 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png index 7dc59bf82..1ad746053 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png differ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png index c150341e3..ccd59d5fa 100644 Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png index 53fe9c97d..4e337fa08 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png index 649ef9773..fe18497d8 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png index 93f7d87c2..00aab3d5a 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png index 8560b3ba7..ac0bfd3c1 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png index 778abaf24..ea2f35789 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png index 2a23945e5..6195ac0d4 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png index 6af2d8d0c..50cd06ae3 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png differ diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png index fdaf69966..7ce52f0f5 100644 Binary files a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png differ diff --git a/java/res/layout/input_gingerbread.xml b/java/res/layout/input_gingerbread.xml index 8f59cae21..73cf0a3fa 100644 --- a/java/res/layout/input_gingerbread.xml +++ b/java/res/layout/input_gingerbread.xml @@ -25,6 +25,7 @@ android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingBottom="@dimen/keyboard_bottom_padding" android:background="@drawable/keyboard_dark_background" android:textStyle="bold" diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml index 1396bff9b..043f4b363 100644 --- a/java/res/values-land/dimens.xml +++ b/java/res/values-land/dimens.xml @@ -19,13 +19,17 @@ --> - 47dip + + 0.250in + 0.020in + 0.270in + 0.0in 38dip 63dip 2dip - - 79.9dip - - -47dip + + 0.459in + + -0.270in diff --git a/java/res/values-xlarge/dimens.xml b/java/res/values-xlarge/dimens.xml index 5674ef628..d2cd6c7d1 100644 --- a/java/res/values-xlarge/dimens.xml +++ b/java/res/values-xlarge/dimens.xml @@ -19,18 +19,26 @@ --> - 72dip - 46dip - 0dip - 28sp - 16sp - 40dip + + 0.450in + 0.0in + 0.450in + 0.10in + + 0.720in - - 122.4dip - - -72dip + + 0.765in + + -0.450in + + 0.175in + 0.100in + 0.245in 0.0in + + 46dip + 0dip diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index 1378be72c..2fa47ae52 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -19,26 +19,35 @@ --> - 54dip - 22dip + + 0.290in + 0.035in + 0.325in + 0.06in + + 0.464in + + + 0.553in + + -0.325in + + 0.13in + 0.083in + 0.236in + 0.000in + + -0.05in + 42dip 63dip 4dip 2.5in - 22sp - 14sp - 0dip - 80dip - - - 91.8dip - - -54dip + 22dip + 0.05in - - -0.06in 0.3in diff --git a/java/res/xml-da/kbd_qwerty.xml b/java/res/xml-da/kbd_qwerty.xml index c66290c62..66771c287 100644 --- a/java/res/xml-da/kbd_qwerty.xml +++ b/java/res/xml-da/kbd_qwerty.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/java/res/xml-xlarge/popup_smileys.xml b/java/res/xml-xlarge/popup_smileys.xml index cf30a2461..2cfcf741d 100644 --- a/java/res/xml-xlarge/popup_smileys.xml +++ b/java/res/xml-xlarge/popup_smileys.xml @@ -23,7 +23,7 @@ latin:keyWidth="7.5%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > diff --git a/java/res/xml/kbd_popup_template.xml b/java/res/xml/kbd_popup_template.xml index cbb705835..f1aa86f39 100644 --- a/java/res/xml/kbd_popup_template.xml +++ b/java/res/xml/kbd_popup_template.xml @@ -22,6 +22,6 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml index c14c7fa0c..21a7ccb78 100644 --- a/java/res/xml/kbd_qwerty.xml +++ b/java/res/xml/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - + - + mTextHeightCache = new HashMap(); + // Distance from horizontal center of the key, proportional to key label text height. + private final float KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR = 0.55f; + private final String KEY_LABEL_HEIGHT_REFERENCE_CHAR = "H"; private final UIHandler mHandler = new UIHandler(); @@ -468,7 +477,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mPreviewPopup = new PopupWindow(context); if (previewLayout != 0) { mPreviewText = (TextView) inflate.inflate(previewLayout, null); - mPreviewTextSizeLarge = (int) mPreviewText.getTextSize(); + mPreviewTextSizeLarge = (int) res.getDimension(R.dimen.key_preview_text_size_large); mPreviewPopup.setContentView(mPreviewText); mPreviewPopup.setBackgroundDrawable(null); } else { @@ -579,6 +588,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx LatinImeLogger.onSetKeyboard(keyboard); mKeys = mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(), -getPaddingTop() + mVerticalCorrection); + mKeyboardVerticalGap = (int)getResources().getDimension(R.dimen.key_bottom_gap); for (PointerTracker tracker : mPointerTrackers) { tracker.setKeyboard(keyboard, mKeys, mKeyHysteresisDistance); } @@ -723,7 +733,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx int dimensionSum = 0; for (int i = 0; i < length; i++) { Key key = keys[i]; - dimensionSum += Math.min(key.width, key.height) + key.gap; + dimensionSum += Math.min(key.width, key.height + mKeyboardVerticalGap) + key.gap; } if (dimensionSum < 0 || length == 0) return; mKeyDetector.setProximityThreshold((int) (dimensionSum * 1.4f / length)); @@ -775,13 +785,14 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx paint.setColor(mKeyTextColor); boolean drawSingleKey = false; if (invalidKey != null && canvas.getClipBounds(clipRegion)) { - // Is clipRegion completely contained within the invalidated key? - if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && - invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && - invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && - invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { - drawSingleKey = true; - } + // TODO we should use Rect.inset and Rect.contains here. + // Is clipRegion completely contained within the invalidated key? + if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && + invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && + invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && + invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { + drawSingleKey = true; + } } canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR); final int keyCount = keys.length; @@ -797,8 +808,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx String label = key.label == null? null : adjustCase(key.label).toString(); final Rect bounds = keyBackground.getBounds(); - if (key.width != bounds.right || - key.height != bounds.bottom) { + if (key.width != bounds.right || key.height != bounds.bottom) { keyBackground.setBounds(0, 0, key.width, key.height); } canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop); @@ -818,22 +828,34 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } // For characters, use large font. For labels like "Done", use small font. + final int labelSize; if (label.length() > 1 && key.codes.length < 2) { - paint.setTextSize(mLabelTextSize); + labelSize = mLabelTextSize; paint.setTypeface(Typeface.DEFAULT_BOLD); } else { - paint.setTextSize(mKeyTextSize); + labelSize = mKeyTextSize; paint.setTypeface(mKeyTextStyle); } + paint.setTextSize(labelSize); + + Integer labelHeightValue = mTextHeightCache.get(labelSize); + final int labelHeight; + if (labelHeightValue != null) { + labelHeight = labelHeightValue; + } else { + Rect textBounds = new Rect(); + paint.getTextBounds(KEY_LABEL_HEIGHT_REFERENCE_CHAR, 0, 1, textBounds); + labelHeight = textBounds.height(); + mTextHeightCache.put(labelSize, labelHeight); + } + // Draw a drop shadow for the text paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor); - // Draw the text - canvas.drawText(label, - (key.width - padding.left - padding.right) / 2 - + padding.left, - (key.height - padding.top - padding.bottom) / 2 - + (paint.getTextSize() - paint.descent()) / 2 + padding.top, - paint); + final int centerX = (key.width + padding.left - padding.right) / 2; + final int centerY = (key.height + padding.top - padding.bottom) / 2; + final float baseline = centerY + + labelHeight * KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR; + canvas.drawText(label, centerX, baseline, paint); // Turn off drop shadow paint.setShadowLayer(0, 0, 0, 0); } @@ -843,16 +865,22 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (icon == null && key.hintIcon != null && drawHintIcon) icon = key.hintIcon; if (icon != null) { - // Hack for key hint icon displaying at the top right corner of the key. - final int drawableWidth = icon == key.hintIcon - ? key.width : icon.getIntrinsicWidth(); - final int drawableHeight = icon == key.hintIcon - ? key.height : icon.getIntrinsicHeight(); - - final int drawableX = (key.width - padding.left - padding.right - - drawableWidth) / 2 + padding.left; - final int drawableY = (key.height - padding.top - padding.bottom - - drawableHeight) / 2 + padding.top; + // Special handing for the upper-right number hint icons + final int drawableWidth; + final int drawableHeight; + final int drawableX; + final int drawableY; + if (icon == key.hintIcon) { + drawableWidth = key.width; + drawableHeight = key.height; + drawableX = 0; + drawableY = NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL; + } else { + drawableWidth = key.icon.getIntrinsicWidth(); + drawableHeight = key.icon.getIntrinsicHeight(); + drawableX = (key.width + padding.left - padding.right - drawableWidth) / 2; + drawableY = (key.height + padding.top - padding.bottom - drawableHeight) / 2; + } canvas.translate(drawableX, drawableY); icon.setBounds(0, 0, drawableWidth, drawableHeight); icon.draw(canvas); @@ -1020,6 +1048,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (key == null) return; mInvalidatedKey = key; + // TODO we should clean up this and record key's region to use in onBufferDraw. mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(), key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); onBufferDraw(); -- cgit v1.2.3-83-g751a From 3740a26c21ddbcfffd2ddccee3918810e026a6d4 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Sun, 17 Oct 2010 19:10:46 +0900 Subject: Showing popup preview only when IME is in foreground Bug: 3100922 Change-Id: Icd59fc3978dc1fccb523a368b0a7d4549fc2db78 --- .../com/android/inputmethod/latin/LatinIME.java | 4 +++ .../inputmethod/latin/LatinKeyboardBaseView.java | 34 +++++++++++++++------- 2 files changed, 28 insertions(+), 10 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 687870622..edda9e866 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -680,6 +680,7 @@ public class LatinIME extends InputMethodService // If we just entered a text field, maybe it has some old text that requires correction checkReCorrectionOnStart(); checkTutorial(attribute.privateImeOptions); + inputView.setForeground(true); if (TRACE) Debug.startMethodTracing("/data/trace/latinime"); } @@ -731,6 +732,9 @@ public class LatinIME extends InputMethodService @Override public void onFinishInputView(boolean finishingInput) { super.onFinishInputView(finishingInput); + LatinKeyboardBaseView inputView = mKeyboardSwitcher.getInputView(); + if (inputView != null) + inputView.setForeground(false); // Remove penging messages related to update suggestions mHandler.removeMessages(MSG_UPDATE_SUGGESTIONS); mHandler.removeMessages(MSG_UPDATE_OLD_SUGGESTIONS); diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 660fe0ed0..872b4d245 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -43,6 +43,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; import android.widget.PopupWindow; import android.widget.TextView; @@ -184,6 +185,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private int mKeyboardVerticalGap; // Key preview popup + private boolean mInForeground; private TextView mPreviewText; private PopupWindow mPreviewPopup; private int mPreviewTextSizeLarge; @@ -573,7 +575,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx /** * Attaches a keyboard to this view. The keyboard can be switched at any time and the * view will re-layout itself to accommodate the keyboard. - * @see Keyboard + * @see BaseKeyboard * @see #getKeyboard() * @param keyboard the keyboard to display in this view */ @@ -603,7 +605,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx /** * Returns the current keyboard being displayed by this view. * @return the currently attached keyboard - * @see #setKeyboard(Keyboard) + * @see #setKeyboard(BaseKeyboard) */ public BaseKeyboard getKeyboard() { return mKeyboard; @@ -918,6 +920,10 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mDirtyRect.setEmpty(); } + public void setForeground(boolean foreground) { + mInForeground = foreground; + } + // TODO: clean up this method. private void dismissKeyPreview() { for (PointerTracker tracker : mPointerTrackers) @@ -951,7 +957,10 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // TODO Must fix popup preview on xlarge layout private void showKey(final int keyIndex, PointerTracker tracker) { Key key = tracker.getKey(keyIndex); - if (key == null) + // If keyIndex is invalid or IME is already closed, we must not show key preview. + // Trying to show preview PopupWindow while root window is closed causes + // WindowManager.BadTokenException. + if (key == null || !mInForeground) return; // Should not draw number hint icons if (key.icon != null && key.label == null) { @@ -1012,13 +1021,18 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx popupPreviewY += popupHeight; } - if (mPreviewPopup.isShowing()) { - mPreviewPopup.update(popupPreviewX, popupPreviewY, popupWidth, popupHeight); - } else { - mPreviewPopup.setWidth(popupWidth); - mPreviewPopup.setHeight(popupHeight); - mPreviewPopup.showAtLocation(mMiniKeyboardParent, Gravity.NO_GRAVITY, - popupPreviewX, popupPreviewY); + try { + if (mPreviewPopup.isShowing()) { + mPreviewPopup.update(popupPreviewX, popupPreviewY, popupWidth, popupHeight); + } else { + mPreviewPopup.setWidth(popupWidth); + mPreviewPopup.setHeight(popupHeight); + mPreviewPopup.showAtLocation(mMiniKeyboardParent, Gravity.NO_GRAVITY, + popupPreviewX, popupPreviewY); + } + } catch (WindowManager.BadTokenException e) { + // Swallow the exception which will be happened when IME is already closed. + Log.w(TAG, "LatinIME is already closed when tried showing key preview."); } // Record popup preview position to display mini-keyboard later at the same positon mPopupPreviewDisplayedY = popupPreviewY; -- cgit v1.2.3-83-g751a From 28d8a488c0ec550d5cdcbf5187beb3a3646752c3 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Mon, 18 Oct 2010 21:10:11 +0900 Subject: Disable gesture detector on mini-keyboard Gesture detector, for closing keyboard by swiping down, must be disabled not only when mini-keyboard is on the screen, but also in the mini-keyboard itself. Bug: 3105595 Change-Id: I548501f7117ca2310943cabb678c1e250e5012ce --- .../src/com/android/inputmethod/latin/LatinKeyboardBaseView.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 872b4d245..b02780bf6 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -226,7 +226,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx protected KeyDetector mKeyDetector = new ProximityKeyDetector(); // Swipe gesture detector - private final GestureDetector mGestureDetector; + private GestureDetector mGestureDetector; private final SwipeTracker mSwipeTracker = new SwipeTracker(); private final int mSwipeThreshold; private final boolean mDisambiguateSwipe; @@ -1132,6 +1132,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx }); // Override default ProximityKeyDetector. miniKeyboard.mKeyDetector = new MiniKeyboardKeyDetector(mMiniKeyboardSlideAllowance); + // Remove gesture detector on mini-keyboard + miniKeyboard.mGestureDetector = null; BaseKeyboard keyboard; if (popupKey.popupCharacters != null) { @@ -1304,8 +1306,9 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Track the last few movements to look for spurious swipes. mSwipeTracker.addMovement(me); - // We must disable gesture detector while mini-keyboard is on the screen. - if (mMiniKeyboard == null && mGestureDetector.onTouchEvent(me)) { + // Gesture detector must be enabled only when mini-keyboard is not on the screen. + if (mMiniKeyboard == null + && mGestureDetector != null && mGestureDetector.onTouchEvent(me)) { dismissKeyPreview(); mHandler.cancelKeyTimers(); return true; -- cgit v1.2.3-83-g751a From e354a85ef44e13999aaefd735cef7f659090f6e8 Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Wed, 20 Oct 2010 00:18:50 +0900 Subject: Manual merge of the following Gingerbread changes logically I8b38e280 Ia3929bb0 If925b546 I1062763d I901e36aa bug: 3100311 Change-Id: Ic7e01277ec816e77d34732599b2b9552668b81c2 --- java/res/drawable-hdpi/hint_popup.9.png | Bin 0 -> 226 bytes java/res/drawable-mdpi/hint_popup.9.png | Bin 0 -> 202 bytes java/res/xml/kbd_popup_narrow_template.xml | 10 +- java/res/xml/kbd_qwerty_black_row4.xml | 20 ++- java/res/xml/kbd_qwerty_row4.xml | 20 ++- java/res/xml/kbd_symbols.xml | 111 +++++++------- java/res/xml/kbd_symbols_black.xml | 100 +++++++------ java/res/xml/kbd_symbols_black_row4_common.xml | 46 ++++++ ...symbols_black_row4_common_with_settings_key.xml | 50 +++++++ java/res/xml/kbd_symbols_black_row4_im.xml | 47 ++++++ ...kbd_symbols_black_row4_im_with_settings_key.xml | 51 +++++++ java/res/xml/kbd_symbols_row4_common.xml | 51 +++++++ .../kbd_symbols_row4_common_with_settings_key.xml | 56 +++++++ java/res/xml/kbd_symbols_row4_im.xml | 52 +++++++ .../xml/kbd_symbols_row4_im_with_settings_key.xml | 57 +++++++ java/res/xml/kbd_symbols_shift.xml | 109 +++++++------- java/res/xml/kbd_symbols_shift_black.xml | 98 +++++++------ .../xml/kbd_symbols_shift_black_row4_common.xml | 44 ++++++ ...s_shift_black_row4_common_with_settings_key.xml | 48 ++++++ java/res/xml/kbd_symbols_shift_black_row4_im.xml | 45 ++++++ ...mbols_shift_black_row4_im_with_settings_key.xml | 49 +++++++ java/res/xml/kbd_symbols_shift_row4_common.xml | 49 +++++++ ...symbols_shift_row4_common_with_settings_key.xml | 54 +++++++ java/res/xml/kbd_symbols_shift_row4_im.xml | 50 +++++++ ...kbd_symbols_shift_row4_im_with_settings_key.xml | 55 +++++++ java/res/xml/popup_at.xml | 39 +++++ java/res/xml/popup_slash.xml | 39 +++++ .../inputmethod/latin/KeyboardSwitcher.java | 163 ++++++++++++--------- .../com/android/inputmethod/latin/LatinIME.java | 4 +- .../android/inputmethod/latin/LatinKeyboard.java | 71 +++++++-- .../inputmethod/latin/LatinKeyboardBaseView.java | 54 ++++--- 31 files changed, 1302 insertions(+), 340 deletions(-) create mode 100644 java/res/drawable-hdpi/hint_popup.9.png create mode 100644 java/res/drawable-mdpi/hint_popup.9.png create mode 100644 java/res/xml/kbd_symbols_black_row4_common.xml create mode 100644 java/res/xml/kbd_symbols_black_row4_common_with_settings_key.xml create mode 100644 java/res/xml/kbd_symbols_black_row4_im.xml create mode 100644 java/res/xml/kbd_symbols_black_row4_im_with_settings_key.xml create mode 100644 java/res/xml/kbd_symbols_row4_common.xml create mode 100644 java/res/xml/kbd_symbols_row4_common_with_settings_key.xml create mode 100644 java/res/xml/kbd_symbols_row4_im.xml create mode 100644 java/res/xml/kbd_symbols_row4_im_with_settings_key.xml create mode 100644 java/res/xml/kbd_symbols_shift_black_row4_common.xml create mode 100644 java/res/xml/kbd_symbols_shift_black_row4_common_with_settings_key.xml create mode 100644 java/res/xml/kbd_symbols_shift_black_row4_im.xml create mode 100644 java/res/xml/kbd_symbols_shift_black_row4_im_with_settings_key.xml create mode 100644 java/res/xml/kbd_symbols_shift_row4_common.xml create mode 100644 java/res/xml/kbd_symbols_shift_row4_common_with_settings_key.xml create mode 100644 java/res/xml/kbd_symbols_shift_row4_im.xml create mode 100644 java/res/xml/kbd_symbols_shift_row4_im_with_settings_key.xml create mode 100644 java/res/xml/popup_at.xml create mode 100644 java/res/xml/popup_slash.xml (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/drawable-hdpi/hint_popup.9.png b/java/res/drawable-hdpi/hint_popup.9.png new file mode 100644 index 000000000..b5ec003e6 Binary files /dev/null and b/java/res/drawable-hdpi/hint_popup.9.png differ diff --git a/java/res/drawable-mdpi/hint_popup.9.png b/java/res/drawable-mdpi/hint_popup.9.png new file mode 100644 index 000000000..444cc26ee Binary files /dev/null and b/java/res/drawable-mdpi/hint_popup.9.png differ diff --git a/java/res/xml/kbd_popup_narrow_template.xml b/java/res/xml/kbd_popup_narrow_template.xml index 23c686e8b..9b78711a0 100644 --- a/java/res/xml/kbd_popup_narrow_template.xml +++ b/java/res/xml/kbd_popup_narrow_template.xml @@ -18,10 +18,10 @@ */ --> - diff --git a/java/res/xml/kbd_qwerty_black_row4.xml b/java/res/xml/kbd_qwerty_black_row4.xml index 1718603fd..330ddda42 100644 --- a/java/res/xml/kbd_qwerty_black_row4.xml +++ b/java/res/xml/kbd_qwerty_black_row4.xml @@ -40,6 +40,7 @@ latin:keyWidth="40%p" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_f1" /> @@ -153,6 +158,7 @@ latin:keyWidth="20%p" /> + latin:codes="@integer/key_f1" /> + latin:codes="@integer/key_f1" /> @@ -312,6 +323,7 @@ latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_black.xml b/java/res/xml/kbd_symbols_black.xml index b6a069c25..9e401a1cd 100644 --- a/java/res/xml/kbd_symbols_black.xml +++ b/java/res/xml/kbd_symbols_black.xml @@ -142,59 +142,63 @@ latin:keyEdgeFlags="right" /> - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_black_row4_common.xml b/java/res/xml/kbd_symbols_black_row4_common.xml new file mode 100644 index 000000000..7433eca7f --- /dev/null +++ b/java/res/xml/kbd_symbols_black_row4_common.xml @@ -0,0 +1,46 @@ + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_black_row4_common_with_settings_key.xml b/java/res/xml/kbd_symbols_black_row4_common_with_settings_key.xml new file mode 100644 index 000000000..bbb169919 --- /dev/null +++ b/java/res/xml/kbd_symbols_black_row4_common_with_settings_key.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_black_row4_im.xml b/java/res/xml/kbd_symbols_black_row4_im.xml new file mode 100644 index 000000000..a1546b7b5 --- /dev/null +++ b/java/res/xml/kbd_symbols_black_row4_im.xml @@ -0,0 +1,47 @@ + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_black_row4_im_with_settings_key.xml b/java/res/xml/kbd_symbols_black_row4_im_with_settings_key.xml new file mode 100644 index 000000000..4cab461e7 --- /dev/null +++ b/java/res/xml/kbd_symbols_black_row4_im_with_settings_key.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_row4_common.xml b/java/res/xml/kbd_symbols_row4_common.xml new file mode 100644 index 000000000..ef7cdcaff --- /dev/null +++ b/java/res/xml/kbd_symbols_row4_common.xml @@ -0,0 +1,51 @@ + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_row4_common_with_settings_key.xml b/java/res/xml/kbd_symbols_row4_common_with_settings_key.xml new file mode 100644 index 000000000..54b85429c --- /dev/null +++ b/java/res/xml/kbd_symbols_row4_common_with_settings_key.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_row4_im.xml b/java/res/xml/kbd_symbols_row4_im.xml new file mode 100644 index 000000000..c7d679bc4 --- /dev/null +++ b/java/res/xml/kbd_symbols_row4_im.xml @@ -0,0 +1,52 @@ + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_row4_im_with_settings_key.xml b/java/res/xml/kbd_symbols_row4_im_with_settings_key.xml new file mode 100644 index 000000000..7cc209b6b --- /dev/null +++ b/java/res/xml/kbd_symbols_row4_im_with_settings_key.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift.xml b/java/res/xml/kbd_symbols_shift.xml index d83706b5c..b8f8faeb2 100644 --- a/java/res/xml/kbd_symbols_shift.xml +++ b/java/res/xml/kbd_symbols_shift.xml @@ -122,68 +122,63 @@ latin:keyEdgeFlags="right" /> - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_black.xml b/java/res/xml/kbd_symbols_shift_black.xml index e5f8abf6e..34684a65b 100644 --- a/java/res/xml/kbd_symbols_shift_black.xml +++ b/java/res/xml/kbd_symbols_shift_black.xml @@ -121,57 +121,63 @@ latin:keyEdgeFlags="right" /> - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_black_row4_common.xml b/java/res/xml/kbd_symbols_shift_black_row4_common.xml new file mode 100644 index 000000000..beb5b3d67 --- /dev/null +++ b/java/res/xml/kbd_symbols_shift_black_row4_common.xml @@ -0,0 +1,44 @@ + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_black_row4_common_with_settings_key.xml b/java/res/xml/kbd_symbols_shift_black_row4_common_with_settings_key.xml new file mode 100644 index 000000000..97f882a5a --- /dev/null +++ b/java/res/xml/kbd_symbols_shift_black_row4_common_with_settings_key.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_black_row4_im.xml b/java/res/xml/kbd_symbols_shift_black_row4_im.xml new file mode 100644 index 000000000..c0263c215 --- /dev/null +++ b/java/res/xml/kbd_symbols_shift_black_row4_im.xml @@ -0,0 +1,45 @@ + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_black_row4_im_with_settings_key.xml b/java/res/xml/kbd_symbols_shift_black_row4_im_with_settings_key.xml new file mode 100644 index 000000000..14d6a0b51 --- /dev/null +++ b/java/res/xml/kbd_symbols_shift_black_row4_im_with_settings_key.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_row4_common.xml b/java/res/xml/kbd_symbols_shift_row4_common.xml new file mode 100644 index 000000000..4d5199e88 --- /dev/null +++ b/java/res/xml/kbd_symbols_shift_row4_common.xml @@ -0,0 +1,49 @@ + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_row4_common_with_settings_key.xml b/java/res/xml/kbd_symbols_shift_row4_common_with_settings_key.xml new file mode 100644 index 000000000..df570ea1b --- /dev/null +++ b/java/res/xml/kbd_symbols_shift_row4_common_with_settings_key.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_row4_im.xml b/java/res/xml/kbd_symbols_shift_row4_im.xml new file mode 100644 index 000000000..69c609254 --- /dev/null +++ b/java/res/xml/kbd_symbols_shift_row4_im.xml @@ -0,0 +1,50 @@ + + + + + + + + + + diff --git a/java/res/xml/kbd_symbols_shift_row4_im_with_settings_key.xml b/java/res/xml/kbd_symbols_shift_row4_im_with_settings_key.xml new file mode 100644 index 000000000..aad6e400b --- /dev/null +++ b/java/res/xml/kbd_symbols_shift_row4_im_with_settings_key.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + diff --git a/java/res/xml/popup_at.xml b/java/res/xml/popup_at.xml new file mode 100644 index 000000000..4b19d4fd4 --- /dev/null +++ b/java/res/xml/popup_at.xml @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/java/res/xml/popup_slash.xml b/java/res/xml/popup_slash.xml new file mode 100644 index 000000000..1ace909ef --- /dev/null +++ b/java/res/xml/popup_slash.xml @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java index 86dbf1f60..ec422174d 100644 --- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java @@ -29,14 +29,14 @@ import java.util.Locale; public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceChangeListener { - public static final int MODE_NONE = 0; - public static final int MODE_TEXT = 1; - public static final int MODE_SYMBOLS = 2; - public static final int MODE_PHONE = 3; - public static final int MODE_URL = 4; - public static final int MODE_EMAIL = 5; - public static final int MODE_IM = 6; - public static final int MODE_WEB = 7; + public static final int MODE_TEXT = 0; + public static final int MODE_URL = 1; + public static final int MODE_EMAIL = 2; + public static final int MODE_IM = 3; + public static final int MODE_WEB = 4; + public static final int MODE_PHONE = 5; + + public static final int MODE_NONE = -1; // Main keyboard layouts without the settings key public static final int KEYBOARDMODE_NORMAL = R.id.mode_normal; @@ -44,6 +44,13 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha public static final int KEYBOARDMODE_EMAIL = R.id.mode_email; public static final int KEYBOARDMODE_IM = R.id.mode_im; public static final int KEYBOARDMODE_WEB = R.id.mode_webentry; + public static final int[] QWERTY_MODES = { + KEYBOARDMODE_NORMAL, + KEYBOARDMODE_URL, + KEYBOARDMODE_EMAIL, + KEYBOARDMODE_IM, + KEYBOARDMODE_WEB, + 0 /* for MODE_PHONE */ }; // Main keyboard layouts with the settings key public static final int KEYBOARDMODE_NORMAL_WITH_SETTINGS_KEY = R.id.mode_normal_with_settings_key; @@ -55,12 +62,45 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha R.id.mode_im_with_settings_key; public static final int KEYBOARDMODE_WEB_WITH_SETTINGS_KEY = R.id.mode_webentry_with_settings_key; - - // Symbols keyboard layout without the settings key - public static final int KEYBOARDMODE_SYMBOLS = R.id.mode_symbols; - // Symbols keyboard layout with the settings key - public static final int KEYBOARDMODE_SYMBOLS_WITH_SETTINGS_KEY = - R.id.mode_symbols_with_settings_key; + public static final int[] QWERTY_WITH_SETTINGS_KEY_MODES = { + KEYBOARDMODE_NORMAL_WITH_SETTINGS_KEY, + KEYBOARDMODE_URL_WITH_SETTINGS_KEY, + KEYBOARDMODE_EMAIL_WITH_SETTINGS_KEY, + KEYBOARDMODE_IM_WITH_SETTINGS_KEY, + KEYBOARDMODE_WEB_WITH_SETTINGS_KEY, + 0 /* for MODE_PHONE */ }; + + // Symbols keyboard layouts without the settings key + public static final int KEYBOARDMODE_SYMBOLS_NORMAL = R.id.mode_symbols_normal; + public static final int KEYBOARDMODE_SYMBOLS_URL = R.id.mode_symbols_url; + public static final int KEYBOARDMODE_SYMBOLS_EMAIL = R.id.mode_symbols_email; + public static final int KEYBOARDMODE_SYMBOLS_IM = R.id.mode_symbols_im; + public static final int KEYBOARDMODE_SYMBOLS_WEB = R.id.mode_symbols_webentry; + public static final int[] SYMBOLS_MODES = { + KEYBOARDMODE_SYMBOLS_NORMAL, + KEYBOARDMODE_SYMBOLS_URL, + KEYBOARDMODE_SYMBOLS_EMAIL, + KEYBOARDMODE_SYMBOLS_IM, + KEYBOARDMODE_SYMBOLS_WEB, + 0 /* for MODE_PHONE */ }; + // Symbols keyboard layouts with the settings key + public static final int KEYBOARDMODE_SYMBOLS_NORMAL_WITH_SETTINGS_KEY = + R.id.mode_symbols_normal_with_settings_key; + public static final int KEYBOARDMODE_SYMBOLS_URL_WITH_SETTINGS_KEY = + R.id.mode_symbols_url_with_settings_key; + public static final int KEYBOARDMODE_SYMBOLS_EMAIL_WITH_SETTINGS_KEY = + R.id.mode_symbols_email_with_settings_key; + public static final int KEYBOARDMODE_SYMBOLS_IM_WITH_SETTINGS_KEY = + R.id.mode_symbols_im_with_settings_key; + public static final int KEYBOARDMODE_SYMBOLS_WEB_WITH_SETTINGS_KEY = + R.id.mode_symbols_webentry_with_settings_key; + public static final int[] SYMBOLS_WITH_SETTINGS_KEY_MODES = { + KEYBOARDMODE_SYMBOLS_NORMAL_WITH_SETTINGS_KEY, + KEYBOARDMODE_SYMBOLS_URL_WITH_SETTINGS_KEY, + KEYBOARDMODE_SYMBOLS_EMAIL_WITH_SETTINGS_KEY, + KEYBOARDMODE_SYMBOLS_IM_WITH_SETTINGS_KEY, + KEYBOARDMODE_SYMBOLS_WEB_WITH_SETTINGS_KEY, + 0 /* for MODE_PHONE */ }; public static final String DEFAULT_LAYOUT_ID = "4"; public static final String PREF_KEYBOARD_LAYOUT = "pref_keyboard_layout_20100902"; @@ -115,7 +155,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha private boolean mIsAutoCompletionActive; private boolean mHasVoice; private boolean mVoiceOnPrimary; - private boolean mPreferSymbols; private int mSymbolsModeState = SYMBOLS_MODE_STATE_NONE; // Indicates whether or not we have the settings key @@ -158,21 +197,26 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha } private KeyboardId makeSymbolsId(boolean hasVoice) { + final int mode = mMode == MODE_NONE ? MODE_TEXT : mMode; return new KeyboardId(KBD_SYMBOLS[getCharColorId()], mHasSettingsKey ? - KEYBOARDMODE_SYMBOLS_WITH_SETTINGS_KEY : KEYBOARDMODE_SYMBOLS, + SYMBOLS_WITH_SETTINGS_KEY_MODES[mode] : SYMBOLS_MODES[mode], false, hasVoice); } private KeyboardId makeSymbolsShiftedId(boolean hasVoice) { + final int mode = mMode == MODE_NONE ? MODE_TEXT : mMode; return new KeyboardId(KBD_SYMBOLS_SHIFT[getCharColorId()], mHasSettingsKey ? - KEYBOARDMODE_SYMBOLS_WITH_SETTINGS_KEY : KEYBOARDMODE_SYMBOLS, + SYMBOLS_WITH_SETTINGS_KEY_MODES[mode] : SYMBOLS_MODES[mode], false, hasVoice); } - public void makeKeyboards(boolean forceCreate) { + private void makeSymbolsKeyboardIds() { mSymbolsId = makeSymbolsId(mHasVoice && !mVoiceOnPrimary); mSymbolsShiftedId = makeSymbolsShiftedId(mHasVoice && !mVoiceOnPrimary); + } + public void makeKeyboards(boolean forceCreate) { + makeSymbolsKeyboardIds(); if (forceCreate) mKeyboards.clear(); // Configuration change is coming after the keyboard gets recreated. So don't rely on that. // If keyboards have already been made, check if we have a screen width change and @@ -207,10 +251,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha }); } - public KeyboardId(int xml, boolean hasVoice) { - this(xml, 0, false, hasVoice); - } - @Override public boolean equals(Object other) { return other instanceof KeyboardId && equals((KeyboardId) other); @@ -244,14 +284,10 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha public void setKeyboardMode(int mode, int imeOptions, boolean enableVoice) { mSymbolsModeState = SYMBOLS_MODE_STATE_NONE; - mPreferSymbols = mode == MODE_SYMBOLS; - if (mode == MODE_SYMBOLS) { - mode = MODE_TEXT; - } try { - setKeyboardMode(mode, imeOptions, enableVoice, mPreferSymbols); + setKeyboardMode(mode, imeOptions, enableVoice, false); } catch (RuntimeException e) { - LatinImeLogger.logOnException(mode + "," + imeOptions + "," + mPreferSymbols, e); + LatinImeLogger.logOnException(mode + "," + imeOptions, e); } } @@ -259,8 +295,10 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha if (mInputView == null) return; mMode = mode; mImeOptions = imeOptions; + makeSymbolsKeyboardIds(); if (enableVoice != mHasVoice) { - setVoiceMode(mHasVoice, mVoiceOnPrimary); + // TODO clean up this unnecessary recursive call. + setVoiceMode(enableVoice, mVoiceOnPrimary); } mIsSymbols = isSymbols; @@ -277,7 +315,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha mInputView.setKeyboard(keyboard); keyboard.setShifted(false); keyboard.setShiftLocked(keyboard.isShiftLocked()); - keyboard.setImeOptions(mInputMethodService.getResources(), mMode, imeOptions); + keyboard.setImeOptions(mInputMethodService.getResources(), mode, imeOptions); keyboard.setColorOfSymbolIcons(mIsAutoCompletionActive, isBlackSym()); // Update the settings key state because number of enabled IMEs could have been changed updateSettingsKeyState(PreferenceManager.getDefaultSharedPreferences(mInputMethodService)); @@ -309,48 +347,31 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha } private KeyboardId getKeyboardId(int mode, int imeOptions, boolean isSymbols) { - boolean hasVoice = hasVoiceButton(isSymbols); - int charColorId = getCharColorId(); - // TODO: generalize for any KeyboardId - int keyboardRowsResId = KBD_QWERTY[charColorId]; - if (isSymbols) { - if (mode == MODE_PHONE) { - return new KeyboardId(KBD_PHONE_SYMBOLS[charColorId], hasVoice); - } else { - return new KeyboardId(KBD_SYMBOLS[charColorId], mHasSettingsKey ? - KEYBOARDMODE_SYMBOLS_WITH_SETTINGS_KEY : KEYBOARDMODE_SYMBOLS, - false, hasVoice); - } + final boolean hasVoice = hasVoiceButton(isSymbols); + final int charColorId = getCharColorId(); + final int keyboardRowsResId; + final boolean enableShiftLock; + final int keyboardMode; + + if (mode == MODE_NONE) { + LatinImeLogger.logOnWarning( + "getKeyboardId:" + mode + "," + imeOptions + "," + isSymbols); + mode = MODE_TEXT; } - switch (mode) { - case MODE_NONE: - LatinImeLogger.logOnWarning( - "getKeyboardId:" + mode + "," + imeOptions + "," + isSymbols); - /* fall through */ - case MODE_TEXT: - return new KeyboardId(keyboardRowsResId, mHasSettingsKey ? - KEYBOARDMODE_NORMAL_WITH_SETTINGS_KEY : KEYBOARDMODE_NORMAL, - true, hasVoice); - case MODE_SYMBOLS: - return new KeyboardId(KBD_SYMBOLS[charColorId], mHasSettingsKey ? - KEYBOARDMODE_SYMBOLS_WITH_SETTINGS_KEY : KEYBOARDMODE_SYMBOLS, - false, hasVoice); - case MODE_PHONE: - return new KeyboardId(KBD_PHONE[charColorId], hasVoice); - case MODE_URL: - return new KeyboardId(keyboardRowsResId, mHasSettingsKey ? - KEYBOARDMODE_URL_WITH_SETTINGS_KEY : KEYBOARDMODE_URL, true, hasVoice); - case MODE_EMAIL: - return new KeyboardId(keyboardRowsResId, mHasSettingsKey ? - KEYBOARDMODE_EMAIL_WITH_SETTINGS_KEY : KEYBOARDMODE_EMAIL, true, hasVoice); - case MODE_IM: - return new KeyboardId(keyboardRowsResId, mHasSettingsKey ? - KEYBOARDMODE_IM_WITH_SETTINGS_KEY : KEYBOARDMODE_IM, true, hasVoice); - case MODE_WEB: - return new KeyboardId(keyboardRowsResId, mHasSettingsKey ? - KEYBOARDMODE_WEB_WITH_SETTINGS_KEY : KEYBOARDMODE_WEB, true, hasVoice); + if (isSymbols) { + keyboardRowsResId = mode == MODE_PHONE + ? KBD_PHONE_SYMBOLS[charColorId] : KBD_SYMBOLS[charColorId]; + enableShiftLock = false; + keyboardMode = mHasSettingsKey + ? SYMBOLS_WITH_SETTINGS_KEY_MODES[mode] : SYMBOLS_MODES[mode]; + } else { // QWERTY + keyboardRowsResId = mode == MODE_PHONE + ? KBD_PHONE[charColorId] : KBD_QWERTY[charColorId]; + enableShiftLock = mode == MODE_PHONE ? false : true; + keyboardMode = mHasSettingsKey + ? QWERTY_WITH_SETTINGS_KEY_MODES[mode] : QWERTY_MODES[mode]; } - return null; + return new KeyboardId(keyboardRowsResId, keyboardMode, enableShiftLock, hasVoice); } public int getKeyboardMode() { @@ -411,7 +432,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha public void toggleSymbols() { setKeyboardMode(mMode, mImeOptions, mHasVoice, !mIsSymbols); - if (mIsSymbols && !mPreferSymbols) { + if (mIsSymbols) { mSymbolsModeState = SYMBOLS_MODE_STATE_BEGIN; } else { mSymbolsModeState = SYMBOLS_MODE_STATE_NONE; diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index edda9e866..bb29e6367 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -2333,8 +2333,8 @@ public class LatinIME extends InputMethodService private boolean shouldShowVoiceButton(FieldContext fieldContext, EditorInfo attribute) { return ENABLE_VOICE_BUTTON && fieldCanDoVoice(fieldContext) - && !(attribute != null && attribute.privateImeOptions != null - && attribute.privateImeOptions.equals(IME_OPTION_NO_MICROPHONE)) + && !(attribute != null + && IME_OPTION_NO_MICROPHONE.equals(attribute.privateImeOptions)) && SpeechRecognizer.isRecognitionAvailable(this); } diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index 3ca85c5d0..fcbada191 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -60,6 +60,7 @@ public class LatinKeyboard extends BaseKeyboard { private final Drawable mButtonArrowRightIcon; private Key mEnterKey; private Key mF1Key; + private final Drawable mHintIcon; private Key mSpaceKey; private Key m123Key; private int mSpaceKeyIndex = -1; @@ -69,6 +70,7 @@ public class LatinKeyboard extends BaseKeyboard { private LanguageSwitcher mLanguageSwitcher; private final Resources mRes; private final Context mContext; + private int mMode; // TODO: remove this and use the corresponding mode in the parent class // Whether this keyboard has voice icon on it private boolean mHasVoiceButton; // Whether voice icon is enabled at all @@ -119,6 +121,7 @@ public class LatinKeyboard extends BaseKeyboard { super(context, xmlLayoutResId, mode); final Resources res = context.getResources(); mContext = context; + mMode = mode; mRes = res; mShiftLockIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked); mShiftLockPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_shift_locked); @@ -133,6 +136,7 @@ public class LatinKeyboard extends BaseKeyboard { mButtonArrowRightIcon = res.getDrawable(R.drawable.sym_keyboard_language_arrows_right); m123MicIcon = res.getDrawable(R.drawable.sym_keyboard_123_mic); m123MicPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_123_mic); + mHintIcon = res.getDrawable(R.drawable.hint_popup); setDefaultBounds(m123MicPreviewIcon); sSpacebarVerticalCorrection = res.getDimensionPixelOffset( R.dimen.spacebar_vertical_correction); @@ -180,10 +184,12 @@ public class LatinKeyboard extends BaseKeyboard { key.text = null; key.iconPreview = null; key.icon = null; + key.hintIcon = null; key.label = label; } public void setImeOptions(Resources res, int mode, int options) { + mMode = mode; if (mEnterKey == null) return; switch (options & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION)) { @@ -292,7 +298,7 @@ public class LatinKeyboard extends BaseKeyboard { mMicIcon = mRes.getDrawable(R.drawable.sym_keyboard_mic); m123MicIcon = mRes.getDrawable(R.drawable.sym_keyboard_123_mic); } - updateF1Key(); + updateDynamicKeys(); if (mSpaceKey != null) { updateSpaceBarForLocale(isAutoCompletion, isBlack); } @@ -301,11 +307,16 @@ public class LatinKeyboard extends BaseKeyboard { public void setVoiceMode(boolean hasVoiceButton, boolean hasVoice) { mHasVoiceButton = hasVoiceButton; mVoiceEnabled = hasVoice; + updateDynamicKeys(); + } + + private void updateDynamicKeys() { + update123Key(); updateF1Key(); } - private void updateF1Key() { - if (mF1Key == null) return; + private void update123Key() { + // Update KEYCODE_MODE_CHANGE key only on alphabet mode, not on symbol mode. if (m123Key != null && mIsAlphaKeyboard) { if (mVoiceEnabled && !mHasVoiceButton) { m123Key.icon = m123MicIcon; @@ -317,22 +328,52 @@ public class LatinKeyboard extends BaseKeyboard { m123Key.label = m123Label; } } + } - if (mHasVoiceButton && mVoiceEnabled) { - mF1Key.codes = new int[] { LatinKeyboardView.KEYCODE_VOICE }; - mF1Key.label = null; - mF1Key.icon = mMicIcon; - mF1Key.iconPreview = mMicPreviewIcon; - mF1Key.popupResId = R.xml.popup_mic; - } else { - mF1Key.label = ","; - mF1Key.codes = new int[] { ',' }; - mF1Key.icon = null; - mF1Key.iconPreview = null; - mF1Key.popupResId = R.xml.popup_comma; + private void updateF1Key() { + // Update KEYCODE_F1 key. Please note that some keyboard layouts have no F1 key. + if (mF1Key == null) + return; + + if (mIsAlphaKeyboard) { + if (mMode == KeyboardSwitcher.MODE_URL) { + setNonMicF1Key(mF1Key, "/", R.xml.popup_slash); + } else if (mMode == KeyboardSwitcher.MODE_EMAIL) { + setNonMicF1Key(mF1Key, "@", R.xml.popup_at); + } else { + if (mVoiceEnabled && mHasVoiceButton) { + setMicF1Key(mF1Key); + } else { + setNonMicF1Key(mF1Key, ",", R.xml.popup_comma); + } + } + } else { // Symbols keyboard + if (mVoiceEnabled && mHasVoiceButton) { + setMicF1Key(mF1Key); + } else { + setNonMicF1Key(mF1Key, ",", R.xml.popup_comma); + } } } + private void setMicF1Key(Key key) { + key.label = null; + key.codes = new int[] { LatinKeyboardView.KEYCODE_VOICE }; + key.popupResId = R.xml.popup_mic; + key.icon = mMicIcon; + key.hintIcon = mHintIcon; + key.iconPreview = mMicPreviewIcon; + } + + private void setNonMicF1Key(Key key, String label, int popupResId) { + key.label = label; + key.codes = new int[] { label.charAt(0) }; + key.popupResId = popupResId; + key.icon = null; + key.hintIcon = mHintIcon; + key.iconPreview = null; + } + /** * @return a key which should be invalidated. */ diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index b02780bf6..4e264e853 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -57,6 +57,8 @@ import java.util.WeakHashMap; * A view that renders a virtual {@link LatinKeyboard}. It handles rendering of keys and * detecting key presses and touch movements. * + * TODO: References to LatinKeyboard in this class should be replaced with ones to its base class. + * * @attr ref R.styleable#LatinKeyboardBaseView_keyBackground * @attr ref R.styleable#LatinKeyboardBaseView_keyPreviewLayout * @attr ref R.styleable#LatinKeyboardBaseView_keyPreviewOffset @@ -160,7 +162,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Miscellaneous constants /* package */ static final int NOT_A_KEY = -1; private static final int[] LONG_PRESSABLE_STATE_SET = { android.R.attr.state_long_pressable }; - private static final int NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL = -1; + private static final int HINT_ICON_VERTICAL_ADJUSTMENT_PIXEL = -1; // XML attribute private int mKeyTextSize; @@ -861,32 +863,20 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Turn off drop shadow paint.setShadowLayer(0, 0, 0, 0); } - Drawable icon = null; - if (key.label == null && key.icon != null) - icon = key.icon; - if (icon == null && key.hintIcon != null && drawHintIcon) - icon = key.hintIcon; - if (icon != null) { - // Special handing for the upper-right number hint icons - final int drawableWidth; - final int drawableHeight; - final int drawableX; - final int drawableY; - if (icon == key.hintIcon) { - drawableWidth = key.width; - drawableHeight = key.height; - drawableX = 0; - drawableY = NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL; - } else { - drawableWidth = key.icon.getIntrinsicWidth(); - drawableHeight = key.icon.getIntrinsicHeight(); - drawableX = (key.width + padding.left - padding.right - drawableWidth) / 2; - drawableY = (key.height + padding.top - padding.bottom - drawableHeight) / 2; - } - canvas.translate(drawableX, drawableY); - icon.setBounds(0, 0, drawableWidth, drawableHeight); - icon.draw(canvas); - canvas.translate(-drawableX, -drawableY); + if (key.label == null && key.icon != null) { + int drawableWidth = key.icon.getIntrinsicWidth(); + int drawableHeight = key.icon.getIntrinsicHeight(); + int drawableX = (key.width + padding.left - padding.right - drawableWidth) / 2; + int drawableY = (key.height + padding.top - padding.bottom - drawableHeight) / 2; + drawIcon(canvas, key.icon, drawableX, drawableY, drawableWidth, drawableHeight); + + } + if (key.hintIcon != null && drawHintIcon) { + int drawableWidth = key.width; + int drawableHeight = key.height; + int drawableX = 0; + int drawableY = HINT_ICON_VERTICAL_ADJUSTMENT_PIXEL; + drawIcon(canvas, key.hintIcon, drawableX, drawableY, drawableWidth, drawableHeight); } canvas.translate(-key.x - kbdPaddingLeft, -key.y - kbdPaddingTop); } @@ -920,6 +910,13 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mDirtyRect.setEmpty(); } + private void drawIcon(Canvas canvas, Drawable icon, int x, int y, int width, int height) { + canvas.translate(x, y); + icon.setBounds(0, 0, width, height); + icon.draw(canvas); + canvas.translate(-x, -y); + } + public void setForeground(boolean foreground) { mInForeground = foreground; } @@ -962,8 +959,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // WindowManager.BadTokenException. if (key == null || !mInForeground) return; - // Should not draw number hint icons - if (key.icon != null && key.label == null) { + if (key.icon != null) { mPreviewText.setCompoundDrawables(null, null, null, key.iconPreview != null ? key.iconPreview : key.icon); mPreviewText.setText(null); -- cgit v1.2.3-83-g751a From 4189eb23082fcd4bf8cfb2085d18e226e0e7ce13 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 22 Oct 2010 19:35:23 +0900 Subject: Revise caps lock sequences This change also fixes that the popup preview of ALT on symbol keyboard is not showing. Bug: 3122877 Bug: 3127255 Change-Id: I978cb30a0d05298274d8ab6541b91323a0fef211 --- java/res/values/config.xml | 1 + .../com/android/inputmethod/latin/LatinIME.java | 153 ++++++++++++--------- .../android/inputmethod/latin/LatinKeyboard.java | 2 + .../inputmethod/latin/LatinKeyboardBaseView.java | 37 ++++- .../inputmethod/latin/LatinKeyboardView.java | 13 +- .../android/inputmethod/latin/PointerTracker.java | 38 +++-- 6 files changed, 151 insertions(+), 93 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/values/config.xml b/java/res/values/config.xml index a1577e4d1..410d34b00 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -28,6 +28,7 @@ 400 50 400 + 1000 800 diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index bb29e6367..3250cdd01 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -142,9 +142,10 @@ public class LatinIME extends InputMethodService // Key events coming any faster than this are long-presses. private static final int QUICK_PRESS = 200; - static final int KEYCODE_ENTER = '\n'; - static final int KEYCODE_SPACE = ' '; - static final int KEYCODE_PERIOD = '.'; + public static final int KEYCODE_ENTER = '\n'; + public static final int KEYCODE_TAB = '\t'; + public static final int KEYCODE_SPACE = ' '; + public static final int KEYCODE_PERIOD = '.'; // Contextual menu positions private static final int POS_METHOD = 0; @@ -1190,66 +1191,68 @@ public class LatinIME extends InputMethodService public void onKey(int primaryCode, int[] keyCodes, int x, int y) { long when = SystemClock.uptimeMillis(); - if (primaryCode != BaseKeyboard.KEYCODE_DELETE || - when > mLastKeyTime + QUICK_PRESS) { + if (primaryCode != BaseKeyboard.KEYCODE_DELETE || when > mLastKeyTime + QUICK_PRESS) { mDeleteCount = 0; } mLastKeyTime = when; final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch(); switch (primaryCode) { - case BaseKeyboard.KEYCODE_DELETE: - handleBackspace(); - mDeleteCount++; - LatinImeLogger.logOnDelete(); - break; - case BaseKeyboard.KEYCODE_SHIFT: - // Shift key is handled in onPress() when device has distinct multi-touch panel. - if (!distinctMultiTouch) - handleShift(); - break; - case BaseKeyboard.KEYCODE_MODE_CHANGE: - // Symbol key is handled in onPress() when device has distinct multi-touch panel. - if (!distinctMultiTouch) - changeKeyboardMode(); - break; - case BaseKeyboard.KEYCODE_CANCEL: - if (!isShowingOptionDialog()) { - handleClose(); - } - break; - case LatinKeyboardView.KEYCODE_OPTIONS: - onOptionKeyPressed(); - break; - case LatinKeyboardView.KEYCODE_OPTIONS_LONGPRESS: - onOptionKeyLongPressed(); - break; - case LatinKeyboardView.KEYCODE_NEXT_LANGUAGE: - toggleLanguage(false, true); - break; - case LatinKeyboardView.KEYCODE_PREV_LANGUAGE: - toggleLanguage(false, false); - break; - case LatinKeyboardView.KEYCODE_VOICE: - if (VOICE_INSTALLED) { - startListening(false /* was a button press, was not a swipe */); - } - break; - case 9 /*Tab*/: - sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB); - break; - default: - if (primaryCode != KEYCODE_ENTER) { - mJustAddedAutoSpace = false; - } - RingCharBuffer.getInstance().push((char)primaryCode, x, y); - LatinImeLogger.logOnInputChar(); - if (isWordSeparator(primaryCode)) { - handleSeparator(primaryCode); - } else { - handleCharacter(primaryCode, keyCodes); - } - // Cancel the just reverted state - mJustRevertedSeparator = null; + case BaseKeyboard.KEYCODE_DELETE: + handleBackspace(); + mDeleteCount++; + LatinImeLogger.logOnDelete(); + break; + case BaseKeyboard.KEYCODE_SHIFT: + // Shift key is handled in onPress() when device has distinct multi-touch panel. + if (!distinctMultiTouch) + handleShift(); + break; + case BaseKeyboard.KEYCODE_MODE_CHANGE: + // Symbol key is handled in onPress() when device has distinct multi-touch panel. + if (!distinctMultiTouch) + changeKeyboardMode(); + break; + case BaseKeyboard.KEYCODE_CANCEL: + if (!isShowingOptionDialog()) { + handleClose(); + } + break; + case LatinKeyboardView.KEYCODE_OPTIONS: + onOptionKeyPressed(); + break; + case LatinKeyboardView.KEYCODE_OPTIONS_LONGPRESS: + onOptionKeyLongPressed(); + break; + case LatinKeyboardView.KEYCODE_NEXT_LANGUAGE: + toggleLanguage(false, true); + break; + case LatinKeyboardView.KEYCODE_PREV_LANGUAGE: + toggleLanguage(false, false); + break; + case LatinKeyboardView.KEYCODE_CAPSLOCK: + handleCapsLock(); + break; + case LatinKeyboardView.KEYCODE_VOICE: + if (VOICE_INSTALLED) { + startListening(false /* was a button press, was not a swipe */); + } + break; + case KEYCODE_TAB: + sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB); + break; + default: + if (primaryCode != KEYCODE_ENTER) { + mJustAddedAutoSpace = false; + } + RingCharBuffer.getInstance().push((char)primaryCode, x, y); + LatinImeLogger.logOnInputChar(); + if (isWordSeparator(primaryCode)) { + handleSeparator(primaryCode); + } else { + handleCharacter(primaryCode, keyCodes); + } + // Cancel the just reverted state + mJustRevertedSeparator = null; } if (mKeyboardSwitcher.onKey(primaryCode)) { changeKeyboardMode(); @@ -1363,24 +1366,37 @@ public class LatinIME extends InputMethodService private void handleShiftInternal(boolean forceNormal) { mHandler.removeMessages(MSG_UPDATE_SHIFT_STATE); KeyboardSwitcher switcher = mKeyboardSwitcher; - LatinKeyboardView inputView = switcher.getInputView(); if (switcher.isAlphabetMode()) { + LatinKeyboardView inputView = switcher.getInputView(); if (mCapsLock || forceNormal) { mCapsLock = false; switcher.setShifted(false); } else if (inputView != null) { - if (inputView.isShifted()) { - mCapsLock = true; - switcher.setShiftLocked(true); - } else { - switcher.setShifted(true); - } + switcher.setShifted(!inputView.isShifted()); } } else { switcher.toggleShift(); } } + private void handleCapsLock() { + mHandler.removeMessages(MSG_UPDATE_SHIFT_STATE); + KeyboardSwitcher switcher = mKeyboardSwitcher; + if (switcher.isAlphabetMode()) { + if (mCapsLock) { + mCapsLock = false; + // LatinKeyboard.setShifted(false) also disable shift locked state. + // Note: Caps lock LED is off when Key.on is false. + switcher.setShifted(false); + } else { + mCapsLock = true; + // LatinKeyboard.setShiftLocked(true) enable shift state too. + // Note: Caps lock LED is on when Key.on is true. + switcher.setShiftLocked(true); + } + } + } + private void abortCorrection(boolean force) { if (force || TextEntryState.isCorrecting()) { getCurrentInputConnection().finishComposingText(); @@ -2291,7 +2307,9 @@ public class LatinIME extends InputMethodService final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch(); if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_SHIFT) { mShiftKeyState.onPress(); - handleShift(); + // Not in caps lock mode, shift key is in effect on pressed. + if (mKeyboardSwitcher.isAlphabetMode() && !mCapsLock) + handleShift(); } else if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_MODE_CHANGE) { mSymbolKeyState.onPress(); changeKeyboardMode(); @@ -2309,6 +2327,9 @@ public class LatinIME extends InputMethodService if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_SHIFT) { if (mShiftKeyState.isMomentary()) resetShift(); + // In caps lock mode, shift key is in effect on released. + if (mKeyboardSwitcher.isAlphabetMode() && mCapsLock) + handleShift(); mShiftKeyState.onRelease(); } else if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_MODE_CHANGE) { if (mSymbolKeyState.isMomentary()) diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index 37ce1e8e4..6494bdfca 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -236,6 +236,7 @@ public class LatinKeyboard extends BaseKeyboard { } public void setShiftLocked(boolean shiftLocked) { + // TODO: cleanup this method with BaseKeyboard.Key for (final Key key : getShiftKeys()) { key.on = shiftLocked; key.icon = mShiftLockIcon; @@ -249,6 +250,7 @@ public class LatinKeyboard extends BaseKeyboard { @Override public boolean setShifted(boolean shiftState) { + // TODO: cleanup this method with BaseKeyboard.Key. boolean shiftChanged = false; if (getShiftKeys().size() > 0) { for (final Key key : getShiftKeys()) { diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 4e264e853..6b46ab838 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -261,6 +261,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private static final int MSG_DISMISS_PREVIEW = 2; private static final int MSG_REPEAT_KEY = 3; private static final int MSG_LONGPRESS_KEY = 4; + private static final int MSG_LONGPRESS_SHIFT_KEY = 5; private boolean mInKeyRepeat; @@ -284,6 +285,11 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx openPopupIfRequired(msg.arg1, tracker); break; } + case MSG_LONGPRESS_SHIFT_KEY: { + final PointerTracker tracker = (PointerTracker)msg.obj; + onLongPressShiftKey(tracker); + break; + } } } @@ -335,9 +341,20 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx removeMessages(MSG_LONGPRESS_KEY); } + public void startLongPressShiftTimer(long delay, int keyIndex, PointerTracker tracker) { + removeMessages(MSG_LONGPRESS_SHIFT_KEY); + sendMessageDelayed( + obtainMessage(MSG_LONGPRESS_SHIFT_KEY, keyIndex, 0, tracker), delay); + } + + public void cancelLongPressShiftTimer() { + removeMessages(MSG_LONGPRESS_SHIFT_KEY); + } + public void cancelKeyTimers() { cancelKeyRepeatTimer(); cancelLongPressTimer(); + cancelLongPressShiftTimer(); } public void cancelAllMessages() { @@ -869,7 +886,6 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx int drawableX = (key.width + padding.left - padding.right - drawableWidth) / 2; int drawableY = (key.height + padding.top - padding.bottom - drawableHeight) / 2; drawIcon(canvas, key.icon, drawableX, drawableY, drawableWidth, drawableHeight); - } if (key.hintIcon != null && drawHintIcon) { int drawableWidth = key.width; @@ -924,7 +940,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // TODO: clean up this method. private void dismissKeyPreview() { for (PointerTracker tracker : mPointerTrackers) - tracker.updateKey(NOT_A_KEY); + tracker.releaseKey(); showPreview(NOT_A_KEY, null); } @@ -959,11 +975,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // WindowManager.BadTokenException. if (key == null || !mInForeground) return; - if (key.icon != null) { - mPreviewText.setCompoundDrawables(null, null, null, - key.iconPreview != null ? key.iconPreview : key.icon); - mPreviewText.setText(null); - } else { + // What we show as preview should match what we show on key top in onBufferDraw(). + if (key.label != null) { // TODO Should take care of temporaryShiftLabel here. mPreviewText.setCompoundDrawables(null, null, null, null); mPreviewText.setText(adjustCase(tracker.getPreviewText(key))); @@ -974,6 +987,10 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mPreviewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mPreviewTextSizeLarge); mPreviewText.setTypeface(mKeyTextStyle); } + } else { + mPreviewText.setCompoundDrawables(null, null, null, + key.iconPreview != null ? key.iconPreview : key.icon); + mPreviewText.setText(null); } mPreviewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); @@ -1086,6 +1103,12 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx return result; } + private void onLongPressShiftKey(PointerTracker tracker) { + tracker.setAlreadyProcessed(); + mPointerQueue.remove(tracker); + mKeyboardActionListener.onKey(LatinKeyboardView.KEYCODE_CAPSLOCK, null, 0, 0); + } + private View inflateMiniKeyboardContainer(Key popupKey) { int popupKeyboardId = popupKey.popupResId; LayoutInflater inflater = (LayoutInflater)getContext().getSystemService( diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java index f3d045bec..35428997f 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java @@ -32,12 +32,13 @@ import java.util.List; public class LatinKeyboardView extends LatinKeyboardBaseView { - static final int KEYCODE_OPTIONS = -100; - static final int KEYCODE_OPTIONS_LONGPRESS = -101; - static final int KEYCODE_VOICE = -102; - static final int KEYCODE_F1 = -103; - static final int KEYCODE_NEXT_LANGUAGE = -104; - static final int KEYCODE_PREV_LANGUAGE = -105; + public static final int KEYCODE_OPTIONS = -100; + public static final int KEYCODE_OPTIONS_LONGPRESS = -101; + public static final int KEYCODE_VOICE = -102; + public static final int KEYCODE_F1 = -103; + public static final int KEYCODE_NEXT_LANGUAGE = -104; + public static final int KEYCODE_PREV_LANGUAGE = -105; + public static final int KEYCODE_CAPSLOCK = -106; private BaseKeyboard mPhoneKeyboard; diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java index d1cdbfe26..8824db6e3 100644 --- a/java/src/com/android/inputmethod/latin/PointerTracker.java +++ b/java/src/com/android/inputmethod/latin/PointerTracker.java @@ -40,6 +40,7 @@ public class PointerTracker { // Timing constants private final int mDelayBeforeKeyRepeatStart; private final int mLongPressKeyTimeout; + private final int mLongPressShiftKeyTimeout; private final int mMultiTapKeyTimeout; // Miscellaneous constants @@ -175,6 +176,7 @@ public class PointerTracker { mHasDistinctMultitouch = proxy.hasDistinctMultitouch(); mDelayBeforeKeyRepeatStart = res.getInteger(R.integer.config_delay_before_key_repeat_start); mLongPressKeyTimeout = res.getInteger(R.integer.config_long_press_key_timeout); + mLongPressShiftKeyTimeout = res.getInteger(R.integer.config_long_press_shift_key_timeout); mMultiTapKeyTimeout = res.getInteger(R.integer.config_multi_tap_key_timeout); resetMultiTap(); } @@ -223,9 +225,11 @@ public class PointerTracker { return key != null && key.codes[0] == LatinIME.KEYCODE_SPACE; } - public void updateKey(int keyIndex) { - if (mKeyAlreadyProcessed) - return; + public void releaseKey() { + updateKeyGraphics(NOT_A_KEY); + } + + private void updateKeyGraphics(int keyIndex) { int oldKeyIndex = mPreviousKey; mPreviousKey = keyIndex; if (keyIndex != oldKeyIndex) { @@ -287,7 +291,7 @@ public class PointerTracker { } startLongPressTimer(keyIndex); } - showKeyPreviewAndUpdateKey(keyIndex); + showKeyPreviewAndUpdateKeyGraphics(keyIndex); } public void onMoveEvent(int x, int y, long eventTime) { @@ -317,12 +321,13 @@ public class PointerTracker { mHandler.cancelLongPressTimer(); } } - showKeyPreviewAndUpdateKey(mKeyState.getKeyIndex()); + showKeyPreviewAndUpdateKeyGraphics(mKeyState.getKeyIndex()); } public void onUpEvent(int x, int y, long eventTime) { if (DEBUG) debugLog("onUpEvent :", x, y); + showKeyPreviewAndUpdateKeyGraphics(NOT_A_KEY); if (mKeyAlreadyProcessed) return; mHandler.cancelKeyTimers(); @@ -334,7 +339,6 @@ public class PointerTracker { x = mKeyState.getKeyX(); y = mKeyState.getKeyY(); } - showKeyPreviewAndUpdateKey(NOT_A_KEY); if (!mIsRepeatableKey) { detectAndSendKey(keyIndex, x, y, eventTime); } @@ -348,7 +352,7 @@ public class PointerTracker { debugLog("onCancelEvt:", x, y); mHandler.cancelKeyTimers(); mHandler.cancelPopupPreview(); - showKeyPreviewAndUpdateKey(NOT_A_KEY); + showKeyPreviewAndUpdateKeyGraphics(NOT_A_KEY); int keyIndex = mKeyState.getKeyIndex(); if (isValidKeyIndex(keyIndex)) mProxy.invalidateKey(mKeys[keyIndex]); @@ -409,8 +413,8 @@ public class PointerTracker { return dx * dx + dy * dy; } - private void showKeyPreviewAndUpdateKey(int keyIndex) { - updateKey(keyIndex); + private void showKeyPreviewAndUpdateKeyGraphics(int keyIndex) { + updateKeyGraphics(keyIndex); // The modifier key, such as shift key, should not be shown as preview when multi-touch is // supported. On thge other hand, if multi-touch is not supported, the modifier key should // be shown as preview. @@ -423,11 +427,17 @@ public class PointerTracker { private void startLongPressTimer(int keyIndex) { Key key = getKey(keyIndex); - // If keyboard is in temporary upper case state and the key has temporary shift label, - // long press should not be started. - if (isTemporaryUpperCase() && key.temporaryShiftLabel != null) - return; - mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this); + 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); + } } private boolean isTemporaryUpperCase() { -- cgit v1.2.3-83-g751a From 0ce98cbf98c6409ac18fa341f467703d78352a4c Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Mon, 25 Oct 2010 18:04:01 +0900 Subject: Get rid of references to BaseKeyboard in Latin-specific classes Change-Id: I6871a24967b1410bdb14e902bdd311ef82fd4f0b --- .../com/android/inputmethod/latin/LatinIME.java | 10 +++--- .../inputmethod/latin/LatinKeyboardBaseView.java | 4 +-- .../inputmethod/latin/LatinKeyboardView.java | 42 ++++++++++++---------- 3 files changed, 30 insertions(+), 26 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 3250cdd01..0a39ab8de 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1791,7 +1791,7 @@ public class LatinIME extends InputMethodService private void updateSuggestions() { LatinKeyboardView inputView = mKeyboardSwitcher.getInputView(); - ((LatinKeyboard) inputView.getKeyboard()).setPreferredLetters(null); + inputView.getLatinKeyboard().setPreferredLetters(null); // Check if we have a suggestion engine attached. if ((mSuggest == null || !isPredictionOn()) && !mVoiceInputHighlighted) { @@ -1813,7 +1813,7 @@ public class LatinIME extends InputMethodService private void showCorrections(WordAlternatives alternatives) { List stringList = alternatives.getAlternatives(); - ((LatinKeyboard) mKeyboardSwitcher.getInputView().getKeyboard()).setPreferredLetters(null); + mKeyboardSwitcher.getInputView().getLatinKeyboard().setPreferredLetters(null); showSuggestions(stringList, alternatives.getOriginalWord(), false, false); } @@ -1829,7 +1829,7 @@ public class LatinIME extends InputMethodService int[] nextLettersFrequencies = mSuggest.getNextLettersFrequencies(); - ((LatinKeyboard) mKeyboardSwitcher.getInputView().getKeyboard()).setPreferredLetters( + mKeyboardSwitcher.getInputView().getLatinKeyboard().setPreferredLetters( nextLettersFrequencies); boolean correctionAvailable = !mInputTypeNoAutoCorrect && mSuggest.hasMinimalCorrection(); @@ -2018,7 +2018,7 @@ public class LatinIME extends InputMethodService saveWordInHistory(suggestion); mPredicting = false; mCommittedLength = suggestion.length(); - ((LatinKeyboard) inputView.getKeyboard()).setPreferredLetters(null); + inputView.getLatinKeyboard().setPreferredLetters(null); // If we just corrected a word, then don't show punctuations if (!correcting) { setNextSuggestions(); @@ -2321,7 +2321,7 @@ public class LatinIME extends InputMethodService public void onRelease(int primaryCode) { // Reset any drag flags in the keyboard - ((LatinKeyboard) mKeyboardSwitcher.getInputView().getKeyboard()).keyReleased(); + mKeyboardSwitcher.getInputView().getLatinKeyboard().keyReleased(); //vibrate(); final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch(); if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_SHIFT) { diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 6b46ab838..2bf70bf82 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -598,7 +598,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx * @see #getKeyboard() * @param keyboard the keyboard to display in this view */ - public void setKeyboard(BaseKeyboard keyboard) { + protected void setKeyboard(BaseKeyboard keyboard) { if (mKeyboard != null) { dismissKeyPreview(); } @@ -626,7 +626,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx * @return the currently attached keyboard * @see #setKeyboard(BaseKeyboard) */ - public BaseKeyboard getKeyboard() { + protected BaseKeyboard getKeyboard() { return mKeyboard; } diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java index 35428997f..6672dd22d 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java @@ -40,7 +40,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { public static final int KEYCODE_PREV_LANGUAGE = -105; public static final int KEYCODE_CAPSLOCK = -106; - private BaseKeyboard mPhoneKeyboard; + private LatinKeyboard mPhoneKeyboard; /** Whether we've started dropping move events because we found a big jump */ private boolean mDroppingEvents; @@ -62,13 +62,13 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { super(context, attrs, defStyle); } - public void setPhoneKeyboard(BaseKeyboard phoneKeyboard) { + public void setPhoneKeyboard(LatinKeyboard phoneKeyboard) { mPhoneKeyboard = phoneKeyboard; } @Override public void setPreviewEnabled(boolean previewEnabled) { - if (getKeyboard() == mPhoneKeyboard) { + if (getLatinKeyboard() == mPhoneKeyboard) { // Phone keyboard never shows popup preview (except language switch). super.setPreviewEnabled(false); } else { @@ -76,8 +76,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { } } - @Override - public void setKeyboard(BaseKeyboard k) { + public void setLatinKeyboard(LatinKeyboard k) { super.setKeyboard(k); // One-seventh of the keyboard width seems like a reasonable threshold mJumpThresholdSquare = k.getMinWidth() / 7; @@ -87,12 +86,21 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { setKeyboardLocal(k); } + public LatinKeyboard getLatinKeyboard() { + BaseKeyboard keyboard = getKeyboard(); + if (keyboard instanceof LatinKeyboard) { + return (LatinKeyboard)keyboard; + } else { + return null; + } + } + @Override protected boolean onLongPress(Key key) { int primaryCode = key.codes[0]; if (primaryCode == KEYCODE_OPTIONS) { return invokeOnKey(KEYCODE_OPTIONS_LONGPRESS); - } else if (primaryCode == '0' && getKeyboard() == mPhoneKeyboard) { + } else if (primaryCode == '0' && getLatinKeyboard() == mPhoneKeyboard) { // Long pressing on 0 in phone number keypad gives you a '+'. return invokeOnKey('+'); } else { @@ -109,9 +117,8 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { @Override protected CharSequence adjustCase(CharSequence label) { - BaseKeyboard keyboard = getKeyboard(); - if (keyboard instanceof LatinKeyboard - && ((LatinKeyboard) keyboard).isAlphaKeyboard() + LatinKeyboard keyboard = getLatinKeyboard(); + if (keyboard.isAlphaKeyboard() && keyboard.isShifted() && !TextUtils.isEmpty(label) && label.length() < 3 && Character.isLowerCase(label.charAt(0))) { @@ -121,13 +128,10 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { } public boolean setShiftLocked(boolean shiftLocked) { - BaseKeyboard keyboard = getKeyboard(); - if (keyboard instanceof LatinKeyboard) { - ((LatinKeyboard)keyboard).setShiftLocked(shiftLocked); - invalidateAllKeys(); - return true; - } - return false; + LatinKeyboard keyboard = getLatinKeyboard(); + keyboard.setShiftLocked(shiftLocked); + invalidateAllKeys(); + return true; } /** @@ -209,7 +213,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { @Override public boolean onTouchEvent(MotionEvent me) { - LatinKeyboard keyboard = (LatinKeyboard) getKeyboard(); + LatinKeyboard keyboard = getLatinKeyboard(); if (DEBUG_LINE) { mLastX = (int) me.getX(); mLastY = (int) me.getY(); @@ -258,7 +262,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { private int mLastY; private Paint mPaint; - private void setKeyboardLocal(BaseKeyboard k) { + private void setKeyboardLocal(LatinKeyboard k) { if (DEBUG_AUTO_PLAY) { findKeys(); if (mHandler2 == null) { @@ -319,7 +323,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView { } private void findKeys() { - List keys = getKeyboard().getKeys(); + List keys = getLatinKeyboard().getKeys(); // Get the keys on this keyboard for (int i = 0; i < keys.size(); i++) { int code = keys.get(i).codes[0]; -- cgit v1.2.3-83-g751a From 29ff343f77365e8a11a9b26a0e16a9dc5b7d72d7 Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Mon, 25 Oct 2010 18:34:19 +0900 Subject: Remove LatinKeyboardBaseView.isShifted() and setShifted() for refactoring Change-Id: I9a1106b679a9ffb3ae959d90377eef096e5af842 --- .../inputmethod/latin/KeyboardSwitcher.java | 5 ++- .../com/android/inputmethod/latin/LatinIME.java | 44 ++++++++++++++++------ .../inputmethod/latin/LatinKeyboardBaseView.java | 35 +++-------------- 3 files changed, 42 insertions(+), 42 deletions(-) (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java index 3a54904d3..a5a262ec7 100644 --- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java @@ -392,7 +392,10 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha public void setShifted(boolean shifted) { if (mInputView != null) { - mInputView.setShifted(shifted); + LatinKeyboard latinKeyboard = mInputView.getLatinKeyboard(); + if (latinKeyboard != null && latinKeyboard.setShifted(shifted)) { + mInputView.invalidateAllKeys(); + } } } diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 0a39ab8de..07df7eda8 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -993,7 +993,8 @@ public class LatinIME extends InputMethodService LatinKeyboardView inputView = mKeyboardSwitcher.getInputView(); // Enable shift key and DPAD to do selections if (inputView != null && inputView.isShown() - && inputView.isShifted()) { + && inputView.getLatinKeyboard() != null + && inputView.getLatinKeyboard().isShifted()) { event = new KeyEvent(event.getDownTime(), event.getEventTime(), event.getAction(), event.getKeyCode(), event.getRepeatCount(), event.getDeviceId(), event.getScanCode(), @@ -1372,7 +1373,10 @@ public class LatinIME extends InputMethodService mCapsLock = false; switcher.setShifted(false); } else if (inputView != null) { - switcher.setShifted(!inputView.isShifted()); + LatinKeyboard latinKeyboard = inputView.getLatinKeyboard(); + if (latinKeyboard != null) { + switcher.setShifted(!latinKeyboard.isShifted()); + } } } else { switcher.toggleShift(); @@ -1425,7 +1429,8 @@ public class LatinIME extends InputMethodService mWord.reset(); } } - if (mKeyboardSwitcher.getInputView().isShifted()) { + LatinKeyboard latinKeyboard = mKeyboardSwitcher.getInputView().getLatinKeyboard(); + if (latinKeyboard != null && latinKeyboard.isShifted()) { if (keyCodes == null || keyCodes[0] < Character.MIN_CODE_POINT || keyCodes[0] > Character.MAX_CODE_POINT) { return; @@ -1444,7 +1449,7 @@ public class LatinIME extends InputMethodService } } if (mPredicting) { - if (mKeyboardSwitcher.getInputView().isShifted() + if (latinKeyboard != null && latinKeyboard.isShifted() && mKeyboardSwitcher.isAlphabetMode() && mComposing.length() == 0) { mWord.setFirstCharCapitalized(true); @@ -1739,7 +1744,8 @@ public class LatinIME extends InputMethodService final List nBest = new ArrayList(); boolean capitalizeFirstWord = preferCapitalization() || (mKeyboardSwitcher.isAlphabetMode() - && mKeyboardSwitcher.getInputView().isShifted()); + && mKeyboardSwitcher.getInputView().getLatinKeyboard() != null + && mKeyboardSwitcher.getInputView().getLatinKeyboard().isShifted()); for (String c : mVoiceResults.candidates) { if (capitalizeFirstWord) { c = Character.toUpperCase(c.charAt(0)) + c.substring(1, c.length()); @@ -1791,7 +1797,10 @@ public class LatinIME extends InputMethodService private void updateSuggestions() { LatinKeyboardView inputView = mKeyboardSwitcher.getInputView(); - inputView.getLatinKeyboard().setPreferredLetters(null); + LatinKeyboard latinKeyboard = inputView.getLatinKeyboard(); + if (latinKeyboard != null) { + latinKeyboard.setPreferredLetters(null); + } // Check if we have a suggestion engine attached. if ((mSuggest == null || !isPredictionOn()) && !mVoiceInputHighlighted) { @@ -1813,7 +1822,10 @@ public class LatinIME extends InputMethodService private void showCorrections(WordAlternatives alternatives) { List stringList = alternatives.getAlternatives(); - mKeyboardSwitcher.getInputView().getLatinKeyboard().setPreferredLetters(null); + LatinKeyboard latinKeyboard = mKeyboardSwitcher.getInputView().getLatinKeyboard(); + if (latinKeyboard != null) { + latinKeyboard.setPreferredLetters(null); + } showSuggestions(stringList, alternatives.getOriginalWord(), false, false); } @@ -1829,8 +1841,10 @@ public class LatinIME extends InputMethodService int[] nextLettersFrequencies = mSuggest.getNextLettersFrequencies(); - mKeyboardSwitcher.getInputView().getLatinKeyboard().setPreferredLetters( - nextLettersFrequencies); + LatinKeyboard latinKeyboard = mKeyboardSwitcher.getInputView().getLatinKeyboard(); + if (latinKeyboard != null) { + latinKeyboard.setPreferredLetters(nextLettersFrequencies); + } boolean correctionAvailable = !mInputTypeNoAutoCorrect && mSuggest.hasMinimalCorrection(); //|| mCorrectionMode == mSuggest.CORRECTION_FULL; @@ -2002,11 +2016,12 @@ public class LatinIME extends InputMethodService */ private void pickSuggestion(CharSequence suggestion, boolean correcting) { LatinKeyboardView inputView = mKeyboardSwitcher.getInputView(); + LatinKeyboard latinKeyboard = inputView.getLatinKeyboard(); if (mCapsLock) { suggestion = suggestion.toString().toUpperCase(); } else if (preferCapitalization() || (mKeyboardSwitcher.isAlphabetMode() - && inputView.isShifted())) { + && latinKeyboard != null && latinKeyboard.isShifted())) { suggestion = suggestion.toString().toUpperCase().charAt(0) + suggestion.subSequence(1, suggestion.length()).toString(); } @@ -2018,7 +2033,9 @@ public class LatinIME extends InputMethodService saveWordInHistory(suggestion); mPredicting = false; mCommittedLength = suggestion.length(); - inputView.getLatinKeyboard().setPreferredLetters(null); + if (latinKeyboard != null) { + latinKeyboard.setPreferredLetters(null); + } // If we just corrected a word, then don't show punctuations if (!correcting) { setNextSuggestions(); @@ -2321,7 +2338,10 @@ public class LatinIME extends InputMethodService public void onRelease(int primaryCode) { // Reset any drag flags in the keyboard - mKeyboardSwitcher.getInputView().getLatinKeyboard().keyReleased(); + LatinKeyboard latinKeyboard = mKeyboardSwitcher.getInputView().getLatinKeyboard(); + if (latinKeyboard != null) { + latinKeyboard.keyReleased(); + } //vibrate(); final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch(); if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_SHIFT) { diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 2bf70bf82..b2635ad9c 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -638,34 +638,6 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx return mHasDistinctMultitouch; } - /** - * Sets the state of the shift key of the keyboard, if any. - * @param shifted whether or not to enable the state of the shift key - * @return true if the shift key state changed, false if there was no change - */ - public boolean setShifted(boolean shifted) { - if (mKeyboard != null) { - if (mKeyboard.setShifted(shifted)) { - // The whole keyboard probably needs to be redrawn - invalidateAllKeys(); - return true; - } - } - return false; - } - - /** - * Returns the state of the shift key of the keyboard, if any. - * @return true if the shift is in a pressed state, false otherwise. If there is - * no shift key on the keyboard or there is no keyboard attached, it returns false. - */ - public boolean isShifted() { - if (mKeyboard != null) { - return mKeyboard.isShifted(); - } - return false; - } - /** * Enables or disables the key feedback popup. This is a popup that shows a magnified * version of the depressed key. By default the preview is enabled. @@ -1247,7 +1219,12 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mMiniKeyboardOriginX = adjustedX + container.getPaddingLeft() - mWindowOffset[0]; mMiniKeyboardOriginY = y + container.getPaddingTop() - mWindowOffset[1]; mMiniKeyboard.setPopupOffset(adjustedX, y); - mMiniKeyboard.setShifted(isShifted()); + // TODO: change the below line to use getLatinKeyboard() instead of getKeyboard() + BaseKeyboard baseMiniKeyboard = mMiniKeyboard.getKeyboard(); + if (baseMiniKeyboard != null && baseMiniKeyboard.setShifted(mKeyboard == null + ? false : mKeyboard.isShifted())) { + mMiniKeyboard.invalidateAllKeys(); + } // Mini keyboard needs no pop-up key preview displayed. mMiniKeyboard.setPreviewEnabled(false); mMiniKeyboardPopup.setContentView(container); -- cgit v1.2.3-83-g751a From 68864723cf8d8e48385bfcaf30237fba25a8895a Mon Sep 17 00:00:00 2001 From: Tadashi Takaoka Date: Fri, 5 Nov 2010 18:30:22 +0900 Subject: Rename LatinKeyboardBaseView class to KeyboardBaseView Change-Id: I496ecbfa7d398583d01f821398f49f75d17311d8 --- java/res/layout/input_stone_popup.xml | 4 +- java/res/layout/keyboard_popup.xml | 4 +- java/res/values/attrs.xml | 2 +- java/res/values/styles.xml | 2 +- .../inputmethod/latin/BaseKeyboardView.java | 1480 ++++++++++++++++++++ .../com/android/inputmethod/latin/KeyDetector.java | 2 +- .../com/android/inputmethod/latin/LatinIME.java | 8 +- .../inputmethod/latin/LatinKeyboardBaseView.java | 1480 -------------------- .../inputmethod/latin/LatinKeyboardView.java | 6 +- .../inputmethod/latin/MiniKeyboardKeyDetector.java | 4 +- .../android/inputmethod/latin/PointerTracker.java | 6 +- .../inputmethod/latin/ProximityKeyDetector.java | 6 +- 12 files changed, 1502 insertions(+), 1502 deletions(-) create mode 100644 java/src/com/android/inputmethod/latin/BaseKeyboardView.java delete mode 100644 java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java') diff --git a/java/res/layout/input_stone_popup.xml b/java/res/layout/input_stone_popup.xml index f159625f7..3a7b5b9ab 100644 --- a/java/res/layout/input_stone_popup.xml +++ b/java/res/layout/input_stone_popup.xml @@ -25,9 +25,9 @@ android:orientation="horizontal" android:background="@drawable/keyboard_popup_panel_background" > - - - + diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 0372b07cf..d2acafdfa 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -15,7 +15,7 @@ --> -