From be324535f63420a283d5eb4ed889052b2c941c31 Mon Sep 17 00:00:00 2001 From: satok Date: Thu, 20 Jan 2011 01:08:13 +0900 Subject: [PATCH 01/77] Add subtype languages Change-Id: Ib251bd63f79281a4dc1739b213b16e8a936ea319 --- java/res/drawable/ic_subtype_mic_it.png | Bin 0 -> 2557 bytes java/res/drawable/ic_subtype_mic_nl.png | Bin 0 -> 2557 bytes java/res/values/strings.xml | 4 ++++ java/res/xml/method.xml | 10 ++++++++++ .../inputmethod/latin/SubtypeSwitcher.java | 2 +- 5 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 java/res/drawable/ic_subtype_mic_it.png create mode 100644 java/res/drawable/ic_subtype_mic_nl.png diff --git a/java/res/drawable/ic_subtype_mic_it.png b/java/res/drawable/ic_subtype_mic_it.png new file mode 100644 index 0000000000000000000000000000000000000000..03c0b6982259a07ca11f5ba161a608a52cc6757c GIT binary patch literal 2557 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 T`U7?+00000NkvXXu0mjfKXBz3 literal 0 HcmV?d00001 diff --git a/java/res/drawable/ic_subtype_mic_nl.png b/java/res/drawable/ic_subtype_mic_nl.png new file mode 100644 index 0000000000000000000000000000000000000000..03c0b6982259a07ca11f5ba161a608a52cc6757c GIT binary patch literal 2557 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 T`U7?+00000NkvXXu0mjfKXBz3 literal 0 HcmV?d00001 diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index 6f0f2fb72..9f83d9a18 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -263,10 +263,14 @@ Spanish Voice French Voice + + Italian Voice Japanese Voice Korean Voice + + Dutch Voice Polish Voice diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml index 482b35f4c..aabc95874 100644 --- a/java/res/xml/method.xml +++ b/java/res/xml/method.xml @@ -154,6 +154,11 @@ android:imeSubtypeLocale="fr" android:imeSubtypeMode="voice" /> + + Date: Thu, 20 Jan 2011 01:51:28 +0900 Subject: [PATCH 02/77] Change the order of subtypes list Change-Id: I748ed8e8a280832c1e3170ed070c2ae22ee7d5c1 --- java/res/xml/method.xml | 116 ++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml index aabc95874..4e410a377 100644 --- a/java/res/xml/method.xml +++ b/java/res/xml/method.xml @@ -21,24 +21,34 @@ - + + - + + + + + + + + + + + - - - - - - - - - - - Date: Thu, 20 Jan 2011 17:33:10 +0900 Subject: [PATCH 03/77] Add touchable region Bug: 3238092 Change-Id: I3cda3106a61c40c3b66741dc38c9ff4cc55f487b --- java/src/com/android/inputmethod/latin/LatinIME.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 4e1c56cba..bc42dff84 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -27,6 +27,7 @@ import com.android.inputmethod.latin.Utils.RingCharBuffer; import com.android.inputmethod.voice.VoiceIMEConnector; import android.app.AlertDialog; +import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; @@ -35,6 +36,7 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; +import android.graphics.Region; import android.inputmethodservice.InputMethodService; import android.media.AudioManager; import android.os.Debug; @@ -862,6 +864,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (!isFullscreenMode()) { outInsets.contentTopInsets = outInsets.visibleTopInsets; } + KeyboardView inputView = mKeyboardSwitcher.getInputView(); + if (inputView != null) { + // Screen's heightPixels may be too big, but want to make + // it large enough to cover status bar in any cases. + outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_REGION; + outInsets.touchableRegion.set( + 0, 0, inputView.getWidth(), getResources().getDisplayMetrics().heightPixels); + } } @Override From fefda4e6df5c2f8e2b2730dfe5b88644a1caaa6b Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Thu, 20 Jan 2011 23:29:53 +0900 Subject: [PATCH 04/77] Refine InputMethodInfo API bug: 3370297 Change-Id: I16073e6b8b90a06a20e506dac66e3ca25b4712d0 --- .../inputmethod/latin/SubtypeSwitcher.java | 4 +-- .../inputmethod/latin/SubtypeLocaleTests.java | 27 +++++-------------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java index 99d31d4d2..da46d26bf 100644 --- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java +++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java @@ -288,9 +288,9 @@ public class SubtypeSwitcher { if (subtype != null) { return pm.getDrawable(imiPackageName, subtype.getIconResId(), imi.getServiceInfo().applicationInfo); - } else if (imi.getSubtypes().size() > 0 && imi.getSubtypes().get(0) != null) { + } else if (imi.getSubtypeCount() > 0 && imi.getSubtypeAt(0) != null) { return pm.getDrawable(imiPackageName, - imi.getSubtypes().get(0).getIconResId(), + imi.getSubtypeAt(0).getIconResId(), imi.getServiceInfo().applicationInfo); } else { try { diff --git a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java index 004ddb61a..e1c3678fd 100644 --- a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java +++ b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java @@ -33,19 +33,6 @@ public class SubtypeLocaleTests extends AndroidTestCase { private Resources mRes; private List mKeyboardSubtypes; - public interface Predicator { - public boolean evaluate(T object); - } - - private static List filter(List source, Predicator predicator) { - final ArrayList filtered = new ArrayList(); - for (final T element : source) { - if (predicator.evaluate(element)) - filtered.add(element); - } - return filtered; - } - @Override protected void setUp() throws Exception { super.setUp(); @@ -59,13 +46,13 @@ public class SubtypeLocaleTests extends AndroidTestCase { Context.INPUT_METHOD_SERVICE); for (final InputMethodInfo imi : imm.getInputMethodList()) { if (imi.getPackageName().equals(PACKAGE)) { - mKeyboardSubtypes = filter(imi.getSubtypes(), - new Predicator() { - @Override - public boolean evaluate(InputMethodSubtype ims) { - return ims.getMode().equals("keyboard"); - } - }); + final int subtypeCount = imi.getSubtypeCount(); + for (int i = 0; i < subtypeCount; ++i) { + InputMethodSubtype subtype = imi.getSubtypeAt(i); + if (subtype.getMode().equals("keyboard")) { + mKeyboardSubtypes.add(subtype); + } + } break; } } From 2fa21f5854e1565deb139e0bf22719fecc5340bc Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 20 Jan 2011 22:52:02 +0900 Subject: [PATCH 05/77] Add input method subtype selector and IME settings dialog Bug: 3351762 Change-Id: Ic1767faac6d4470a89cacb851d449ac53b2f8205 --- .../android/inputmethod/latin/LatinIME.java | 74 ++++++++++++++----- .../com/android/inputmethod/latin/Utils.java | 8 ++ 2 files changed, 62 insertions(+), 20 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index bc42dff84..fb8c9b3a8 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -123,6 +123,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private AlertDialog mOptionsDialog; private InputMethodManager mImm; + private Resources mResources; + private SharedPreferences mPrefs; + private String mInputMethodId; private KeyboardSwitcher mKeyboardSwitcher; private SubtypeSwitcher mSubtypeSwitcher; private VoiceIMEConnector mVoiceConnector; @@ -132,9 +135,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private ContactsDictionary mContactsDictionary; private AutoDictionary mAutoDictionary; - private Resources mResources; - private SharedPreferences mPrefs; - // These variables are initialized according to the {@link EditorInfo#inputType}. private boolean mAutoSpace; private boolean mInputTypeNoAutoCorrect; @@ -156,6 +156,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private boolean mPopupOn; private boolean mAutoCap; private boolean mQuickFixes; + private boolean mConfigEnableShowSubtypeSettings; private boolean mConfigSwipeDownDismissKeyboardEnabled; private int mConfigDelayBeforeFadeoutLanguageOnSpacebar; private int mConfigDurationOfFadeoutLanguageOnSpacebar; @@ -350,6 +351,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen super.onCreate(); mImm = ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)); + mInputMethodId = Utils.getInputMethodId(mImm, getApplicationInfo().packageName); mSubtypeSwitcher = SubtypeSwitcher.getInstance(); mKeyboardSwitcher = KeyboardSwitcher.getInstance(); @@ -365,6 +367,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mReCorrectionEnabled = res.getBoolean(R.bool.default_recorrection_enabled); } + mConfigEnableShowSubtypeSettings = res.getBoolean( + R.bool.config_enable_show_subtype_settings); mConfigSwipeDownDismissKeyboardEnabled = res.getBoolean( R.bool.config_swipe_down_dismiss_keyboard_enabled); mConfigDelayBeforeFadeoutLanguageOnSpacebar = res.getInteger( @@ -462,6 +466,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen commitTyped(ic); if (ic != null) ic.finishComposingText(); // For voice input mOrientation = conf.orientation; + if (isShowingOptionDialog()) + mOptionsDialog.dismiss(); } mConfigurationChanging = true; @@ -1044,7 +1050,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private void onSettingsKeyPressed() { if (!isShowingOptionDialog()) { - if (Utils.hasMultipleEnabledIMEsOrSubtypes(mImm)) { + if (!mConfigEnableShowSubtypeSettings) { + showSubtypeSelectorAndSettings(); + } else if (Utils.hasMultipleEnabledIMEsOrSubtypes(mImm)) { showOptionsMenu(); } else { launchSettings(); @@ -2183,7 +2191,48 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return mSuggestPuncs.contains(String.valueOf((char)code)); } + private void showSubtypeSelectorAndSettings() { + showOptionsMenuInternal(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface di, int position) { + di.dismiss(); + switch (position) { + case POS_SETTINGS: + launchSettings(); + break; + case POS_METHOD: + Intent intent = new Intent( + android.provider.Settings.ACTION_INPUT_METHOD_SUBTYPE_SETTINGS); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED + | Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra(android.provider.Settings.EXTRA_INPUT_METHOD_ID, + mInputMethodId); + startActivity(intent); + break; + } + } + }); + } + private void showOptionsMenu() { + showOptionsMenuInternal(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface di, int position) { + di.dismiss(); + switch (position) { + case POS_SETTINGS: + launchSettings(); + break; + case POS_METHOD: + mImm.showInputMethodPicker(); + break; + } + } + }); + } + + private void showOptionsMenuInternal(DialogInterface.OnClickListener listener) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(true); builder.setIcon(R.drawable.ic_dialog_keyboard); @@ -2191,22 +2240,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen CharSequence itemSettings = getString(R.string.english_ime_settings); CharSequence itemInputMethod = getString(R.string.selectInputMethod); builder.setItems(new CharSequence[] { - itemInputMethod, itemSettings}, - new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface di, int position) { - di.dismiss(); - switch (position) { - case POS_SETTINGS: - launchSettings(); - break; - case POS_METHOD: - mImm.showInputMethodPicker(); - break; - } - } - }); + itemInputMethod, itemSettings}, listener); builder.setTitle(mResources.getString(R.string.english_ime_input_options)); mOptionsDialog = builder.create(); Window window = mOptionsDialog.getWindow(); diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java index d2582b115..5059860d7 100644 --- a/java/src/com/android/inputmethod/latin/Utils.java +++ b/java/src/com/android/inputmethod/latin/Utils.java @@ -23,6 +23,7 @@ import android.os.HandlerThread; import android.os.Process; import android.text.format.DateUtils; import android.util.Log; +import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; import java.io.BufferedReader; @@ -97,6 +98,13 @@ public class Utils { || imm.getEnabledInputMethodSubtypeList(null, false).size() > 1; } + public static String getInputMethodId(InputMethodManager imm, String packageName) { + for (final InputMethodInfo imi : imm.getEnabledInputMethodList()) { + if (imi.getPackageName().equals(packageName)) + return imi.getId(); + } + throw new RuntimeException("Can not find input method id for " + packageName); + } public static boolean shouldBlockedBySafetyNetForAutoCorrection(SuggestedWords suggestions) { // Safety net for auto correction. From a2ad96d95986eb61c3d2d5abce154fb4c3803cac Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 21 Jan 2011 14:07:05 +0900 Subject: [PATCH 06/77] Make settings dialog cancel-able by touching outside Bug: 3374426 Change-Id: I6ba9b82d4481c43c78b59e78dcf22cd9875a8240 --- java/src/com/android/inputmethod/latin/LatinIME.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index fb8c9b3a8..7089874eb 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -27,7 +27,6 @@ import com.android.inputmethod.latin.Utils.RingCharBuffer; import com.android.inputmethod.voice.VoiceIMEConnector; import android.app.AlertDialog; -import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; @@ -36,7 +35,6 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.Region; import android.inputmethodservice.InputMethodService; import android.media.AudioManager; import android.os.Debug; @@ -2243,6 +2241,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen itemInputMethod, itemSettings}, listener); builder.setTitle(mResources.getString(R.string.english_ime_input_options)); mOptionsDialog = builder.create(); + mOptionsDialog.setCanceledOnTouchOutside(true); Window window = mOptionsDialog.getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); lp.token = mKeyboardSwitcher.getInputView().getWindowToken(); From 58d6d0615d62c45c390bb4c5c0e3d2efabac814d Mon Sep 17 00:00:00 2001 From: satok Date: Fri, 21 Jan 2011 14:37:35 +0900 Subject: [PATCH 07/77] Disable touchable region until we come up with correct implementation bug: 3373640 Change-Id: I22448b779b0adc60f590aaef916075c7847dcdc9 --- java/src/com/android/inputmethod/latin/LatinIME.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 7089874eb..9a939bea8 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -868,14 +868,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (!isFullscreenMode()) { outInsets.contentTopInsets = outInsets.visibleTopInsets; } - KeyboardView inputView = mKeyboardSwitcher.getInputView(); + /*KeyboardView inputView = mKeyboardSwitcher.getInputView(); if (inputView != null) { // Screen's heightPixels may be too big, but want to make // it large enough to cover status bar in any cases. outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_REGION; outInsets.touchableRegion.set( 0, 0, inputView.getWidth(), getResources().getDisplayMetrics().heightPixels); - } + }*/ } @Override From 6fe297a90539c42e4b4f573f8568f09ee511c8d1 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 21 Jan 2011 15:07:44 +0900 Subject: [PATCH 08/77] Use simple smiley for the emoticon key This change uses keyLable to show simple smiley on the key top and removes sym_keyboard_smiley_holo drawable. Bug: 3350296 Change-Id: I7d28db8a6f74936f932f250a70991a1bd1ff4ddd --- .../drawable-mdpi/sym_keyboard_smiley_holo.png | Bin 1260 -> 0 bytes java/res/xml-xlarge/kbd_key_styles.xml | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 java/res/drawable-mdpi/sym_keyboard_smiley_holo.png diff --git a/java/res/drawable-mdpi/sym_keyboard_smiley_holo.png b/java/res/drawable-mdpi/sym_keyboard_smiley_holo.png deleted file mode 100644 index 90a1272127f4200fe4681ede9cd467bd3afb33ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmbVMZEVzJ9PgN-Hyw~bq7Wms6D4NX_UY~VmODo8+G7{EId8|f1c!9(vt8Z#LfdgK z1SN!Ed>LO1(L^#6!v}&1YUVI=pn!%zj0VJH5hIyX!{jA{81aLN`gFUSnk;;HXqLuVK!QjM$8pU#Lj#(k8456Az=;t?q-nhR5XhUW_lj9L zRrQ5daiZY+j!03(Vv#IHNZakBfFK9~2g8JsMc6A_zFG=fUQ>-hhMwjcj&Il&9x$ps z_MjgpkkYvjOed3>C$_w5qEO1HlIl=^q$$%3;+nPg{4D%O#)8&fuIxZ63q5<#)lfZp zn`&T`ySqCI43Qe~Y1cqSQ3qsO8#JNir{y?-PDtI*MTX;ODI!QMfQhg?K;gF}B}ouy zJ_Q7>1=Khe!UCBW5)p}|Sw0GYLMH@;QvjFbQoI5H$JVfE%kx!BgEhYf@>|75?}`wNn&Dr)qtphp=wr_g{+rg8aQ9Pq+h83)X^2|jmL)X{|^^|Ly_-uYfV*&pufo5gE zCK5b@Bmls3AfFuZX)Xh)4x1Rkb zom=x%W9UxT$z`KUZmu2POeye_&z8Ki?db168#fM3ygzi&bVl}c4_$fVC3e%HHFqXI z+7)Kbpj9!29025j|J>2})t(B{v+4bYev-~R~`*x3>pE!6}OH|4$ zX0AQDxqknKpPnzg7TS2<3m4D)W)0O{n)%{OclWwmV_c~D($053$Uk><+ty=m50uVH xJ3fr @@ -114,8 +114,8 @@ latin:iconPreview="@drawable/sym_keyboard_feedback_space" /> From 6f7218627eda110a8454053f8ecb7b80edfdc8ce Mon Sep 17 00:00:00 2001 From: satok Date: Wed, 19 Jan 2011 17:29:27 +0900 Subject: [PATCH 09/77] Dim previously suggested words Change-Id: Id673c03bfa22ea9ce1bedb5174d8309a37a2a460 --- .../inputmethod/latin/CandidateView.java | 28 +++++- .../android/inputmethod/latin/LatinIME.java | 2 +- .../android/inputmethod/latin/Suggest.java | 16 ++-- .../inputmethod/latin/SuggestedWords.java | 91 +++++++++++++------ .../inputmethod/voice/VoiceIMEConnector.java | 2 +- 5 files changed, 97 insertions(+), 42 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java index d2d1f22dd..fc45c7c75 100644 --- a/java/src/com/android/inputmethod/latin/CandidateView.java +++ b/java/src/com/android/inputmethod/latin/CandidateView.java @@ -16,8 +16,11 @@ package com.android.inputmethod.latin; +import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; + import android.content.Context; import android.content.res.Resources; +import android.graphics.Color; import android.graphics.Typeface; import android.os.Handler; import android.os.Message; @@ -43,6 +46,7 @@ import android.widget.PopupWindow; import android.widget.TextView; import java.util.ArrayList; +import java.util.List; public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener { @@ -50,6 +54,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan(); private static final int MAX_SUGGESTIONS = 16; + private static boolean DBG = LatinImeLogger.sDBG; + private final ArrayList mWords = new ArrayList(); private final boolean mConfigCandidateHighlightFontColorEnabled; private final CharacterStyle mInvertedForegroundColorSpan; @@ -175,11 +181,12 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo final SuggestedWords suggestions = mSuggestions; clear(); final int count = suggestions.size(); - final Object[] debugInfo = suggestions.mDebugInfo; for (int i = 0; i < count; i++) { CharSequence word = suggestions.getWord(i); if (word == null) continue; final int wordLength = word.length(); + final List suggestedWordInfoList = + suggestions.mSuggestedWordInfoList; final View v = mWords.get(i); final TextView tv = (TextView)v.findViewById(R.id.candidate_word); @@ -209,10 +216,21 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo } tv.setText(word); tv.setClickable(true); - if (debugInfo != null && i < debugInfo.length && debugInfo[i] != null - && !TextUtils.isEmpty(debugInfo[i].toString())) { - dv.setText(debugInfo[i].toString()); - dv.setVisibility(VISIBLE); + + if (suggestedWordInfoList != null && suggestedWordInfoList.get(i) != null) { + final SuggestedWordInfo info = suggestedWordInfoList.get(i); + if (info.isPreviousSuggestedWord()) { + int color = tv.getCurrentTextColor(); + tv.setTextColor(Color.argb((int)(Color.alpha(color) * 0.5f), Color.red(color), + Color.green(color), Color.blue(color))); + } + final String debugString = info.getDebugString(); + if (DBG) { + if (!TextUtils.isEmpty(debugString)) { + dv.setText(debugString); + dv.setVisibility(VISIBLE); + } + } } else { dv.setVisibility(GONE); } diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 7089874eb..02a696088 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1519,7 +1519,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mKeyboardSwitcher.setPreferredLetters(nextLettersFrequencies); boolean correctionAvailable = !mInputTypeNoAutoCorrect && !mJustReverted - && mSuggest.hasMinimalCorrection(); + && mSuggest.hasAutoCorrection(); final CharSequence typedWord = word.getTypedWord(); // If we're in basic correct final boolean typedWordValid = mSuggest.isValidWord(typedWord) || diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index 24c73e8ea..1772b2669 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -95,7 +95,7 @@ public class Suggest implements Dictionary.WordCallback { private ArrayList mSuggestions = new ArrayList(); ArrayList mBigramSuggestions = new ArrayList(); private ArrayList mStringPool = new ArrayList(); - private boolean mHaveAutoCorrection; + private boolean mHasAutoCorrection; private String mLowerOriginalWord; // TODO: Remove these member variables by passing more context to addWord() callback method @@ -200,7 +200,7 @@ public class Suggest implements Dictionary.WordCallback { public SuggestedWords.Builder getSuggestedWordBuilder(View view, WordComposer wordComposer, CharSequence prevWordForBigram) { LatinImeLogger.onStartSuggestion(prevWordForBigram); - mHaveAutoCorrection = false; + mHasAutoCorrection = false; mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized(); mIsAllUpperCase = wordComposer.isAllUpperCase(); collectGarbage(mSuggestions, mPrefMaxSuggestions); @@ -278,7 +278,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { Log.d(TAG, "Auto corrected by CORRECTION_FULL."); } - mHaveAutoCorrection = true; + mHasAutoCorrection = true; } } if (mMainDict != null) mMainDict.getWords(wordComposer, this, mNextLettersFrequencies); @@ -297,7 +297,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { Log.d(TAG, "Auto corrected by S-threthhold."); } - mHaveAutoCorrection = true; + mHasAutoCorrection = true; } } } @@ -342,7 +342,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { Log.d(TAG, "Auto corrected by AUTOTEXT."); } - mHaveAutoCorrection = true; + mHasAutoCorrection = true; mSuggestions.add(i + 1, autoText); i++; } @@ -350,7 +350,7 @@ public class Suggest implements Dictionary.WordCallback { } } removeDupes(); - return new SuggestedWords.Builder().addWords(mSuggestions); + return new SuggestedWords.Builder().addWords(mSuggestions, null); } public int[] getNextLettersFrequencies() { @@ -384,8 +384,8 @@ public class Suggest implements Dictionary.WordCallback { } } - public boolean hasMinimalCorrection() { - return mHaveAutoCorrection; + public boolean hasAutoCorrection() { + return mHasAutoCorrection; } private boolean compareCaseInsensitive(final String mLowerOriginalWord, diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java index 0fbbcdd91..4407e5b31 100644 --- a/java/src/com/android/inputmethod/latin/SuggestedWords.java +++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java @@ -29,10 +29,11 @@ public class SuggestedWords { public final boolean mIsApplicationSpecifiedCompletions; public final boolean mTypedWordValid; public final boolean mHasMinimalSuggestion; - public final Object[] mDebugInfo; + public final List mSuggestedWordInfoList; private SuggestedWords(List words, boolean isApplicationSpecifiedCompletions, - boolean typedWordValid, boolean hasMinamlSuggestion, Object[] debugInfo) { + boolean typedWordValid, boolean hasMinamlSuggestion, + List suggestedWordInfoList) { if (words != null) { mWords = words; } else { @@ -41,7 +42,7 @@ public class SuggestedWords { mIsApplicationSpecifiedCompletions = isApplicationSpecifiedCompletions; mTypedWordValid = typedWordValid; mHasMinimalSuggestion = hasMinamlSuggestion; - mDebugInfo = debugInfo; + mSuggestedWordInfoList = suggestedWordInfoList; } public int size() { @@ -61,38 +62,46 @@ public class SuggestedWords { } public static class Builder { - private List mWords; + private List mWords = new ArrayList(); private boolean mIsCompletions; private boolean mTypedWordValid; private boolean mHasMinimalSuggestion; - private Object[] mDebugInfo; + private List mSuggestedWordInfoList = + new ArrayList(); public Builder() { // Nothing to do here. } - public Builder addWords(List words) { - for (final CharSequence word : words) - addWord(word); - return this; - } - - public Builder setDebugInfo(Object[] debuginfo) { - mDebugInfo = debuginfo; - return this; - } - - public Builder addWord(int pos, CharSequence word) { - if (mWords == null) - mWords = new ArrayList(); - mWords.add(pos, word); + public Builder addWords(List words, + List suggestedWordInfoList) { + final int N = words.size(); + for (int i = 0; i < N; ++i) { + SuggestedWordInfo suggestedWordInfo = null; + if (suggestedWordInfoList != null) { + suggestedWordInfo = suggestedWordInfoList.get(i); + } + if (suggestedWordInfo == null) { + suggestedWordInfo = new SuggestedWordInfo(); + } + addWord(words.get(i), suggestedWordInfo); + } return this; } public Builder addWord(CharSequence word) { - if (mWords == null) - mWords = new ArrayList(); + return addWord(word, null, false); + } + + public Builder addWord(CharSequence word, CharSequence debugString, + boolean isPreviousSuggestedWord) { + SuggestedWordInfo info = new SuggestedWordInfo(debugString, isPreviousSuggestedWord); + return addWord(word, info); + } + + private Builder addWord(CharSequence word, SuggestedWordInfo suggestedWordInfo) { mWords.add(word); + mSuggestedWordInfoList.add(suggestedWordInfo); return this; } @@ -117,11 +126,12 @@ public class SuggestedWords { // and replace it with what the user currently typed. public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord, SuggestedWords previousSuggestions) { - if (mWords != null) mWords.clear(); - addWord(typedWord); + mWords.clear(); + mSuggestedWordInfoList.clear(); + addWord(typedWord, null, false); final int previousSize = previousSuggestions.size(); for (int pos = 1; pos < previousSize; pos++) - addWord(previousSuggestions.getWord(pos)); + addWord(previousSuggestions.getWord(pos), null, true); mIsCompletions = false; mTypedWordValid = false; mHasMinimalSuggestion = false; @@ -130,15 +140,42 @@ public class SuggestedWords { public SuggestedWords build() { return new SuggestedWords(mWords, mIsCompletions, mTypedWordValid, - mHasMinimalSuggestion, mDebugInfo); + mHasMinimalSuggestion, mSuggestedWordInfoList); } public int size() { - return mWords == null ? 0 : mWords.size(); + return mWords.size(); } public CharSequence getWord(int pos) { return mWords.get(pos); } } + + public static class SuggestedWordInfo { + private final CharSequence mDebugString; + private final boolean mPreviousSuggestedWord; + + public SuggestedWordInfo() { + mDebugString = ""; + mPreviousSuggestedWord = false; + } + + public SuggestedWordInfo(CharSequence debugString, boolean previousSuggestedWord) { + mDebugString = debugString; + mPreviousSuggestedWord = previousSuggestedWord; + } + + public String getDebugString() { + if (mDebugString == null) { + return ""; + } else { + return mDebugString.toString(); + } + } + + public boolean isPreviousSuggestedWord () { + return mPreviousSuggestedWord; + } + } } diff --git a/java/src/com/android/inputmethod/voice/VoiceIMEConnector.java b/java/src/com/android/inputmethod/voice/VoiceIMEConnector.java index a02dbcb55..6c9b7d527 100644 --- a/java/src/com/android/inputmethod/voice/VoiceIMEConnector.java +++ b/java/src/com/android/inputmethod/voice/VoiceIMEConnector.java @@ -437,7 +437,7 @@ public class VoiceIMEConnector implements VoiceInput.UiListener { builder.addWord(word); } } else { - builder.addWords(suggestions); + builder.addWords(suggestions, null); } builder.setTypedWordValid(true).setHasMinimalSuggestion(true); mService.setSuggestions(builder.build()); From dbc61779858dbb209059748e2c4eb0e6b228090c Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 21 Jan 2011 15:49:02 +0900 Subject: [PATCH 10/77] Fix build breakage Change-Id: I055d23c912f297c1958da0ba2c40b1d0843ff915 --- tests/src/com/android/inputmethod/latin/SuggestHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/src/com/android/inputmethod/latin/SuggestHelper.java b/tests/src/com/android/inputmethod/latin/SuggestHelper.java index de898c3ea..c734f07fd 100644 --- a/tests/src/com/android/inputmethod/latin/SuggestHelper.java +++ b/tests/src/com/android/inputmethod/latin/SuggestHelper.java @@ -98,7 +98,7 @@ public class SuggestHelper { boolean isDefaultCorrection(CharSequence typed, CharSequence expected) { WordComposer word = createWordComposer(typed); SuggestedWords suggestions = mSuggest.getSuggestions(null, word, null); - return isDefaultSuggestion(suggestions, expected) && mSuggest.hasMinimalCorrection(); + return isDefaultSuggestion(suggestions, expected) && mSuggest.hasAutoCorrection(); } boolean isASuggestion(CharSequence typed, CharSequence expected) { @@ -130,7 +130,7 @@ public class SuggestHelper { WordComposer word = createWordComposer(typed); getBigramSuggestions(previous, typed); SuggestedWords suggestions = mSuggest.getSuggestions(null, word, previous); - return isDefaultSuggestion(suggestions, expected) && mSuggest.hasMinimalCorrection(); + return isDefaultSuggestion(suggestions, expected) && mSuggest.hasAutoCorrection(); } boolean isASuggestion(CharSequence previous, CharSequence typed, From f3df63a93a8f623e2aca5895ee749bd297b58d12 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 21 Jan 2011 15:03:09 +0900 Subject: [PATCH 11/77] Update suggestions if user typed word is found in dictionary This change aslo eliminates duplicate suggestion from past suggestions. And call setTypedWordVaild to past suggestions. Bug: 3367722 Change-Id: I7ffaa2f7e4e30b3951b6c2df002d269671c9d654 --- .../src/com/android/inputmethod/latin/LatinIME.java | 9 +++++---- .../android/inputmethod/latin/SuggestedWords.java | 13 +++++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 053bf6c1a..04cb89177 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1535,10 +1535,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // Basically, we update the suggestion strip only when suggestion count > 1. However, // there is an exception: We update the suggestion strip whenever typed word's length - // is 1, regardless of suggestion count. Actually, in most cases, suggestion count is 1 - // when typed word's length is 1, but we do always need to clear the previous state when - // the user starts typing a word (i.e. typed word's length == 1). - if (typedWord.length() == 1 || builder.size() > 1 + // is 1 or typed word is found in dictionary, regardless of suggestion count. Actually, + // in most cases, suggestion count is 1 when typed word's length is 1, but we do always + // need to clear the previous state when the user starts typing a word (i.e. typed word's + // length == 1). + if (builder.size() > 1 || typedWord.length() == 1 || typedWordValid || mCandidateView.isShowingAddToDictionaryHint()) { builder.setTypedWordValid(typedWordValid).setHasMinimalSuggestion(correctionAvailable); } else { diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java index 4407e5b31..f774ce3a5 100644 --- a/java/src/com/android/inputmethod/latin/SuggestedWords.java +++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java @@ -20,6 +20,7 @@ import android.view.inputmethod.CompletionInfo; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; public class SuggestedWords { @@ -128,10 +129,18 @@ public class SuggestedWords { SuggestedWords previousSuggestions) { mWords.clear(); mSuggestedWordInfoList.clear(); + final HashSet alreadySeen = new HashSet(); addWord(typedWord, null, false); + alreadySeen.add(typedWord.toString()); final int previousSize = previousSuggestions.size(); - for (int pos = 1; pos < previousSize; pos++) - addWord(previousSuggestions.getWord(pos), null, true); + for (int pos = 1; pos < previousSize; pos++) { + final String prevWord = previousSuggestions.getWord(pos).toString(); + // Filter out duplicate suggestion. + if (!alreadySeen.contains(prevWord)) { + addWord(prevWord, null, true); + alreadySeen.add(prevWord); + } + } mIsCompletions = false; mTypedWordValid = false; mHasMinimalSuggestion = false; From 9e347d3d448e48229c46aad394ec9bd60cd5807b Mon Sep 17 00:00:00 2001 From: satok Date: Fri, 21 Jan 2011 19:04:00 +0900 Subject: [PATCH 12/77] Fix touchable region Bug: 3238092 Change-Id: Ie2087086af90ba51e0e310f9e46964e450561cbe --- .../android/inputmethod/latin/LatinIME.java | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 053bf6c1a..41646ff21 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -67,6 +67,7 @@ import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; +import android.widget.FrameLayout; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; @@ -83,12 +84,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "LatinIME"; private static final boolean PERF_DEBUG = false; - private static final boolean DEBUG = false; + private static final boolean DEBUG = LatinImeLogger.sDBG; private static final boolean TRACE = false; private static final int DELAY_UPDATE_SUGGESTIONS = 180; private static final int DELAY_UPDATE_OLD_SUGGESTIONS = 300; private static final int DELAY_UPDATE_SHIFT_STATE = 300; + private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100; // How many continuous deletes at which to start deleting at a higher speed. private static final int DELETE_ACCELERATE_AT = 20; @@ -868,14 +870,34 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (!isFullscreenMode()) { outInsets.contentTopInsets = outInsets.visibleTopInsets; } - /*KeyboardView inputView = mKeyboardSwitcher.getInputView(); - if (inputView != null) { - // Screen's heightPixels may be too big, but want to make - // it large enough to cover status bar in any cases. + KeyboardView inputView = mKeyboardSwitcher.getInputView(); + // Need to set touchable region only if input view is being shown + if (inputView != null && mKeyboardSwitcher.isInputViewShown()) { + final int x = 0; + int y = 0; + final int width = inputView.getWidth(); + int height = inputView.getHeight() + EXTENDED_TOUCHABLE_REGION_HEIGHT; + if (mCandidateViewContainer != null) { + ViewParent candidateParent = mCandidateViewContainer.getParent(); + if (candidateParent instanceof FrameLayout) { + FrameLayout fl = (FrameLayout) candidateParent; + if (fl != null) { + // Check frame layout's visibility + if (fl.getVisibility() == View.INVISIBLE) { + y = fl.getHeight(); + height += y; + } else if (fl.getVisibility() == View.VISIBLE) { + height += fl.getHeight(); + } + } + } + } + if (DEBUG) { + Log.d(TAG, "Touchable region " + x + ", " + y + ", " + width + ", " + height); + } outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_REGION; - outInsets.touchableRegion.set( - 0, 0, inputView.getWidth(), getResources().getDisplayMetrics().heightPixels); - }*/ + outInsets.touchableRegion.set(x, y, width, height); + } } @Override From 6ac5e2a2255ad4489f028370be6a42fd686778e2 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Mon, 24 Jan 2011 11:07:03 +0900 Subject: [PATCH 13/77] New drawable assets This change excludes drawable-xdpi/* and drawable-mdpi/sym_keyboard_smiley_holo.png from designer's repo. Change-Id: Ic8a06903ba75aa2de2d81ac159f4e37962b4da52 --- .../drawable-land-mdpi/hint_popup_holo.9.png | Bin 1180 -> 1187 bytes .../drawable-land-mdpi/key_hint_at_holo.9.png | Bin 1592 -> 1621 bytes .../key_hint_at_large_holo.9.png | Bin 1651 -> 1651 bytes .../key_hint_colon_holo.9.png | Bin 1262 -> 1279 bytes .../key_hint_colon_large_holo.9.png | Bin 1836 -> 1319 bytes .../key_hint_exclamation_holo.9.png | Bin 1293 -> 1317 bytes .../key_hint_exclamation_large_holo.9.png | Bin 1338 -> 1338 bytes .../key_hint_question_holo.9.png | Bin 1414 -> 1433 bytes .../key_hint_question_large_holo.9.png | Bin 1473 -> 1473 bytes .../key_hint_quote_holo.9.png | Bin 1230 -> 1238 bytes .../key_hint_quote_large_holo.9.png | Bin 1249 -> 1249 bytes .../key_hint_underline_holo.9.png | Bin 1140 -> 1144 bytes .../key_hint_underline_large_holo.9.png | Bin 0 -> 1154 bytes .../btn_keyboard_key_dark_normal_holo.9.png | Bin 1275 -> 1275 bytes ...tn_keyboard_key_dark_normal_off_holo.9.png | Bin 1641 -> 1641 bytes ...btn_keyboard_key_dark_normal_on_holo.9.png | Bin 1865 -> 1865 bytes .../btn_keyboard_key_dark_pressed_holo.9.png | Bin 1511 -> 1511 bytes ...n_keyboard_key_dark_pressed_off_holo.9.png | Bin 1861 -> 1861 bytes ...tn_keyboard_key_dark_pressed_on_holo.9.png | Bin 1984 -> 1984 bytes .../btn_keyboard_key_light_normal_holo.9.png | Bin 1329 -> 1329 bytes .../btn_keyboard_key_light_popup_normal.9.png | Bin 999 -> 999 bytes .../btn_keyboard_key_light_pressed_holo.9.png | Bin 1469 -> 1469 bytes ...btn_keyboard_key_popup_selected_holo.9.png | Bin 1101 -> 1103 bytes java/res/drawable-mdpi/hint_popup_holo.9.png | Bin 1168 -> 1187 bytes java/res/drawable-mdpi/key_hint_at_holo.9.png | Bin 1621 -> 1621 bytes .../key_hint_at_large_holo.9.png | Bin 1651 -> 1651 bytes .../drawable-mdpi/key_hint_colon_holo.9.png | Bin 1219 -> 1279 bytes .../key_hint_colon_large_holo.9.png | Bin 360 -> 1319 bytes .../key_hint_exclamation_holo.9.png | Bin 1317 -> 1317 bytes .../key_hint_exclamation_large_holo.9.png | Bin 1338 -> 1338 bytes .../key_hint_question_holo.9.png | Bin 1433 -> 1433 bytes .../key_hint_question_large_holo.9.png | Bin 1473 -> 1473 bytes .../drawable-mdpi/key_hint_quote_holo.9.png | Bin 1238 -> 1238 bytes .../key_hint_quote_large_holo.9.png | Bin 1249 -> 1249 bytes .../key_hint_underline_holo.9.png | Bin 1144 -> 1144 bytes .../key_hint_underline_large_holo.9.png | Bin 1154 -> 1154 bytes .../keyboard_background_holo.9.png | Bin 1108 -> 1108 bytes ...rd_key_feedback_more_background_holo.9.png | Bin 3814 -> 3802 bytes ...keyboard_popup_panel_background_holo.9.png | Bin 3730 -> 3443 bytes .../keyboard_suggest_strip_holo.9.png | Bin 1003 -> 1003 bytes java/res/drawable-mdpi/mic_slash_holo.png | Bin 4317 -> 4317 bytes java/res/drawable-mdpi/ok_cancel_holo.9.png | Bin 1458 -> 1458 bytes .../drawable-mdpi/speak_now_level0_holo.png | Bin 3434 -> 3457 bytes .../drawable-mdpi/speak_now_level1_holo.png | Bin 3678 -> 3675 bytes .../drawable-mdpi/speak_now_level2_holo.png | Bin 3659 -> 3668 bytes .../drawable-mdpi/speak_now_level3_holo.png | Bin 4029 -> 4028 bytes .../drawable-mdpi/speak_now_level4_holo.png | Bin 4127 -> 4127 bytes .../drawable-mdpi/speak_now_level5_holo.png | Bin 4139 -> 4139 bytes .../drawable-mdpi/speak_now_level6_holo.png | Bin 3896 -> 3896 bytes .../sym_keyboard_delete_holo.png | Bin 1419 -> 1420 bytes .../drawable-mdpi/sym_keyboard_num0_holo.png | Bin 1759 -> 1755 bytes .../drawable-mdpi/sym_keyboard_num1_holo.png | Bin 1324 -> 1325 bytes .../drawable-mdpi/sym_keyboard_num2_holo.png | Bin 2397 -> 2397 bytes .../drawable-mdpi/sym_keyboard_num3_holo.png | Bin 2143 -> 2143 bytes .../drawable-mdpi/sym_keyboard_num4_holo.png | Bin 2063 -> 2071 bytes .../drawable-mdpi/sym_keyboard_num5_holo.png | Bin 2021 -> 2021 bytes .../drawable-mdpi/sym_keyboard_num6_holo.png | Bin 2502 -> 2493 bytes .../drawable-mdpi/sym_keyboard_num7_holo.png | Bin 2540 -> 2534 bytes .../drawable-mdpi/sym_keyboard_num8_holo.png | Bin 2226 -> 2226 bytes .../drawable-mdpi/sym_keyboard_num9_holo.png | Bin 2699 -> 2699 bytes .../sym_keyboard_numbpound_holo.png | Bin 1548 -> 1550 bytes .../sym_keyboard_numbstar_holo.png | Bin 1414 -> 1414 bytes .../sym_keyboard_return_holo.png | Bin 1391 -> 1417 bytes .../sym_keyboard_settings_holo.png | Bin 3448 -> 1850 bytes .../drawable-mdpi/sym_keyboard_shift_holo.png | Bin 1683 -> 1683 bytes .../sym_keyboard_shift_locked_holo.png | Bin 1480 -> 1480 bytes .../drawable-mdpi/sym_keyboard_space_holo.png | Bin 1195 -> 1201 bytes .../drawable-mdpi/sym_keyboard_voice_holo.png | Bin 1678 -> 1678 bytes .../drawable-mdpi/top_suggest_line_holo.9.png | Bin 1012 -> 1012 bytes 69 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 java/res/drawable-land-mdpi/key_hint_underline_large_holo.9.png diff --git a/java/res/drawable-land-mdpi/hint_popup_holo.9.png b/java/res/drawable-land-mdpi/hint_popup_holo.9.png index c409cea00a98ad81938650f5c8f4c406450b449a..6ad605d97b4fd0523be9fa1939c26deb56ec1f8d 100644 GIT binary patch delta 359 zcmbQkxtMc96qACRn~SNrg^7uwi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B4eD2 zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O0bYVJUlP5vRsK>Ddyd&P-1j0u{m- zqg1#=C$lGMYD_z>>}FcvUej_(VSa7vru~X1>klit)%|UZGjVo)pl#5xf1#@|bHE#A zJHsMv1GlQH{1w?3FY0*pC@1vJVk~B{omI*r>v*2UdX|B^tYL+0<7%4);g*b>Qx9kf f1U%M`b8X6lKyBQc6m{}MaT9_NUIhvWextcmVS{S%GPc~z&tN){W^e_Vh!x>K( z$B>F!Z>AsQI%L4pHhCdW`-@oqegBgyFYJ!n9rZtfO)2_V%G)vzg_1wKPohsv>I?Qd zawbA3xIeL9MQyofl5m3^<4=ZwhAfT+OLEtoy>t9Rq^q_;djUs#LC1cpXJ5Iu1fvz+iSSxrb5%YPibrIj<5flk#Sl5<%J2C zxVC5%{;^bR64S|jrSUvy@})igJuEuEJE!fq*6TFIM(zC!zKwAm3+n<_`IkhBWzYWf d`Kwq0!;519mV)zlz6N@X!PC{xWt~$(696!3jO+ja diff --git a/java/res/drawable-land-mdpi/key_hint_at_holo.9.png b/java/res/drawable-land-mdpi/key_hint_at_holo.9.png index d1ea313c0277cfbca3c1f4a0db0e28bb46236413..3bb8056182e7ff596158e09710cd4feffcf9d646 100644 GIT binary patch delta 797 zcmV+&1LFL+4Al&)F)>9jI50*yI5aUuI7T!%F)=bYlePk2ATTyKFflPVG%zn=b0){v~6+At8cEJI0fN`}lN zrXTduoVcW?o_flU=9C|hT-sAF$)&Un4lSNi9BQy7cb_6L9yeqtc7`0R8I8b_y>H*{ zzBRBkO)bV4Eh)3MG+^D@<^Tb<^#n!*q5@HYs6bR8)*a3oAbDn*Au>}wCVz-J&Dx5+ zET{#|xNHz;>CcRj?>D2jLWnoiZM`Kuj16qghcAx~uQXUNHZQZ4HvnKX4%*Rt{+{;R z@RnL`U=A2S0JGnEe!kaif{jRr=f7Kdo(a&;gI^Q(PZXWPOV0Vn)}DK%4XJ_sa5noO z)3iJJJ)P3tCw;Fdg9*jL;D35}3U2}6m3Q>{`exKsAt6ujbp;_|&vbqy zW#|OcI$;}~poF}9-GA{e?z@o~s%Mf@XxUCTQOvwpLG|h=O(R5Lfm3zR>4i=ZXoU(3 zmF!s&0INVORTG|0rXiYF&-%AwLg)y@tY{Zq1%hd#%cO;hQcfr!^;#`Nu4K+fo94np zAhI&<=r#X~UFw+>0kEozTKBv?nJQu#L6TO9!&&oOsYajX+a@+*vTYE|{9Uvy0Qj5g buK)u8+3`q0aY%xb00000NkvXXu0mjf@Frp+ delta 768 zcmV+b1ONQh47d!iS^^+6H96&LN`G}I59ItGc`9cMno_(lePk2AVW4cI5;yyL^n7xFg7?b zF+oE?Mn*L-MKm`wFh)i}Hj_33et%X!!^i*t0%%D@K~#9!>{wlIn=ll`#;mkSOO;4T zn{Ck^Hfj6+eckvu7PrWT?{lFrH{(Z=U)v>Jb#fXsgHvj zn0O$1QAGZA;rFDJT>|Uva>&?{+jjV}-}C9Gt>>n7GU4EVe;KsnBzZ&k+gN}QN4s2T zKmc>?U5zhWtyF_hbuf`f72JpJk2ro0Mr_-jc$aNoFO(15UvD;VRhD(b@2iCFP4u&> z4kmIICezsmL<<0~Zu-;d!hi2lN;))CFtEaTbm6+eDvAKqJ$KzvuiIH4!bW*h!;3U% zx?=$NGMf*#Y5ERPBU+pZ(D3JWdqyCk35%|;3_Vry31+?!3xIa1)Bq78+Tq}KR0yzj zaUM~wa-Arpyehu)7l=%$mi1c<(I$>N`6SMln(m#qm>Q|mF`0HDv41CT$s>-I8YXre z+a`^i;XMC#=b8VfQs%5ds8v9iQA5=>)qW&Nm{>qpz<_ez|2&%)xkuDOR}es?DB-%8 z$X_6Y2y-u%ve&uxVn>KEDg{807Sh6q&Y`X#2=Lwo5r0^)IS*)dss$p*D^SLgO7^2(cw1)!LpS7k8XPeSS8Ft{f%Xb> z#N;D^p{1j=@;}-*T$D5cmaG?!lK`YyBvpXyOGjC>{DCsgN*f!i&U9F%l2wM0u@Zp) yw!O2Cwea)XZ6hbA2EmHYMW+IQ&s4tz7yyWjNgy?U*eC!100{s|MNUMnLSTX}vQFOs diff --git a/java/res/drawable-land-mdpi/key_hint_at_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_at_large_holo.9.png index 786bbc5de05e15b14d4a39e54fb263882ae10b18..30505cfcdca2ade63f98ebfe2be63fb0f0fb8925 100644 GIT binary patch delta 128 zcmey&^OZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd3_A_He< zOWcaKF(oJ%m{}MY8k(CJm>U6^hK3d{PEIb)CQb$>uEx$T<}Q=XnCn>rrAq4;c delta 128 zcmey&^O0*p^KZ7xudg%p|Pv6skxz>i-GavDkd42B6FOI zwlO6rIGdSUSQtCIm|GYbm{}MaIyyVLxtSWcnwXmyxVbr+O*Uh$V@XO<65hOnc{dXP DLoXnr diff --git a/java/res/drawable-land-mdpi/key_hint_colon_holo.9.png b/java/res/drawable-land-mdpi/key_hint_colon_holo.9.png index 6470ed3916c6e394fbb371ff5e2420eff117a890..85e733cc12d1e225309ad9ec5a90acebb92b39ad 100644 GIT binary patch delta 584 zcmaFI`JYp0GXI2CPUN{BHqvoJ6;G&eCYHv%#Z4J}-poLrnuoD57{jh$W0 zU6d4xOM+6t?Blor*m@|cU;pY3Usf-WIuZA`- ZGTdd%i_>x6TLerT44$rjF6*2UngDw0*AM^z delta 567 zcmey*`HoYuGr-TCmrII^fq{Y7)59eQNQ(opGzS}yoc==O_D03Oj0$e%=5B_D<|YQ_ zMh0dUhK3f-h9)k?rfwD%Ce8+Cj!u*9m}C^poJEaktaqCHFAYYRKPwaCKj~%n`ovaY- zRsX>B=fla!o`>Bo3)e+FiZPS8X<(?Qd0V4Wd;NNCg+&YuB2ElzgZWMxcZjx$X!E)D zUn!|k{dAv2oplwbxq7A#8M$A0g*kd>yZaaDG2_q%D9_jrG$Xq{uv+7jg#r5nC>nr$#^{UR~F^yyK1 zM5UI9N#E$G(kYDA-OGI9Wa>QWZRN6Vp?JQWH}u3s0unY}C8KSZ`!*Zs2Ha>1bkTWNc<(XlQ9^;_T>XX=z~L zW@u?{VyL80kz3&FYvq!kT$-DjSK{ens{|C$OUX>Ja&vPrHMcM^Fmy3>F*I~FurP45 zurM)nwQw`BG&D4_fa&$jD=taQOHPI9&4lYUmUP3VdGb7_1O)>#3j;$#a}xt|BOuez z(89&Z$;H{k$-uAQHTg7I^v$1!3LA22;IVNnp`-Oy)!U}jtW%N4hy1kSP_)V;hSkD=Go zJz70VV0yjd8DWRu$A)vYAMgCwBz)unKSPAmfv^~b4<9N%?vr`{?RPlOos!-9{EHv< ztkdN4yTMVTWx8<6k}KkVC0eYB_rF;6EkDvc=a*85$eZPd7CYUWx@RlbQO-4nwGJVx z_!>S0x<71*Yn}4kQpi`PQ%OtOuT$-2+3a=KW~X~kxP35sf9ZAMsa{tiuSCeL+5Bha zg delta 1183 zcmZ3^wT4fxGr-TCmrII^fq{Y7)59eQNGk!c1_v9EoP9@Q36Nqe4sv&5Sa(k5QAui%f`(^aNotN}dHXL(1_ow#PZ!6KiaBp)oY&V56ghrgHaFgM zZ?Wk|ae;{n-^6lUOdOlKOa-}xtp7Ktb{^flSvXNSP^yI^Nl}D*q5${AlGa{c>HY7m z(~TbAtv~mA#xKL*?()g+=e*o$zJ30@;`cMHSv6G?CL67o*!uTxt-}4+uU98tt-hLm zJ^fe6{=&?R42IRBJS}!tu3z8Zxa4x?;qRY5B}IIV`+D>1OuMW3F>eGlIXGIMe)%Hu z?b|n=yLa!3=JoF2{gm6gqxJ0eD}VYqer?~jEupOJnyr$_kNSrX8Rg{V@2{Es>F3k3 zdK)=&u2tF|Ml)MZo$_kCB;!)MX5G5JyZ7$Z$vxRyaPIth=lpzq-V}|qj#rK^x~MUG z#*Bu?k00|dJ!YzO{`~oX;NZg|9Sc^*uh_6sKr7)?gOs#%^8Hy-!Y;uIUA~1=433Jf zXvkMcO-()8>C#kQUf#W~ex2UMTenU*FPyMmVG7^9d-u+jmz4#zx3?FSmxt@=>i!jT zDlj&hqQ>iJqVM=ZoV%w@f#cG_gN=7?+&H1o(O0{R^EJOmdiwGM$xVz+{2n`Z?fO-# z;CK7`%a@$1R*#QDQ3(nS6_u2b z5O8*O-gxlf!3clfd)e_cJ-w7whQgIH*l7T&e8%cD)V5$^8p775t7{ z>&G9u@3p5?Q&-n?PF!Yft?l}^+P2efC$-uGv)zC3|I7?#J2IujWG;09`3#<}elF{r G5}E*aLGls+ diff --git a/java/res/drawable-land-mdpi/key_hint_exclamation_holo.9.png b/java/res/drawable-land-mdpi/key_hint_exclamation_holo.9.png index a14623dc0ab63790f83948f60a1ebc8b6f1f7789..df273d86377bc9516fc7aedf3432e9ada26331d0 100644 GIT binary patch delta 490 zcmeC>TFSK{ib=uE&C$}?(bB-s#ni>n(AB`gz|F$K#L(5k&BW5s(8ywP6_X59k%b#h zMcbGX6b#HP3=9p;O$^M9fJ{R}3l}FR7iSYE0~1$cXBTsq$!5%T_0zAfNnl`L4E1zz z45_&FW=4GWAp?N}#hzrIcpRB#*^2{S6$WcUIT4Gnb`4&`bFC$xPl`Q{FVRB1&_ceLfas$h zy-9iMdsT`XogJ^+B)?dGso&`7+j@7Omxi};wtpv{4IHU-H?7qjlI z%iHRCT=EgK=2rbk$vqrdJ0DuFV!ZUY+dlWp%VdMy!e{P_cZxpDC{r)_y3xDf;+rEo z|5n7St%^NZ`8_3da=UlPe3i)oZ!DX)F8=?6;rrLbyy?0XXD?oo@6cytV@SVMK6Bz9 Rnf(kv;OXk;vd$@?2>>DH(9Hk< delta 466 zcmZ3=)yuUZib=u5)WXTq*~!Jt+1$m@(8bNk+|k*>(Ad@3)ZEa`#lU!S6_X51kuy$3 z+n5p*oXyNFER3C9%q@%z%q$EI9i1KB+)NEzP0URU+}s?^CYv$W)kmqYsxmMz+IqS; zhE&{o6CT*#WWW=*{bBb!3C|A?=l%I_|7za5haM(HUW)`@T(lJFoHgaPirXxnSz@2o zzTUo-*+qmQV6VUt-jy{?`wDd@$@M$ba+xmjKK_i>)>`jkvu+FJx*4bA-X@^GFi3M6)f5jZ>{Q8r1U02&Ww~Vh_UVe7f z6P_5R^?L5rUe5;``sY56@QVDxB;)=$Hdli6;6r=MXLDjIvIGw1EdHr;Cpua^A;F~N z*DR@)lpUuxtKZ^(~P r;W_*+=0I)inO5yZ8$6ph>X~>LZY!0{(czQfV*mnAS3j3^P6ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B2%1- zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O0*p^KZ7xudg%p|Pv6skxz>i-GavDkd42A|srN zwlO6rIGdSUSQtCIm|GYbm{}MaIyyVLxtSWcnwXmyxVbr+O*Uh$W7)^O%XRY(<|ak} D`J5n& diff --git a/java/res/drawable-land-mdpi/key_hint_question_holo.9.png b/java/res/drawable-land-mdpi/key_hint_question_holo.9.png index 2b71d744fab8f4e97ca8cff05b2632943d2a37fc..5beea0911858f763e79bfbe1711c21e0789ed164 100644 GIT binary patch delta 607 zcmZqUp2@u-ib=uE&C$}?(bB}w#ni>n(AB`gz|F$K#L(5k&BW5s(8ywP6_X51kugq1 z+n5p*49qMH3=Pdq49tyyOhZEp7bhndXA>s_6IWwr7ju`%X3TZ<8y=l{#K6FK($mE; zq~g|_2wVTd1_E0j*Oa_)S;)&&nykqkdt=6ryMGv#`EA(39k4<$pfN;h`9j0zFM95* zn6k?^MDgho?NXAw=Y4VcN?StGx^tgn3t~Ox+~QS-4UxH6l*pgN<|g8vbg{ z^4RZIAO31*eBa`}%xO#RvzY5w;}_fuTy5F#{lJfN@8#z2N?jJrCDnLt%U7?qKlM95 zCo?7|C+92-T&uQ3BI8Nok@FMtA6fX>+uV3=p{A?df3o1nd6N~7ep=+*O{(9NXLU1d zoles8(~ikKtwCDTi(Ad@3)ZEa`#lU!S6_X51kqb^m z+n5p*oXyNFER3C9%q@%z%q$EI9i1KB+)NEzP0URU+}s?^CYv$W)%V0o6*4d|Zu4|; z45_&FCL-7Wkb%Iv({7%B9GJK|ypkTV|NlS#RFlW-(Bw_t zeW`CIJ+C@nd_6CMqtW2lCnbYhiJv5c3{#~8?SDHs&xq1+tWUYPuU*k=Pw1=t8@P5b zt!wyiU+`q&iXxtM>~l)=Z29Y1WugEbDVPvd5}1(ux7 z+A3XHpRcv)#HM9)QzDm!9a2o6`z<7H`L+Kq?;c(uziBQ@!SvgYB-JM0yUwLC_jdhN z&ETs{G1H3-{PY_0T{vcz`1b{`-rDrVP^xe8KE_a+`Q_Hi-IEk1dmn#3XM1@=9$)O* z^Ib=uD+*@YWf%T=#=L6j`-%mNAM9>{mWBCeE%O_n#(KKAIz$CZkf z?@oG|Zo2yFQ2BJ_-wxa+91lua=d7~Kt(v}@DRg&{%ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B1@c# zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O0*p^KZ7xudg%p|Pv6skxz>i-GavDkd42A~T$d zwlO6rIGdSUSQtCIm|GYbm{}MaIyyVLxtSWcnwXmyxVbr+O*Uh$V`1~>W!k)hnUe_s D_~;(T diff --git a/java/res/drawable-land-mdpi/key_hint_quote_holo.9.png b/java/res/drawable-land-mdpi/key_hint_quote_holo.9.png index 486e5e19d2074266d40abaf5a0925a9ee8a83721..401399b080179894bd4343cb259a0fc095acc1f3 100644 GIT binary patch delta 411 zcmX@dd5v>J6qACRo1>+(qoswRi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B6FOI zwlO6r7?@cY7#fLYnTCcIE>2D^&L&OW&OIqT?R_VtO7aaX_=A{9u2idw}7CZq^P4`}gk|fWXt$&t;ucLK6U3XQ#*j delta 403 zcmcb{d5&{K6qAC9siT>*v6+*bv$>0*p^KZ7xudg%p|Pv6skxz>i-GavDkd42B1fEx zwlO6rIGdSUSQtCIm|GYbm{}MaIyyVLxtSWcnwXmyxVbr+O*Uh$tCzAq@{@sq;h(3A zV@SoVH!~h`H5mvrlxO*9a0%7?FBfiVVp>?A8)qGvVDx-ibkLiGR}VMlo4-F7?BK%2 z@T%ni&!TsRn>ckPWpge_IQ6CFsA}ezC+B>;9kyPPbIt+IKffOwTDs*G>proYy<)z* zzO1`$oH}uVbbDpSr1taPiwf#LOq+Xdx|c`f<f;Sod2d5tRcp$`l`6tsfxx>q4kH`ou ev={JaWMjzD%0I1{z?}sQ3kFYDKbLh*2~7ZdlAr7V diff --git a/java/res/drawable-land-mdpi/key_hint_quote_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_quote_large_holo.9.png index 49770314f733083844575e33dee01e57b9c44a52..daf3bc09151ef12506622f39e982572d5bd883a9 100644 GIT binary patch delta 128 zcmaFJ`H*u%6qACRn~Q<7v!$t_i>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A`_g7 zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O0*p^KZ7xudg%p|Pv6skxz>i-GavDkd4IA~QFf zincK&C^(y$TUZ!7yO>)T8JJlZ8ag^Vy1AJexSE)o7`VAPnoTxiu46e?F1ma34rWb8 E05zH*{{R30 diff --git a/java/res/drawable-land-mdpi/key_hint_underline_holo.9.png b/java/res/drawable-land-mdpi/key_hint_underline_holo.9.png index 06f3efb7e69eee1ed5f5a788b18b2f49db761635..6d68737512847a3540342d0c37c3ccdf6cf8394c 100644 GIT binary patch delta 316 zcmeyu@q=SS6qACRo0EZylZCONi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A|srN zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O0*p^KZ7xudg%p|Pv6skxz>i-GavDkd3_A~R=W zb0eIJwlO6rIGdSUSQtCIm|GYbm{}MaIyyVLxtSWcnwXmyxVbr+O*Uh$tA963ww8f` zVTq@UV@SoVH#ZJ)H5>4-JvdTzKeg${zy4>5a^*KXXJ;&7mfWmyrRx*Bm;Y05FOA&D z(9W65J!cxVbxyHfbD_zP>p%k|GaHYDLBav^w$mO?8>_e7?Nl|5aS{4;^!JnxF`2(# z&ARG(uJ+ZdpM0KPr@A~{Z54Ou!j;&!;+zi{ rc3R}fma(0=zrJJ6irVTPCLRWkEqZQWYkK2=4rcIl^>bP0l+XkKO44^@ diff --git a/java/res/drawable-land-mdpi/key_hint_underline_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_underline_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..50f99a19125ae0449635d3d1146508a7ec3cd472 GIT binary patch literal 1154 zcmbVMO=uKX93LC45)9HJl19{FHiRC!Gw;pJWlmEm&#oL8L?|h!&|J=qY#;4?UDnyqTODH4xtbt6Dj*7B-|E;z;z zDkH<1IQ|5sDXOJrR|fDv@mtmO9M*_+*vRn-nxfJ@k#Crz2-8(GWV;#W<-G?CZCe@U zXsQT`zJ`YF!;=B(pX{rclcT0$F+E??=}0964#EZrM?6OSI+%h)%H}X@YJ*cS9Bmq9jRQ(L8{F13U-$B$QNvR{@|K4@0a4R!uGI`GzgB z%P_+j`zpuP>vgs+uwF34K}Atw4xUdEjbu3CVk1hrVWP>PqtFa&AKRWw$BahR8^;-j zc)A{f;}?q?#BSI~6iFEu89oPDz&TDF*P3>S%jlgOn`(!Z2_JD~6nf)`m26x~^S9@9#iNxjC^N$Z6qUNrg`iELL(sg#rCpY$78cdHY{r>1ZVV8OFn1B9G z7P5I$O$95eyx46wPT^PZv63TS(uwYPL&?M?wkGf#!r8KX2CD- oZ+}?LKPzp`B)7HwKy7WO!WTlZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A`_g7 zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@1IZ^yecJmHqXGQ=W CaUk;m diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png index 936513a3132bf6c1a111cdd84a12e26f4a4046c1..6b35d05065dad022d3fe6fa0a5e6269480b7fae0 100644 GIT binary patch delta 128 zcmaFK^O9#n6qACRn}wyNo0Em1i>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B6FOI zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@1XI6qACRo0+kZk)^Yti>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A}5@R zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O C%OL## delta 128 zcmX@fcam>I6qACXiase8oD_-8kjp-S{S=dHe;@1IT#^&ck>SBiOc{B CU?A)O diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png index 9fed21edf2f76ea59e7a20dca434b0e7e7b67732..dba6e38e919ab002b28048db9255921bedf2c3ad 100644 GIT binary patch delta 128 zcmaFP{hWJ46qACRn}wm1shN|Zi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B1fEx zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O0BPv5}>LnT4sLp{s$DrK`ECp}DiUn}w^Pp}E=QDkd42A`6^~ zwlO6rxB<;@F*I{>vM>UwGc>d?H*|9~baQevFn6-FFm|16#$3lTvvNZ8<{ixXOaKwb BAb$V= diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png index 3fce559381923e5aff6371fecfbd2d6a9194932c..7307d62b8baca220bf6434b1352e4dfc63170d0d 100644 GIT binary patch delta 128 zcmX@gca(2K6qACRo28+Xo1>edi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B3GP> zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@1k@z@g{pKCaz03d) CEg?Gq diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png index 3f82b67dd5059af1f52974be380e1b68920fdf2a..2cab62b62a925693972c0df970ffd911a8d23973 100644 GIT binary patch delta 128 zcmX@We}I2O6qACRn}wyNo0GGli>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A}5@R zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O6qACRo2jFtn}wyJi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A`6^~ zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O6qACXiase8oD_-8kjp-S{S=dHe;@1N%wnxW%CZ^N=5+O Cu^`I; diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png index 0e828a6cfaea56f1c7aa216a766a36e02c5ffc92..0c3ffbf8fe77d3f401618760a56f6ac005da0cd0 100644 GIT binary patch delta 127 zcmaFP{+xY76qACRo28+Xo0GAji>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A|srN zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Og+ BARPbz delta 127 zcmaFP{+xY76qACXi?cZpxEYvPm>L?o8aP?Hn!6gBJDa;%xEdOon@z4_l7T65#i?i; zQ-XqZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B6FOI zwlO6r7?@cY7#fLYnTCcIE>2D^&L&OW>zKu D;G!Tc diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png index d2f5f3bf2594548373a4e0234e4eb8e93dc69444..2d4365eecb9ebfc857374409d66e46a5ea7035fc 100644 GIT binary patch delta 275 zcmX@hah_vC6qACRo0+SDfr+`Hi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A~T$d zwlO6r7?@cY7#fLYnTCcIE>2D^&L&OqxAKx_R~MI+`A@RAs!e|xVEG85|`LU=Jg9-PT&bWCh@89%=Y8o zGOCXyvzl}qWHd7fxE>>Dd3C{(a88YsRWVmCU-`2B&a4@ccLEQjv}>eHvPnNs^7Hkx zhD^o$vp=rzEJy85}Sb4q9e0QPxf A?*IS* delta 273 zcmX@lah7946qACXi@Bkrk)eTsnT4sLp{s$DrK`ECp}DiUn}w^Pp}E=QDkd4IA_F&^ zincK&D7aY~n7J65IXPJv0o55AT9_NUxf;4TIU1NdSy~voPBvq%t1mfvww8f`q1MyI zF{I*F$%I(01_gnZ*o{^C3+JCMY0A6JxyxH5ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B4eD2 zwlO6r7?@cY7#fLYnTCcIE>2D^&L&OK&bls&YF zQ{$iXYzb3mrY8)63So>ase8oD_-8kjp-S{S=dHe;^i;Qn-;iGhLPz~nv5 zn)PlqVmw^#7npmjlCB6Y?vse>tN8In(tg4vmPh@cE(Kj*n6$>hi+|M z4LbHObQNX}c%y8$@!}oBKeCR~!$j@eFC1oEoSCEpvQ*)e;EqkocTaI@R3B(!zVe%y b!+_y$(DH+BIq6e@4rTCk^>bP0l+XkK$sA|z diff --git a/java/res/drawable-mdpi/key_hint_at_holo.9.png b/java/res/drawable-mdpi/key_hint_at_holo.9.png index e596144f94219c2768af89dc9584178b3c324ea0..3bb8056182e7ff596158e09710cd4feffcf9d646 100644 GIT binary patch delta 128 zcmcc0bCqX96qACRo0EZylZCmVi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A~T$d zwlO6r7?@cY7#fLYnTCcIE>2D^&L&OaqQ4R>-hFn6-FFm|16#$3m8>i(kjn|CnJWdZ;l CeZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd3_A_He< zOWcaKF(oJ%m{}MY8k(CJm>U6^hK3d{PEIb)CQb$>uEx$T<}Q=XnCn>rrAq4;c delta 128 zcmey&^Oase8oD_-8kjp-S{S=dHe;@1(KCFbx_JllZYBU4 CMIe>{ diff --git a/java/res/drawable-mdpi/key_hint_colon_holo.9.png b/java/res/drawable-mdpi/key_hint_colon_holo.9.png index 14c46990de904ddf5088bd832fedb1a374c0b743..85e733cc12d1e225309ad9ec5a90acebb92b39ad 100644 GIT binary patch delta 584 zcmX@i`JYp0GXI2CPUN{BHqvoJ6;G&eCYHv%#Z4J}-poLrnuoD57{jh$W0 zU6d4xOM+6t?Blor*m@|cU;pY3Usf-WIuZA`- ZGTdd%i_>x6TLerT44$rjF6*2UngAHm*5v>I delta 524 zcmey*d6-kNGr-TCmrII^fq{Y7)59eQNQ(op1P2?C6s$=r-KhANQNhjJ+|AI?+{D1# z$iU3P(9pu!(8R^q)Xl=e#M!{i(P^?BlZ=9ylcABblZmmbp#@Nhi<_gVxsjuVo1?3X zfu*IJh3n)hgd!uHincK &xw;cRBZ7u~5v%ue-M>P+{6{`>6d;uunK>&n!Fe1{Zx+M1GQ}tXqXXg|zn7E{Q!<)swe{y@cG<2{qoOnFR*Rwxhq2`JkCiY&ZKTbXK zU-%r~n*9rBUNzjP*~yq89&^BpiS^9GA6I9w7R_Y;;aJrcS(*Ml?*&Kx?Qb?b^@sPq z|GiqLC0jcxRYkJ>n1smOLT-tBvSAbNxlimn{L?`3Px-s$VKFV{zQvzr-QTrtw@9PA znetlG*84qge(Ze4#BJuY_C(Ze)%nFnmh&e!I8=E(yB4}4DSr z1<%~X^wgl##FWaylc_cg49sbnArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}m6TW~gUq zY+`P1uA^XNU}&IkV5Dzoq-$tyWo%?+V4wg6Nh+i#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yY-;xWReF(0~F4nSMoLfxe-hfqrf-$X{U9#U(+h2xnkbT^v$bkg6Y) zTAW{6lnjiIG-a4(VA$ce2&53`8Y};zOkkuW=D6f1m*%GCm3X??DgkBmQZiGljLgjq z9E~j=p^K@Dp`ojRg@K!e zg^8i7g`0_`p`nolOs{8NaYr6!i-7lq{K=fF}xKt_H^ zesM;Afr4|ese*4}a%LWg4~ia$Z(UN0GRsm^+=}vZ6~N(Zm5IfE12YQ)Lql^D19KxF z)6meu#mULV*~H1f#MRi@#oR>+syBt4Fw+M*MjwR1B%YIPz@`^l$UQhRE^(cYqj%S1&f*%{s)qcG5W0UZa2mA~X zP6xtb6h3^Y__$Bz{kPxYJa+>&u*t1TP&+i6Djh5-cDNC-1`;}<1Cf@&I)wlde z^PFEwAtG;mAj=>6A)r+Qt9yb>X|X7itw7k&x$)h!j$z4=e}t%~Mzd-Ffv`eTGxPgHMN zF-u}W7H3jji^7WaF6(=~%XX$MRC>sLNcE%Qm$n_n$Nntf&kqklE_3@&zsmz- f0}sS6(r092SbC&d_*KX=aM9)I>gTe~DWM4f5Vguc literal 360 zcmV-u0hj)XP)r#6Bfz)R>=Jb{8>VJ%qd0Tk@C@KBSP$*}^RnYf+05WYH$1NP046u zQK(s#-SRxYhGDp!%+>?^soKLZJgPlSQ-fugR$Exi%*nDWAGgSdHZ{0S%w=|U9qi|# zL+(qoskNi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd4IA`3U1 zincK&C>WSo7#JFwn;4iI0hxw|7A{UsF3u)S1}3h?&MxLIlg*gxSf*cJldyRQb1owQ D>w_TI delta 128 zcmZ3=wUlc^6qACXtAVM7p`){bnT4q#kmF?OYVK-i?riR6;c94TZZ^4!Nk+lY#m&hW zpQ3F{2?}nO24*gXW=>8PMnJ<14K2(K-CPaboE#0zoh&VkT_>9{*Rg2qh?}r^2XihX E0NPX_F8}}l diff --git a/java/res/drawable-mdpi/key_hint_exclamation_large_holo.9.png b/java/res/drawable-mdpi/key_hint_exclamation_large_holo.9.png index a8a17eb44a001a0a1bdebca71a4b21e39ae55eb4..002eb05621d1ec6817dd27b86c75ce496f660729 100644 GIT binary patch delta 128 zcmdnRwTo**6qACRo3o{%vx%9Zi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B2%1- zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@1xt5>$ZSxN1CPo19 C`yns@ diff --git a/java/res/drawable-mdpi/key_hint_question_holo.9.png b/java/res/drawable-mdpi/key_hint_question_holo.9.png index 9491d878f8f81a417c91c2c78e73b36fb36c6009..5beea0911858f763e79bfbe1711c21e0789ed164 100644 GIT binary patch delta 128 zcmbQqJ(GJw6qACRo1>+(qos+Vi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B4eD2 zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O5+gw#Q?_hq&2mrbL BAKU-{ diff --git a/java/res/drawable-mdpi/key_hint_question_large_holo.9.png b/java/res/drawable-mdpi/key_hint_question_large_holo.9.png index c9902ffa87a689074ad81fe5059afff86f44a2af..6932031b67722e84fe351bd343c7195e61751444 100644 GIT binary patch delta 128 zcmX@eeUN)Y6qACRo3o{%vx%dji>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B1@c# zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@1saj@Yw|NIM GCldhlHy^J6qACRo1>+(qoswRi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B6FOI zwlO6r7?@cY7#fLYnTCcIE>2D^&L&OJ6qACXtD&KVtC6XJnT4sLp{s$DrK`ECp}DiUn*~tD+-!0clMGCe2~I`Z zm=YA+EDg+D49%RJER2BafTo%oy15#ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A`_g7 zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@5ez$J%<{iwMi~#$8 BAkY8+ diff --git a/java/res/drawable-mdpi/key_hint_underline_holo.9.png b/java/res/drawable-mdpi/key_hint_underline_holo.9.png index b137b00211cbcdda26d2bc6d71bc4de46420b6e5..6d68737512847a3540342d0c37c3ccdf6cf8394c 100644 GIT binary patch delta 127 zcmZ|Fp%H*E3aqQ4R>-hFn6-FFm|16#$3np?9e-($vc=2000iD BA_o8f diff --git a/java/res/drawable-mdpi/key_hint_underline_large_holo.9.png b/java/res/drawable-mdpi/key_hint_underline_large_holo.9.png index 9845e3bd6f60e8e098f7ab8cfd2077d497d09ad4..50f99a19125ae0449635d3d1146508a7ec3cd472 100644 GIT binary patch delta 127 zcmZqTY~tJy#iZco=3?ONY-wreV(MaO=xShL;AUZAV(4n&W@2e*Xk;|iL0@*i@D2WGv+#$NBy0}lXozm0sy2O BAhG}e delta 127 zcmZqTY~tJy#iU^9YG!F{>S|1yt3Xzpz8X5ngRXl^#Sib)2h$PlNZ zZA=LYZk7gSE{0}KP8J};3=J*J4c%M~-JBc^%$+PPj9n+2G1sxI-`i*~c?a_;0FCq@ AOaK4? diff --git a/java/res/drawable-mdpi/keyboard_background_holo.9.png b/java/res/drawable-mdpi/keyboard_background_holo.9.png index a93966c920bf7ec82a5554ea5e4e0aa11834e54b..c56c704bb70a493e02d8a2aa7fcc84ec983d8f14 100644 GIT binary patch delta 127 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

FctVIBg=^ zkZf`iK!M*VD*9;&oCYIhmO{y&rVU!?N(KM~KtRUgCkbDXA<-BNZD5BZT7ZPa$V?J+ z3|l*IHa<9XGN_`~S<5)RYN;sC*UVjrVgFX-|cwtoRM> zK^H{vMbUE|bWS)+MpIJ+VT__50wZOrQchcx(#A!4Y=Qa;K4YljGbB(mW4Q$^$24i- zWDWong8J-;lFS;>3{vt8&M;k;#L-%ZLL;ss2xFNhN`IK2)ba>qs4;2UAemZWnU7@s z9F$F~AQB^X*7>ffWj8tFf&?^Al4+_?^JK~D^L>QkD^NSV>kkC9K+2i(3Ts1&X|k5d zwGugjg}j=t$sduKtr3b=SbOZ34~;DWQ5l8>%2cN5VmwCK03%muUp`pe0>S{Jh5*N2 z5kRK+JaY=c3?c)_6hfWq1q;dopa?_;jEe{+OE5VQia=C?vMX?kgpe!z>L3q?5>=iWZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A{U&B zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@13GsBAJb4GRF#y}K BAF2QV diff --git a/java/res/drawable-mdpi/mic_slash_holo.png b/java/res/drawable-mdpi/mic_slash_holo.png index 07181e6fa5991a83b68d789ec1d3fff585b24b5b..8ee41b61a2991e8a3e3ad715108e8c42d6a0fc95 100644 GIT binary patch delta 3514 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 delta 3514 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 diff --git a/java/res/drawable-mdpi/ok_cancel_holo.9.png b/java/res/drawable-mdpi/ok_cancel_holo.9.png index 035a4f6f0d0f93e8c12eec885d3c73d8f72ec76e..cd53d55d9f7c3f5a8aa690601653834b4920d145 100644 GIT binary patch delta 128 zcmdnQy@`866qACRo13w*lZ&aLi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A`_g7 zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@15pq*B*}Q}K7b5`d C9v{sB diff --git a/java/res/drawable-mdpi/speak_now_level0_holo.png b/java/res/drawable-mdpi/speak_now_level0_holo.png index 2090b95a57d2e929771ae62d12c4c1ec3e8a2ee7..d2934780a3eb88b79e2c5b877263ab61ff78d725 100644 GIT binary patch delta 2647 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 FV1g1z`||(* delta 2624 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 RcwGPh002ovPDHLkV1k{CaEkx{ delta 2870 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 delta 2828 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 TQn{u8f5Ty9V1lYZI7a*j6t_15 diff --git a/java/res/drawable-mdpi/speak_now_level3_holo.png b/java/res/drawable-mdpi/speak_now_level3_holo.png index 7c7cd666f806e669b19a5345f3660369aba001df..cd940b741b94f3ea9ec6ddf50f2e656d63cc1a39 100644 GIT binary patch delta 3223 zcmZ{aXCM>|1AuK_BQq2-UOQJV>o{lK8E3m;&#ns@+4~$vua$YF5SiI0GqTE-nfbb$ zgq&=OGaBFb=ll6R&!6YV(=Fa5{@Rg2!pKNpSsAJV1H#l`K%k*ANZAMkQUw}k!8 zbf(kMaqPlj`ltxf5u<0GWa=%jE#pRO9frRjW{BCd%o5Tg`SU& ziW=IoGw&SG(yp9MFs0uSQnfafe=HO>?C0fGl>(DmB)4_PpGJ|*mZNL&wY9uMpvmt) zZ7y2Bo*k`6D@3$Qe+<;?Q(*tsF+_yYgS+g|BcP-XBiD!0cLWTV{Dh5&-uWXzqe+0WB+K!Q2l!5Jswaa6 zl5rZv$b-#*Wpd9nhBcaf;b4&WqbHva4Gm48?t~LU;W6gZ$f?xH3UXANQTQm#S$&_O9B+AqF?FI|eH_ zUZ3F!UEzj;0DIVTH$sH|@m2ZTOs~M1m0nWr%50JgFXCtPOYrg#z)3Iu*dzT0BI7rP z`3Rx82AFp%&dE`M{Kz+YpRvjHL}$zQw`$DMcIwt~s1u?Z2Bw;1LXYA}D;Q%}v*`xR zWOoc(%7>tPd=$IlQl+Tggd1jV54su^d6WRb?189H1|>P6mC-?P zTwaC8IuQ)OBVsC@Mg_j{tF>18gTu-5rv+v-m)K+ zyDdd;R7#Eftk-Xph!;|P;HA!}l%(3(K=OflGb~b3${}A`;OR`=gm!yZ+7e^m0dm@MFe8a?3UbdWLwjo+_m)xpj%grs1 zS##dq{IuXMWmgRHEWW4ojqZ`IRBl8Zxq3k7DRr-8)HO0zY={7aT%Ip*F$BzOIQ<=ZoJYVlcp4{q~D%T_o8Wd3AFPT%icP`;tA8l zZytH5c77iblmA+T`E^uOh$Faj(`#@cm$p)DMXii~P-#qzr#w?rZutZ~Yk4o)x3b>I zk!Ih+uQ$c(?^uuo%N5wj9#Am0F>d8e%-lH1<(ptef?qh|YJGHbJcQdNleT;V&yk$; zCJA~fjAbKS%4*;97c1g5EHHxEIuEh>{{)?mF=5Jy4M#I}4R_2%P}kvoBcG`3e47k& z4#|cjyzao;f8Z6S3vUmE8#@Ft|EKZ)O-N7=Lw$9~7K<{G$&`3K>GJaK8(RUqXGN3TSH>Hz9<*4eDp zk8l#6((f$Hk5GwqaQTeuFEa#tJYGwFdwZpI*Y;K0-#zqLclty=mlI1oGRSw2BmYVm zY>h8+KlS~}!3l6OqshcH>{(Ij)86{EueTpcRJE@(b?`{u3BAXYyhYJ&<9}`@sy5Rg zc3m51x4dqTQg`L`a>4F_Ez0s*r#@<)Tl2_BABU{F9~1(orA>RcHLNANo(Ix?XMdaq z7^5H84rvocnr8GHe1j#y{6GSBPIw;eQ7TX?c6I!li!oQd=RzMkaFAr;KFW2XUQI5&RhTw}KrBA(cj1Jt6i48XIx=&xTqyjwTvEVvl=Qu=iZf zQ@N7%_Fgc2x!Ll&QX?7EDFJ&ASYc>mYQgf+VRPcV?LI1xS-M1TM<26_k@A~Ya6iiI&j;OfQ_wwsmF7A0 zt8mVk<3Q8vaUo@r=@~wkPj@aDLKp(Z9XOnvN++XFi2c0|a}R>{;q*hOUgEiS+@_mi zycSX~5TVHADj>bHkkq(d1sXn*XP-+O?b>w2qf#tWf}Zry7MDY9C~47fcji#@_hgh- z1d-(FX7)^mkDD10En@?T-<@n*p@oN7)^%`L*N;%H6;ArBF62H~;%CtUG?mu+sXnUF z%QuwVnGQIpYzJPbK@K2BCY-F{#4oAn=U zc%PTf7k8a=`TGiju07io6Ztm3FzEhgdDd53WaG|GF6rqw;}iRNq7rf94(hJY@Q19? z7oEM4Oz#lnBq4?>;%(ddSgcQw?;!Hq$4wJJw16R>5cA0tLq_+^XWTD+Zg?d6`Z3+b!LHWDf~O2i*o==dzGBQDkPUUK zGCC`b5>ZfV8$_8(YMv%aekBHf>h@D18HwuKBUM(_ormKpM1?M>KFFD^B7|3KoMCW8C*{jYmcaXVv0 zvf?TbD&;Vmdnj delta 3224 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 Cw;;6u diff --git a/java/res/drawable-mdpi/speak_now_level6_holo.png b/java/res/drawable-mdpi/speak_now_level6_holo.png index 88e4131c8f26b0e5574bdbfb556c4aae4b5d2e60..74e0f98822c9a7f59364ec523ba4742a69b7736a 100644 GIT binary patch delta 128 zcmdlXw?l426qACRo0F@#nTxrhi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A~T$d zwlO6r7?@cY7#fLYnTCcIE>2D^&L&OWB delta 128 zcmdlXw?l426qACXtFft}sf&?;nT4sLp{s$DrK`ECp}DiUn}w^Pp}E=QDkd42B14>t zwlO6rxLF#Qxfq%`Iaz=VGc>d?H*|9~baQevFn6-FFm|16#$3lT*QT^(^A6?)ZUF7$ BAY=dl diff --git a/java/res/drawable-mdpi/sym_keyboard_delete_holo.png b/java/res/drawable-mdpi/sym_keyboard_delete_holo.png index 1555791691aaf1572667793df8a8a9c141225b07..364d9c4c5a2bb83b91c45129956652719779d1ac 100644 GIT binary patch delta 594 zcmeC??&01L#iZcoW^Qa~_CI;q4K&GLgg^QDui?fLnP@l20i@D2WGv>N_KEeJn1_s7G zo-U3d6}R5pu=hUfAi?&*?B7Ah!2J!2S9d$HPgnBmtK(&#*wmrnT38?~axk#vkw!<; z{R55y>K8A@uHoQYYih@y|4{YDpPeex7o9)oywG#qckiP7b(+8T#sBJF>m!laBIt%n zq}^wm5SVhJ{>#&ZJ-JVqUq0b9UQzh7NF zT`$k@!j9i87Wzw;WXC-7j^4DSJ7KTi9LKUGox1o5D@AS>YkrS>IA{I4+=v|K-(;`<5#87#!kIMj?J}{mWs%Fm30zRllb1cV++rPgg&ebxsLQ0Fik2 AUjP6A delta 593 zcmeC-?&jVQ#iU^9VqxgyW@&6-W?^b*=xX3(>1yt3Xzpz8X5ngRXl^#Sib)2h$OxyR zZA=LYZk7gSE{0}KP8J|_hK3gAhHkEgZcdH{=1!It#;%jinCt3G+-4tQU|`(s>Eakt zaqG^0h%5AZ0mqtl}=B1Mt*FRKY6%6cp^gvCcX)(vqKmpeMjm-*v zix%%*!66%!UBh?pfcJ*XB2PWn`OWPPljA;n7rl=S=4?9fyL+vZL}H7e8!C}@-)#bC z%9$_qPao9mKB0a|TPQ7H@}|<8Jn!~u%y2ua9DQO3^A)a3ZgCUe?_hQ}UL-al_jDas z?mpHmuWeUZR_H&ea+q)KvD_!3!{~mbi<$79m9MFQn$x(;L z?}8uvnK5Zy;ZFUNm-L#VzFHOX-Sph>qt-Fa=*@Pm?`Es3rRRLUy7%m!CGw})BRR_V tC}#gz{BwRB?+0B`%y2YY^VYqAkwG`<{pS6lVHX&Hz|+;wWt~$(69ARc{~`bY diff --git a/java/res/drawable-mdpi/sym_keyboard_num0_holo.png b/java/res/drawable-mdpi/sym_keyboard_num0_holo.png index e1d395b45ca141bb7d2b818feb51d7fec60b8723..21b98ebbd5c2627157dcf416587e076bdfd14c6b 100644 GIT binary patch delta 932 zcmV;V16%yx4ciT{S^^+OMmRY+Mnf<$L^VV)F-0&qFh)2yG%-auMl?AwF)}!ldIB6E zMn*U}IYvT8F+?>)F)>9jI50*yI5aUuI7T!%F)=bYlePk2ATTyKFflPVG%zX0}Dw+K~#9!?3vAO+CUJ;{egq2OQDni zO(JpWIa02bcz{Ulu~HAcw3i%`TgZ3VYYfeNB1=0|V`Le;LGuD_c zj!PkRTf5qkMlALk%+E9bnO(&Bd@gVc&qNNC1C2dU8GMUg(Hw9Ke8%x@27gop&w#7o zQo#8Mc%Oq^4=6_CLyAnH+3q}Z=JT?9fhg(^?rR^@nx@m-4u|?{pm~JZx$f?dCzJOu zF8j{wiA18dTPz%t1YCjJ9A_}lG&;dNp|lS)C6Rc$Q!Jdqa0K29@xCxa6na=w@Yqz& zAZ<*#0%@967N#soN3tx}Fn>C|W7FBJN<)Z;t{4gGrx@bN}sb8(mlBk^s?PKY+ZdjV4^jaKwT(f)2#SX`_vngZZ6Dr zoC*sf1aslpwq2Ro_7mno#}cTUwh*05x>?%Jf1;s9mEL=gbIT$8Xn*|PEco_MB3+|% z*$}1W??tHdBkKHit2i*yaMzUg`dwws=uJl%XcSTjA<3whre)QZLEnicpLKht}shQ*ECw^4l1^T52FA$?HkYknYK%?;ep}c7Nlv@e;H-g6nAYORN13 zKvsRJt+Pu~um-d;Px+41YM@vU@|fB;djEt?Z+|gLsp`wZqg?$D>^A*ZKn2?2Ng>o; z->AaMX(`Qd>8U1@HG+vLdM(6gi|twGcBNOH=r=>5&sYAH-U2FKsitjl-q6lF2Dd3*fVr!_1p>o00000gHaImgF-0&!IYl=`F*iduMmR+=F*i1odIB6E zF+@Q^I59CnFg7?fF)>9jLODe@MKL!+H%2%`F)=qblePk2AVxVbHbgNtLP9t)Fg7?b zF*r9dMny43LP0P$LOD1yMUyrIet)s~SK9yp0}n|=K~#9!?3vAO+CUJ;ZDUiYLku(l znndE#Gg7XVcz{Ulu~H7bw3k-u8}IMGuD_c zjzN&Pm0j&fBNlrN=I5FJ%r4?=HWRo7XA(!ifri@THRi;?i zo>&seWAIxJc0HgNjTwqeq1o=duxGQPLs=B{?Jf07N>v4d-QiG~C|pwIcMxXhXSXyO zk3Yh==sB;;vRvKI=V~MY*Web%=?^r8PB1@H+WVR!%kTE`xlC$(l9D4%$Ovd#D8M3Dn_S!Y%-lzXqaG%RuC|=^k6lT9x2u-%-IMb`FWa4?*7c7=CR!s2)PXWGjIt-SPu(%; z=G-jXF0&v4FbAGxS>>r^J=>tY3nfq|Z6P`rbhEI#^Oc4sReJY5&VMZi@T2j2)8M;H zB3-3(=>VnW-$khXC+fU*r#LXuaNm@7`(0(t=uJg^rS!KAA;nNH4b!YH$cbegHZGfQ z=YqYzcNBI#4FgbTQJ_9fp2LgVH3;Tp@&=^k9Q6B}Xa0l(U2WKF8o2TTKXVUWG_PI( z&=%H($V!Y-Bs=?_ruX3zfaZ0Bx|>24K#E zfrZ4UsOaXZ2*oI{X??CU)%N8)zkB`H3k{?sxjm^7&^?*--G4*U%Wjl5Ui>yka2=ia z-fDjUkQGmA>+F>O2debH3xWdUM3lEiJWGWAqUl_>u>vo=ha((|F8bE(eM!Hv-Mn zGurksZj9UsYgl>$%;VgXY@JC_Zo={nX0!~oFiw>p3`b5OiYv-RHmx-n_`i5`t_M^g zpsG(_Xi^dCaWRCO0cE8@VcH}9AJPMXa(h5g;>Lk;p#QD?7GMD1R1AI%UB+Vo0000< KMNUMnLSTYaF069^ diff --git a/java/res/drawable-mdpi/sym_keyboard_num1_holo.png b/java/res/drawable-mdpi/sym_keyboard_num1_holo.png index 225436ac274001ff66a61f728f9b03fefe66b287..e95a64b55e5033e672d274af446201ca80e5715f 100644 GIT binary patch delta 498 zcmZ3(wU%o`6qACRo28kHfrXKwi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd3_B10!P zCo`OiwlO6r7?@cY7#fLYnTCcIE>2D^&L&OlFzskrs#rmx>22MM->+lpJaW(i(=a7ep=K{)>b;|^x_4{U0?${*fi{r-XNPQww_ zQ~hh(Jls$Js7;GH;ldo;!TovP$?HDpW&XE*X38$TBDQI#1q17g{S2im_O$-yUnTkD zRAbvNEw}&HSGhUfI`FSx%KO58_;bBeh5Czkt%-;3Rs@AJi%MOtp6#>9qH^y{&C-ed zdDU^N3q$G`JnPV6eQYyT{#V7iHJ@&L&bTvY*-O)f=8mC!Qw(4K)Sl;6>3){OXZ3N@ zcjZ4n-KftJPD^JrW}IrPvAuSl@n)TD@ww}&^;>qZ0!7we3y#~%d_TW-y^mAO+<7L| zdIv-5_@0K}wzXSRdc3eGY_*%Mz*_V6v=GCoS7r#gyw0C(x3aD3jCtRjj;F#|hm@pQ zTp73m8k87VH5?`?o!)mteE#RUo6GrDe3*Wo$;ADxxt~vveBj2P`ixx+A`2K?8Gfn% b6iQ(D_Oxockd(qC1|aZs^>bP0l+XkKKqtq_ delta 497 zcmZ3>wT5d$6qACXi;IDQo0*Y;nT4sLp{s$DrK`ECp}DiUn}w^Pp}E=QDkd42B14>t zwlO6rxLF#Qxfq%`Iaz=VGc>d?H*|9~baQevFn6-FFm|16##~qb#^l-*1_s6$PZ!6K zid%1P`uZJmkYG!=6?myDiY2+^p{PYer}+nlJB`d0%)&P}7rZ}IUBR5^@Tkdt<6^~2 z7maGLsrkjHM5wk-43sefPox+}V{hkRRL6Ma5o)5Jsplj+8j1k9M5vg8ae(O}Kyl@43}ZhAR8E9Y0!p=rV!_c(WNIKk&A*uW&R zfWv{2D?p`t`!nOBZ&vTyOJ8+x-CwBd5WeDgtL$W>=n$QMvJQeh3mI57m@e3#bZTH^ YkewEFjE(WH6$21>y85}Sb4q9e0Lc{4xBvhE diff --git a/java/res/drawable-mdpi/sym_keyboard_num2_holo.png b/java/res/drawable-mdpi/sym_keyboard_num2_holo.png index e513fa4a0b59b4d32f34f5c80ab66252e419fbc3..e08856718c68812f3c57c5f20fd25e802ae3ae39 100644 GIT binary patch delta 128 zcmcaBbXRCY6qACRo1=k&vx%Xhi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A_JU? zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@1`MfsJe)A6IrK|uU Ci6Kn@ diff --git a/java/res/drawable-mdpi/sym_keyboard_num3_holo.png b/java/res/drawable-mdpi/sym_keyboard_num3_holo.png index b91e005fce5f58568a794ebb91a2dfed44711bfc..9739127aec202fc66a10cd7a36a6bd59a5095360 100644 GIT binary patch delta 128 zcmcaFa9?0U6qACRo0F-do2i+hi>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B2%1- zwlO6r7?@cY7#fLYnTCcIE>2D^&L&O)F)>9jI50*yI5aUuI7T!%F)=bYlePk2ATTyKFflPVG%z3kK~#9!>{&Zc8$l4hw;c>N7{W7x z23jQgkRC)C5Jei&BBdmfe*jWw^8@$+v!qHbGHSI+r!m&^>Yy(c%fn;VXHUhA)1ayxBWz*>)+*Xg->KAAagEW#^;Kyc zl~^XYSXS}NaHWlJGy+s8RVrU#1LnEDRRAMNRu|7=~ck_6m%f(NuMZqkZ6j-lIDFNdyQeQc^lOJD*1|VX=n;iFgX+q~!YU zYq4DJedHW9^y2Kr?_SF=R$#L-qpyb$Y>NV`Z=TUM)nTFOAOfR9xteLN;r?-8qAr)I z;YSAzhQMRM>QrkAoL?YY2ozCqwk0>*4%ckDUS zCZ$EB70Q)L%AtBh(>|M)H5-%-F!nTiQIsE?=OiD9%mR7#TVT>O--ep|QUFbmo-IK{ zTw-o4io2jUX)t=Wi?&I8B=?BS0vCW5UrJ)Hcu*z^!k>U$-+!XEe19Uo@e+)!-=;hb zK?&HCq5yMOP(rGPvH6^U-ceo87q%R#tBSHgr=f?ArKowiN7!Hy3$oT<>Sr7er5uu_ zPCrjhH!&4@$wyDcrAzmyj@}8+QyA%qTJtXLT0$AY5C3Q$WE6cwnpr-x^?vIM#02d?T`0uU*!uku!$dm-gAm9??b9q@+oq&&4E+W zsB0{hq)zu6P?q>2eaYh*xd{|^ypp-JEN{Z15AfFMiGN2p^pGleDL$w2h2kH4lfnij=5-Kh|__$q02jJxwJ za!1HKcWVt;qu}NQHq~RiVvvcw=@D4eF6ya4Rdmg3c?1r{Zy8IDf0Hy8z#|^@Rb^rhX M07*qoM6N<$g1X5@!2kdN delta 1242 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 diff --git a/java/res/drawable-mdpi/sym_keyboard_num7_holo.png b/java/res/drawable-mdpi/sym_keyboard_num7_holo.png index 9396c4c8fbd209376a00ff2dff49ab7d2ae85f5d..950ce0eba64a91279663f518da186c5297d8d1a5 100644 GIT binary patch delta 1717 zcmV;m21@zt6Xp}JS^^+OMnyS9F)>3iL^VV)F-0&qFh)2yG%-auMl?AwF)}!ldIB6E zMn*+BL@_Z!F+?>)F)>9jI50*yI5aUuI7T!%F)=bYlePk2ATTyKFflPVG%z{&fi8&?!vt#(&J63BKO zkidx>(|SU0et;O4!A;yGZN{{j(GSo}THM z&zt*{$7Ut1gn&$H<_GkHcow8_^0>8{hN>N=ersrmNW|K(?1VA+@R%vcI@6k2 zZUI=k(|N31U!j!T;-BjiECb?RrfKd9h7tQD2w)+ASHP_EZhwQ71ll&(NP%DBni^;y z00LlPpwV2u0E({H6x%k}SA156J$R7Tw7Fh=QZ|aVMG?JEjCtCNxUO$0XRcf_Nyo`y z$)4un`=bW745($A`=W)r?t?Khq~<%DM(*0fPM~15~@85rMK?aa zIxA`s-RMUpn#DV}(ueGnJqZ-iSkS#CAV^&_9tqNA7XTzRvBLKfY@dn8^GcS*Z>Q(- zXO-#(YBzztR&O+l$wcBM`C4L~Ub!rwLW8_NK6%Pf(tnsGGTogCGBXQy$OaYEcqSA$ z0VdVa4F;;seIo+NMY{lY)|<_58CV2CUK<BULtimTZx8 zI#>f1V~SB^QJS|9=ABLlHMk^!=<68OMc7v+sDC6AD9QHbq*UWnttm_%tA<)ZQi&wX z7S)&vJKfT*Z{c2MDv@|jPHxh0k*5Z>EjvEx(+q=|rIfzVXo74ZIF$0+U@7&790GvO zj!8;U5n8+5&Z(Ms*hFZIDwSx8czp#zKFmTknA{jPYK_J-fI(ZmrUWoq2Dw}+f&c|5 z7Jp^hE)gb2fxxs>MLWmew~n3&F#*K|SS^@^OBe3I>SSkLGOC;&`CDpB-)?xAcL zKk=wp4>N{^Tu}zeWahL&)aC?(+6x5qD}UHUApFWNQzUSn&wd?405!4*XQ9cBsLcWE z_g=OhrU4s+CKaDls?4R5udX27-C^$-gVG=4CV`@}4{1m&s(~5kMgq6YlFQ_=G{}CJ z$H^e6sJ>htX`~*=&^~A63zQpO1eB&|(3tGXU@B@OUVZ>bIgVOuzCLKR zIMrS4-?w_8Did7wx*y`d_BFDp)XMfvJizpO`6-}NK>t_kF98Ms(RwnvG^40300000 LNkvXXu0mjfMiMAk delta 1723 zcmV;s21NPh6YLYPS^^+3MM6bIHZ(FYHaImgF-0&!IYl=`F*iduMmR+=F*i1odIB6E zF-1Z}MK&}sFg7?fF)>9jLODe@MKL!+H%2%`F)=qblePk2AVxVbHbgNtLP9t)Fg7?b zF*r9dMny43LP0P$LOD1yMUyrIet(~|U`_x41{_I5K~#9!>{`E58&?p%JKae_5(qmE zNZ`bcX+5Dge}EX5!A;yGZN{{j(I23hw79n$(m-iXNUuKt#zh+35XVSh8*@UxPSTyS z-mA-op~dS@9o|D_S@ZW59!@*SDV`S%$Pzj1#}AN|H;fgzkj!e1iM9R zT8#SudWTkYNIxA~XZ$$@RIyordHV6}f#-SYuud{x-YL?@JgpBSK1YJHLN$+8o0l7q zK{5W6XK?vihco6X{~g7@nq4!BZ~t>Nh6PkGv*|c_l2dC#0J1y+tJT9M`}|*=KPwCr zEX9ZRTZC7fudOl|^8sLL%761B5EuM87jUh?0LyhgN)5e969@a_xKvPosq1>lFpM|L ziwk>v(28;>?a%Vb24&G21%8FMlp=;vOwY~k&L)!*2!Lu)#;p)ZzQ2T$t{u*ct`(I@<&zPCUMXi?lWLF9RlCIs4L?X|5f5!E^$7kpEdZX#&`S4Np zm16%T+EW&^B;RhU^_T+l{BCA(7w3lWMzbjbOTpQp!&S*~imqK7wT6n?b2pnQ^xIH= z|6$E(wR$(81O1}zy?>4Y%&(WSdHL_R$E7?#Jw7=-SXx{_o!0Ei#Rk9xkPJl6h+V${ z5N2auDH-xv_v9XcN8oR{uKNT1yhp6A+85Ov0%w_KLEew;g+iLnFgmo!-MY#tpe_Me zyVH53TyIlKZu8HzF_r;wFUzv_1jC4Z5(Kaiz$;+Zc(uVw0)K4>Y^1=ia!n2N4*&tM za8PfoTmr=~s*3L>*H?VnqX_#Z*Q<}pLeY*=MDGz}p7bJa7~9I8iAyGVa5}JLPvhv_ zaUDwrG-_D~qJ_Ke{Sh*x>f4*-pfnhR?kIo;8S0l-Z#ExYYR@w>GTrNwXjGI94}(B5 zBat`$GDDz>8h_5UQ`F!={sr4z7b#xi#-yPEg8e81RJ)%NfwElVasG4|yv&ewR@5T8 z(T_?ri?`>~M|`N}I8a1mLHCw`Aa&7rBuLja07zW4H|4{zagrFi~(I`|*ib~i+6=&`p0JaVAAlFE%ZsA&h z>l+A00)G^#ZbB+iR38LLrDnibI4!Wb(LA24TG5xCf$8fNlVYBwkOn#RN3@NvPI76U=3J| zDMpb+XC7D1;_J21gr5dMdRblc-H8dI|l}NH|Q;o6t z&@Jue4EM59iNrHHNI9t=FFd3|i_nC4k8?$mLQI1Smj>Ql{+@ zVSjQI2uw>w?iGHYRn$?%=RifH_xU3ofL>sI_q*)wnA@qS=eWMTAJa?aptnJ_KIO!a zuNY-IO0iFjEub7Iqicm(eJfyMI#*uP1&!CMa$@pHwzI2xMn6CSU=mV^qW5zTWz+nL zN6lK8F)XA-7$l3C(+W|W6AWrE5YVq+7k`29E5A&Uz`o zY%NR!HU~{AKB;8SrIIfvknZkP?-+y9ALAy0V(=N#kXTd$Gti9$ZkZ*Q#barZ|1OV{ zK~hnDxjfWJJ&>V&_Q)3~pVbH`P0^q+*_FXm)JDAg0FZJd^&9P($aCofzUYwlr9_p- z>1a<-dtS$Spehqw<)$A(|Broh#8PTy`*S>iKK&}rcy0Pchbf@{Zu?7s0RXnW8SlbV RXhr}4002ovPDHLkV1gidCzSvI diff --git a/java/res/drawable-mdpi/sym_keyboard_num8_holo.png b/java/res/drawable-mdpi/sym_keyboard_num8_holo.png index 12e3eef45e8c360774eca4fbfe2576cd49857b77..8e50ea6539d034b49ff45f069992eed954f38e32 100644 GIT binary patch delta 128 zcmdlaxJhtB6qACRo2#XZp^<^1i>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd4IB11Qv zincK&C>WSo7#JFwn;4iI0hxw|7A{UsF3u)S1}3h?&MxLIlg*gxSpF|ase8oD_-8kjp-S{S=dHe;@15u8x6aPto4Un~Ih C;~?1p diff --git a/java/res/drawable-mdpi/sym_keyboard_num9_holo.png b/java/res/drawable-mdpi/sym_keyboard_num9_holo.png index 6911c2b4f9da0b70aa0ffed3be43064f68a6e9b7..32b2b9cfc83eb290b2700dda20a053e8661a58e5 100644 GIT binary patch delta 128 zcmeAc?H1h-#iZco=4$C;Xk=pOV(MaO=xShL;AUZAV(4n&W@2e*Xk;|iL0@*i@D2WGv+!LYpcQ!n|Cl@W&;4l C{vb{O delta 128 zcmeAc?H1h-#iU^9>SAi{1yt3Xzpz8X5ngRXl^#Sib)2h$P}ld zZA=LYZk7gSE{0}KP8LQ$b%ur(=7w&rhHg%d2Ifwd7RIiV&6w+0md$!Md-D$F%WMGN CrXh_0 diff --git a/java/res/drawable-mdpi/sym_keyboard_numbpound_holo.png b/java/res/drawable-mdpi/sym_keyboard_numbpound_holo.png index e3a8b49005b5a18becd864f9525961fc9f626846..39d743535eaea931aed31c33ab4b86cd25caa97b 100644 GIT binary patch delta 725 zcmeC->EqcD#iZco=4N4GYUF6>V(MaO=xShL0OXq(x>~rISQ;7{Sxl~Ck^w0)Hgo$%l`%MqCrZ~0tSe_$QiSf8`^ z*)Q&fK-tYx&*ih8($<@&VS{}WS|R+c%#hWMLzZisGM za5Jmx>ZUdJ5n@^sLKDitM~8m zY{BHMJY8`wGT1M!PDy{dRat$D<0kp)S*eXW{cgAVT(3`^GDpR8?m3pUv&(0unDT22 zn|W~Dsz1H(y@IyY7RC=(iVQwy2tB`Fzh|FYLpmcHL$IERebI!58w^0;>FVdQ&MBb@ E0Oz?dV*mgE delta 723 zcmeC<>EYQB#iU^9>SknOZ0KxYW?^b*=xX3(>1yt3Xzpz8X5ngRXl^#Sib)2h$O)&S zZA=LYZk7gSE{0}KP8LQ$b%ur(=7w&rhHg%d2Ifwd7RIiV&6w-zFM1r=&cMKA}u&Sp2$;C|52e|-N#{bM&au9=$oj;TSu&+To?XWIhS1nXO!T$6PUR!+Jy zHMunNqPR87{b~Ht$5bCK6ksTX-}w{Xr!d~U^>tNUJ+n_0 z_vWbw^WIgj{la)Uh~e{&?r8WH@6hXfyd!qoxpj~KxSf2lILtS0-P3|IAzIG^lp^zQ+&np+z7}tG_-JWa&mDtaWXJ*HFkC}cbRO)T*p#kdG+n)9n9w#0mA|y A(*OVf delta 128 zcmZqUZsXn%#iU^9>SAi{1yt3Xzpz8X5ngRXl^#Sib)2h$P%Zb zZA=LYZa`@lLo+8Q3nQR9LqiL5LpN7LHz!8}b0n(AB`gz|F$K#L(5k&BW5s(8ywP6_X51kt0q; z+n5p*49qMH3=Pdq49tyyOhZEp7bhndXA>s_6IWwr7ju`%X3TZ<s=Y36s?glprpMGoCbB8w%CYPcD81@^$1PggEE zQoPlHx#wUxM}5+yD(N*ZUcZTGy|ZbXs;tE8>Pr*nKUjXoJ22>0z)aJE)RR+Vm9CmB zQJVT@is`W@#jkHo`0~hZ2OGOva%f1|J@pIW%eGAy@maalY0{;giXo*(EBBXgIuLP- z*>=Or&#{G}msct;^*XZ0OLP5MLAUw?4O9aw)pY2(-KH23#yLAxIa<(#iPw^+(XWy<%+Y}ZKD`UcJlw)6-0 zK7QGB_3xP@XG|k+d%b6Rb7ta=)!qIVRxW?}v@S=o(cB>9p!8fewuNshQ(m6@`iE)P zta~agXXi}3S9#{ku64`8pK#vt$&Xl2w0+&u@RIBUe(%qDtuH&dqh-I0Y3ac`7y2gc zUiK!S_NQLj`lzr(AB`n($(D6(A?SF&BE2t(A;ct6_X51kteoGgrh>I@An%njXK4c(j^4a}V^EsR|!n=#kb&+gB;#K6Ef-_yl0 zq~g|_83(-%JBYYWo)HnP%kj$ZNN-(ZUBiwdeb$$!mMUp<{R-A&u|M6~#M-**qg_R# zfsg4D-?`%N4ydM@ojf^n=J!h$=RdFLRaTQY$l+$tB-oR{qKsh9KKnvR(#Y-JZH8$I z+8)bI%(FQ1>K)&!>Kk0MtelvCV*2lZ%TZCGE98onf1cas!f_>uQ!D7izcoEOr+u5~ zox*E*Y3Fmc1J^`fae9`XtKPq5+0u1-+#5?8WzJ;34yk=t!sT6kVrmpuUI=S+koEt> zm4XJr(^fU@oOW)avo@<$?uAQk9tp0#2AP>bvZuG)n03oL^i@Rtvg?dRS$jG4wudC| zwNv6hQ9gUu?|t*yjLIfPr)++9X~uH_&Gq$PyDp{Zy*8S9UwxO&WQT)$?*3h(W^qk< zf6jZho2z!ubp9=;eS0#G_6=jkXSb`ZPnd4H%eLWAod0R3#P>IXpPX&{`KEJg_3?R; z2J`ne&YQQgbi@5Oa~0>G=uS1TyB@blw)>B>=_bBsw|-w}lHAIw^CE5{O1LS{xcX7~ Z0E5Pc6F!=6Htk{n0#8>zmvv4FO#pSh@E-sG diff --git a/java/res/drawable-mdpi/sym_keyboard_settings_holo.png b/java/res/drawable-mdpi/sym_keyboard_settings_holo.png index ad7618fa00abb4adb0639527651b5e5cf6c74b9e..e23affd68d16e160f8554022c0605e88595f0b82 100644 GIT binary patch literal 1850 zcmbVNX;2eq7^YY{fM8Ln0c&xIRZvK>n*?%@ph-4Jlthjwp`sF!4GEBJNEQN&&Y+DH z@nCe6a#^8+ir8AJ6sd|J7LW>*3W!iet74F<3`SdpqTL|aV;p~U=iB|R_j%rXc1O5m zrK|INXFEGPS5YV&iO+%f%W-@U|B?noXYt7s6UwkCRE3%32E>l1MB@=aq?IQik%(NG zk zmc%8#GD;>62Lz}A0RqS%NdX3eKp;ehXmkdH;SW$j2&8~i3PdGA3^t9*20>uzA>!H$ zN)Hr&~JRVKOxJ2C2S1xGvV)1KYopCBqc*rQ}ay8g9cBEJQ+q6saiybiC``fzac9%N;Z|j z0C_YPj}B33flLT@pDy6>SS*kk0=}XC&n= zE_H8VO5GpNTOk|FOYbL@#i$*};L!T;>!PY^U%HpzRKv-eC-awy&}*C@ zp}ZRFGbfBtO?$Ye8Jx;$E9w|{T?oYm`hwN^&U6q<_V z?8mfo5nYct=0{fJj-AP??j9VyvQ)j;`pC=rsLFAJX2gl!7GJCKfqyKVKQy%rnzP3Y2ok8EW`>vJM z5Ab^rp7W#HM+Q&G%km{3`xcmo2gPZltv8fSr*8aFaw*6(Q3Q0ZPPv$o@O5sKQ%AJ( zNyQ0*|K*ZlOOf&c0n68WZJi?-aHW>FwJ*=g-p;T}asoDwyLBs?f6p;SnU_6o?VsqG zZ$ENtl$MzqX}%H0-KbVsyyvFPDDF$?P&DjWv4!)(al@e6s>}bCP}qycjBdPL-sK&u z>hrp#=0C}n)#nC}SB7Tw-QHV9ST}x7@2MgWHjO>?*>y0PG&pcRg37{n4D1aW@J^UW z%=8Ly_7AB|TX!Zn|Id{jV+SlAl|B6#KR9)5JW_G@Sg5S7F1{#(K-igF9`^E=FXNn# g{CmvXGch;LF6Q~Bs0FE(O55K|B$U7>_;K6*0=LH9)Bpeg literal 3448 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 diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_holo.png b/java/res/drawable-mdpi/sym_keyboard_shift_holo.png index 91d6e32f9d0e3158acccdf3de98d70c66dc9c79c..068701d3730375dfb3feb7821724a75a8c9fd4d6 100644 GIT binary patch delta 128 zcmbQtJDGPw6qACRn}wm1shP2%i>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42A|srN zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Ot zwlO6rxLF#Qxfq%`Iaz=VGc>d?H*|9~baQevFn6-FFm|16#$3me_1A5|<{iwpnE=cj BAngDE diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png index 2bd053656a5a164e22ad8b4af397adcb560ae5ac..07cbdb3fed209cf6d4a7937e01931b9deb60a8bb 100644 GIT binary patch delta 128 zcmX@XeS&*K6qACRo4K)}k(-5~i>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B6FOI zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oase8oD_-8kjp-S{S=dHe;@1Nv&^Qx_Jk)022TL C?jT(N diff --git a/java/res/drawable-mdpi/sym_keyboard_space_holo.png b/java/res/drawable-mdpi/sym_keyboard_space_holo.png index 25e655d966fe89c09f8fe98009a6b3c2acc79f9c..d39fdcae54f2ab0187ca676508964ddad7876718 100644 GIT binary patch delta 347 zcmZ3@xsh{26qACRo4K)}k(-I3i>ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B4eD2 zwlO6r7?@cY7#fLYnTCcIE>2D^&L&Oul~ce!sRbRfBiblwB^#;E3bC8U-6v3Q(J6t zPhG-V<}-7{j&HlT(`&t9_0g&;k@ESMCZD@?=jHJ?OM30>`PAx+-UJ_7BYVS!>yAxZ z=A!kgw{17bA6LtJeS3M?TqmJ_r}cJfKl{?Fy7-Q{_OW~(34??K4UEieIYAQln0Odi XbP0l+XkKNRNZ= delta 345 zcmdnUxteoB6qACXi-n<+o29vdnT4sLp{s$DrK`ECp}DiUn}w^Pp}E=QDkd42A~T$d zwlO6rxLF#Qxfq%`IawG1)fpOEm>ase8oD_-8kjp-S{S=dHe;@HIK!mV%D}*I+tbA{ zq~g|_YbUu58Hlt#+~OAyvg_l*nBQ~O)#?TchM3HA;9{Je71I*%kGq|(OkRWdw7?r(7#j^U~MqOx>Bi`TqBSbEk|&ud%Jz zkatScIA^U+)i>)q8{fCQJaE+N%0d10r_OzkdiUzx&Ty&y`+7_Mghzb&8fvz*K6$HT z=2DxDY8AS?{yY);D%Z$Lm2$0oQ83@gaeBwE?51b&f&F)>9jI50*yI5aUuI7T!%F)=bYlePk2ATTyKFflPVG%z7h=oEru}EbjDUyJl1d9}s1W!HG z#5?cu4SYj}Q$KPyA?E-`F;t`DY9;aseV&@zXOIrH?8*z?C@I>97iF} zkKjD!Q;Pk(tV`2^OlX`@{C zBbUQ7uxrZ=Z67pK9ON801WWw=BSyPUPGp9nzw`Sm&B{?md77guI+xw+(&3f9aWV(3H{T|bFzTGzh={f=c9#}W8}vAM%=Ok+rv3q=po*T` z3^3N#S`_=(Vu+kkx#ml{=aFl{LuU-DOlT`D-;Crp?`rV4A740d_A+oh2-H*A#ZM#q z&^h9sGy88~^|S07*qoM6N<$f{ZVDP5=M^ delta 854 zcmeC1yt3Xzpz8X5ngRXl^#Sib)2h$Q7re zZA=LYZk7gSE{0}KP8LQ$b%ur(=7w&rhHg%d2Ifwd7RIiV&6w-zpE`P$F)%Rg^K@|x zskrqf$~IfXQR3cSf8Re3d{o35TNZRo<#Oj}Te5M3&>vDnewFbqieD;Wk+hsOPXR)+rEPX$D3fJD>2Y77LZwY>oi%80t_OoPH#fzF< zoHlEny{bPN8l1I!vTLE%s}K9Gy4+s0QR1BN=V%FQ;g`z4!8Wfk-?HfZ-g=Ge$K0yt z8LiGr-h3`XDb&CvPv&yfC!PgMF68ZglGCzirOC4fYr|t2o8HIjgqOz*V@mPNA?wpsRt&R+J!gXwwb0=&n)l%aHgK^Kp z_wA8y*>+4wopkTP_s9g13b*{JGdG_T2xdQ3_rT}_*AKoukN37+f3U&waPjS8y<_Wx zZhF^4|1tjd-S`$oqcgx((Di+xz8Fc#v%Ng`&RFno!+r8#cpoJe?9-zJg(2L z?A_KK_g7lI_)^tpU*X8bXB&IFGHxe7e<8Tl@ji2&!Tn=WTkfZbhFty3&E2y##yd&A zTGrWk)rFcPAMTW{t;jgK!NKwNnzfRTwm-}IxI@IUpf7$?0gu})&C-pzEBMz6ez)-s zzv~%t)J|+d4);8}XPk-!SChZ4%3I}kg55=TrTv@J|AROU6=8`7ly*Rz2=_PZ8JHRT XFRgx^ZsDp{s#~ft!VeiJ_~7n~9~Np^?SpDkd42B14>t zwlO6r7?@cY7#fase8oD_-8kjp-S{S=dHe;@1i7A?OZt@Oh8vq0s BAkhE- From 251cb11f0d1c151672068bed2236a3df32ef774f Mon Sep 17 00:00:00 2001 From: satok Date: Mon, 24 Jan 2011 11:38:18 +0900 Subject: [PATCH 14/77] Remove unused assets Change-Id: Iae825b3d1c62d622db8389718359eaaa2b289fb4 --- java/res/drawable/ic_subtype_keyboard.png | Bin 2365 -> 0 bytes java/res/drawable/ic_subtype_mic.png | Bin 2557 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 java/res/drawable/ic_subtype_keyboard.png delete mode 100644 java/res/drawable/ic_subtype_mic.png diff --git a/java/res/drawable/ic_subtype_keyboard.png b/java/res/drawable/ic_subtype_keyboard.png deleted file mode 100644 index 001a38c5cfc7301bfd1df7e899397d88259bedf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2365 zcmV-D3BvY?P)3fFw!uYG3(48y3{w!LE8&V^hi#~dfa9NS?a0HvD%Z(s#1 zAtjS|UnVh&Az>KEUeIIRUYGTH-Hk8|SN*QP{;d)K$Q1xyaq|V1&*fRh$#5ZTW*UMK zc+N@pToWMp^j{|Q57r{ zP{l&;mP%vpSaF=W`673qc>*s4`Mu3e!zSR+JOY@&bD>E9DCe34=gL9=OGMyi+EU7L z!ZelR!8%KDB@ZM%KP&<+CVsb2D3&$&0^BCcgq2Cblg4cgS^>6z2qd^*oZ^8rPWQ^S zh=h>}XX(9;7Cf7#p?ofkg0mn&8S2(y5cpj-n|pCgxlKudw*cNk&l0jS;>Ygd^T$9ibiUeJW5(PUl)mgaIhgjcxVlvqS_$9c`a(R4$zp!x9DwWED z{9J2PaNfVBK$+5}!6l6v`68%oqZiL`KL?k-EllAe+s4gp3p*&AP2t z^CDjU?Gsb^9tf;tG8u-9!wZEmK>;~*g+6%FbpPH0R#*UnEp9|CB~rhuzRL#I5!^`U zr1{~hBAdzbTsBAPdYR(ypcbei&=#|_N!bqkT)V;4)KqSEuHxcvLTj9-x}dyir25t} zw16C>Q?i2E-IO)-bF0}7?tFc>Rd4L{hy-OckWiZ=HoD*7rFRZO;DRMAfJe50zo(jK zFE9RZdiL0K38jK@ST#);Mltkp_tW*p11L#iPoZ@=Hb~j&w3iVJ?;OO1mMzO-C>K!I z2px3zN+z4J2>f3^xK{gYee*WG_@A5G+gC3C>&s@N>o@8>|1a;~+`Rek<_>+f{`UuW zKYahzCf(ELS1#Aod-Qze@;|<$IV?+KdkM8$R5|hdZs5yQbq(8gP#ERS5@@M(RLx&!12XaGj-y1ojBp8)$tLi1gv&eqHFa z%Cq<~?Ueo6hL0?G?zN>sa2;PLmr451KYxAx2)PxH83f0zWs+$1FZrSITD~K%LZp z2nip~HZfUrAO22h%*picN$Vv2=gFx|zJFgVA;~|w;x6g0Ph|zhjr|f(9a4-I5cRpF zW<)ZXZajMYarJ|ZWAoGQx$`eqzqr12@7gD~w-PCkflSmgrpi41jKit8;4!YTr0Xw! zb^0W^+@Jn%_0yTTQl91*kia6U@sWvMKZ@vst%F#ghF!24qCVGJNLcDqYRt|}xaA2~ zX)^EH*6dutrGN(TVHza@snt-T;V%hYrDbcknVB2I9Qn+!=~1;37+^)!euk=#?kjY^ zJMkJOxEKThOJXXvFnGduwi}(&SOMwql|dSvKT$4|>~{w~cm5@nMkyn;TAiK(ue2XC zH2n-k9eDt0zjhD;SE2ojy`W3=Iim`aG`q2W{oYrbx9iv`jbTAX8aLHWEtxU0sqshr zo2x36EE?;22=k)3j~n$yPq}L9I#^dy+1ZYWgtmkRKsCH%xI!2`vk*u_y5g(Bh=fYGe)l2p)DP%634Fc29Rj>WgAX@~ zE;$h+(tYj2zX->yFGc2JIuK*0JAx4a@4$p#zkWmK9*FfF!0s z4P*qZ2T@o0zQ@v|mKvB|I*gWb1C4eS$WBmCAcV=&9Xjm-Wm+Op%8}_oR+_cA?!2^h z2B4KBR5ZX<)hSJrMe8y=F!TTj#ezD^~eiI3qvXK`C55~{%Kmzu+pbC3!F zo|C2(=w!FXHF$^u56#CtxC))tY4D9^olfoEMEo7vsRWIH8tf<~p$aWiSEzu@sEdqIb_+R%Kf;dQ(In{;;iJPx*q#Ghda7n{tBv4oD-MFjY15UBKjAJB!Y{(S)Z>;_!$2FiqudZT{zd;b&A_*l6LagTls jI~qshX#9VUZv+?sG%xEpoCCjX00000NkvXXu0mjf4iky} diff --git a/java/res/drawable/ic_subtype_mic.png b/java/res/drawable/ic_subtype_mic.png deleted file mode 100644 index 03c0b6982259a07ca11f5ba161a608a52cc6757c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2557 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 T`U7?+00000NkvXXu0mjfKXBz3 From 156493cf66f29119de7faf8f8b59f3d37e248f07 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Mon, 24 Jan 2011 14:14:54 +0900 Subject: [PATCH 15/77] Add description for auto correction threshold strings Bug: 3088802 Bug: 3091970 Change-Id: I6f0cdb9ec74824497ff5f9e3a2ca5d7d29de0dd7 --- java/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index a664aaf78..f3805fdcf 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -72,9 +72,9 @@ Spacebar and punctuation automatically insert highlighted word Off - + Modest - + Aggressive From 910b73127fa207dd26ec8124000262523b0aac0c Mon Sep 17 00:00:00 2001 From: satok Date: Sun, 23 Jan 2011 05:46:30 +0900 Subject: [PATCH 16/77] Add log for voice IME Change-Id: I7d0a458b3cf41fc9dc679f654347e8870c75185d --- .../com/android/inputmethod/latin/LatinIME.java | 5 ++++- .../android/inputmethod/latin/SubtypeSwitcher.java | 14 +++++++++++++- .../com/android/inputmethod/voice/VoiceInput.java | 7 ++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 847038fee..bbe3f78f2 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -84,8 +84,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "LatinIME"; private static final boolean PERF_DEBUG = false; - private static final boolean DEBUG = LatinImeLogger.sDBG; private static final boolean TRACE = false; + private static boolean DEBUG = LatinImeLogger.sDBG; private static final int DELAY_UPDATE_SUGGESTIONS = 180; private static final int DELAY_UPDATE_OLD_SUGGESTIONS = 300; @@ -514,6 +514,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final KeyboardSwitcher switcher = mKeyboardSwitcher; LatinKeyboardView inputView = switcher.getInputView(); + if(DEBUG) { + Log.d(TAG, "onStartInputView: " + inputView); + } // In landscape mode, this method gets called without the input view being created. if (inputView == null) { return; diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java index da46d26bf..ffce66e9b 100644 --- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java +++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java @@ -41,7 +41,7 @@ import java.util.Locale; import java.util.Map; public class SubtypeSwitcher { - private static final boolean DBG = LatinImeLogger.sDBG; + private static boolean DBG = LatinImeLogger.sDBG; private static final String TAG = "SubtypeSwitcher"; private static final char LOCALE_SEPARATER = '_'; @@ -163,6 +163,12 @@ public class SubtypeSwitcher { } private void updateShortcutIME() { + if (DBG) { + Log.d(TAG, "Update shortcut IME from : " + + (mShortcutInfo == null ? "" : mShortcutInfo.getId()) + ", " + + (mShortcutSubtype == null ? "" : (mShortcutSubtype.getLocale() + + ", " + mShortcutSubtype.getMode()))); + } // TODO: Update an icon for shortcut IME Map> shortcuts = mImm.getShortcutInputMethodsAndSubtypes(); @@ -176,6 +182,12 @@ public class SubtypeSwitcher { mShortcutSubtype = subtypes.size() > 0 ? subtypes.get(0) : null; break; } + if (DBG) { + Log.d(TAG, "Update shortcut IME to : " + + (mShortcutInfo == null ? "" : mShortcutInfo.getId()) + ", " + + (mShortcutSubtype == null ? "" : (mShortcutSubtype.getLocale() + + ", " + mShortcutSubtype.getMode()))); + } } // Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function. diff --git a/java/src/com/android/inputmethod/voice/VoiceInput.java b/java/src/com/android/inputmethod/voice/VoiceInput.java index ffa349fde..20211d46c 100644 --- a/java/src/com/android/inputmethod/voice/VoiceInput.java +++ b/java/src/com/android/inputmethod/voice/VoiceInput.java @@ -17,6 +17,7 @@ package com.android.inputmethod.voice; import com.android.inputmethod.latin.EditingUtils; +import com.android.inputmethod.latin.LatinImeLogger; import com.android.inputmethod.latin.R; import android.content.ContentResolver; @@ -58,6 +59,7 @@ public class VoiceInput implements OnClickListener { private static final String EXTRA_CALLING_PACKAGE = "calling_package"; private static final String EXTRA_ALTERNATES = "android.speech.extra.ALTERNATES"; private static final int MAX_ALT_LIST_LENGTH = 6; + private static boolean DBG = LatinImeLogger.sDBG; private static final String DEFAULT_RECOMMENDED_PACKAGES = "com.android.mms " + @@ -313,8 +315,11 @@ public class VoiceInput implements OnClickListener { * @param swipe whether this voice input was started by swipe, for logging purposes */ public void startListening(FieldContext context, boolean swipe) { + if (DBG) { + Log.d(TAG, "startListening: " + context); + } mState = DEFAULT; - + Locale locale = Locale.getDefault(); String localeString = locale.getLanguage() + "-" + locale.getCountry(); From de59a84029d3d3ec114b5b0f2eca0b3752982fef Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Fri, 21 Jan 2011 18:46:19 +0900 Subject: [PATCH 17/77] Implement callback to handle touch event outside SoftInputWindow Bug: 3238092 Change-Id: Ie8d4469bc2c6880bdf2a0c4e4eec68bb136b837c --- java/res/values-xlarge/dimens.xml | 1 + java/res/values/dimens.xml | 1 + .../latin/ClipTouchEventWindowCallback.java | 75 ++++++++ .../android/inputmethod/latin/LatinIME.java | 28 ++- .../latin/WindowCallbackAdapter.java | 168 ++++++++++++++++++ 5 files changed, 264 insertions(+), 9 deletions(-) create mode 100644 java/src/com/android/inputmethod/latin/ClipTouchEventWindowCallback.java create mode 100644 java/src/com/android/inputmethod/latin/WindowCallbackAdapter.java diff --git a/java/res/values-xlarge/dimens.xml b/java/res/values-xlarge/dimens.xml index 69283202e..11ad6b184 100644 --- a/java/res/values-xlarge/dimens.xml +++ b/java/res/values-xlarge/dimens.xml @@ -42,6 +42,7 @@ 24dip 6dip + 10.0mm 46dip 15.0mm diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index 7f00cdba3..90bf1bfad 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -46,6 +46,7 @@ -0.05in + 0.0mm 42dip 63dip diff --git a/java/src/com/android/inputmethod/latin/ClipTouchEventWindowCallback.java b/java/src/com/android/inputmethod/latin/ClipTouchEventWindowCallback.java new file mode 100644 index 000000000..d12c70075 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/ClipTouchEventWindowCallback.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2011 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. + */ + +package com.android.inputmethod.latin; + +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; + +public class ClipTouchEventWindowCallback extends WindowCallbackAdapter { + private final View mDecorView; + private final int mKeyboardBottomRowVerticalCorrection; + + public ClipTouchEventWindowCallback(Window window, int keyboardBottomRowVerticalCorrection) { + super(window.getCallback()); + mDecorView = window.getDecorView(); + mKeyboardBottomRowVerticalCorrection = keyboardBottomRowVerticalCorrection; + } + + @Override + public boolean dispatchTouchEvent(MotionEvent me) { + final int height = mDecorView.getHeight(); + final MotionEvent event = clipMotionEvent(me, height, + height + mKeyboardBottomRowVerticalCorrection); + return super.dispatchTouchEvent(event); + } + + private static MotionEvent clipMotionEvent(MotionEvent me, int minHeight, int maxHeight) { + final int pointerCount = me.getPointerCount(); + boolean shouldClip = false; + for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) { + final float y = me.getY(pointerIndex); + if (y >= minHeight && y < maxHeight) { + shouldClip = true; + break; + } + } + if (!shouldClip) + return me; + + if (pointerCount == 1) { + me.setLocation(me.getX(), minHeight - 1); + return me; + } + + final int[] pointerIds = new int[pointerCount]; + final MotionEvent.PointerCoords[] pointerCoords = + new MotionEvent.PointerCoords[pointerCount]; + for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) { + pointerIds[pointerIndex] = me.getPointerId(pointerIndex); + final MotionEvent.PointerCoords coords = new MotionEvent.PointerCoords(); + me.getPointerCoords(pointerIndex, coords); + pointerCoords[pointerIndex] = coords; + if (coords.y >= minHeight && coords.y < maxHeight) + coords.y = minHeight - 1; + } + return MotionEvent.obtain( + me.getDownTime(), me.getEventTime(), me.getAction(), pointerCount, pointerIds, + pointerCoords, me.getMetaState(), me.getXPrecision(), me.getYPrecision(), + me.getDeviceId(), me.getEdgeFlags(), me.getSource(), me.getFlags()); + } +} diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 847038fee..f0c9a5cd4 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -161,6 +161,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private int mConfigDelayBeforeFadeoutLanguageOnSpacebar; private int mConfigDurationOfFadeoutLanguageOnSpacebar; private float mConfigFinalFadeoutFactorOfLanguageOnSpacebar; + // For example, to deal with status bar on tablet. + private int mKeyboardBottomRowVerticalCorrection; private int mCorrectionMode; private int mCommittedLength; @@ -377,6 +379,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen R.integer.config_duration_of_fadeout_language_on_spacebar); mConfigFinalFadeoutFactorOfLanguageOnSpacebar = res.getInteger( R.integer.config_final_fadeout_percentage_of_language_on_spacebar) / 100.0f; + mKeyboardBottomRowVerticalCorrection = (int)res.getDimension( + R.dimen.keyboard_bottom_row_vertical_correction); Utils.GCUtils.getInstance().reset(); boolean tryGC = true; @@ -566,6 +570,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mVoiceConnector.onStartInputView(inputView.getWindowToken()); + if (mKeyboardBottomRowVerticalCorrection > 0) { + final Window window = getWindow().getWindow(); + if (!(window.getCallback() instanceof ClipTouchEventWindowCallback)) { + window.setCallback(new ClipTouchEventWindowCallback( + window, mKeyboardBottomRowVerticalCorrection)); + } + } + if (TRACE) Debug.startMethodTracing("/data/trace/latinime"); } @@ -880,15 +892,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (mCandidateViewContainer != null) { ViewParent candidateParent = mCandidateViewContainer.getParent(); if (candidateParent instanceof FrameLayout) { - FrameLayout fl = (FrameLayout) candidateParent; - if (fl != null) { - // Check frame layout's visibility - if (fl.getVisibility() == View.INVISIBLE) { - y = fl.getHeight(); - height += y; - } else if (fl.getVisibility() == View.VISIBLE) { - height += fl.getHeight(); - } + final FrameLayout fl = (FrameLayout) candidateParent; + // Check frame layout's visibility + if (fl.getVisibility() == View.INVISIBLE) { + y = fl.getHeight(); + height += y; + } else if (fl.getVisibility() == View.VISIBLE) { + height += fl.getHeight(); } } } diff --git a/java/src/com/android/inputmethod/latin/WindowCallbackAdapter.java b/java/src/com/android/inputmethod/latin/WindowCallbackAdapter.java new file mode 100644 index 000000000..be9bb2bd8 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/WindowCallbackAdapter.java @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2011 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. + */ + +package com.android.inputmethod.latin; + +import android.view.ActionMode; +import android.view.ActionMode.Callback; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.WindowManager.LayoutParams; +import android.view.accessibility.AccessibilityEvent; + +public class WindowCallbackAdapter implements Window.Callback { + private final Window.Callback mPreviousCallback; + + public WindowCallbackAdapter(Window.Callback previousCallback) { + mPreviousCallback = previousCallback; + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (mPreviousCallback != null) + return mPreviousCallback.dispatchKeyEvent(event); + return false; + } + + @Override + public boolean dispatchKeyShortcutEvent(KeyEvent event) { + if (mPreviousCallback != null) + return mPreviousCallback.dispatchKeyShortcutEvent(event); + return false; + } + + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + if (mPreviousCallback != null) + return mPreviousCallback.dispatchPopulateAccessibilityEvent(event); + return false; + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + if (mPreviousCallback != null) + return mPreviousCallback.dispatchTouchEvent(event); + return false; + } + + @Override + public boolean dispatchTrackballEvent(MotionEvent event) { + if (mPreviousCallback != null) + return mPreviousCallback.dispatchTrackballEvent(event); + return false; + } + + @Override + public void onActionModeFinished(ActionMode mode) { + if (mPreviousCallback != null) + mPreviousCallback.onActionModeFinished(mode); + } + + @Override + public void onActionModeStarted(ActionMode mode) { + if (mPreviousCallback != null) + mPreviousCallback.onActionModeStarted(mode); + } + + @Override + public void onAttachedToWindow() { + if (mPreviousCallback != null) + mPreviousCallback.onAttachedToWindow(); + } + + @Override + public void onContentChanged() { + if (mPreviousCallback != null) + mPreviousCallback.onContentChanged(); + } + + @Override + public boolean onCreatePanelMenu(int featureId, Menu menu) { + if (mPreviousCallback != null) + return mPreviousCallback.onCreatePanelMenu(featureId, menu); + return false; + } + + @Override + public View onCreatePanelView(int featureId) { + if (mPreviousCallback != null) + return mPreviousCallback.onCreatePanelView(featureId); + return null; + } + + @Override + public void onDetachedFromWindow() { + if (mPreviousCallback != null) + mPreviousCallback.onDetachedFromWindow(); + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (mPreviousCallback != null) + return mPreviousCallback.onMenuItemSelected(featureId, item); + return false; + } + + @Override + public boolean onMenuOpened(int featureId, Menu menu) { + if (mPreviousCallback != null) + return mPreviousCallback.onMenuOpened(featureId, menu); + return false; + } + + @Override + public void onPanelClosed(int featureId, Menu menu) { + if (mPreviousCallback != null) + mPreviousCallback.onPanelClosed(featureId, menu); + } + + @Override + public boolean onPreparePanel(int featureId, View view, Menu menu) { + if (mPreviousCallback != null) + return mPreviousCallback.onPreparePanel(featureId, view, menu); + return false; + } + + @Override + public boolean onSearchRequested() { + if (mPreviousCallback != null) + return mPreviousCallback.onSearchRequested(); + return false; + } + + @Override + public void onWindowAttributesChanged(LayoutParams attrs) { + if (mPreviousCallback != null) + mPreviousCallback.onWindowAttributesChanged(attrs); + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + if (mPreviousCallback != null) + mPreviousCallback.onWindowFocusChanged(hasFocus); + } + + @Override + public ActionMode onWindowStartingActionMode(Callback callback) { + if (mPreviousCallback != null) + return mPreviousCallback.onWindowStartingActionMode(callback); + return null; + } +} From 8cacb024cf400241f9885cccee782c286cbf1330 Mon Sep 17 00:00:00 2001 From: satok Date: Mon, 24 Jan 2011 17:38:49 +0900 Subject: [PATCH 18/77] Set minimum height for RecognitionView in the case that there is no keyboard view loaded. Bug: 3352322 Change-Id: I9a7b2a745b47bdc62a96a5cd2c0d8ad717e1b406 --- java/res/layout/recognition_status.xml | 2 +- .../android/inputmethod/latin/SubtypeSwitcher.java | 2 +- .../inputmethod/voice/VoiceIMEConnector.java | 13 +++++++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/java/res/layout/recognition_status.xml b/java/res/layout/recognition_status.xml index b2c9f4a51..b00432f0c 100644 --- a/java/res/layout/recognition_status.xml +++ b/java/res/layout/recognition_status.xml @@ -26,7 +26,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/popup_layout" android:orientation="vertical" - android:layout_height="0dip" + android:layout_height="371dip" android:layout_width="500dip" android:layout_centerInParent="true" android:background="@drawable/vs_dialog_red"> diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java index ffce66e9b..d3aa70c28 100644 --- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java +++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java @@ -435,7 +435,7 @@ public class SubtypeSwitcher { mVoiceInput = vi; if (isVoiceMode()) { if (DBG) { - Log.d(TAG, "Set and call voice input."); + Log.d(TAG, "Set and call voice input.: " + getInputLocaleStr()); } triggerVoiceIME(); return true; diff --git a/java/src/com/android/inputmethod/voice/VoiceIMEConnector.java b/java/src/com/android/inputmethod/voice/VoiceIMEConnector.java index 6c9b7d527..a3a3ea88e 100644 --- a/java/src/com/android/inputmethod/voice/VoiceIMEConnector.java +++ b/java/src/com/android/inputmethod/voice/VoiceIMEConnector.java @@ -78,6 +78,7 @@ public class VoiceIMEConnector implements VoiceInput.UiListener { // given text field. For instance this is specified by the search dialog when the // dialog is already showing a voice search button. private static final String IME_OPTION_NO_MICROPHONE = "nm"; + private static final int RECOGNITIONVIEW_HEIGHT_THRESHOLD_RATIO = 6; @SuppressWarnings("unused") private static final String TAG = "VoiceIMEConnector"; @@ -543,10 +544,14 @@ public class VoiceIMEConnector implements VoiceInput.UiListener { // As we add mm, we don't know how the rounding is going to work // thus we may end up with few pixels extra (or less). if (keyboardView != null) { - int h = keyboardView.getHeight(); - if (h > 0) { - View popupLayout = v.findViewById(R.id.popup_layout); - popupLayout.getLayoutParams().height = h; + View popupLayout = v.findViewById(R.id.popup_layout); + final int displayHeight = + mService.getResources().getDisplayMetrics().heightPixels; + final int currentHeight = popupLayout.getLayoutParams().height; + final int keyboardHeight = keyboardView.getHeight(); + if (keyboardHeight > currentHeight || keyboardHeight + > (displayHeight / RECOGNITIONVIEW_HEIGHT_THRESHOLD_RATIO)) { + popupLayout.getLayoutParams().height = keyboardHeight; } } mService.setInputView(v); From 2c5ec3a50dc9c20cb89fd6219f84600e65dddc6e Mon Sep 17 00:00:00 2001 From: Luca Zanolin Date: Mon, 24 Jan 2011 10:36:15 +0000 Subject: [PATCH 19/77] Always display the VoiceIME language in the Speak Now pop-up Change-Id: I1b01458aff98447b7b3d5459b765968bed5515cb --- java/res/layout/recognition_status.xml | 16 +++++++++++ .../inputmethod/voice/RecognitionView.java | 27 ++++++++++++++++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/java/res/layout/recognition_status.xml b/java/res/layout/recognition_status.xml index b2c9f4a51..81fae2ada 100644 --- a/java/res/layout/recognition_status.xml +++ b/java/res/layout/recognition_status.xml @@ -70,6 +70,22 @@ android:layout_centerInParent="true" android:visibility="gone"/> + +