diff --git a/res/xml-de/kbd_qwerty.xml b/res/xml-de/kbd_qwerty.xml index 763492db5ac688d1583e80a454de0a9e0bd27f3f..89e53efc835f89b9aff341ec6d2ae0e800381ab1 100755 --- a/res/xml-de/kbd_qwerty.xml +++ b/res/xml-de/kbd_qwerty.xml @@ -98,7 +98,7 @@ <Row android:keyboardMode="@+id/mode_normal" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel="," android:keyWidth="15%p" /> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" @@ -114,7 +114,7 @@ <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel=".com" android:keyOutputText=".com" android:popupKeyboard="@xml/popup_domains" @@ -133,7 +133,7 @@ <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel="," android:keyWidth="15%p" /> <Key android:keyLabel="\@" android:keyWidth="15%p"/> @@ -150,7 +150,7 @@ <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel="," android:keyWidth="15%p"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" diff --git a/res/xml/kbd_phone.xml b/res/xml/kbd_phone.xml index 880d9613afc9fea8238dd64d3b6869907a31f6b0..d2bcdac5229b0f1380c70f659135e0197bd03444 100755 --- a/res/xml/kbd_phone.xml +++ b/res/xml/kbd_phone.xml @@ -51,7 +51,7 @@ <Row android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyIcon="@drawable/sym_keyboard_numalt" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:iconPreview="@drawable/sym_keyboard_feedback_numalt"/> <Key android:codes="48" android:keyIcon="@drawable/sym_keyboard_num0"/> diff --git a/res/xml/kbd_phone_symbols.xml b/res/xml/kbd_phone_symbols.xml index 9ce7a1a1f5ce99d380c2bb18b25f81b353179259..107f85c03b9d04263c9c733df5479ff30332578d 100755 --- a/res/xml/kbd_phone_symbols.xml +++ b/res/xml/kbd_phone_symbols.xml @@ -55,6 +55,8 @@ <Row android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_phone_key" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="_" android:keyEdgeFlags="left"/> <Key android:keyLabel="+"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" diff --git a/res/xml/kbd_qwerty.xml b/res/xml/kbd_qwerty.xml index fb8c574e4d0259dbf11b3e79d9d3e7103c6ee704..8d64d3e52a604bc667f0af715d59218a7b972f0f 100755 --- a/res/xml/kbd_qwerty.xml +++ b/res/xml/kbd_qwerty.xml @@ -109,7 +109,7 @@ <Row android:keyboardMode="@+id/mode_normal" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel="," android:keyWidth="15%p" /> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" @@ -125,7 +125,7 @@ <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel=".com" android:keyOutputText=".com" android:popupKeyboard="@xml/popup_domains" @@ -144,7 +144,7 @@ <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel="," android:keyWidth="15%p" /> <Key android:keyLabel="\@" android:keyWidth="15%p"/> @@ -161,7 +161,7 @@ <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel="," android:keyWidth="15%p"/> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" @@ -174,4 +174,4 @@ android:keyWidth="20%p" android:keyEdgeFlags="right"/> </Row> </Keyboard> - \ No newline at end of file + diff --git a/res/xml/kbd_symbols.xml b/res/xml/kbd_symbols.xml index 2a150397b0f7faaab3017d434c9721f362e962ea..ecdf7513742546376131dc47705d92d2e8f6c35c 100755 --- a/res/xml/kbd_symbols.xml +++ b/res/xml/kbd_symbols.xml @@ -121,7 +121,7 @@ <Row android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_alpha_key" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyWidth="20%p" android:keyEdgeFlags="left"/> <Key android:keyLabel="," android:keyWidth="15%p" android:popupKeyboard="@xml/kbd_popup_template" diff --git a/res/xml/kbd_symbols_shift.xml b/res/xml/kbd_symbols_shift.xml index 6a472a412f3811abe6240ef759582dcd4c787637..fee845ecd233541b9c1f4cb2c7f6b8b491ba35f4 100755 --- a/res/xml/kbd_symbols_shift.xml +++ b/res/xml/kbd_symbols_shift.xml @@ -79,7 +79,7 @@ <Row android:rowEdgeFlags="bottom"> <Key android:codes="-2" android:keyLabel="@string/label_alpha_key" android:keyWidth="20%p" android:popupKeyboard="@xml/kbd_popup_template" - android:popupCharacters="" + android:popupCharacters="_" android:keyEdgeFlags="left"/> <Key android:keyLabel="„" android:keyWidth="15%p" /> <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" android:keyWidth="30%p" diff --git a/src/com/android/inputmethod/latin/LatinIME.java b/src/com/android/inputmethod/latin/LatinIME.java index eec78a167e077e7e71578022050263c690a115f3..3dfdc5f1fb749c5c0abd9c3d9f65cfcc7be8951d 100644 --- a/src/com/android/inputmethod/latin/LatinIME.java +++ b/src/com/android/inputmethod/latin/LatinIME.java @@ -71,6 +71,7 @@ public class LatinIME extends InputMethodService private static final int MSG_UPDATE_SUGGESTIONS = 0; private static final int MSG_START_TUTORIAL = 1; + private static final int MSG_UPDATE_SHIFT_STATE = 2; // How many continuous deletes at which to start deleting at a higher speed. private static final int DELETE_ACCELERATE_AT = 20; @@ -153,6 +154,9 @@ public class LatinIME extends InputMethodService } } break; + case MSG_UPDATE_SHIFT_STATE: + updateShiftKeyState(getCurrentInputEditorInfo()); + break; } } }; @@ -321,7 +325,7 @@ public class LatinIME extends InputMethodService } mPredictionOn = mPredictionOn && mCorrectionMode > 0; checkTutorial(attribute.privateImeOptions); - if (TRACE) Debug.startMethodTracing("latinime"); + if (TRACE) Debug.startMethodTracing("/data/trace/latinime"); } @Override @@ -622,7 +626,8 @@ public class LatinIME extends InputMethodService } else { deleteChar = true; } - updateShiftKeyState(getCurrentInputEditorInfo()); + mHandler.removeMessages(MSG_UPDATE_SHIFT_STATE); + mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_UPDATE_SHIFT_STATE), 300); TextEntryState.backspace(); if (TextEntryState.getState() == TextEntryState.STATE_UNDO_COMMIT) { revertLastWord(deleteChar); @@ -772,7 +777,9 @@ public class LatinIME extends InputMethodService if (mCorrectionMode == Suggest.CORRECTION_FULL) { correctionAvailable |= typedWordValid; } - + // Don't auto-correct words with multiple capital letter + correctionAvailable &= !mWord.isMostlyCaps(); + mCandidateView.setSuggestions(stringList, false, typedWordValid, correctionAvailable); if (stringList.size() > 0) { if (correctionAvailable && !typedWordValid && stringList.size() > 1) { diff --git a/src/com/android/inputmethod/latin/WordComposer.java b/src/com/android/inputmethod/latin/WordComposer.java index c950a7f18510327167e1633af596c24204c7de72..6679fca76a8e08af1cc2d171c3d2b47dc2812d52 100644 --- a/src/com/android/inputmethod/latin/WordComposer.java +++ b/src/com/android/inputmethod/latin/WordComposer.java @@ -34,6 +34,8 @@ public class WordComposer { private String mPreferredWord; private StringBuilder mTypedWord; + + private int mCapsCount; /** * Whether the user chose to capitalize the word. @@ -53,6 +55,7 @@ public class WordComposer { mIsCapitalized = false; mPreferredWord = null; mTypedWord.setLength(0); + mCapsCount = 0; } /** @@ -80,6 +83,7 @@ public class WordComposer { public void add(int primaryCode, int[] codes) { mTypedWord.append((char) primaryCode); mCodes.add(codes); + if (Character.isUpperCase((char) primaryCode)) mCapsCount++; } /** @@ -87,7 +91,10 @@ public class WordComposer { */ public void deleteLast() { mCodes.remove(mCodes.size() - 1); - mTypedWord.deleteCharAt(mTypedWord.length() - 1); + final int lastPos = mTypedWord.length() - 1; + char last = mTypedWord.charAt(lastPos); + mTypedWord.deleteCharAt(lastPos); + if (Character.isUpperCase(last)) mCapsCount--; } /** @@ -138,4 +145,11 @@ public class WordComposer { public CharSequence getPreferredWord() { return mPreferredWord != null ? mPreferredWord : getTypedWord(); } + + /** + * Returns true if more than one character is upper case, otherwise returns false. + */ + public boolean isMostlyCaps() { + return mCapsCount > 1; + } }