Loading dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ using namespace android; static jfieldID sDescriptorField; static jfieldID sAssetManagerNativeField; static jmethodID sAddWordMethod; static jfieldID sDictLength; // // helper function to throw an exception Loading Loading @@ -79,6 +80,7 @@ static jint latinime_BinaryDictionary_open } Dictionary *dictionary = new Dictionary(dict, typedLetterMultiplier, fullWordMultiplier); dictionary->setAsset(dictAsset); env->SetIntField(object, sDictLength, (jint) dictAsset->getLength()); env->ReleaseStringUTFChars(resourceString, resourcePath); return (jint) dictionary; Loading Loading @@ -176,6 +178,14 @@ static int registerNatives(JNIEnv *env) } sAssetManagerNativeField = env->GetFieldID(clazz, "mObject", "I"); // Get the field pointer for the dictionary length clazz = env->FindClass(kClassPathName); if (clazz == NULL) { LOGE("Can't find %s", kClassPathName); return -1; } sDictLength = env->GetFieldID(clazz, "mDictLength", "I"); return registerNativeMethods(env, kClassPathName, gMethods, sizeof(gMethods) / sizeof(gMethods[0])); } Loading res/values-fr-rCA/strings.xml 0 → 100644 +19 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!-- Copyright (C) 2009 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. --> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="english_ime_name" msgid="7252517407088836577">"Clavier Android"</string> </resources> res/xml-ru/kbd_qwerty.xml +4 −2 Original line number Diff line number Diff line Loading @@ -31,7 +31,9 @@ <Key android:keyLabel="ц"/> <Key android:keyLabel="у"/> <Key android:keyLabel="к"/> <Key android:keyLabel="е"/> <Key android:keyLabel="е" android:popupKeyboard="@xml/kbd_popup_template" android:popupCharacters="ё" /> <Key android:keyLabel="н"/> <Key android:keyLabel="г"/> <Key android:keyLabel="ш"/> Loading src/com/android/inputmethod/latin/BinaryDictionary.java +5 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ public class BinaryDictionary extends Dictionary { private static final boolean ENABLE_MISSED_CHARACTERS = true; private int mNativeDict; private int mDictLength; // This value is set from native code, don't change the name!!!! private int[] mInputCodes = new int[MAX_WORD_LENGTH * MAX_ALTERNATIVES]; private char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS]; private int[] mFrequencies = new int[MAX_WORDS]; Loading Loading @@ -125,6 +126,10 @@ public class BinaryDictionary extends Dictionary { return isValidWordNative(mNativeDict, chars, chars.length); } public int getSize() { return mDictLength; // This value is initialized on the call to openNative() } @Override public synchronized void close() { if (mNativeDict != 0) { Loading src/com/android/inputmethod/latin/LatinIME.java +28 −21 Original line number Diff line number Diff line Loading @@ -126,7 +126,9 @@ public class LatinIME extends InputMethodService private CharSequence mBestWord; private boolean mPredictionOn; private boolean mCompletionOn; private boolean mHasDictionary; private boolean mAutoSpace; private boolean mAutoCorrectEnabled; private boolean mAutoCorrectOn; private boolean mCapsLock; private boolean mVibrateOn; Loading Loading @@ -224,7 +226,6 @@ public class LatinIME extends InputMethodService mSuggest.close(); } mSuggest = new Suggest(this, R.raw.main); mSuggest.setCorrectionMode(mCorrectionMode); mUserDictionary = new UserDictionary(this); if (mContactsDictionary == null) { mContactsDictionary = new ContactsDictionary(this); Loading @@ -236,7 +237,7 @@ public class LatinIME extends InputMethodService mSuggest.setUserDictionary(mUserDictionary); mSuggest.setContactsDictionary(mContactsDictionary); mSuggest.setAutoDictionary(mAutoDictionary); updateCorrectionMode(); mWordSeparators = mResources.getString(R.string.word_separators); mSentenceSeparators = mResources.getString(R.string.sentence_separators); Loading Loading @@ -304,7 +305,7 @@ public class LatinIME extends InputMethodService TextEntryState.newSession(this); boolean disableAutoCorrect = false; mInputTypeNoAutoCorrect = false; mPredictionOn = false; mCompletionOn = false; mCompletions = null; Loading Loading @@ -353,19 +354,19 @@ public class LatinIME extends InputMethodService // If it's a browser edit field and auto correct is not ON explicitly, then // disable auto correction, but keep suggestions on. if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT) == 0) { disableAutoCorrect = true; mInputTypeNoAutoCorrect = true; } } // If NO_SUGGESTIONS is set, don't do prediction. if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS) != 0) { mPredictionOn = false; disableAutoCorrect = true; mInputTypeNoAutoCorrect = true; } // If it's not multiline and the autoCorrect flag is not set, then don't correct if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT) == 0 && (attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) == 0) { disableAutoCorrect = true; mInputTypeNoAutoCorrect = true; } if ((attribute.inputType&EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE) != 0) { mPredictionOn = false; Loading @@ -385,17 +386,13 @@ public class LatinIME extends InputMethodService setCandidatesViewShown(false); if (mCandidateView != null) mCandidateView.setSuggestions(null, false, false, false); loadSettings(); // Override auto correct if (disableAutoCorrect) { mAutoCorrectOn = false; if (mCorrectionMode == Suggest.CORRECTION_FULL) { mCorrectionMode = Suggest.CORRECTION_BASIC; } } // If the dictionary is not big enough, don't auto correct mHasDictionary = mSuggest.hasMainDictionary(); updateCorrectionMode(); mInputView.setProximityCorrectionEnabled(true); if (mSuggest != null) { mSuggest.setCorrectionMode(mCorrectionMode); } mPredictionOn = mPredictionOn && mCorrectionMode > 0; checkTutorial(attribute.privateImeOptions); if (TRACE) Debug.startMethodTracing("/data/trace/latinime"); Loading Loading @@ -1150,6 +1147,18 @@ public class LatinIME extends InputMethodService mUserDictionary.addWord(word, frequency); } private void updateCorrectionMode() { mHasDictionary = mSuggest != null ? mSuggest.hasMainDictionary() : false; mAutoCorrectOn = (mAutoCorrectEnabled || mQuickFixes) && !mInputTypeNoAutoCorrect && mHasDictionary; mCorrectionMode = mAutoCorrectOn ? Suggest.CORRECTION_FULL : (mQuickFixes ? Suggest.CORRECTION_BASIC : Suggest.CORRECTION_NONE); if (mSuggest != null) { mSuggest.setCorrectionMode(mCorrectionMode); } } private void launchSettings() { handleClose(); Intent intent = new Intent(); Loading @@ -1169,12 +1178,9 @@ public class LatinIME extends InputMethodService // will continue to work if (AutoText.getSize(mInputView) < 1) mQuickFixes = true; mShowSuggestions = sp.getBoolean(PREF_SHOW_SUGGESTIONS, true) & mQuickFixes; boolean autoComplete = sp.getBoolean(PREF_AUTO_COMPLETE, mAutoCorrectEnabled = sp.getBoolean(PREF_AUTO_COMPLETE, mResources.getBoolean(R.bool.enable_autocorrect)) & mShowSuggestions; mAutoCorrectOn = mSuggest != null && (autoComplete || mQuickFixes); mCorrectionMode = autoComplete ? Suggest.CORRECTION_FULL : (mQuickFixes ? Suggest.CORRECTION_BASIC : Suggest.CORRECTION_NONE); updateCorrectionMode(); String languageList = sp.getString(PREF_SELECTED_LANGUAGES, null); updateSelectedLanguages(languageList); } Loading Loading @@ -1274,6 +1280,7 @@ public class LatinIME extends InputMethodService private static final int CPS_BUFFER_SIZE = 16; private long[] mCpsIntervals = new long[CPS_BUFFER_SIZE]; private int mCpsIndex; private boolean mInputTypeNoAutoCorrect; private void measureCps() { if (!LatinIME.PERF_DEBUG) return; Loading Loading
dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ using namespace android; static jfieldID sDescriptorField; static jfieldID sAssetManagerNativeField; static jmethodID sAddWordMethod; static jfieldID sDictLength; // // helper function to throw an exception Loading Loading @@ -79,6 +80,7 @@ static jint latinime_BinaryDictionary_open } Dictionary *dictionary = new Dictionary(dict, typedLetterMultiplier, fullWordMultiplier); dictionary->setAsset(dictAsset); env->SetIntField(object, sDictLength, (jint) dictAsset->getLength()); env->ReleaseStringUTFChars(resourceString, resourcePath); return (jint) dictionary; Loading Loading @@ -176,6 +178,14 @@ static int registerNatives(JNIEnv *env) } sAssetManagerNativeField = env->GetFieldID(clazz, "mObject", "I"); // Get the field pointer for the dictionary length clazz = env->FindClass(kClassPathName); if (clazz == NULL) { LOGE("Can't find %s", kClassPathName); return -1; } sDictLength = env->GetFieldID(clazz, "mDictLength", "I"); return registerNativeMethods(env, kClassPathName, gMethods, sizeof(gMethods) / sizeof(gMethods[0])); } Loading
res/values-fr-rCA/strings.xml 0 → 100644 +19 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!-- Copyright (C) 2009 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. --> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="english_ime_name" msgid="7252517407088836577">"Clavier Android"</string> </resources>
res/xml-ru/kbd_qwerty.xml +4 −2 Original line number Diff line number Diff line Loading @@ -31,7 +31,9 @@ <Key android:keyLabel="ц"/> <Key android:keyLabel="у"/> <Key android:keyLabel="к"/> <Key android:keyLabel="е"/> <Key android:keyLabel="е" android:popupKeyboard="@xml/kbd_popup_template" android:popupCharacters="ё" /> <Key android:keyLabel="н"/> <Key android:keyLabel="г"/> <Key android:keyLabel="ш"/> Loading
src/com/android/inputmethod/latin/BinaryDictionary.java +5 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ public class BinaryDictionary extends Dictionary { private static final boolean ENABLE_MISSED_CHARACTERS = true; private int mNativeDict; private int mDictLength; // This value is set from native code, don't change the name!!!! private int[] mInputCodes = new int[MAX_WORD_LENGTH * MAX_ALTERNATIVES]; private char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS]; private int[] mFrequencies = new int[MAX_WORDS]; Loading Loading @@ -125,6 +126,10 @@ public class BinaryDictionary extends Dictionary { return isValidWordNative(mNativeDict, chars, chars.length); } public int getSize() { return mDictLength; // This value is initialized on the call to openNative() } @Override public synchronized void close() { if (mNativeDict != 0) { Loading
src/com/android/inputmethod/latin/LatinIME.java +28 −21 Original line number Diff line number Diff line Loading @@ -126,7 +126,9 @@ public class LatinIME extends InputMethodService private CharSequence mBestWord; private boolean mPredictionOn; private boolean mCompletionOn; private boolean mHasDictionary; private boolean mAutoSpace; private boolean mAutoCorrectEnabled; private boolean mAutoCorrectOn; private boolean mCapsLock; private boolean mVibrateOn; Loading Loading @@ -224,7 +226,6 @@ public class LatinIME extends InputMethodService mSuggest.close(); } mSuggest = new Suggest(this, R.raw.main); mSuggest.setCorrectionMode(mCorrectionMode); mUserDictionary = new UserDictionary(this); if (mContactsDictionary == null) { mContactsDictionary = new ContactsDictionary(this); Loading @@ -236,7 +237,7 @@ public class LatinIME extends InputMethodService mSuggest.setUserDictionary(mUserDictionary); mSuggest.setContactsDictionary(mContactsDictionary); mSuggest.setAutoDictionary(mAutoDictionary); updateCorrectionMode(); mWordSeparators = mResources.getString(R.string.word_separators); mSentenceSeparators = mResources.getString(R.string.sentence_separators); Loading Loading @@ -304,7 +305,7 @@ public class LatinIME extends InputMethodService TextEntryState.newSession(this); boolean disableAutoCorrect = false; mInputTypeNoAutoCorrect = false; mPredictionOn = false; mCompletionOn = false; mCompletions = null; Loading Loading @@ -353,19 +354,19 @@ public class LatinIME extends InputMethodService // If it's a browser edit field and auto correct is not ON explicitly, then // disable auto correction, but keep suggestions on. if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT) == 0) { disableAutoCorrect = true; mInputTypeNoAutoCorrect = true; } } // If NO_SUGGESTIONS is set, don't do prediction. if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS) != 0) { mPredictionOn = false; disableAutoCorrect = true; mInputTypeNoAutoCorrect = true; } // If it's not multiline and the autoCorrect flag is not set, then don't correct if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT) == 0 && (attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) == 0) { disableAutoCorrect = true; mInputTypeNoAutoCorrect = true; } if ((attribute.inputType&EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE) != 0) { mPredictionOn = false; Loading @@ -385,17 +386,13 @@ public class LatinIME extends InputMethodService setCandidatesViewShown(false); if (mCandidateView != null) mCandidateView.setSuggestions(null, false, false, false); loadSettings(); // Override auto correct if (disableAutoCorrect) { mAutoCorrectOn = false; if (mCorrectionMode == Suggest.CORRECTION_FULL) { mCorrectionMode = Suggest.CORRECTION_BASIC; } } // If the dictionary is not big enough, don't auto correct mHasDictionary = mSuggest.hasMainDictionary(); updateCorrectionMode(); mInputView.setProximityCorrectionEnabled(true); if (mSuggest != null) { mSuggest.setCorrectionMode(mCorrectionMode); } mPredictionOn = mPredictionOn && mCorrectionMode > 0; checkTutorial(attribute.privateImeOptions); if (TRACE) Debug.startMethodTracing("/data/trace/latinime"); Loading Loading @@ -1150,6 +1147,18 @@ public class LatinIME extends InputMethodService mUserDictionary.addWord(word, frequency); } private void updateCorrectionMode() { mHasDictionary = mSuggest != null ? mSuggest.hasMainDictionary() : false; mAutoCorrectOn = (mAutoCorrectEnabled || mQuickFixes) && !mInputTypeNoAutoCorrect && mHasDictionary; mCorrectionMode = mAutoCorrectOn ? Suggest.CORRECTION_FULL : (mQuickFixes ? Suggest.CORRECTION_BASIC : Suggest.CORRECTION_NONE); if (mSuggest != null) { mSuggest.setCorrectionMode(mCorrectionMode); } } private void launchSettings() { handleClose(); Intent intent = new Intent(); Loading @@ -1169,12 +1178,9 @@ public class LatinIME extends InputMethodService // will continue to work if (AutoText.getSize(mInputView) < 1) mQuickFixes = true; mShowSuggestions = sp.getBoolean(PREF_SHOW_SUGGESTIONS, true) & mQuickFixes; boolean autoComplete = sp.getBoolean(PREF_AUTO_COMPLETE, mAutoCorrectEnabled = sp.getBoolean(PREF_AUTO_COMPLETE, mResources.getBoolean(R.bool.enable_autocorrect)) & mShowSuggestions; mAutoCorrectOn = mSuggest != null && (autoComplete || mQuickFixes); mCorrectionMode = autoComplete ? Suggest.CORRECTION_FULL : (mQuickFixes ? Suggest.CORRECTION_BASIC : Suggest.CORRECTION_NONE); updateCorrectionMode(); String languageList = sp.getString(PREF_SELECTED_LANGUAGES, null); updateSelectedLanguages(languageList); } Loading Loading @@ -1274,6 +1280,7 @@ public class LatinIME extends InputMethodService private static final int CPS_BUFFER_SIZE = 16; private long[] mCpsIntervals = new long[CPS_BUFFER_SIZE]; private int mCpsIndex; private boolean mInputTypeNoAutoCorrect; private void measureCps() { if (!LatinIME.PERF_DEBUG) return; Loading