From 2b2db815d29358d6ec6f023b09bb33d40cbefee0 Mon Sep 17 00:00:00 2001 From: satok Date: Thu, 17 Jun 2010 11:18:54 +0900 Subject: [PATCH] Move KeyboardView in the framework to LatinKeyboardViewBase Change-Id: I99e3ea5eb1f1f5e5f9b36306930cdf0f50acfb01 --- .../keyboard_key_feedback_background.9.png | Bin 0 -> 1372 bytes ...eyboard_key_feedback_more_background.9.png | Bin 0 -> 1637 bytes .../keyboard_key_feedback_background.9.png | Bin 0 -> 1182 bytes ...eyboard_key_feedback_more_background.9.png | Bin 0 -> 1385 bytes java/res/drawable/keyboard_key_feedback.xml | 22 ++ java/res/layout/input.xml | 4 +- java/res/layout/input2.xml | 5 +- java/res/layout/input3.xml | 4 +- java/res/layout/input4.xml | 4 +- java/res/layout/input5.xml | 4 +- java/res/layout/input6.xml | 4 +- java/res/layout/input7.xml | 14 +- java/res/layout/input7_popup.xml | 14 +- java/res/layout/input_trans.xml | 4 +- java/res/layout/keyboard_key_preview.xml | 29 ++ java/res/layout/keyboard_popup_keyboard.xml | 48 +++ java/res/values/attrs.xml | 57 +++ java/res/values/bools.xml | 1 + java/res/values/styles.xml | 34 ++ .../android/inputmethod/latin/LatinIME.java | 3 +- .../latin/LatinKeyboardBaseView.java | 355 +++++++++--------- .../inputmethod/latin/LatinKeyboardView.java | 3 +- 22 files changed, 412 insertions(+), 197 deletions(-) create mode 100644 java/res/drawable-hdpi/keyboard_key_feedback_background.9.png create mode 100644 java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png create mode 100644 java/res/drawable-mdpi/keyboard_key_feedback_background.9.png create mode 100755 java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png create mode 100644 java/res/drawable/keyboard_key_feedback.xml create mode 100644 java/res/layout/keyboard_key_preview.xml create mode 100644 java/res/layout/keyboard_popup_keyboard.xml create mode 100644 java/res/values/attrs.xml create mode 100644 java/res/values/styles.xml rename temp/KeyboardView.java => java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java (87%) diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba42db8237727d5d67b629bd60384fc014df3ab GIT binary patch literal 1372 zcmV-i1*7_jP);@F8{2|+b#-mc(%F;!iKC^Zi6gDRq zd1I+mdc3!{cUO0J_nyAKzP;sg`5C;Yr)Pf_&Rzm&UweD|(;XchyY;+Nacu`QfXWJ_ z6{c`H@@>Up@ks(xP%kKumlW750_au!d|E%B(a*1^?d*ehc6Pp|^`zG0S`RCZ=Q%8a zw*yuIQknqWXA2v`5Cw8j0iM$OuGWtg)K#sYX)Wq^B|VqZcJ?uE)4r`*FX{K^^!%p4 zIR;3u8ivPMl&o28DUd=?nG*sO`KJQv%Sxs4`|$Aaom#u%xH&jD_=`Xpumd}z=NH@B z+Ma^#X)vgPRDv-8L;47m3wj=r-5MPojdJMs6!XuD^_swW%UHe}29W`YA!E1EHcKTK zb3s)7iU4v7%zYP|{!+ZxNi%t~73)G$?4i~a_)yR%mGnHk7MSVj>1cj_K3ZH{tf|k= z&PL$9}dIQqjQ1UA(aJR!|b8~Z1-Ys5#NG+?G&2-RJ_dL*#TZ+z?s!uNw zHsfUSZm>JVtM4(b?{Jp7L#apv9D7CJm7rM9;HU_HukUc4*9$#Au>m+6|KW|7H+!+; z{iRgT;Pm(R|DZ$uQ03tW;B0W6KO8u8#r7guc5og5j=cq!>%8Xt7{IYk*}-ve92^J7 z!EtaL90$k2ac~@*{{>Fu;5ay*Rt}DXRn|4IEX!i%A#s;Y>r`{Da3EoIXK@U;MQRuLQh?_J_ltNGX;nx(e%c_Sy))eJveb) zpxE*aqDjUP5)m(O()!^G{(j^mYW0S3{E=VjUS7xyx(>vl=EF-dZ&{P){^$QjR{yb)^0}VjLaXZ z=6N_oH|yUNVHBh`q{cK~Q_^EaVGym6e6`6uI_6Kb`S{S#&>!(Slmk$1i`g?a7{|QB zaT}}LL9Iz+Ag#gDD*$wWIRdS3bH&@F+!(!tnyv5XMseO}((5b{?4c3GOa^n4naceDBZKrrR{Sz?*kPkW%>croQ6ITP!tiUFj9GV5*ivm}gqjnA zz5qt!i1Vj`v^?yAvnOEC`2vU?Ud?99{{vP4EDYjjyQ`# literal 0 HcmV?d00001 diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4d0b60109987c866268d42f30d8148829a1af76a GIT binary patch literal 1637 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 literal 0 HcmV?d00001 diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png new file mode 100755 index 0000000000000000000000000000000000000000..29aa285bd5446fa30710c24efe602ec948b44ea4 GIT binary patch literal 1385 zcmV-v1(y1WP)5 z5Nte%g=ke4${rN8T5zJgq%!0(vNTS$a{dfr z653z;Oy!f~cA=9CT~yUAPE+(Tj6pvTyahNh)JaHtl;Vff{UG29GqV6EhNoU9mVQxz z<0lqJtG77;c)(r8m2~yYHj}*cqb(&6r1FqqD3ev9Yo7k}>vOr&kcq^M2ag z-27ft8_0>a(P-jE;7!02AnWVvF9qA*Lcf`r8J^8%c_x$LeSLj?T(ISGnG}mfS|}9g z;o%_#JYp1HZEbBS2O1^^Y~V3)wz#+`aAuC7&;0y+V_{*Tt|^MWTr0czeBRyL+e-i@ z;n0`4T&@U%VR8WaP@5vf`rzQ;3upkw1@M|w<{_nV<)c2(4|c$ww40DZwMC)jC1VPk zCiBT;@)6UgJX_pzm6CFI!98%z2F-f1omm+jLH1j)ExU}O)yDkDx zTVK$`w=u7Vi-}GH&?qJ+?*QX%BOvWK(k??-tjuEvS|;o*_8<2dLijy|nYYHgal$&? zEq9u**nw_?r;7QOq zgQ_!VKq~3pA*7)1pf&B5&R?gu7EdXup*a>iwjmRms|8+US1|Z zw5$Pzz7h8JRxB(aM|kT4$icxu&&kP2N}NCa)z#H&I2E0rpS$^dJ`L^SfL$3K9jycK zot>ReYqc7gn3%Yko13dfIGD8Iqyee8W~xDy4=TSB2EJ4(HQ5DFS65e5v5rRop3nw; z@NaM)$NAUr2SdK5#UUCpOuSmH{ss+#!O(-r?CflHXlTd-Hiw6Yn+NHssi~Whk&!wG z)Zsg5gFes~euH%=JJK$;#-pPnmdoXOI=Om)ey{^|X}1x? zKC^@kS4p7b}lasG|dwajx-``J)7^T^4wk{@~r_vNLbCpzt3KNXG036bIVotmU zyIQWYZN*W!N_=txhmul&=}&~D*Vfj45MaOV^x7?)`FVSL`$tiQQ2QIgAJzaVD)Gf3 zS&6|D1YS9ilG1cwe0)4JHa7NLI58pS!556N&*FmhJnzp+rSiJ~eFC9!dU{$!z;C4B z94VKHRv%}Hsm8u51v}6qMSbU@lw87g$~Py(+aR@(ngxFL@Lo)t0Caba>@^S-75w?+20~0?y^{)J9y_3qgbDOr zuQE+e=zt?Juapwa0fLlJY2YF6VSU@K*Ty_?+AnYka^@j#z-`<0|M!0n;{NO7w(U_4 rIDzdgc;o)x200#C(S2p<{t;jRaYXaV8UYj(00000NkvXXu0mjfEPjx} literal 0 HcmV?d00001 diff --git a/java/res/drawable/keyboard_key_feedback.xml b/java/res/drawable/keyboard_key_feedback.xml new file mode 100644 index 000000000..159ba8686 --- /dev/null +++ b/java/res/drawable/keyboard_key_feedback.xml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/java/res/layout/input.xml b/java/res/layout/input.xml index 1d7c6f746..039fdd8df 100755 --- a/java/res/layout/input.xml +++ b/java/res/layout/input.xml @@ -20,10 +20,12 @@ diff --git a/java/res/layout/input2.xml b/java/res/layout/input2.xml index 2e90c2c6b..3c9ec2fdf 100755 --- a/java/res/layout/input2.xml +++ b/java/res/layout/input2.xml @@ -20,10 +20,13 @@ diff --git a/java/res/layout/input3.xml b/java/res/layout/input3.xml index a27d09a5a..a4295f7f4 100755 --- a/java/res/layout/input3.xml +++ b/java/res/layout/input3.xml @@ -20,10 +20,12 @@ diff --git a/java/res/layout/input4.xml b/java/res/layout/input4.xml index 58dd51e3c..b5da9d48f 100755 --- a/java/res/layout/input4.xml +++ b/java/res/layout/input4.xml @@ -20,10 +20,12 @@ diff --git a/java/res/layout/input5.xml b/java/res/layout/input5.xml index 5cd0b8d02..2de11dfff 100755 --- a/java/res/layout/input5.xml +++ b/java/res/layout/input5.xml @@ -20,10 +20,12 @@ diff --git a/java/res/layout/input6.xml b/java/res/layout/input6.xml index 19197e1e4..54f31044f 100755 --- a/java/res/layout/input6.xml +++ b/java/res/layout/input6.xml @@ -20,10 +20,12 @@ diff --git a/java/res/layout/input7.xml b/java/res/layout/input7.xml index 6279f5d08..1290eb8ca 100755 --- a/java/res/layout/input7.xml +++ b/java/res/layout/input7.xml @@ -20,14 +20,16 @@ diff --git a/java/res/layout/input7_popup.xml b/java/res/layout/input7_popup.xml index d1261b8cc..2056757fa 100755 --- a/java/res/layout/input7_popup.xml +++ b/java/res/layout/input7_popup.xml @@ -25,18 +25,20 @@ android:orientation="horizontal" android:background="@drawable/keyboard_popup_panel_background" > - diff --git a/java/res/layout/keyboard_key_preview.xml b/java/res/layout/keyboard_key_preview.xml new file mode 100644 index 000000000..64eaa6579 --- /dev/null +++ b/java/res/layout/keyboard_key_preview.xml @@ -0,0 +1,29 @@ + + + + diff --git a/java/res/layout/keyboard_popup_keyboard.xml b/java/res/layout/keyboard_popup_keyboard.xml new file mode 100644 index 000000000..e6b3a411f --- /dev/null +++ b/java/res/layout/keyboard_popup_keyboard.xml @@ -0,0 +1,48 @@ + + + + + + \ No newline at end of file diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml new file mode 100644 index 000000000..2468e9df0 --- /dev/null +++ b/java/res/values/attrs.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/res/values/bools.xml b/java/res/values/bools.xml index ebe2f04e5..a0cebbb94 100644 --- a/java/res/values/bools.xml +++ b/java/res/values/bools.xml @@ -25,4 +25,5 @@ false true + true diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml new file mode 100644 index 000000000..a59a15083 --- /dev/null +++ b/java/res/values/styles.xml @@ -0,0 +1,34 @@ + + + + + + diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 8186154a5..5b10e2ce7 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -32,7 +32,6 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.inputmethodservice.InputMethodService; import android.inputmethodservice.Keyboard; -import android.inputmethodservice.KeyboardView; import android.media.AudioManager; import android.os.Debug; import android.os.Handler; @@ -74,7 +73,7 @@ import java.util.Map; * Input method implementation for Qwerty'ish keyboard. */ public class LatinIME extends InputMethodService - implements KeyboardView.OnKeyboardActionListener, + implements LatinKeyboardBaseView.OnKeyboardActionListener, VoiceInput.UiListener, SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "LatinIME"; diff --git a/temp/KeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java similarity index 87% rename from temp/KeyboardView.java rename to java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 4b484092d..64299b626 100644 --- a/temp/KeyboardView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -1,20 +1,20 @@ /* - * Copyright (C) 2008-2009 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 - * + * Copyright (C) 2010 The Android Open Source Project + * + * 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. + * 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 android.inputmethodservice; +package com.android.inputmethod.latin; import android.content.Context; import android.content.res.TypedArray; @@ -27,6 +27,7 @@ import android.graphics.Typeface; import android.graphics.Paint.Align; import android.graphics.Region.Op; import android.graphics.drawable.Drawable; +import android.inputmethodservice.Keyboard; import android.inputmethodservice.Keyboard.Key; import android.os.Handler; import android.os.Message; @@ -42,81 +43,91 @@ import android.view.ViewGroup.LayoutParams; import android.widget.PopupWindow; import android.widget.TextView; -import com.android.internal.R; - import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** - * A view that renders a virtual {@link Keyboard}. It handles rendering of keys and + * A view that renders a virtual {@link LatinKeyboard}. It handles rendering of keys and * detecting key presses and touch movements. - * - * @attr ref android.R.styleable#KeyboardView_keyBackground - * @attr ref android.R.styleable#KeyboardView_keyPreviewLayout - * @attr ref android.R.styleable#KeyboardView_keyPreviewOffset - * @attr ref android.R.styleable#KeyboardView_labelTextSize - * @attr ref android.R.styleable#KeyboardView_keyTextSize - * @attr ref android.R.styleable#KeyboardView_keyTextColor - * @attr ref android.R.styleable#KeyboardView_verticalCorrection - * @attr ref android.R.styleable#KeyboardView_popupLayout + * + * @attr ref R.styleable#LatinKeyboardBaseView_keyBackground + * @attr ref R.styleable#LatinKeyboardBaseView_keyPreviewLayout + * @attr ref R.styleable#LatinKeyboardBaseView_keyPreviewOffset + * @attr ref R.styleable#LatinKeyboardBaseView_labelTextSize + * @attr ref R.styleable#LatinKeyboardBaseView_keyTextSize + * @attr ref R.styleable#LatinKeyboardBaseView_keyTextColor + * @attr ref R.styleable#LatinKeyboardBaseView_verticalCorrection + * @attr ref R.styleable#LatinKeyboardBaseView_popupLayout */ -public class KeyboardView extends View implements View.OnClickListener { +public class LatinKeyboardBaseView extends View implements View.OnClickListener { - /** - * Listener for virtual keyboard events. - */ public interface OnKeyboardActionListener { - + /** - * Called when the user presses a key. This is sent before the {@link #onKey} is called. - * For keys that repeat, this is only called once. - * @param primaryCode the unicode of the key being pressed. If the touch is not on a valid - * key, the value will be zero. + * Called when the user presses a key. This is sent before the + * {@link #onKey} is called. For keys that repeat, this is only + * called once. + * + * @param primaryCode + * the unicode of the key being pressed. If the touch is + * not on a valid key, the value will be zero. */ void onPress(int primaryCode); - + /** - * Called when the user releases a key. This is sent after the {@link #onKey} is called. - * For keys that repeat, this is only called once. - * @param primaryCode the code of the key that was released + * Called when the user releases a key. This is sent after the + * {@link #onKey} is called. For keys that repeat, this is only + * called once. + * + * @param primaryCode + * the code of the key that was released */ void onRelease(int primaryCode); /** * Send a key press to the listener. - * @param primaryCode this is the key that was pressed - * @param keyCodes the codes for all the possible alternative keys - * with the primary code being the first. If the primary key code is - * a single character such as an alphabet or number or symbol, the alternatives - * will include other characters that may be on the same key or adjacent keys. - * These codes are useful to correct for accidental presses of a key adjacent to - * the intended key. + * + * @param primaryCode + * this is the key that was pressed + * @param keyCodes + * the codes for all the possible alternative keys with + * the primary code being the first. If the primary key + * code is a single character such as an alphabet or + * number or symbol, the alternatives will include other + * characters that may be on the same key or adjacent + * keys. These codes are useful to correct for + * accidental presses of a key adjacent to the intended + * key. */ void onKey(int primaryCode, int[] keyCodes); /** * Sends a sequence of characters to the listener. - * @param text the sequence of characters to be displayed. + * + * @param text + * the sequence of characters to be displayed. */ void onText(CharSequence text); - + /** - * Called when the user quickly moves the finger from right to left. + * Called when the user quickly moves the finger from right to + * left. */ void swipeLeft(); - + /** - * Called when the user quickly moves the finger from left to right. + * Called when the user quickly moves the finger from left to + * right. */ void swipeRight(); - + /** * Called when the user quickly moves the finger from up to down. */ void swipeDown(); - + /** * Called when the user quickly moves the finger from down to up. */ @@ -126,8 +137,8 @@ public class KeyboardView extends View implements View.OnClickListener { private static final boolean DEBUG = false; private static final int NOT_A_KEY = -1; private static final int[] KEY_DELETE = { Keyboard.KEYCODE_DELETE }; - private static final int[] LONG_PRESSABLE_STATE_SET = { R.attr.state_long_pressable }; - + private static final int[] LONG_PRESSABLE_STATE_SET = { android.R.attr.state_long_pressable }; + private Keyboard mKeyboard; private int mCurrentKeyIndex = NOT_A_KEY; private int mLabelTextSize; @@ -136,7 +147,7 @@ public class KeyboardView extends View implements View.OnClickListener { private float mShadowRadius; private int mShadowColor; private float mBackgroundDimAmount; - + private TextView mPreviewText; private PopupWindow mPreviewPopup; private int mPreviewTextSizeLarge; @@ -146,7 +157,7 @@ public class KeyboardView extends View implements View.OnClickListener { private PopupWindow mPopupKeyboard; private View mMiniKeyboardContainer; - private KeyboardView mMiniKeyboard; + private LatinKeyboardBaseView mMiniKeyboard; private boolean mMiniKeyboardOnScreen; private View mPopupParent; private int mMiniKeyboardOffsetX; @@ -157,7 +168,7 @@ public class KeyboardView extends View implements View.OnClickListener { /** Listener for {@link OnKeyboardActionListener}. */ private OnKeyboardActionListener mKeyboardActionListener; - + private static final int MSG_SHOW_PREVIEW = 1; private static final int MSG_REMOVE_PREVIEW = 2; private static final int MSG_REPEAT = 3; @@ -166,7 +177,7 @@ public class KeyboardView extends View implements View.OnClickListener { private static final int DELAY_BEFORE_PREVIEW = 0; private static final int DELAY_AFTER_PREVIEW = 70; private static final int DEBOUNCE_TIME = 70; - + private int mVerticalCorrection; private int mProximityThreshold; @@ -183,10 +194,10 @@ public class KeyboardView extends View implements View.OnClickListener { private int mStartY; private boolean mProximityCorrectOn; - + private Paint mPaint; private Rect mPadding; - + private long mDownTime; private long mLastMoveTime; private int mLastKey; @@ -242,7 +253,7 @@ public class KeyboardView extends View implements View.OnClickListener { private boolean mKeyboardChanged; /** The canvas for the above mutable keyboard bitmap */ private Canvas mCanvas; - + Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -256,7 +267,7 @@ public class KeyboardView extends View implements View.OnClickListener { case MSG_REPEAT: if (repeatKey()) { Message repeat = Message.obtain(this, MSG_REPEAT); - sendMessageDelayed(repeat, REPEAT_INTERVAL); + sendMessageDelayed(repeat, REPEAT_INTERVAL); } break; case MSG_LONGPRESS: @@ -266,69 +277,65 @@ public class KeyboardView extends View implements View.OnClickListener { } }; - public KeyboardView(Context context, AttributeSet attrs) { - this(context, attrs, com.android.internal.R.attr.keyboardViewStyle); + public LatinKeyboardBaseView(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.keyboardViewStyle); } - public KeyboardView(Context context, AttributeSet attrs, int defStyle) { + public LatinKeyboardBaseView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - TypedArray a = - context.obtainStyledAttributes( - attrs, android.R.styleable.KeyboardView, defStyle, 0); - + TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.LatinKeyboardBaseView, defStyle, R.style.LatinKeyboardBaseView); LayoutInflater inflate = - (LayoutInflater) context - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - + (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); int previewLayout = 0; int keyTextSize = 0; int n = a.getIndexCount(); - + for (int i = 0; i < n; i++) { int attr = a.getIndex(i); switch (attr) { - case com.android.internal.R.styleable.KeyboardView_keyBackground: + case R.styleable.LatinKeyboardBaseView_keyBackground: mKeyBackground = a.getDrawable(attr); break; - case com.android.internal.R.styleable.KeyboardView_verticalCorrection: + case R.styleable.LatinKeyboardBaseView_verticalCorrection: mVerticalCorrection = a.getDimensionPixelOffset(attr, 0); break; - case com.android.internal.R.styleable.KeyboardView_keyPreviewLayout: + case R.styleable.LatinKeyboardBaseView_keyPreviewLayout: previewLayout = a.getResourceId(attr, 0); break; - case com.android.internal.R.styleable.KeyboardView_keyPreviewOffset: + case R.styleable.LatinKeyboardBaseView_keyPreviewOffset: mPreviewOffset = a.getDimensionPixelOffset(attr, 0); break; - case com.android.internal.R.styleable.KeyboardView_keyPreviewHeight: + case R.styleable.LatinKeyboardBaseView_keyPreviewHeight: mPreviewHeight = a.getDimensionPixelSize(attr, 80); break; - case com.android.internal.R.styleable.KeyboardView_keyTextSize: + case R.styleable.LatinKeyboardBaseView_keyTextSize: mKeyTextSize = a.getDimensionPixelSize(attr, 18); break; - case com.android.internal.R.styleable.KeyboardView_keyTextColor: + case R.styleable.LatinKeyboardBaseView_keyTextColor: mKeyTextColor = a.getColor(attr, 0xFF000000); break; - case com.android.internal.R.styleable.KeyboardView_labelTextSize: + case R.styleable.LatinKeyboardBaseView_labelTextSize: mLabelTextSize = a.getDimensionPixelSize(attr, 14); break; - case com.android.internal.R.styleable.KeyboardView_popupLayout: + case R.styleable.LatinKeyboardBaseView_popupLayout: mPopupLayout = a.getResourceId(attr, 0); break; - case com.android.internal.R.styleable.KeyboardView_shadowColor: + case R.styleable.LatinKeyboardBaseView_shadowColor: mShadowColor = a.getColor(attr, 0); break; - case com.android.internal.R.styleable.KeyboardView_shadowRadius: + case R.styleable.LatinKeyboardBaseView_shadowRadius: mShadowRadius = a.getFloat(attr, 0f); break; + // TODO: Use Theme (android.R.styleable.Theme_backgroundDimAmount) + case R.styleable.LatinKeyboardBaseView_backgroundDimAmount: + mBackgroundDimAmount = a.getFloat(attr, 0.5f); + break; } } - - a = mContext.obtainStyledAttributes( - com.android.internal.R.styleable.Theme); - mBackgroundDimAmount = a.getFloat(android.R.styleable.Theme_backgroundDimAmount, 0.5f); mPreviewPopup = new PopupWindow(context); if (previewLayout != 0) { @@ -339,16 +346,16 @@ public class KeyboardView extends View implements View.OnClickListener { } else { mShowPreview = false; } - + mPreviewPopup.setTouchable(false); - + mPopupKeyboard = new PopupWindow(context); mPopupKeyboard.setBackgroundDrawable(null); //mPopupKeyboard.setClippingEnabled(false); - + mPopupParent = this; //mPredicting = true; - + mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setTextSize(keyTextSize); @@ -360,16 +367,17 @@ public class KeyboardView extends View implements View.OnClickListener { mKeyBackground.getPadding(mPadding); mSwipeThreshold = (int) (500 * getResources().getDisplayMetrics().density); - mDisambiguateSwipe = getResources().getBoolean( - com.android.internal.R.bool.config_swipeDisambiguation); + // TODO: Refer frameworks/base/core/res/res/values/config.xml + mDisambiguateSwipe = getResources().getBoolean(R.bool.config_swipeDisambiguation); resetMultiTap(); initGestureDetector(); } private void initGestureDetector() { - mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { + mGestureDetector = new GestureDetector( + getContext(), new GestureDetector.SimpleOnGestureListener() { @Override - public boolean onFling(MotionEvent me1, MotionEvent me2, + public boolean onFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) { if (mPossiblePoly) return false; final float absX = Math.abs(velocityX); @@ -455,7 +463,8 @@ public class KeyboardView extends View implements View.OnClickListener { mKeyboardChanged = true; invalidateAllKeys(); computeProximityThreshold(keyboard); - mMiniKeyboardCache.clear(); // Not really necessary to do every time, but will free up views + mMiniKeyboardCache.clear(); + // Not really necessary to do every time, but will free up views // Switching to a different keyboard should abort any pending keys so that the key up // doesn't get delivered to the old or new keyboard mAbortKey = true; // Until the next ACTION_DOWN @@ -469,12 +478,11 @@ public class KeyboardView extends View implements View.OnClickListener { public Keyboard getKeyboard() { return mKeyboard; } - + /** * 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 - * @see KeyboardView#isShifted() */ public boolean setShifted(boolean shifted) { if (mKeyboard != null) { @@ -491,7 +499,6 @@ public class KeyboardView extends View implements View.OnClickListener { * 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. - * @see KeyboardView#setShifted(boolean) */ public boolean isShifted() { if (mKeyboard != null) { @@ -502,7 +509,7 @@ public class KeyboardView extends View implements View.OnClickListener { /** * 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. + * version of the depressed key. By default the preview is enabled. * @param previewEnabled whether or not to enable the key feedback popup * @see #isPreviewEnabled() */ @@ -518,14 +525,14 @@ public class KeyboardView extends View implements View.OnClickListener { public boolean isPreviewEnabled() { return mShowPreview; } - + public void setVerticalCorrection(int verticalOffset) { - } + public void setPopupParent(View v) { mPopupParent = v; } - + public void setPopupOffset(int x, int y) { mMiniKeyboardOffsetX = x; mMiniKeyboardOffsetY = y; @@ -551,9 +558,9 @@ public class KeyboardView extends View implements View.OnClickListener { return mProximityCorrectOn; } - /** + /** * Popup keyboard close button clicked. - * @hide + * @hide */ public void onClick(View v) { dismissPopupKeyboard(); @@ -571,13 +578,15 @@ public class KeyboardView extends View implements View.OnClickListener { public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // Round up a little if (mKeyboard == null) { - setMeasuredDimension(mPaddingLeft + mPaddingRight, mPaddingTop + mPaddingBottom); + setMeasuredDimension( + getPaddingLeft() + getPaddingRight(), getPaddingTop() + getPaddingBottom()); } else { - int width = mKeyboard.getMinWidth() + mPaddingLeft + mPaddingRight; + int width = mKeyboard.getMinWidth() + getPaddingLeft() + getPaddingRight(); if (MeasureSpec.getSize(widthMeasureSpec) < width + 10) { width = MeasureSpec.getSize(widthMeasureSpec); } - setMeasuredDimension(width, mKeyboard.getHeight() + mPaddingTop + mPaddingBottom); + setMeasuredDimension( + width, mKeyboard.getHeight() + getPaddingTop() + getPaddingBottom()); } } @@ -633,15 +642,15 @@ public class KeyboardView extends View implements View.OnClickListener { } final Canvas canvas = mCanvas; canvas.clipRect(mDirtyRect, Op.REPLACE); - + if (mKeyboard == null) return; - + final Paint paint = mPaint; final Drawable keyBackground = mKeyBackground; final Rect clipRegion = mClipRegion; final Rect padding = mPadding; - final int kbdPaddingLeft = mPaddingLeft; - final int kbdPaddingTop = mPaddingTop; + final int kbdPaddingLeft = getPaddingLeft(); + final int kbdPaddingTop = getPaddingTop(); final Key[] keys = mKeys; final Key invalidKey = mInvalidatedKey; @@ -668,15 +677,15 @@ public class KeyboardView extends View implements View.OnClickListener { // Switch the character to uppercase if shift is pressed String label = key.label == null? null : adjustCase(key.label).toString(); - + final Rect bounds = keyBackground.getBounds(); - if (key.width != bounds.right || + 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); keyBackground.draw(canvas); - + if (label != null) { // For characters, use large font. For labels like "Done", use small font. if (label.length() > 1 && key.codes.length < 2) { @@ -698,12 +707,12 @@ public class KeyboardView extends View implements View.OnClickListener { // Turn off drop shadow paint.setShadowLayer(0, 0, 0, 0); } else if (key.icon != null) { - final int drawableX = (key.width - padding.left - padding.right + final int drawableX = (key.width - padding.left - padding.right - key.icon.getIntrinsicWidth()) / 2 + padding.left; - final int drawableY = (key.height - padding.top - padding.bottom + final int drawableY = (key.height - padding.top - padding.bottom - key.icon.getIntrinsicHeight()) / 2 + padding.top; canvas.translate(drawableX, drawableY); - key.icon.setBounds(0, 0, + key.icon.setBounds(0, 0, key.icon.getIntrinsicWidth(), key.icon.getIntrinsicHeight()); key.icon.draw(canvas); canvas.translate(-drawableX, -drawableY); @@ -717,17 +726,19 @@ public class KeyboardView extends View implements View.OnClickListener { canvas.drawRect(0, 0, getWidth(), getHeight(), paint); } - if (DEBUG && mShowTouchPoints) { - paint.setAlpha(128); - paint.setColor(0xFFFF0000); - canvas.drawCircle(mStartX, mStartY, 3, paint); - canvas.drawLine(mStartX, mStartY, mLastX, mLastY, paint); - paint.setColor(0xFF0000FF); - canvas.drawCircle(mLastX, mLastY, 3, paint); - paint.setColor(0xFF00FF00); - canvas.drawCircle((mStartX + mLastX) / 2, (mStartY + mLastY) / 2, 2, paint); + if (DEBUG) { + if (mShowTouchPoints) { + paint.setAlpha(128); + paint.setColor(0xFFFF0000); + canvas.drawCircle(mStartX, mStartY, 3, paint); + canvas.drawLine(mStartX, mStartY, mLastX, mLastY, paint); + paint.setColor(0xFF0000FF); + canvas.drawCircle(mLastX, mLastY, 3, paint); + paint.setColor(0xFF00FF00); + canvas.drawCircle((mStartX + mLastX) / 2, (mStartY + mLastY) / 2, 2, paint); + } } - + mDrawPending = false; mDirtyRect.setEmpty(); } @@ -748,8 +759,8 @@ public class KeyboardView extends View implements View.OnClickListener { primaryIndex = nearestKeyIndices[i]; } - if (((mProximityCorrectOn - && (dist = key.squaredDistanceFrom(x, y)) < mProximityThreshold) + if (((mProximityCorrectOn + && (dist = key.squaredDistanceFrom(x, y)) < mProximityThreshold) || isInside) && key.codes[0] > 32) { // Find insertion point @@ -758,9 +769,9 @@ public class KeyboardView extends View implements View.OnClickListener { closestKeyDist = dist; closestKey = nearestKeyIndices[i]; } - + if (allKeys == null) continue; - + for (int j = 0; j < mDistances.length; j++) { if (mDistances[j] > dist) { // Make space for nCodes codes @@ -825,11 +836,11 @@ public class KeyboardView extends View implements View.OnClickListener { return adjustCase(key.label); } } - + private void showPreview(int keyIndex) { int oldKeyIndex = mCurrentKeyIndex; final PopupWindow previewPopup = mPreviewPopup; - + mCurrentKeyIndex = keyIndex; // Release the old key and press the new key final Key[] keys = mKeys; @@ -849,7 +860,7 @@ public class KeyboardView extends View implements View.OnClickListener { if (previewPopup.isShowing()) { if (keyIndex == NOT_A_KEY) { mHandler.sendMessageDelayed(mHandler - .obtainMessage(MSG_REMOVE_PREVIEW), + .obtainMessage(MSG_REMOVE_PREVIEW), DELAY_AFTER_PREVIEW); } } @@ -859,20 +870,20 @@ public class KeyboardView extends View implements View.OnClickListener { showKey(keyIndex); } else { mHandler.sendMessageDelayed( - mHandler.obtainMessage(MSG_SHOW_PREVIEW, keyIndex, 0), + mHandler.obtainMessage(MSG_SHOW_PREVIEW, keyIndex, 0), DELAY_BEFORE_PREVIEW); } } } } - + private void showKey(final int keyIndex) { final PopupWindow previewPopup = mPreviewPopup; final Key[] keys = mKeys; if (keyIndex < 0 || keyIndex >= mKeys.length) return; Key key = keys[keyIndex]; if (key.icon != null) { - mPreviewText.setCompoundDrawables(null, null, null, + mPreviewText.setCompoundDrawables(null, null, null, key.iconPreview != null ? key.iconPreview : key.icon); mPreviewText.setText(null); } else { @@ -886,9 +897,9 @@ public class KeyboardView extends View implements View.OnClickListener { mPreviewText.setTypeface(Typeface.DEFAULT); } } - mPreviewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), + mPreviewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); - int popupWidth = Math.max(mPreviewText.getMeasuredWidth(), key.width + int popupWidth = Math.max(mPreviewText.getMeasuredWidth(), key.width + mPreviewText.getPaddingLeft() + mPreviewText.getPaddingRight()); final int popupHeight = mPreviewHeight; LayoutParams lp = mPreviewText.getLayoutParams(); @@ -897,7 +908,7 @@ public class KeyboardView extends View implements View.OnClickListener { lp.height = popupHeight; } if (!mPreviewCentered) { - mPopupPreviewX = key.x - mPreviewText.getPaddingLeft() + mPaddingLeft; + mPopupPreviewX = key.x - mPreviewText.getPaddingLeft() + getPaddingLeft(); mPopupPreviewY = key.y - popupHeight + mPreviewOffset; } else { // TODO: Fix this if centering is brought back @@ -938,7 +949,7 @@ public class KeyboardView extends View implements View.OnClickListener { } else { previewPopup.setWidth(popupWidth); previewPopup.setHeight(popupHeight); - previewPopup.showAtLocation(mPopupParent, Gravity.NO_GRAVITY, + previewPopup.showAtLocation(mPopupParent, Gravity.NO_GRAVITY, mPopupPreviewX, mPopupPreviewY); } mPreviewText.setVisibility(VISIBLE); @@ -946,7 +957,7 @@ public class KeyboardView extends View implements View.OnClickListener { /** * Requests a redraw of the entire keyboard. Calling {@link #invalidate} is not sufficient - * because the keyboard renders the keys to an off-screen buffer and an invalidate() only + * because the keyboard renders the keys to an off-screen buffer and an invalidate() only * draws the cached buffer. * @see #invalidateKey(int) */ @@ -970,11 +981,11 @@ public class KeyboardView extends View implements View.OnClickListener { } final Key key = mKeys[keyIndex]; mInvalidatedKey = key; - mDirtyRect.union(key.x + mPaddingLeft, key.y + mPaddingTop, - key.x + key.width + mPaddingLeft, key.y + key.height + mPaddingTop); + mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(), + key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); onBufferDraw(); - invalidate(key.x + mPaddingLeft, key.y + mPaddingTop, - key.x + key.width + mPaddingLeft, key.y + key.height + mPaddingTop); + invalidate(key.x + getPaddingLeft(), key.y + getPaddingTop(), + key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); } private boolean openPopupIfRequired(MotionEvent me) { @@ -986,7 +997,7 @@ public class KeyboardView extends View implements View.OnClickListener { return false; } - Key popupKey = mKeys[mCurrentKey]; + Key popupKey = mKeys[mCurrentKey]; boolean result = onLongPress(popupKey); if (result) { mAbortKey = true; @@ -1011,22 +1022,22 @@ public class KeyboardView extends View implements View.OnClickListener { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE); mMiniKeyboardContainer = inflater.inflate(mPopupLayout, null); - mMiniKeyboard = (KeyboardView) mMiniKeyboardContainer.findViewById( - com.android.internal.R.id.keyboardView); + mMiniKeyboard = (LatinKeyboardBaseView) mMiniKeyboardContainer.findViewById( + R.id.LatinKeyboardBaseView); View closeButton = mMiniKeyboardContainer.findViewById( - com.android.internal.R.id.closeButton); + R.id.closeButton); if (closeButton != null) closeButton.setOnClickListener(this); mMiniKeyboard.setOnKeyboardActionListener(new OnKeyboardActionListener() { public void onKey(int primaryCode, int[] keyCodes) { mKeyboardActionListener.onKey(primaryCode, keyCodes); dismissPopupKeyboard(); } - + public void onText(CharSequence text) { mKeyboardActionListener.onText(text); dismissPopupKeyboard(); } - + public void swipeLeft() { } public void swipeRight() { } public void swipeUp() { } @@ -1041,7 +1052,7 @@ public class KeyboardView extends View implements View.OnClickListener { //mInputView.setSuggest(mSuggest); Keyboard keyboard; if (popupKey.popupCharacters != null) { - keyboard = new Keyboard(getContext(), popupKeyboardId, + keyboard = new Keyboard(getContext(), popupKeyboardId, popupKey.popupCharacters, -1, getPaddingLeft() + getPaddingRight()); } else { keyboard = new Keyboard(getContext(), popupKeyboardId); @@ -1049,20 +1060,20 @@ public class KeyboardView extends View implements View.OnClickListener { mMiniKeyboard.setKeyboard(keyboard); mMiniKeyboard.setPopupParent(this); mMiniKeyboardContainer.measure( - MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST), + MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST)); - + mMiniKeyboardCache.put(popupKey, mMiniKeyboardContainer); } else { - mMiniKeyboard = (KeyboardView) mMiniKeyboardContainer.findViewById( - com.android.internal.R.id.keyboardView); + mMiniKeyboard = (LatinKeyboardBaseView) mMiniKeyboardContainer.findViewById( + R.id.LatinKeyboardBaseView); } if (mWindowOffset == null) { mWindowOffset = new int[2]; getLocationInWindow(mWindowOffset); } - mPopupX = popupKey.x + mPaddingLeft; - mPopupY = popupKey.y + mPaddingTop; + mPopupX = popupKey.x + getPaddingLeft(); + mPopupY = popupKey.y + getPaddingTop(); mPopupX = mPopupX + popupKey.width - mMiniKeyboardContainer.getMeasuredWidth(); mPopupY = mPopupY - mMiniKeyboardContainer.getMeasuredHeight(); final int x = mPopupX + mMiniKeyboardContainer.getPaddingRight() + mWindowOffset[0]; @@ -1081,12 +1092,9 @@ public class KeyboardView extends View implements View.OnClickListener { return false; } - private long mOldEventTime; - private boolean mUsedVelocity; - @Override public boolean onTouchEvent(MotionEvent me) { - // Convert multi-pointer up/down events to single up/down events to + // Convert multi-pointer up/down events to single up/down events to // deal with the typical multi-pointer behavior of two-thumb typing final int pointerCount = me.getPointerCount(); final int action = me.getAction(); @@ -1127,11 +1135,10 @@ public class KeyboardView extends View implements View.OnClickListener { } private boolean onModifiedTouchEvent(MotionEvent me, boolean possiblePoly) { - int touchX = (int) me.getX() - mPaddingLeft; - int touchY = (int) me.getY() + mVerticalCorrection - mPaddingTop; + int touchX = (int) me.getX() - getPaddingLeft(); + int touchY = (int) me.getY() + mVerticalCorrection - getPaddingTop(); final int action = me.getAction(); final long eventTime = me.getEventTime(); - mOldEventTime = eventTime; int keyIndex = getKeyIndices(touchX, touchY, null); mPossiblePoly = possiblePoly; @@ -1151,7 +1158,7 @@ public class KeyboardView extends View implements View.OnClickListener { mHandler.removeMessages(MSG_LONGPRESS); return true; } - + // Needs to be called after the gesture detector gets a turn, as it may have // displayed the mini keyboard if (mMiniKeyboardOnScreen && action != MotionEvent.ACTION_CANCEL) { @@ -1173,7 +1180,7 @@ public class KeyboardView extends View implements View.OnClickListener { mDownTime = me.getEventTime(); mLastMoveTime = mDownTime; checkMultiTap(eventTime, keyIndex); - mKeyboardActionListener.onPress(keyIndex != NOT_A_KEY ? + mKeyboardActionListener.onPress(keyIndex != NOT_A_KEY ? mKeys[keyIndex].codes[0] : 0); if (mCurrentKey >= 0 && mKeys[mCurrentKey].repeatable) { mRepeatKeyIndex = mCurrentKey; @@ -1272,11 +1279,11 @@ public class KeyboardView extends View implements View.OnClickListener { detectAndSendKey(mCurrentKey, key.x, key.y, mLastTapTime); return true; } - + protected void swipeRight() { mKeyboardActionListener.swipeRight(); } - + protected void swipeLeft() { mKeyboardActionListener.swipeLeft(); } @@ -1294,7 +1301,7 @@ public class KeyboardView extends View implements View.OnClickListener { mPreviewPopup.dismiss(); } removeMessages(); - + dismissPopupKeyboard(); mBuffer = null; mCanvas = null; @@ -1335,7 +1342,7 @@ public class KeyboardView extends View implements View.OnClickListener { mLastTapTime = -1; mInMultiTap = false; } - + private void checkMultiTap(long eventTime, int keyIndex) { if (keyIndex == NOT_A_KEY) return; Key key = mKeys[keyIndex]; diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java index e99977d21..bfa26f668 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java @@ -22,7 +22,6 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.inputmethodservice.Keyboard; -import android.inputmethodservice.KeyboardView; import android.inputmethodservice.Keyboard.Key; import android.os.Handler; import android.os.Message; @@ -32,7 +31,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.widget.PopupWindow; -public class LatinKeyboardView extends KeyboardView { +public class LatinKeyboardView extends LatinKeyboardBaseView { static final int KEYCODE_OPTIONS = -100; static final int KEYCODE_SHIFT_LONGPRESS = -101;