diff options
Diffstat (limited to 'java/src')
6 files changed, 41 insertions, 20 deletions
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java index a414b9c9d..543f74fc4 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java @@ -293,6 +293,7 @@ public final class BinaryDictionary extends Dictionary { } mNativeSuggestOptions.setIsGesture(isGesture); + mNativeSuggestOptions.setBlockOffensiveWords(blockOffensiveWords); mNativeSuggestOptions.setAdditionalFeaturesOptions(additionalFeaturesOptions); if (inOutLanguageWeight != null) { mInputOutputLanguageWeight[0] = inOutLanguageWeight[0]; @@ -320,18 +321,10 @@ public final class BinaryDictionary extends Dictionary { ++len; } if (len > 0) { - final SuggestedWordInfo suggestedWordInfo = - new SuggestedWordInfo(new String(mOutputCodePoints, start, len), - mOutputScores[j], mOutputTypes[j], this /* sourceDict */, - mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */, - mOutputAutoCommitFirstWordConfidence[0]); - if (blockOffensiveWords && suggestedWordInfo.isPossiblyOffensive() - && !suggestedWordInfo.isExactMatch()) { - // If we block potentially offensive words, and if the word is possibly - // offensive, then we don't output it unless it's also an exact match. - continue; - } - suggestions.add(suggestedWordInfo); + suggestions.add(new SuggestedWordInfo(new String(mOutputCodePoints, start, len), + mOutputScores[j], mOutputTypes[j], this /* sourceDict */, + mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */, + mOutputAutoCommitFirstWordConfidence[0])); } } return suggestions; diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index 4dbfa0bac..b1966bffc 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -122,6 +122,12 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { return mBinaryDictionary.isValidDictionary(); } + // TODO: Remove and always enable beginning of sentence prediction. Currently, this is enabled + // only for ContextualDictionary. + protected boolean enableBeginningOfSentencePrediction() { + return false; + } + /** * Creates a new expandable binary dictionary. * @@ -398,6 +404,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { if (mBinaryDictionary == null) { return null; } + if (composer.size() == 0 && prevWordsInfo.mIsBeginningOfSentence + && !enableBeginningOfSentencePrediction()) { + return null; + } final ArrayList<SuggestedWordInfo> suggestions = mBinaryDictionary.getSuggestions(composer, prevWordsInfo, proximityInfo, blockOffensiveWords, additionalFeaturesOptions, sessionId, diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 35966bb71..8b671a94b 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1336,9 +1336,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final SettingsValues currentSettingsValues = mSettings.getCurrent(); final boolean shouldShowImportantNotice = ImportantNoticeUtils.shouldShowImportantNotice(this); + final boolean shouldShowSuggestionCandidates = + currentSettingsValues.mInputAttributes.mShouldShowSuggestions + && currentSettingsValues.isCurrentOrientationAllowingSuggestionsPerUserSettings(); final boolean shouldShowSuggestionsStripUnlessPassword = shouldShowImportantNotice || currentSettingsValues.mShowsVoiceInputKey - || currentSettingsValues.isSuggestionsRequested() + || shouldShowSuggestionCandidates || currentSettingsValues.isApplicationSpecifiedCompletionsOn(); final boolean shouldShowSuggestionsStrip = shouldShowSuggestionsStripUnlessPassword && !currentSettingsValues.mInputAttributes.mIsPasswordField; @@ -1353,14 +1356,16 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final boolean noSuggestionsToShow = (SuggestedWords.EMPTY == suggestedWords) || suggestedWords.isPunctuationSuggestions() || isEmptyApplicationSpecifiedCompletions; - final boolean isShowingImportantNotice; if (shouldShowImportantNotice && noSuggestionsToShow) { - isShowingImportantNotice = mSuggestionStripView.maybeShowImportantNoticeTitle(); - } else { - isShowingImportantNotice = false; + if (mSuggestionStripView.maybeShowImportantNoticeTitle()) { + return; + } } - if (currentSettingsValues.isSuggestionsRequested() && !isShowingImportantNotice) { + if (currentSettingsValues.isCurrentOrientationAllowingSuggestionsPerUserSettings() + // We should clear suggestions if there is no suggestion to show. + || noSuggestionsToShow + || currentSettingsValues.isApplicationSpecifiedCompletionsOn()) { mSuggestionStripView.setSuggestions(suggestedWords, SubtypeLocaleUtils.isRtlLanguage(mSubtypeSwitcher.getCurrentSubtype())); } diff --git a/java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java b/java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java index 96755a98f..a96018fe9 100644 --- a/java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java +++ b/java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java @@ -26,7 +26,7 @@ import java.io.File; import java.util.Locale; public class ContextualDictionary extends ExpandableBinaryDictionary { - /* package */ static final String NAME = PersonalizationDictionary.class.getSimpleName(); + /* package */ static final String NAME = ContextualDictionary.class.getSimpleName(); private ContextualDictionary(final Context context, final Locale locale, final File dictFile) { @@ -35,6 +35,7 @@ public class ContextualDictionary extends ExpandableBinaryDictionary { // Always reset the contents. clear(); } + @UsedForTesting public static ContextualDictionary getDictionary(final Context context, final Locale locale, final File dictFile, final String dictNamePrefix) { @@ -42,6 +43,11 @@ public class ContextualDictionary extends ExpandableBinaryDictionary { } @Override + protected boolean enableBeginningOfSentencePrediction() { + return true; + } + + @Override public boolean isValidWord(final String word) { // Strings out of this dictionary should not be considered existing words. return false; diff --git a/java/src/com/android/inputmethod/latin/settings/NativeSuggestOptions.java b/java/src/com/android/inputmethod/latin/settings/NativeSuggestOptions.java index cd726c969..04a2ee3ce 100644 --- a/java/src/com/android/inputmethod/latin/settings/NativeSuggestOptions.java +++ b/java/src/com/android/inputmethod/latin/settings/NativeSuggestOptions.java @@ -20,7 +20,8 @@ public class NativeSuggestOptions { // Need to update suggest_options.h when you add, remove or reorder options. private static final int IS_GESTURE = 0; private static final int USE_FULL_EDIT_DISTANCE = 1; - private static final int OPTIONS_SIZE = 2; + private static final int BLOCK_OFFENSIVE_WORDS = 2; + private static final int OPTIONS_SIZE = 3; private final int[] mOptions = new int[OPTIONS_SIZE + AdditionalFeaturesSettingUtils.ADDITIONAL_FEATURES_SETTINGS_SIZE]; @@ -33,6 +34,10 @@ public class NativeSuggestOptions { setBooleanOption(USE_FULL_EDIT_DISTANCE, value); } + public void setBlockOffensiveWords(final boolean value) { + setBooleanOption(BLOCK_OFFENSIVE_WORDS, value); + } + public void setAdditionalFeaturesOptions(final int[] additionalOptions) { if (additionalOptions == null) { return; diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java index 389d9a869..44104019b 100644 --- a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java +++ b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java @@ -85,6 +85,7 @@ public final class SettingsValues { public final int mKeyPreviewPopupDismissDelay; private final boolean mAutoCorrectEnabled; public final float mAutoCorrectionThreshold; + // TODO: Rename this to mAutoCorrectionEnabledPerUserSettings. public final boolean mAutoCorrectionEnabled; public final int mSuggestionVisibility; public final int mDisplayOrientation; @@ -193,6 +194,7 @@ public final class SettingsValues { return mInputAttributes.mApplicationSpecifiedCompletionOn; } + // TODO: Rename this to needsToLookupSuggestions(). public boolean isSuggestionsRequested() { return mInputAttributes.mShouldShowSuggestions && (mAutoCorrectionEnabled |