Fix Auto-complete toggle - was broken in a recent change.

Also allow decoupling Quick Fixes from Suggestions and auto-complete.
main
Amith Yamasani 2010-02-19 16:38:58 -08:00
parent fac5dcb5fe
commit 32e1c1c338
3 changed files with 26 additions and 26 deletions

View File

@ -318,14 +318,15 @@ public class LatinIME extends InputMethodService
Resources orig = getResources();
Configuration conf = orig.getConfiguration();
Locale saveLocale = conf.locale;
boolean different = !conf.locale.getCountry().equalsIgnoreCase(locale.substring(0, 2));
conf.locale = new Locale(locale);
orig.updateConfiguration(conf, orig.getDisplayMetrics());
if (mSuggest != null) {
mSuggest.close();
}
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
mQuickFixes = sp.getBoolean(PREF_QUICK_FIXES, true);
mSuggest = new Suggest(this, R.raw.main);
mSuggest.setAutoTextEnabled(!different);
updateAutoTextEnabled(saveLocale);
if (mUserDictionary != null) mUserDictionary.close();
mUserDictionary = new UserDictionary(this);
if (mContactsDictionary == null) {
@ -447,7 +448,6 @@ public class LatinIME extends InputMethodService
mShowingVoiceSuggestions = false;
mImmediatelyAfterVoiceSuggestions = false;
mVoiceInputHighlighted = false;
boolean disableAutoCorrect = false;
mWordToSuggestions.clear();
mInputTypeNoAutoCorrect = false;
mPredictionOn = false;
@ -538,20 +538,13 @@ public class LatinIME extends InputMethodService
setCandidatesViewShown(false);
setSuggestions(null, false, false, false);
// 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);
mPredictionOn = mPredictionOn && mCorrectionMode > 0;
mPredictionOn = mPredictionOn && (mCorrectionMode > 0 || mShowSuggestions);
checkTutorial(attribute.privateImeOptions);
if (TRACE) Debug.startMethodTracing("/data/trace/latinime");
}
@ -811,7 +804,7 @@ public class LatinIME extends InputMethodService
}
mCommittedLength = mComposing.length();
TextEntryState.acceptedTyped(mComposing);
mAutoDictionary.addWord(mComposing.toString(), FREQUENCY_FOR_TYPED);
checkAddToDictionary(mComposing, FREQUENCY_FOR_TYPED);
}
updateSuggestions();
}
@ -1464,7 +1457,7 @@ public class LatinIME extends InputMethodService
}
// Fool the state watcher so that a subsequent backspace will not do a revert
TextEntryState.typedCharacter((char) KEYCODE_SPACE, true);
if (index == 0 && !mSuggest.isValidWord(suggestion)) {
if (index == 0 && mCorrectionMode > 0 && !mSuggest.isValidWord(suggestion)) {
mCandidateView.showAddToDictionaryHint(suggestion);
}
if (ic != null) {
@ -1490,9 +1483,7 @@ public class LatinIME extends InputMethodService
}
}
// Add the word to the auto dictionary if it's not a known word
if (mAutoDictionary.isValidWord(suggestion) || !mSuggest.isValidWord(suggestion)) {
mAutoDictionary.addWord(suggestion.toString(), FREQUENCY_FOR_PICKED);
}
checkAddToDictionary(suggestion, FREQUENCY_FOR_PICKED);
mPredicting = false;
mCommittedLength = suggestion.length();
setNextSuggestions();
@ -1503,6 +1494,13 @@ public class LatinIME extends InputMethodService
setSuggestions(mSuggestPuncList, false, false, false);
}
private void checkAddToDictionary(CharSequence suggestion, int frequencyDelta) {
if (mAutoDictionary.isValidWord(suggestion)
|| !mSuggest.isValidWord(suggestion.toString().toLowerCase())) {
mAutoDictionary.addWord(suggestion.toString(), frequencyDelta);
}
}
private boolean isCursorTouchingWord() {
InputConnection ic = getCurrentInputConnection();
if (ic == null) return false;
@ -1763,14 +1761,20 @@ public class LatinIME extends InputMethodService
mHasDictionary = mSuggest != null ? mSuggest.hasMainDictionary() : false;
mAutoCorrectOn = (mAutoCorrectEnabled || mQuickFixes)
&& !mInputTypeNoAutoCorrect && mHasDictionary;
mCorrectionMode = mAutoCorrectOn
mCorrectionMode = (mAutoCorrectOn && mAutoCorrectEnabled)
? Suggest.CORRECTION_FULL
: (mQuickFixes ? Suggest.CORRECTION_BASIC : Suggest.CORRECTION_NONE);
: (mAutoCorrectOn ? Suggest.CORRECTION_BASIC : Suggest.CORRECTION_NONE);
if (mSuggest != null) {
mSuggest.setCorrectionMode(mCorrectionMode);
}
}
private void updateAutoTextEnabled(Locale systemLocale) {
if (mSuggest == null) return;
boolean different = !systemLocale.getLanguage().equalsIgnoreCase(mLocale.substring(0, 2));
mSuggest.setAutoTextEnabled(!different && mQuickFixes);
}
protected void launchSettings() {
launchSettings(LatinIMESettings.class);
}
@ -1808,11 +1812,7 @@ public class LatinIME extends InputMethodService
mLocaleSupportedForVoiceInput = voiceInputSupportedLocales.contains(mLocale);
// If there is no auto text data, then quickfix is forced to "on", so that the other options
// will continue to work
if (AutoText.getSize(mInputView) < 1) mQuickFixes = true;
mShowSuggestions = sp.getBoolean(PREF_SHOW_SUGGESTIONS, true) & mQuickFixes;
mShowSuggestions = sp.getBoolean(PREF_SHOW_SUGGESTIONS, true);
if (VOICE_INSTALLED) {
final String voiceMode = sp.getString(PREF_VOICE_MODE, "");
@ -1828,6 +1828,7 @@ public class LatinIME extends InputMethodService
mAutoCorrectEnabled = sp.getBoolean(PREF_AUTO_COMPLETE,
mResources.getBoolean(R.bool.enable_autocorrect)) & mShowSuggestions;
updateCorrectionMode();
updateAutoTextEnabled(mResources.getConfiguration().locale);
mLanguageSwitcher.loadLocales(sp);
}

View File

@ -86,8 +86,6 @@ public class LatinIMESettings extends PreferenceActivity
if (autoTextSize < 1) {
((PreferenceGroup) findPreference(PREDICTION_SETTINGS_KEY))
.removePreference(mQuickFixes);
} else {
mShowSuggestions.setDependency(QUICK_FIXES_KEY);
}
if (!LatinIME.VOICE_INSTALLED
|| !RecognitionManager.isRecognitionAvailable(this)) {

View File

@ -194,7 +194,8 @@ public class Suggest implements Dictionary.WordCallback {
mContactsDictionary.getWords(wordComposer, this, mNextLettersFrequencies);
}
if (mSuggestions.size() > 0 && isValidWord(mOriginalWord)) {
if (mSuggestions.size() > 0 && isValidWord(mOriginalWord)
&& mCorrectionMode == CORRECTION_FULL) {
mHaveCorrection = true;
}
}