diff options
17 files changed, 58 insertions, 40 deletions
diff --git a/java/res/layout/input_view.xml b/java/res/layout/input_view.xml index ed387e5b2..ff0b403d1 100644 --- a/java/res/layout/input_view.xml +++ b/java/res/layout/input_view.xml @@ -43,8 +43,6 @@ android:layout_width="match_parent" android:layout_height="@dimen/config_suggestions_strip_height" android:gravity="center_vertical" - android:paddingRight="@dimen/config_suggestions_strip_horizontal_padding" - android:paddingLeft="@dimen/config_suggestions_strip_horizontal_padding" style="?attr/suggestionStripViewStyle" /> <!-- To ensure that key preview popup is correctly placed when the current system locale is diff --git a/java/res/layout/suggestions_strip.xml b/java/res/layout/suggestions_strip.xml index 0b614993b..bff9a1ef9 100644 --- a/java/res/layout/suggestions_strip.xml +++ b/java/res/layout/suggestions_strip.xml @@ -24,12 +24,16 @@ android:id="@+id/suggestions_strip" android:orientation="horizontal" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" + android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" /> <LinearLayout android:id="@+id/add_to_dictionary_strip" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" + android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" android:visibility="invisible"> <TextView android:id="@+id/word_to_save" @@ -49,7 +53,9 @@ android:id="@+id/important_notice_strip" android:orientation="horizontal" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" + android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin"> <TextView android:id="@+id/important_notice_title" android:layout_width="match_parent" diff --git a/java/res/values-land/config.xml b/java/res/values-land/config.xml index 43ae068f2..f72d64ff7 100644 --- a/java/res/values-land/config.xml +++ b/java/res/values-land/config.xml @@ -58,6 +58,7 @@ <fraction name="config_key_shifted_letter_hint_ratio_5row">48%</fraction> <dimen name="config_suggestions_strip_height">36dp</dimen> + <dimen name="config_suggestions_strip_horizontal_margin">54dp</dimen> <dimen name="config_more_suggestions_row_height">36dp</dimen> <integer name="config_max_more_suggestions_row">2</integer> <fraction name="config_min_more_suggestions_width">60%</fraction> diff --git a/java/res/values-sw600dp-land/config.xml b/java/res/values-sw600dp-land/config.xml index 00edde161..8789e729f 100644 --- a/java/res/values-sw600dp-land/config.xml +++ b/java/res/values-sw600dp-land/config.xml @@ -48,7 +48,8 @@ <fraction name="config_key_letter_ratio_5row">62%</fraction> <fraction name="config_key_shifted_letter_hint_ratio_5row">36%</fraction> - <dimen name="config_suggestions_strip_horizontal_padding">252.0dp</dimen> + <dimen name="config_suggestions_strip_height">44dp</dimen> + <dimen name="config_suggestions_strip_horizontal_margin">180.0dp</dimen> <integer name="config_max_more_suggestions_row">5</integer> <fraction name="config_min_more_suggestions_width">50%</fraction> diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml index 3bd843928..12e9832f9 100644 --- a/java/res/values-sw600dp/config.xml +++ b/java/res/values-sw600dp/config.xml @@ -63,12 +63,12 @@ <fraction name="config_key_shifted_letter_hint_ratio_5row">27%</fraction> <dimen name="config_suggestions_strip_height">44dp</dimen> + <dimen name="config_suggestions_strip_horizontal_margin">0dp</dimen> <dimen name="config_more_suggestions_row_height">44dp</dimen> <integer name="config_max_more_suggestions_row">6</integer> <fraction name="config_min_more_suggestions_width">90%</fraction> - <dimen name="config_suggestions_strip_horizontal_padding">94.5dp</dimen> <dimen name="config_suggestion_min_width">48.0dp</dimen> - <dimen name="config_suggestion_text_horizontal_padding">12dp</dimen> + <dimen name="config_suggestion_text_horizontal_padding">10dp</dimen> <dimen name="config_suggestion_text_size">22dp</dimen> <dimen name="config_more_suggestions_hint_text_size">33dp</dimen> diff --git a/java/res/values-sw768dp-land/config.xml b/java/res/values-sw768dp-land/config.xml index 3878a9e84..17733f099 100644 --- a/java/res/values-sw768dp-land/config.xml +++ b/java/res/values-sw768dp-land/config.xml @@ -49,7 +49,8 @@ <fraction name="config_key_letter_ratio_5row">53%</fraction> <fraction name="config_key_shifted_letter_hint_ratio_5row">30%</fraction> - <dimen name="config_suggestions_strip_horizontal_padding">252.0dp</dimen> + <dimen name="config_suggestions_strip_height">44dp</dimen> + <dimen name="config_suggestions_strip_horizontal_margin">340dp</dimen> <fraction name="config_min_more_suggestions_width">50%</fraction> <!-- Gesture floating preview text parameters --> diff --git a/java/res/values-sw768dp/config.xml b/java/res/values-sw768dp/config.xml index 34eec38b8..647cca94b 100644 --- a/java/res/values-sw768dp/config.xml +++ b/java/res/values-sw768dp/config.xml @@ -61,12 +61,12 @@ <fraction name="config_key_shifted_letter_hint_ratio_5row">33%</fraction> <dimen name="config_suggestions_strip_height">44dp</dimen> + <dimen name="config_suggestions_strip_horizontal_margin">100dp</dimen> <dimen name="config_more_suggestions_row_height">44dp</dimen> <integer name="config_max_more_suggestions_row">6</integer> <fraction name="config_min_more_suggestions_width">90%</fraction> - <dimen name="config_suggestions_strip_horizontal_padding">94.5dp</dimen> <dimen name="config_suggestion_min_width">46dp</dimen> - <dimen name="config_suggestion_text_horizontal_padding">8dp</dimen> + <dimen name="config_suggestion_text_horizontal_padding">10dp</dimen> <dimen name="config_suggestion_text_size">22dp</dimen> <dimen name="config_more_suggestions_hint_text_size">33dp</dimen> diff --git a/java/res/values/config.xml b/java/res/values/config.xml index 45ea48392..1ab49279c 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -64,10 +64,10 @@ <fraction name="config_key_shifted_letter_hint_ratio_5row">41%</fraction> <dimen name="config_suggestions_strip_height">40dp</dimen> + <dimen name="config_suggestions_strip_horizontal_margin">0dp</dimen> <dimen name="config_more_suggestions_row_height">40dp</dimen> <integer name="config_max_more_suggestions_row">6</integer> <fraction name="config_min_more_suggestions_width">90%</fraction> - <dimen name="config_suggestions_strip_horizontal_padding">0dp</dimen> <dimen name="config_suggestion_min_width">44dp</dimen> <dimen name="config_suggestion_text_horizontal_padding">6dp</dimen> <dimen name="config_suggestion_text_size">18dp</dimen> diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml index eb6cdd975..76abb10fb 100644 --- a/java/res/values/themes-common.xml +++ b/java/res/values/themes-common.xml @@ -120,12 +120,7 @@ name="MoreKeysKeyboardView" parent="MainKeyboardView" /> <style name="MoreKeysKeyboardContainer" /> - <style name="SuggestionStripView"> - <item name="suggestionsCountInStrip">@integer/config_suggestions_count_in_strip</item> - <item name="centerSuggestionPercentile">@fraction/config_center_suggestion_percentile</item> - <item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item> - <item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item> - </style> + <style name="SuggestionStripView" /> <style name="SuggestionWord"> <item name="android:minWidth">@dimen/config_suggestion_min_width</item> <item name="android:textSize">@dimen/config_suggestion_text_size</item> diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml index 720eda9ce..616dbd82c 100644 --- a/java/res/values/themes-ics.xml +++ b/java/res/values/themes-ics.xml @@ -109,8 +109,12 @@ </style> <style name="SuggestionStripView.ICS" - parent="SuggestionStripView" + parent="KeyboardView.ICS" > + <item name="suggestionsCountInStrip">@integer/config_suggestions_count_in_strip</item> + <item name="centerSuggestionPercentile">@fraction/config_center_suggestion_percentile</item> + <item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item> + <item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item> <item name="android:background">@drawable/keyboard_suggest_strip_holo</item> <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item> <item name="colorValidTypedWord">@color/typed_word_color_ics</item> diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml index 830527171..9bb3d79a7 100644 --- a/java/res/values/themes-klp.xml +++ b/java/res/values/themes-klp.xml @@ -109,8 +109,12 @@ </style> <style name="SuggestionStripView.KLP" - parent="SuggestionStripView" + parent="KeyboardView.KLP" > + <item name="suggestionsCountInStrip">@integer/config_suggestions_count_in_strip</item> + <item name="centerSuggestionPercentile">@fraction/config_center_suggestion_percentile</item> + <item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item> + <item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item> <item name="android:background">@drawable/keyboard_suggest_strip_holo</item> <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item> <item name="colorValidTypedWord">@color/typed_word_color_klp</item> diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java index 627793f18..9735645cb 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java @@ -234,6 +234,7 @@ public class DictionaryFacilitatorForSuggest { synchronized (mLock) { oldDictionaries = mDictionaries; mDictionaries = newDictionaries; + mIsUserDictEnabled = UserBinaryDictionary.isEnabled(context); if (reloadMainDictionary) { asyncReloadMainDictionary(context, newLocale, listener); } diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java index 1d84bb59f..8bfa63c3c 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java +++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java @@ -309,9 +309,8 @@ final class SuggestionStripLayoutHelper { setupWordViewsTextAndColor(suggestedWords, mSuggestionsCountInStrip); final TextView centerWordView = mWordViews.get(mCenterPositionInStrip); - final int availableStripWidth = placerView.getWidth() - - placerView.getPaddingRight() - placerView.getPaddingLeft(); - final int centerWidth = getSuggestionWidth(mCenterPositionInStrip, availableStripWidth); + final int stripWidth = stripView.getWidth(); + final int centerWidth = getSuggestionWidth(mCenterPositionInStrip, stripWidth); final int countInStrip; if (suggestedWords.size() == 1 || getTextScaleX(centerWordView.getText(), centerWidth, centerWordView.getPaint()) < MIN_TEXT_XSCALE) { @@ -319,11 +318,11 @@ final class SuggestionStripLayoutHelper { // by consolidating all slots in the strip. countInStrip = 1; mMoreSuggestionsAvailable = (suggestedWords.size() > countInStrip); - layoutWord(mCenterPositionInStrip, availableStripWidth - mPadding); + layoutWord(mCenterPositionInStrip, stripWidth - mPadding); stripView.addView(centerWordView); setLayoutWeight(centerWordView, 1.0f, ViewGroup.LayoutParams.MATCH_PARENT); if (SuggestionStripView.DBG) { - layoutDebugInfo(mCenterPositionInStrip, placerView, availableStripWidth); + layoutDebugInfo(mCenterPositionInStrip, placerView, stripWidth); } } else { countInStrip = mSuggestionsCountInStrip; @@ -337,7 +336,7 @@ final class SuggestionStripLayoutHelper { x += divider.getMeasuredWidth(); } - final int width = getSuggestionWidth(positionInStrip, availableStripWidth); + final int width = getSuggestionWidth(positionInStrip, stripWidth); final TextView wordView = layoutWord(positionInStrip, width); stripView.addView(wordView); setLayoutWeight(wordView, getSuggestionWeight(positionInStrip), @@ -474,8 +473,8 @@ final class SuggestionStripLayoutHelper { return countInStrip; } - public void layoutAddToDictionaryHint(final String word, final ViewGroup addToDictionaryStrip, - final int stripWidth) { + public void layoutAddToDictionaryHint(final String word, final ViewGroup addToDictionaryStrip) { + final int stripWidth = addToDictionaryStrip.getWidth(); final int width = stripWidth - mDividerWidth - mPadding * 2; final TextView wordView = (TextView)addToDictionaryStrip.findViewById(R.id.word_to_save); diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java index a0793b133..a578fa4a4 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java +++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java @@ -209,7 +209,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick } public void showAddToDictionaryHint(final String word) { - mLayoutHelper.layoutAddToDictionaryHint(word, mAddToDictionaryStrip, getWidth()); + mLayoutHelper.layoutAddToDictionaryHint(word, mAddToDictionaryStrip); // {@link TextView#setTag()} is used to hold the word to be added to dictionary. The word // will be extracted at {@link #onClick(View)}. mAddToDictionaryStrip.setTag(word); diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java index f2a1e524d..48e43d6ef 100644 --- a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java +++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java @@ -40,7 +40,7 @@ public class DistracterFilter { mKeyboard = keyboard; } - public boolean isDistractorToWordsInDictionaries(final String prevWord, + public boolean isDistracterToWordsInDictionaries(final String prevWord, final String targetWord) { // TODO: to be implemented return false; diff --git a/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java b/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java index 5ce977d5e..55061f45f 100644 --- a/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java +++ b/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java @@ -80,7 +80,8 @@ public final class LanguageModelParam { public static ArrayList<LanguageModelParam> createLanguageModelParamsFrom( final ArrayList<String> tokens, final int timestamp, final DictionaryFacilitatorForSuggest dictionaryFacilitator, - final SpacingAndPunctuations spacingAndPunctuations) { + final SpacingAndPunctuations spacingAndPunctuations, + final DistracterFilter distracterFilter) { final ArrayList<LanguageModelParam> languageModelParams = CollectionUtils.newArrayList(); final int N = tokens.size(); @@ -109,7 +110,8 @@ public final class LanguageModelParam { } final LanguageModelParam languageModelParam = detectWhetherVaildWordOrNotAndGetLanguageModelParam( - prevWord, tempWord, timestamp, dictionaryFacilitator); + prevWord, tempWord, timestamp, dictionaryFacilitator, + distracterFilter); if (languageModelParam == null) { continue; } @@ -121,27 +123,33 @@ public final class LanguageModelParam { private static LanguageModelParam detectWhetherVaildWordOrNotAndGetLanguageModelParam( final String prevWord, final String targetWord, final int timestamp, - final DictionaryFacilitatorForSuggest dictionaryFacilitator) { + final DictionaryFacilitatorForSuggest dictionaryFacilitator, + final DistracterFilter distracterFilter) { final Locale locale = dictionaryFacilitator.getLocale(); if (locale == null) { return null; } - if (!dictionaryFacilitator.isValidWord(targetWord, true /* ignoreCase */)) { - // OOV word. - return createAndGetLanguageModelParamOfWord(prevWord, targetWord, timestamp, - false /* isValidWord */, locale); - } if (dictionaryFacilitator.isValidWord(targetWord, false /* ignoreCase */)) { return createAndGetLanguageModelParamOfWord(prevWord, targetWord, timestamp, true /* isValidWord */, locale); } + final String lowerCaseTargetWord = targetWord.toLowerCase(locale); if (dictionaryFacilitator.isValidWord(lowerCaseTargetWord, false /* ignoreCase */)) { // Add the lower-cased word. return createAndGetLanguageModelParamOfWord(prevWord, lowerCaseTargetWord, timestamp, true /* isValidWord */, locale); } - // Treat the word as an OOV word. + + // Treat the word as an OOV word. The following statement checks whether this OOV + // is a distracter to words in dictionaries. Being a distracter means the OOV word is + // too close to a common word in dictionaries (e.g., the OOV "mot" is very close to "not"). + // Adding such a word to dictonaries would interfere with entering in-dictionary words. For + // example, adding "mot" to dictionaries might interfere with entering "not". + // This kind of OOV should be filtered out. + if (distracterFilter.isDistracterToWordsInDictionaries(prevWord, targetWord)) { + return null; + } return createAndGetLanguageModelParamOfWord(prevWord, targetWord, timestamp, false /* isValidWord */, locale); } diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/buffer_with_extendable_buffer.h b/native/jni/src/suggest/policyimpl/dictionary/utils/buffer_with_extendable_buffer.h index 23cbe3aa3..a2e88a46c 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/utils/buffer_with_extendable_buffer.h +++ b/native/jni/src/suggest/policyimpl/dictionary/utils/buffer_with_extendable_buffer.h @@ -37,13 +37,13 @@ class BufferWithExtendableBuffer { BufferWithExtendableBuffer(uint8_t *const originalBuffer, const int originalBufferSize, const int maxAdditionalBufferSize) : mOriginalBuffer(originalBuffer), mOriginalBufferSize(originalBufferSize), - mAdditionalBuffer(EXTEND_ADDITIONAL_BUFFER_SIZE_STEP), mUsedAdditionalBufferSize(0), + mAdditionalBuffer(0), mUsedAdditionalBufferSize(0), mMaxAdditionalBufferSize(maxAdditionalBufferSize) {} // Without original buffer. BufferWithExtendableBuffer(const int maxAdditionalBufferSize) : mOriginalBuffer(0), mOriginalBufferSize(0), - mAdditionalBuffer(EXTEND_ADDITIONAL_BUFFER_SIZE_STEP), mUsedAdditionalBufferSize(0), + mAdditionalBuffer(0), mUsedAdditionalBufferSize(0), mMaxAdditionalBufferSize(maxAdditionalBufferSize) {} AK_FORCE_INLINE int getTailPosition() const { |