Rename CandidateView to SuggestionsView

Change-Id: I6480cdf025f065130e1969899b259a243e7a11be
main
Tadashi G. Takaoka 2011-09-01 14:54:28 +09:00
parent b17300e2f0
commit 913e2aeef2
38 changed files with 266 additions and 297 deletions

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -2,7 +2,7 @@
<!--
/*
**
** Copyright 2010, The Android Open Source Project
** Copyright 2011, 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.
@ -23,5 +23,5 @@
>
<item
android:state_pressed="true"
android:drawable="@drawable/btn_candidate_pressed" />
android:drawable="@drawable/btn_suggestion_pressed" />
</selector>

View File

@ -25,55 +25,34 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<!-- On tablets, the candidate strip is centered with horizontal paddings on both sides because
width of the landscape mode is too long for the candidate strip. This LinearLayout is
required to hold the paddings. -->
<!-- On tablets, the suggestions strip is centered with horizontal paddings on both sides
because width of the landscape mode is too long for the suggestions strip. This
LinearLayout is required to hold the paddings. -->
<LinearLayout
android:id="@+id/candidates_container"
android:id="@+id/suggestions_container"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/candidate_strip_minimum_height"
android:minHeight="@dimen/suggestions_strip_minimum_height"
android:gravity="bottom"
>
<View
android:layout_width="@dimen/candidate_strip_padding"
android:layout_height="@dimen/candidate_strip_height"
android:layout_width="@dimen/suggestions_strip_padding"
android:layout_height="@dimen/suggestions_strip_height"
style="?attr/suggestionsStripBackgroundStyle" />
<com.android.inputmethod.latin.CandidateView
android:id="@+id/candidates"
<com.android.inputmethod.latin.SuggestionsView
android:id="@+id/suggestions_view"
android:layout_weight="1.0"
android:layout_width="0dp"
android:layout_height="@dimen/candidate_strip_height"
android:layout_height="@dimen/suggestions_strip_height"
android:gravity="center_vertical"
style="?attr/candidateViewStyle" />
style="?attr/suggestionsViewStyle" />
<View
android:layout_width="@dimen/candidate_strip_padding"
android:layout_height="@dimen/candidate_strip_height"
android:layout_width="@dimen/suggestions_strip_padding"
android:layout_height="@dimen/suggestions_strip_height"
style="?attr/suggestionsStripBackgroundStyle" />
</LinearLayout>
<LinearLayout
android:id="@+id/candidates_pane_container"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
style="?attr/suggestionsStripBackgroundStyle"
>
<View
android:layout_width="@dimen/candidate_strip_padding"
android:layout_height="@dimen/candidate_strip_height" />
<FrameLayout
android:id="@+id/candidates_pane"
android:layout_weight="1.0"
android:layout_width="0dp"
android:layout_height="match_parent" />
<View
android:layout_width="@dimen/candidate_strip_padding"
android:layout_height="@dimen/candidate_strip_height" />
</LinearLayout>
<com.android.inputmethod.keyboard.LatinKeyboardView
android:id="@+id/keyboard_view"
android:layout_alignParentBottom="true"

View File

@ -30,7 +30,7 @@
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
latin:keyLabelSize="@dimen/candidate_text_size"
latin:keyLabelSize="@dimen/suggestion_text_size"
latin:keyHintLetterRatio="@fraction/more_suggestions_info_ratio"
latin:keyHintLetterColor="@android:color/white"
/>

View File

@ -2,7 +2,7 @@
<!--
/*
**
** Copyright 2010, The Android Open Source Project
** Copyright 2011, 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.

View File

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
/*
**
** Copyright 2008, The Android Open Source Project
** Copyright 2011, 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
** 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
** 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
** 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.
*/
-->

View File

@ -2,7 +2,7 @@
<!--
/*
**
** Copyright 2010, The Android Open Source Project
** Copyright 2011, 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.
@ -22,12 +22,12 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="@dimen/candidate_min_width"
android:textSize="@dimen/candidate_text_size"
android:minWidth="@dimen/suggestion_min_width"
android:textSize="@dimen/suggestion_text_size"
android:gravity="center"
android:paddingLeft="@dimen/candidate_padding"
android:paddingLeft="@dimen/suggestion_padding"
android:paddingTop="0dp"
android:paddingRight="@dimen/candidate_padding"
android:paddingRight="@dimen/suggestion_padding"
android:paddingBottom="0dp"
android:focusable="false"
android:clickable="false"

View File

@ -24,12 +24,12 @@
>
<!-- Placer for debug information -->
<RelativeLayout
android:id="@+id/candidates_placer"
android:id="@+id/suggestions_placer"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:id="@+id/candidates_strip"
android:id="@+id/suggestions_strip"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@ -58,10 +58,9 @@
<dimen name="key_preview_offset_ics">0.01in</dimen>
<dimen name="candidate_strip_height">36dip</dimen>
<dimen name="suggestions_strip_height">36dip</dimen>
<dimen name="more_suggestions_row_height">36dip</dimen>
<dimen name="candidate_strip_minimum_height">160sp</dimen>
<dimen name="candidate_strip_fading_edge_length">63dip</dimen>
<dimen name="suggestions_strip_minimum_height">160sp</dimen>
<!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
<!-- popup_key_height x 1.2 -->
<dimen name="mini_keyboard_slide_allowance">0.336in</dimen>

View File

@ -50,5 +50,5 @@
<fraction name="key_hint_label_ratio">34%</fraction>
<fraction name="key_uppercase_letter_ratio">29%</fraction>
<dimen name="candidate_strip_padding">40.0mm</dimen>
<dimen name="suggestions_strip_padding">40.0mm</dimen>
</resources>

View File

@ -66,10 +66,10 @@
<dimen name="key_preview_height_ics">15.0mm</dimen>
<dimen name="key_preview_offset_ics">0.05in</dimen>
<dimen name="candidate_strip_height">44dip</dimen>
<dimen name="suggestions_strip_height">44dip</dimen>
<dimen name="more_suggestions_row_height">44dip</dimen>
<dimen name="candidate_strip_padding">15.0mm</dimen>
<dimen name="candidate_min_width">0.3in</dimen>
<dimen name="candidate_padding">12dip</dimen>
<dimen name="candidate_text_size">22dip</dimen>
<dimen name="suggestions_strip_padding">15.0mm</dimen>
<dimen name="suggestion_min_width">0.3in</dimen>
<dimen name="suggestion_padding">12dip</dimen>
<dimen name="suggestion_text_size">22dip</dimen>
</resources>

View File

@ -58,5 +58,5 @@
<dimen name="key_preview_height_ics">26.5mm</dimen>
<dimen name="key_preview_offset_ics">0.05in</dimen>
<dimen name="candidate_strip_padding">40.0mm</dimen>
<dimen name="suggestions_strip_padding">40.0mm</dimen>
</resources>

View File

@ -69,11 +69,11 @@
<dimen name="key_preview_height_ics">15.0mm</dimen>
<dimen name="key_preview_offset_ics">0.05in</dimen>
<dimen name="candidate_strip_height">44dip</dimen>
<dimen name="suggestions_strip_height">44dip</dimen>
<dimen name="more_suggestions_row_height">44dip</dimen>
<dimen name="candidate_strip_minimum_height">200sp</dimen>
<dimen name="candidate_strip_padding">15.0mm</dimen>
<dimen name="candidate_min_width">46dip</dimen>
<dimen name="candidate_padding">8dip</dimen>
<dimen name="candidate_text_size">22dip</dimen>
<dimen name="suggestions_strip_minimum_height">200sp</dimen>
<dimen name="suggestions_strip_padding">15.0mm</dimen>
<dimen name="suggestion_min_width">46dip</dimen>
<dimen name="suggestion_padding">8dip</dimen>
<dimen name="suggestion_text_size">22dip</dimen>
</resources>

View File

@ -30,7 +30,7 @@
<attr name="suggestionsPaneViewStyle" format="reference" />
<attr name="suggestionBackgroundStyle" format="reference" />
<attr name="suggestionPreviewBackgroundStyle" format="reference" />
<attr name="candidateViewStyle" format="reference" />
<attr name="suggestionsViewStyle" format="reference" />
</declare-styleable>
<declare-styleable name="KeyboardView">
@ -112,7 +112,7 @@
</attr>
</declare-styleable>
<declare-styleable name="CandidateView">
<declare-styleable name="SuggestionsView">
<attr name="suggestionStripOption" format="integer">
<flag name="autoCorrectBold" value="0x01" />
<flag name="autoCorrectUnderline" value="0x02" />
@ -122,8 +122,8 @@
<attr name="colorTypedWord" format="color" />
<attr name="colorAutoCorrect" format="color" />
<attr name="colorSuggested" format="color" />
<attr name="candidateCountInStrip" format="integer" />
<attr name="centerCandidatePercentile" format="integer" />
<attr name="suggestionsCountInStrip" format="integer" />
<attr name="centerSuggestionPercentile" format="integer" />
</declare-styleable>
<declare-styleable name="Keyboard">

View File

@ -30,11 +30,11 @@
<bool name="config_digit_more_keys_enabled">true</bool>
<!-- Whether or not Popup on key press is enabled by default -->
<bool name="config_default_popup_preview">true</bool>
<!-- Default value for bigram suggestion: while showing candidates for a word should we weigh
<!-- Default value for bigram suggestion: while showing suggestions for a word should we weigh
in the previous word? -->
<bool name="config_default_bigram_suggestions">true</bool>
<!-- Default value for bigram prediction: after entering a word and a space only, should we look
at input history to suggest a hopefully helpful candidate for the next word? -->
at input history to suggest a hopefully helpful suggestions for the next word? -->
<bool name="config_default_bigram_prediction">false</bool>
<bool name="config_default_compat_recorrection_enabled">true</bool>
<bool name="config_default_sound_enabled">false</bool>

View File

@ -76,19 +76,18 @@
<dimen name="key_preview_height_ics">80sp</dimen>
<dimen name="key_preview_offset_ics">0.05in</dimen>
<dimen name="candidate_strip_height">40dip</dimen>
<dimen name="suggestions_strip_height">40dip</dimen>
<dimen name="more_suggestions_key_horizontal_padding">12dip</dimen>
<dimen name="more_suggestions_row_height">40dip</dimen>
<dimen name="more_suggestions_slide_allowance">0.2in</dimen>
<fraction name="more_suggestions_info_ratio">12%</fraction>
<dimen name="candidate_strip_minimum_height">200sp</dimen>
<dimen name="candidate_strip_fading_edge_length">63dip</dimen>
<dimen name="candidate_strip_padding">0dip</dimen>
<dimen name="candidate_min_width">44dip</dimen>
<dimen name="candidate_padding">6dip</dimen>
<dimen name="candidate_text_size">18dip</dimen>
<integer name="candidate_count_in_strip">3</integer>
<integer name="center_candidate_percentile">36</integer>
<dimen name="suggestions_strip_minimum_height">200sp</dimen>
<dimen name="suggestions_strip_padding">0dip</dimen>
<dimen name="suggestion_min_width">44dip</dimen>
<dimen name="suggestion_padding">6dip</dimen>
<dimen name="suggestion_text_size">18dip</dimen>
<integer name="suggestions_count_in_strip">3</integer>
<integer name="center_suggestion_percentile">36</integer>
<!-- If the screen height in landscape is larger than the below value, then the keyboard
will not go into extract (fullscreen) mode. -->

View File

@ -44,13 +44,6 @@
<!-- Label for "switch to phone symbols" key. Must be short to fit on key! -->
<string name="label_to_phone_symbols_key">\uff0a\uff03</string>
<!-- Character for candidate divider (BOX DRAWINGS LIGHT VERTICAL) -->
<string name="label_candidate_divider">\u2502</string>
<!-- Character for expand candidates pane (BLACK DOWN-POINTING TRIANGLE) -->
<string name="label_expand_candidates_pane">\u25bc</string>
<!-- Character for close candidates pane (BLACK UP-POINTING TRIANGLE) -->
<string name="label_close_candidates_pane">\u25b2</string>
<!-- Always show the suggestion strip -->
<string name="prefs_suggestion_visibility_show_value">0</string>
<!-- Show the suggestion strip only on portrait mode -->

View File

@ -99,11 +99,11 @@
<string name="auto_correction_summary">Spacebar and punctuation automatically correct mistyped words</string>
<!-- Option to disable auto correction. [CHAR LIMIT=20] -->
<string name="auto_correction_threshold_mode_off">Off</string>
<!-- Option to suggest auto correction candidates modestly. Auto-corrects only to a word which has small edit distance from typed word. [CHAR LIMIT=20] -->
<!-- Option to suggest auto correction suggestions modestly. Auto-corrects only to a word which has small edit distance from typed word. [CHAR LIMIT=20] -->
<string name="auto_correction_threshold_mode_modest">Modest</string>
<!-- Option to suggest auto correction candidates aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
<!-- Option to suggest auto correction suggestions aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
<string name="auto_correction_threshold_mode_aggeressive">Aggressive</string>
<!-- Option to suggest auto correction candidates very aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
<!-- Option to suggest auto correction suggestions very aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
<string name="auto_correction_threshold_mode_very_aggeressive">Very aggressive</string>
<!-- Option to enable bigram correction -->

View File

@ -88,21 +88,21 @@
<item name="android:background">@drawable/keyboard_suggest_strip</item>
</style>
<style name="SuggestionBackgroundStyle">
<item name="android:background">@drawable/btn_candidate</item>
<item name="android:background">@drawable/btn_suggestion</item>
</style>
<style name="SuggestionPreviewBackgroundStyle">
<item name="android:background">@drawable/candidate_feedback_background</item>
<item name="android:background">@drawable/suggestion_feedback_background</item>
</style>
<style
name="CandidateViewStyle"
name="SuggestionsViewStyle"
parent="SuggestionsStripBackgroundStyle"
>
<item name="suggestionStripOption">autoCorrectBold</item>
<item name="colorTypedWord">#FFFFFFFF</item>
<item name="colorAutoCorrect">#FFFCAE00</item>
<item name="colorSuggested">#FFFCAE00</item>
<item name="candidateCountInStrip">@integer/candidate_count_in_strip</item>
<item name="centerCandidatePercentile">@integer/center_candidate_percentile</item>
<item name="suggestionsCountInStrip">@integer/suggestions_count_in_strip</item>
<item name="centerSuggestionPercentile">@integer/center_suggestion_percentile</item>
</style>
<!-- Theme "Basic high contrast" -->
<style
@ -233,7 +233,7 @@
<item name="android:background">@drawable/keyboard_suggest_strip_holo</item>
</style>
<style name="SuggestionBackgroundStyle.IceCreamSandwich">
<item name="android:background">@drawable/btn_candidate_ics</item>
<item name="android:background">@drawable/btn_suggestion_ics</item>
</style>
<style
name="SuggestionPreviewBackgroundStyle.IceCreamSandwich"
@ -246,15 +246,15 @@
>
</style>
<style
name="CandidateViewStyle.IceCreamSandwich"
name="SuggestionsViewStyle.IceCreamSandwich"
parent="SuggestionsStripBackgroundStyle.IceCreamSandwich"
>
<item name="suggestionStripOption">autoCorrectBold|validTypedWordBold</item>
<item name="colorTypedWord">#FFBCBEC0</item>
<item name="colorAutoCorrect">#FF0099CC</item>
<item name="colorSuggested">#FFA7A9AC</item>
<item name="candidateCountInStrip">@integer/candidate_count_in_strip</item>
<item name="centerCandidatePercentile">@integer/center_candidate_percentile</item>
<item name="suggestionsCountInStrip">@integer/suggestions_count_in_strip</item>
<item name="centerSuggestionPercentile">@integer/center_suggestion_percentile</item>
</style>
<style name="MiniKeyboardAnimation">
<item name="android:windowEnterAnimation">@anim/mini_keyboard_fadein</item>

View File

@ -25,6 +25,6 @@
<item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
<item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
<item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
<item name="candidateViewStyle">@style/CandidateViewStyle</item>
<item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
</style>
</resources>

View File

@ -25,6 +25,6 @@
<item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
<item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
<item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
<item name="candidateViewStyle">@style/CandidateViewStyle</item>
<item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
</style>
</resources>

View File

@ -25,6 +25,6 @@
<item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
<item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
<item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
<item name="candidateViewStyle">@style/CandidateViewStyle</item>
<item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
</style>
</resources>

View File

@ -25,6 +25,6 @@
<item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle.IceCreamSandwich</item>
<item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle.IceCreamSandwich</item>
<item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle.IceCreamSandwich</item>
<item name="candidateViewStyle">@style/CandidateViewStyle.IceCreamSandwich</item>
<item name="suggestionsViewStyle">@style/SuggestionsViewStyle.IceCreamSandwich</item>
</style>
</resources>

View File

@ -25,6 +25,6 @@
<item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
<item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
<item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
<item name="candidateViewStyle">@style/CandidateViewStyle</item>
<item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
</style>
</resources>

View File

@ -25,6 +25,6 @@
<item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
<item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
<item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
<item name="candidateViewStyle">@style/CandidateViewStyle</item>
<item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
</style>
</resources>

View File

@ -16,21 +16,6 @@
package com.android.inputmethod.deprecated.recorrection;
import com.android.inputmethod.compat.InputConnectionCompatUtils;
import com.android.inputmethod.compat.SuggestionSpanUtils;
import com.android.inputmethod.deprecated.VoiceProxy;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.latin.AutoCorrection;
import com.android.inputmethod.latin.CandidateView;
import com.android.inputmethod.latin.EditingUtils;
import com.android.inputmethod.latin.LatinIME;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.Settings;
import com.android.inputmethod.latin.Suggest;
import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.TextEntryState;
import com.android.inputmethod.latin.WordComposer;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.text.TextUtils;
@ -38,6 +23,21 @@ import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection;
import com.android.inputmethod.compat.InputConnectionCompatUtils;
import com.android.inputmethod.compat.SuggestionSpanUtils;
import com.android.inputmethod.deprecated.VoiceProxy;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.latin.AutoCorrection;
import com.android.inputmethod.latin.EditingUtils;
import com.android.inputmethod.latin.LatinIME;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.Settings;
import com.android.inputmethod.latin.Suggest;
import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.SuggestionsView;
import com.android.inputmethod.latin.TextEntryState;
import com.android.inputmethod.latin.WordComposer;
import java.util.ArrayList;
/**
@ -107,7 +107,7 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL
}
public void updateRecorrectionSelection(KeyboardSwitcher keyboardSwitcher,
CandidateView candidateView, int candidatesStart, int candidatesEnd,
SuggestionsView suggestionsView, int candidatesStart, int candidatesEnd,
int newSelStart, int newSelEnd, int oldSelStart, int lastSelectionStart,
int lastSelectionEnd, boolean hasUncommittedTypedChars) {
if (SuggestionSpanUtils.SUGGESTION_SPAN_IS_SUPPORTED || !mRecorrectionEnabled) return;
@ -127,7 +127,7 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL
// If showing the "touch again to save" hint, do not replace it. Else,
// show the bigrams if we are at the end of the text, punctuation
// otherwise.
if (candidateView != null && !candidateView.isShowingAddToDictionaryHint()) {
if (suggestionsView != null && !suggestionsView.isShowingAddToDictionaryHint()) {
InputConnection ic = mService.getCurrentInputConnection();
if (null == ic || !TextUtils.isEmpty(ic.getTextAfterCursor(1, 0))) {
if (!mService.isShowingPunctuationList()) {
@ -219,13 +219,13 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL
}
public void fetchAndDisplayRecorrectionSuggestions(VoiceProxy voiceProxy,
CandidateView candidateView, Suggest suggest, KeyboardSwitcher keyboardSwitcher,
SuggestionsView suggestionsView, Suggest suggest, KeyboardSwitcher keyboardSwitcher,
WordComposer word, boolean hasUncommittedTypedChars, int lastSelectionStart,
int lastSelectionEnd, String wordSeparators) {
if (!InputConnectionCompatUtils.RECORRECTION_SUPPORTED) return;
if (SuggestionSpanUtils.SUGGESTION_SPAN_IS_SUPPORTED || !mRecorrectionEnabled) return;
voiceProxy.setShowingVoiceSuggestions(false);
if (candidateView != null && candidateView.isShowingAddToDictionaryHint()) {
if (suggestionsView != null && suggestionsView.isShowingAddToDictionaryHint()) {
return;
}
InputConnection ic = mService.getCurrentInputConnection();
@ -260,7 +260,7 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL
if (SuggestionSpanUtils.SUGGESTION_SPAN_IS_SUPPORTED) return;
if (force || TextEntryState.isRecorrecting()) {
TextEntryState.onAbortRecorrection();
mService.setCandidatesViewShown(mService.isCandidateStripVisible());
mService.setCandidatesViewShown(mService.isSuggestionsStripVisible());
mService.getCurrentInputConnection().finishComposingText();
mService.clearSuggestions();
}

View File

@ -119,15 +119,15 @@ public class AutoCorrection {
if (wordComposer.size() > 1 && (correctionMode == Suggest.CORRECTION_FULL
|| correctionMode == Suggest.CORRECTION_FULL_BIGRAM)
&& typedWord != null && suggestions.size() > 0 && sortedScores.length > 0) {
final CharSequence autoCorrectionCandidate = suggestions.get(0);
final int autoCorrectionCandidateScore = sortedScores[0];
final CharSequence autoCorrectionSuggestion = suggestions.get(0);
final int autoCorrectionSuggestionScore = sortedScores[0];
// TODO: when the normalized score of the first suggestion is nearly equals to
// the normalized score of the second suggestion, behave less aggressive.
mNormalizedScore = Utils.calcNormalizedScore(
typedWord,autoCorrectionCandidate, autoCorrectionCandidateScore);
typedWord,autoCorrectionSuggestion, autoCorrectionSuggestionScore);
if (DBG) {
Log.d(TAG, "Normalized " + typedWord + "," + autoCorrectionCandidate + ","
+ autoCorrectionCandidateScore + ", " + mNormalizedScore
Log.d(TAG, "Normalized " + typedWord + "," + autoCorrectionSuggestion + ","
+ autoCorrectionSuggestionScore + ", " + mNormalizedScore
+ "(" + autoCorrectionThreshold + ")");
}
if (mNormalizedScore >= autoCorrectionThreshold) {

View File

@ -77,7 +77,7 @@ import java.util.Locale;
* Input method implementation for Qwerty'ish keyboard.
*/
public class LatinIME extends InputMethodServiceCompatWrapper implements KeyboardActionListener,
CandidateView.Listener {
SuggestionsView.Listener {
private static final String TAG = LatinIME.class.getSimpleName();
private static final boolean PERF_DEBUG = false;
private static final boolean TRACE = false;
@ -157,9 +157,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
private Settings.Values mSettingsValues;
private View mCandidateViewContainer;
private int mCandidateStripHeight;
private CandidateView mCandidateView;
private View mSuggestionsContainer;
private int mSuggestionsStripHeight;
private SuggestionsView mSuggestionsView;
private Suggest mSuggest;
private CompletionInfo[] mApplicationSpecifiedCompletions;
@ -254,7 +254,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
break;
case MSG_UPDATE_OLD_SUGGESTIONS:
latinIme.mRecorrection.fetchAndDisplayRecorrectionSuggestions(
latinIme.mVoiceProxy, latinIme.mCandidateView,
latinIme.mVoiceProxy, latinIme.mSuggestionsView,
latinIme.mSuggest, latinIme.mKeyboardSwitcher, latinIme.mWordComposer,
latinIme.mHasUncommittedTypedChars, latinIme.mLastSelectionStart,
latinIme.mLastSelectionEnd, latinIme.mSettingsValues.mWordSeparators);
@ -607,11 +607,11 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
@Override
public void setInputView(View view) {
super.setInputView(view);
mCandidateViewContainer = view.findViewById(R.id.candidates_container);
mCandidateView = (CandidateView) view.findViewById(R.id.candidates);
if (mCandidateView != null)
mCandidateView.setListener(this, view);
mCandidateStripHeight = (int)mResources.getDimension(R.dimen.candidate_strip_height);
mSuggestionsContainer = view.findViewById(R.id.suggestions_container);
mSuggestionsView = (SuggestionsView) view.findViewById(R.id.suggestions_view);
if (mSuggestionsView != null)
mSuggestionsView.setListener(this, view);
mSuggestionsStripHeight = (int)mResources.getDimension(R.dimen.suggestions_strip_height);
}
@Override
@ -678,9 +678,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
switcher.loadKeyboard(attribute, mSettingsValues);
}
if (mCandidateView != null)
mCandidateView.clear();
setSuggestionStripShownInternal(isCandidateStripVisible(), /* needsInputViewShown */ false);
if (mSuggestionsView != null)
mSuggestionsView.clear();
setSuggestionStripShownInternal(
isSuggestionsStripVisible(), /* needsInputViewShown */ false);
// Delay updating suggestions because keyboard input view may not be shown at this point.
mHandler.postUpdateSuggestions();
@ -708,7 +709,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if ((inputType & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_TEXT) {
mIsSettingsSuggestionStripOn = true;
// Make sure that passwords are not displayed in candidate view
// Make sure that passwords are not displayed in {@link SuggestionsView}.
if (InputTypeCompatUtils.isPasswordInputType(inputType)
|| InputTypeCompatUtils.isVisiblePasswordInputType(inputType)) {
mIsSettingsSuggestionStripOn = false;
@ -819,7 +820,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
&& (selectionChanged || candidatesCleared)) {
if (candidatesCleared) {
// If the composing span has been cleared, save the typed word in the history for
// recorrection before we reset the candidate strip. Then, we'll be able to show
// recorrection before we reset the suggestions strip. Then, we'll be able to show
// suggestions for recorrection right away.
mRecorrection.saveRecorrectionSuggestion(mWordComposer, mComposingStringBuilder);
}
@ -853,7 +854,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
mLastSelectionEnd = newSelEnd;
mRecorrection.updateRecorrectionSelection(mKeyboardSwitcher,
mCandidateView, candidatesStart, candidatesEnd, newSelStart,
mSuggestionsView, candidatesStart, candidatesEnd, newSelStart,
newSelEnd, oldSelStart, mLastSelectionStart,
mLastSelectionEnd, mHasUncommittedTypedChars);
}
@ -866,10 +867,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
/**
* This is called when the user has clicked on the extracted text view,
* when running in fullscreen mode. The default implementation hides
* the candidates view when this happens, but only if the extracted text
* the suggestions view when this happens, but only if the extracted text
* editor has a vertical scroll bar because its text doesn't fit.
* Here we override the behavior due to the possibility that a re-correction could
* cause the candidate strip to disappear and re-appear.
* cause the suggestions strip to disappear and re-appear.
*/
@Override
public void onExtractedTextClicked() {
@ -881,11 +882,11 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
/**
* This is called when the user has performed a cursor movement in the
* extracted text view, when it is running in fullscreen mode. The default
* implementation hides the candidates view when a vertical movement
* implementation hides the suggestions view when a vertical movement
* happens, but only if the extracted text editor has a vertical scroll bar
* because its text doesn't fit.
* Here we override the behavior due to the possibility that a re-correction could
* cause the candidate strip to disappear and re-appear.
* cause the suggestions strip to disappear and re-appear.
*/
@Override
public void onExtractedCursorMovement(int dx, int dy) {
@ -938,20 +939,20 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
private void setSuggestionStripShownInternal(boolean shown, boolean needsInputViewShown) {
// TODO: Modify this if we support candidates with hard keyboard
if (onEvaluateInputViewShown() && mCandidateViewContainer != null) {
final boolean shouldShowCandidates = shown
// TODO: Modify this if we support suggestions with hard keyboard
if (onEvaluateInputViewShown() && mSuggestionsContainer != null) {
final boolean shouldShowSuggestions = shown
&& (needsInputViewShown ? mKeyboardSwitcher.isInputViewShown() : true);
if (isFullscreenMode()) {
// No need to have extra space to show the key preview.
mCandidateViewContainer.setMinimumHeight(0);
mCandidateViewContainer.setVisibility(
shouldShowCandidates ? View.VISIBLE : View.GONE);
mSuggestionsContainer.setMinimumHeight(0);
mSuggestionsContainer.setVisibility(
shouldShowSuggestions ? View.VISIBLE : View.GONE);
} else {
// We must control the visibility of the suggestion strip in order to avoid clipped
// key previews, even when we don't show the suggestion strip.
mCandidateViewContainer.setVisibility(
shouldShowCandidates ? View.VISIBLE : View.INVISIBLE);
mSuggestionsContainer.setVisibility(
shouldShowSuggestions ? View.VISIBLE : View.INVISIBLE);
}
}
}
@ -964,14 +965,14 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
public void onComputeInsets(InputMethodService.Insets outInsets) {
super.onComputeInsets(outInsets);
final KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
if (inputView == null || mCandidateViewContainer == null)
if (inputView == null || mSuggestionsContainer == null)
return;
final int containerHeight = mCandidateViewContainer.getHeight();
final int containerHeight = mSuggestionsContainer.getHeight();
int touchY = containerHeight;
// Need to set touchable region only if input view is being shown
if (mKeyboardSwitcher.isInputViewShown()) {
if (mCandidateViewContainer.getVisibility() == View.VISIBLE) {
touchY -= mCandidateStripHeight;
if (mSuggestionsContainer.getVisibility() == View.VISIBLE) {
touchY -= mSuggestionsStripHeight;
}
final int touchWidth = inputView.getWidth();
final int touchHeight = inputView.getHeight() + containerHeight
@ -1321,7 +1322,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) {
ic.deleteSurroundingText(mEnteredText.length(), 0);
} else if (deleteChar) {
if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
if (mSuggestionsView != null && mSuggestionsView.dismissAddToDictionaryHint()) {
// Go back to the suggestion mode if the user canceled the
// "Touch again to save".
// NOTE: In gerenal, we don't revert the word when backspacing
@ -1440,7 +1441,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
mVoiceProxy.handleSeparator();
// Should dismiss the "Touch again to save" message when handling separator
if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
if (mSuggestionsView != null && mSuggestionsView.dismissAddToDictionaryHint()) {
mHandler.cancelUpdateBigramPredictions();
mHandler.postUpdateSuggestions();
}
@ -1491,8 +1492,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (!TextUtils.isEmpty(typedWord) && !typedWord.equals(mBestWord)) {
InputConnectionCompatUtils.commitCorrection(
ic, mLastSelectionEnd - typedWord.length(), typedWord, mBestWord);
if (mCandidateView != null)
mCandidateView.onAutoCorrectionInverted(mBestWord);
if (mSuggestionsView != null)
mSuggestionsView.onAutoCorrectionInverted(mBestWord);
}
}
if (Keyboard.CODE_SPACE == primaryCode) {
@ -1527,7 +1528,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
public boolean isShowingPunctuationList() {
return mSettingsValues.mSuggestPuncList == mCandidateView.getSuggestions();
return mSettingsValues.mSuggestPuncList == mSuggestionsView.getSuggestions();
}
public boolean isShowingSuggestionsStrip() {
@ -1536,10 +1537,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
&& mDisplayOrientation == Configuration.ORIENTATION_PORTRAIT);
}
public boolean isCandidateStripVisible() {
if (mCandidateView == null)
public boolean isSuggestionsStripVisible() {
if (mSuggestionsView == null)
return false;
if (mCandidateView.isShowingAddToDictionaryHint() || TextEntryState.isRecorrecting())
if (mSuggestionsView.isShowingAddToDictionaryHint() || TextEntryState.isRecorrecting())
return true;
if (!isShowingSuggestionsStrip())
return false;
@ -1561,7 +1562,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
setInputView(v);
}
setSuggestionStripShown(isCandidateStripVisible());
setSuggestionStripShown(isSuggestionsStripVisible());
updateInputViewShown();
mHandler.postUpdateSuggestions();
}
@ -1571,8 +1572,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
public void setSuggestions(SuggestedWords words) {
if (mCandidateView != null) {
mCandidateView.setSuggestions(words);
if (mSuggestionsView != null) {
mSuggestionsView.setSuggestions(words);
mKeyboardSwitcher.onAutoCorrectionStateChanged(
words.hasWordAboveAutoCorrectionScoreThreshold());
}
@ -1625,11 +1626,11 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// length == 1).
if (typedWord != null) {
if (builder.size() > 1 || typedWord.length() == 1 || typedWordValid
|| mCandidateView.isShowingAddToDictionaryHint()) {
|| mSuggestionsView.isShowingAddToDictionaryHint()) {
builder.setTypedWordValid(typedWordValid).setHasMinimalSuggestion(
autoCorrectionAvailable);
} else {
final SuggestedWords previousSuggestions = mCandidateView.getSuggestions();
final SuggestedWords previousSuggestions = mSuggestionsView.getSuggestions();
if (previousSuggestions == mSettingsValues.mSuggestPuncList)
return;
builder.addTypedWordAndPreviousSuggestions(typedWord, previousSuggestions);
@ -1651,11 +1652,11 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
} else {
mBestWord = null;
}
setSuggestionStripShown(isCandidateStripVisible());
setSuggestionStripShown(isSuggestionsStripVisible());
}
private boolean pickDefaultSuggestion(int separatorCode) {
// Complete any pending candidate query first
// Complete any pending suggestions query first
if (mHandler.hasPendingUpdateSuggestions()) {
mHandler.cancelUpdateSuggestions();
updateSuggestions();
@ -1674,7 +1675,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
@Override
public void pickSuggestionManually(int index, CharSequence suggestion) {
SuggestedWords suggestions = mCandidateView.getSuggestions();
SuggestedWords suggestions = mSuggestionsView.getSuggestions();
mVoiceProxy.flushAndLogAllTextModificationCounters(index, suggestion,
mSettingsValues.mWordSeparators);
@ -1690,8 +1691,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
ic.commitCompletion(completionInfo);
}
mCommittedLength = suggestion.length();
if (mCandidateView != null) {
mCandidateView.clear();
if (mSuggestionsView != null) {
mSuggestionsView.clear();
}
mKeyboardSwitcher.updateShiftState();
if (ic != null) {
@ -1786,7 +1787,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
if (showingAddToDictionaryHint) {
if (mIsUserDictionaryAvaliable) {
mCandidateView.showAddToDictionaryHint(suggestion);
mSuggestionsView.showAddToDictionaryHint(suggestion);
} else {
mHandler.postUpdateSuggestions();
}
@ -1806,7 +1807,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
final InputConnection ic = getCurrentInputConnection();
if (ic != null) {
mVoiceProxy.rememberReplacedWord(bestWord, mSettingsValues.mWordSeparators);
SuggestedWords suggestedWords = mCandidateView.getSuggestions();
SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
ic.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(
this, bestWord, suggestedWords), 1);
}
@ -1842,7 +1843,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
public void setPunctuationSuggestions() {
setSuggestions(mSettingsValues.mSuggestPuncList);
setSuggestionStripShown(isCandidateStripVisible());
setSuggestionStripShown(isSuggestionsStripVisible());
}
private void addToUserUnigramAndBigramDictionaries(CharSequence suggestion,

View File

@ -43,10 +43,10 @@ public class MoreSuggestions extends Keyboard {
private int mToPos;
public static class MoreSuggestionsParam extends KeyboardParams {
private final int[] mWidths = new int[CandidateView.MAX_SUGGESTIONS];
private final int[] mRowNumbers = new int[CandidateView.MAX_SUGGESTIONS];
private final int[] mColumnOrders = new int[CandidateView.MAX_SUGGESTIONS];
private final int[] mNumColumnsInRow = new int[CandidateView.MAX_SUGGESTIONS];
private final int[] mWidths = new int[SuggestionsView.MAX_SUGGESTIONS];
private final int[] mRowNumbers = new int[SuggestionsView.MAX_SUGGESTIONS];
private final int[] mColumnOrders = new int[SuggestionsView.MAX_SUGGESTIONS];
private final int[] mNumColumnsInRow = new int[SuggestionsView.MAX_SUGGESTIONS];
private static final int MAX_COLUMNS_IN_ROW = 3;
private int mNumRows;
@ -60,7 +60,7 @@ public class MoreSuggestions extends Keyboard {
int row = 0;
int pos = fromPos, rowStartPos = fromPos;
final int size = Math.min(suggestions.size(), CandidateView.MAX_SUGGESTIONS);
final int size = Math.min(suggestions.size(), SuggestionsView.MAX_SUGGESTIONS);
while (pos < size) {
final CharSequence word = suggestions.getWord(pos);
// TODO: Should take care of text x-scaling.

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2010 The Android Open Source Project
* Copyright (C) 2011 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
@ -57,7 +57,7 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import java.util.ArrayList;
import java.util.List;
public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener {
public class SuggestionsView extends LinearLayout implements OnClickListener, OnLongClickListener {
public interface Listener {
public boolean addWordToDictionary(String word);
public void pickSuggestionManually(int index, CharSequence word);
@ -68,8 +68,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
private static final boolean DBG = LatinImeLogger.sDBG;
private final ViewGroup mCandidatesPlacer;
private final ViewGroup mCandidatesStrip;
private final ViewGroup mSuggestionsPlacer;
private final ViewGroup mSuggestionsStrip;
private View mKeyboardView;
private final View mMoreSuggestionsContainer;
@ -93,26 +93,26 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
private final UiHandler mHandler = new UiHandler(this);
private static class UiHandler extends StaticInnerHandlerWrapper<CandidateView> {
private static class UiHandler extends StaticInnerHandlerWrapper<SuggestionsView> {
private static final int MSG_HIDE_PREVIEW = 0;
private static final int MSG_UPDATE_SUGGESTION = 1;
private static final long DELAY_HIDE_PREVIEW = 1300;
private static final long DELAY_UPDATE_SUGGESTION = 300;
public UiHandler(CandidateView outerInstance) {
public UiHandler(SuggestionsView outerInstance) {
super(outerInstance);
}
@Override
public void dispatchMessage(Message msg) {
final CandidateView candidateView = getOuterInstance();
final SuggestionsView suggestionsView = getOuterInstance();
switch (msg.what) {
case MSG_HIDE_PREVIEW:
candidateView.hidePreview();
suggestionsView.hidePreview();
break;
case MSG_UPDATE_SUGGESTION:
candidateView.updateSuggestions();
suggestionsView.updateSuggestions();
break;
}
}
@ -142,16 +142,16 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
}
}
private static class CandidateViewParams {
private static class SuggestionsViewParams {
public final int mPadding;
public final int mDividerWidth;
public final int mCandidateStripHeight;
public final int mSuggestionsStripHeight;
protected final List<TextView> mWords;
protected final List<View> mDividers;
protected final List<TextView> mInfos;
protected CandidateViewParams(List<TextView> words, List<View> dividers,
protected SuggestionsViewParams(List<TextView> words, List<View> dividers,
List<TextView> infos) {
mWords = words;
mDividers = dividers;
@ -165,22 +165,22 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
mDividerWidth = divider.getMeasuredWidth();
final Resources res = word.getResources();
mCandidateStripHeight = res.getDimensionPixelSize(R.dimen.candidate_strip_height);
mSuggestionsStripHeight = res.getDimensionPixelSize(R.dimen.suggestions_strip_height);
}
}
private static class SuggestionsStripParams extends CandidateViewParams {
private static final int DEFAULT_CANDIDATE_COUNT_IN_STRIP = 3;
private static final int DEFAULT_CENTER_CANDIDATE_PERCENTILE = 40;
private static class SuggestionsStripParams extends SuggestionsViewParams {
private static final int DEFAULT_SUGGESTIONS_COUNT_IN_STRIP = 3;
private static final int DEFAULT_CENTER_SUGGESTION_PERCENTILE = 40;
private static final int PUNCTUATIONS_IN_STRIP = 6;
private final int mColorTypedWord;
private final int mColorAutoCorrect;
private final int mColorSuggestedCandidate;
public final int mCandidateCountInStrip;
private final float mCenterCandidateWeight;
private final int mCenterCandidateIndex;
private final Drawable mMoreCandidateHint;
private final int mColorSuggested;
public final int mSuggestionsCountInStrip;
private final float mCenterSuggestionWeight;
private final int mCenterSuggestionIndex;
private final Drawable mMoreSuggestionsHint;
private static final CharacterStyle BOLD_SPAN = new StyleSpan(Typeface.BOLD);
private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan();
@ -205,33 +205,33 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
List<TextView> words, List<View> dividers, List<TextView> infos) {
super(words, dividers, infos);
final TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.CandidateView, defStyle, R.style.CandidateViewStyle);
mSuggestionStripOption = a.getInt(R.styleable.CandidateView_suggestionStripOption, 0);
mColorTypedWord = a.getColor(R.styleable.CandidateView_colorTypedWord, 0);
mColorAutoCorrect = a.getColor(R.styleable.CandidateView_colorAutoCorrect, 0);
mColorSuggestedCandidate = a.getColor(R.styleable.CandidateView_colorSuggested, 0);
mCandidateCountInStrip = a.getInt(
R.styleable.CandidateView_candidateCountInStrip,
DEFAULT_CANDIDATE_COUNT_IN_STRIP);
mCenterCandidateWeight = a.getInt(
R.styleable.CandidateView_centerCandidatePercentile,
DEFAULT_CENTER_CANDIDATE_PERCENTILE) / 100.0f;
attrs, R.styleable.SuggestionsView, defStyle, R.style.SuggestionsViewStyle);
mSuggestionStripOption = a.getInt(R.styleable.SuggestionsView_suggestionStripOption, 0);
mColorTypedWord = a.getColor(R.styleable.SuggestionsView_colorTypedWord, 0);
mColorAutoCorrect = a.getColor(R.styleable.SuggestionsView_colorAutoCorrect, 0);
mColorSuggested = a.getColor(R.styleable.SuggestionsView_colorSuggested, 0);
mSuggestionsCountInStrip = a.getInt(
R.styleable.SuggestionsView_suggestionsCountInStrip,
DEFAULT_SUGGESTIONS_COUNT_IN_STRIP);
mCenterSuggestionWeight = a.getInt(
R.styleable.SuggestionsView_centerSuggestionPercentile,
DEFAULT_CENTER_SUGGESTION_PERCENTILE) / 100.0f;
a.recycle();
mCenterCandidateIndex = mCandidateCountInStrip / 2;
mCenterSuggestionIndex = mSuggestionsCountInStrip / 2;
final Resources res = context.getResources();
mMoreCandidateHint = res.getDrawable(R.drawable.more_suggestions_hint);
mMoreSuggestionsHint = res.getDrawable(R.drawable.more_suggestions_hint);
mInvertedForegroundColorSpan = new ForegroundColorSpan(mColorTypedWord ^ 0x00ffffff);
mInvertedBackgroundColorSpan = new BackgroundColorSpan(mColorTypedWord);
final LayoutInflater inflater = LayoutInflater.from(context);
mWordToSaveView = (TextView)inflater.inflate(R.layout.candidate_word, null);
mHintToSaveView = (TextView)inflater.inflate(R.layout.candidate_word, null);
mWordToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null);
mHintToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null);
mHintToSaveText = context.getText(R.string.hint_add_to_dictionary);
}
private CharSequence getStyledCandidateWord(SuggestedWords suggestions, int pos) {
private CharSequence getStyledSuggestionWord(SuggestedWords suggestions, int pos) {
final CharSequence word = suggestions.getWord(pos);
final boolean isAutoCorrect = pos == 1 && willAutoCorrect(suggestions);
final boolean isTypedWordValid = pos == 0 && suggestions.mTypedWordValid;
@ -259,24 +259,24 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
// TODO: This works for 3 suggestions. Revisit this algorithm when there are 5 or more
// suggestions.
final int centerPos = willAutoCorrect(suggestions) ? 1 : 0;
if (index == mCenterCandidateIndex) {
if (index == mCenterSuggestionIndex) {
return centerPos;
} else if (index == centerPos) {
return mCenterCandidateIndex;
return mCenterSuggestionIndex;
} else {
return index;
}
}
private int getCandidateTextColor(int index, SuggestedWords suggestions, int pos) {
private int getSuggestionTextColor(int index, SuggestedWords suggestions, int pos) {
// TODO: Need to revisit this logic with bigram suggestions
final boolean isSuggestedCandidate = (pos != 0);
final boolean isSuggested = (pos != 0);
final int color;
if (index == mCenterCandidateIndex && willAutoCorrect(suggestions)) {
if (index == mCenterSuggestionIndex && willAutoCorrect(suggestions)) {
color = mColorAutoCorrect;
} else if (isSuggestedCandidate) {
color = mColorSuggestedCandidate;
} else if (isSuggested) {
color = mColorSuggested;
} else {
color = mColorTypedWord;
}
@ -312,7 +312,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
return;
}
final int countInStrip = mCandidateCountInStrip;
final int countInStrip = mSuggestionsCountInStrip;
setupTexts(suggestions, countInStrip);
mMoreSuggestionsAvailable = (suggestions.size() > countInStrip);
int x = 0;
@ -321,34 +321,34 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
if (index != 0) {
final View divider = mDividers.get(pos);
// Add divider if this isn't the left most suggestion in candidate strip.
// Add divider if this isn't the left most suggestion in suggestions strip.
stripView.addView(divider);
x += divider.getMeasuredWidth();
}
final CharSequence styled = mTexts.get(pos);
final TextView word = mWords.get(pos);
if (index == mCenterCandidateIndex && mMoreSuggestionsAvailable) {
if (index == mCenterSuggestionIndex && mMoreSuggestionsAvailable) {
// TODO: This "more suggestions hint" should have nicely designed icon.
word.setCompoundDrawablesWithIntrinsicBounds(
null, null, null, mMoreCandidateHint);
null, null, null, mMoreSuggestionsHint);
// HACK: To align with other TextView that has no compound drawables.
word.setCompoundDrawablePadding(-mMoreCandidateHint.getIntrinsicHeight());
word.setCompoundDrawablePadding(-mMoreSuggestionsHint.getIntrinsicHeight());
} else {
word.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
}
// Disable this candidate if the suggestion is null or empty.
// Disable this suggestion if the suggestion is null or empty.
word.setEnabled(!TextUtils.isEmpty(styled));
word.setTextColor(getCandidateTextColor(index, suggestions, pos));
final int width = getCandidateWidth(index, stripWidth);
word.setTextColor(getSuggestionTextColor(index, suggestions, pos));
final int width = getSuggestionWidth(index, stripWidth);
final CharSequence text = getEllipsizedText(styled, width, word.getPaint());
final float scaleX = word.getTextScaleX();
word.setText(text); // TextView.setText() resets text scale x to 1.0.
word.setTextScaleX(scaleX);
stripView.addView(word);
setLayoutWeight(
word, getCandidateWeight(index), ViewGroup.LayoutParams.MATCH_PARENT);
word, getSuggestionWeight(index), ViewGroup.LayoutParams.MATCH_PARENT);
x += word.getMeasuredWidth();
if (DBG) {
@ -368,19 +368,19 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
}
}
private int getCandidateWidth(int index, int maxWidth) {
final int paddings = mPadding * mCandidateCountInStrip;
final int dividers = mDividerWidth * (mCandidateCountInStrip - 1);
private int getSuggestionWidth(int index, int maxWidth) {
final int paddings = mPadding * mSuggestionsCountInStrip;
final int dividers = mDividerWidth * (mSuggestionsCountInStrip - 1);
final int availableWidth = maxWidth - paddings - dividers;
return (int)(availableWidth * getCandidateWeight(index));
return (int)(availableWidth * getSuggestionWeight(index));
}
private float getCandidateWeight(int index) {
if (index == mCenterCandidateIndex) {
return mCenterCandidateWeight;
private float getSuggestionWeight(int index) {
if (index == mCenterSuggestionIndex) {
return mCenterSuggestionWeight;
} else {
// TODO: Revisit this for cases of 5 or more suggestions
return (1.0f - mCenterCandidateWeight) / (mCandidateCountInStrip - 1);
return (1.0f - mCenterSuggestionWeight) / (mSuggestionsCountInStrip - 1);
}
}
@ -388,7 +388,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
mTexts.clear();
final int count = Math.min(suggestions.size(), countInStrip);
for (int pos = 0; pos < count; pos++) {
final CharSequence styled = getStyledCandidateWord(suggestions, pos);
final CharSequence styled = getStyledSuggestionWord(suggestions, pos);
mTexts.add(styled);
}
for (int pos = count; pos < countInStrip; pos++) {
@ -401,7 +401,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
final int countInStrip = Math.min(suggestions.size(), PUNCTUATIONS_IN_STRIP);
for (int index = 0; index < countInStrip; index++) {
if (index != 0) {
// Add divider if this isn't the left most suggestion in candidate strip.
// Add divider if this isn't the left most suggestion in suggestions strip.
stripView.addView(mDividers.get(index));
}
@ -413,7 +413,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
word.setTextScaleX(1.0f);
word.setCompoundDrawables(null, null, null, null);
stripView.addView(word);
setLayoutWeight(word, 1.0f, mCandidateStripHeight);
setLayoutWeight(word, 1.0f, mSuggestionsStripHeight);
}
mMoreSuggestionsAvailable = false;
}
@ -424,14 +424,14 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
final TextView wordView = mWordToSaveView;
wordView.setTextColor(mColorTypedWord);
final int wordWidth = (int)(width * mCenterCandidateWeight);
final int wordWidth = (int)(width * mCenterSuggestionWeight);
final CharSequence text = getEllipsizedText(word, wordWidth, wordView.getPaint());
final float wordScaleX = wordView.getTextScaleX();
wordView.setTag(word);
wordView.setText(text);
wordView.setTextScaleX(wordScaleX);
stripView.addView(wordView);
setLayoutWeight(wordView, mCenterCandidateWeight, ViewGroup.LayoutParams.MATCH_PARENT);
setLayoutWeight(wordView, mCenterSuggestionWeight, ViewGroup.LayoutParams.MATCH_PARENT);
stripView.addView(mDividers.get(0));
@ -443,56 +443,56 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
hintView.setTextScaleX(hintScaleX);
stripView.addView(hintView);
setLayoutWeight(
hintView, 1.0f - mCenterCandidateWeight, ViewGroup.LayoutParams.MATCH_PARENT);
hintView, 1.0f - mCenterSuggestionWeight, ViewGroup.LayoutParams.MATCH_PARENT);
}
}
/**
* Construct a CandidateView for showing suggested words for completion.
* Construct a {@link SuggestionsView} for showing suggested words for completion.
* @param context
* @param attrs
*/
public CandidateView(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.candidateViewStyle);
public SuggestionsView(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.suggestionsViewStyle);
}
public CandidateView(Context context, AttributeSet attrs, int defStyle) {
public SuggestionsView(Context context, AttributeSet attrs, int defStyle) {
// Note: Up to version 10 (Gingerbread) of the API, LinearLayout doesn't have 3-argument
// constructor.
// TODO: Call 3-argument constructor, super(context, attrs, defStyle), when we abandon
// backward compatibility with the version 10 or earlier of the API.
super(context, attrs);
if (defStyle != R.attr.candidateViewStyle) {
if (defStyle != R.attr.suggestionsViewStyle) {
throw new IllegalArgumentException(
"can't accept defStyle other than R.attr.candidateViewStyle: defStyle="
"can't accept defStyle other than R.attr.suggestionsViewStyle: defStyle="
+ defStyle);
}
setBackgroundDrawable(LinearLayoutCompatUtils.getBackgroundDrawable(
context, attrs, defStyle, R.style.CandidateViewStyle));
context, attrs, defStyle, R.style.SuggestionsViewStyle));
final LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.candidates_strip, this);
inflater.inflate(R.layout.suggestions_strip, this);
mPreviewPopup = new PopupWindow(context);
mPreviewText = (TextView) inflater.inflate(R.layout.candidate_preview, null);
mPreviewText = (TextView) inflater.inflate(R.layout.suggestion_preview, null);
mPreviewPopup.setWindowLayoutMode(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mPreviewPopup.setContentView(mPreviewText);
mPreviewPopup.setBackgroundDrawable(null);
mCandidatesPlacer = (ViewGroup)findViewById(R.id.candidates_placer);
mCandidatesStrip = (ViewGroup)findViewById(R.id.candidates_strip);
mSuggestionsPlacer = (ViewGroup)findViewById(R.id.suggestions_placer);
mSuggestionsStrip = (ViewGroup)findViewById(R.id.suggestions_strip);
for (int pos = 0; pos < MAX_SUGGESTIONS; pos++) {
final TextView word = (TextView)inflater.inflate(R.layout.candidate_word, null);
final TextView word = (TextView)inflater.inflate(R.layout.suggestion_word, null);
word.setTag(pos);
word.setOnClickListener(this);
word.setOnLongClickListener(this);
mWords.add(word);
final View divider = inflater.inflate(R.layout.candidate_divider, null);
final View divider = inflater.inflate(R.layout.suggestion_divider, null);
divider.setTag(pos);
divider.setOnClickListener(this);
mDividers.add(divider);
mInfos.add((TextView)inflater.inflate(R.layout.candidate_info, null));
mInfos.add((TextView)inflater.inflate(R.layout.suggestion_info, null));
}
mStripParams = new SuggestionsStripParams(context, attrs, defStyle, mWords, mDividers,
@ -534,7 +534,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
if (mSuggestions.size() == 0)
return;
mStripParams.layout(mSuggestions, mCandidatesStrip, mCandidatesPlacer, getWidth());
mStripParams.layout(mSuggestions, mSuggestionsStrip, mSuggestionsPlacer, getWidth());
}
private static CharSequence getDebugInfo(SuggestedWords suggestions, int pos) {
@ -632,13 +632,13 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
}
public boolean isShowingAddToDictionaryHint() {
return mCandidatesStrip.getChildCount() > 0
&& mCandidatesStrip.getChildAt(0) == mStripParams.mWordToSaveView;
return mSuggestionsStrip.getChildCount() > 0
&& mSuggestionsStrip.getChildAt(0) == mStripParams.mWordToSaveView;
}
public void showAddToDictionaryHint(CharSequence word) {
clear();
mStripParams.layoutAddToDictionaryHint(word, mCandidatesStrip, getWidth());
mStripParams.layoutAddToDictionaryHint(word, mSuggestionsStrip, getWidth());
}
public boolean dismissAddToDictionaryHint() {
@ -655,9 +655,9 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
public void clear() {
mShowingAutoCorrectionInverted = false;
mCandidatesPlacer.removeAllViews();
mCandidatesPlacer.addView(mCandidatesStrip);
mCandidatesStrip.removeAllViews();
mSuggestionsPlacer.removeAllViews();
mSuggestionsPlacer.addView(mSuggestionsStrip);
mSuggestionsStrip.removeAllViews();
mMoreSuggestionsWindow.dismiss();
}
@ -736,7 +736,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
// TODO: Revise how we determine the height
final int maxHeight = dm.heightPixels - mKeyboardView.getHeight() - getHeight() * 3;
final MoreSuggestions.Builder builder = mMoreSuggestionsBuilder;
builder.layout(mSuggestions, params.mCandidateCountInStrip, maxWidth, maxHeight);
builder.layout(mSuggestions, params.mSuggestionsCountInStrip, maxWidth, maxHeight);
mMoreSuggestionsView.setKeyboard(builder.build());
container.measure(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

View File

@ -16,15 +16,7 @@
package com.android.inputmethod.latin;
import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
import com.android.inputmethod.compat.InputTypeCompatUtils;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.inputmethodservice.InputMethodService;
import android.os.AsyncTask;
@ -37,6 +29,13 @@ import android.text.format.DateUtils;
import android.util.Log;
import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
import com.android.inputmethod.compat.InputTypeCompatUtils;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
@ -47,7 +46,6 @@ import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
@ -175,21 +173,21 @@ public class Utils {
// If user selected aggressive auto correction mode, there is no need to use the safety
// net.
if (suggest.isAggressiveAutoCorrectionMode()) return false;
CharSequence typedWord = suggestions.getWord(0);
final CharSequence typedWord = suggestions.getWord(0);
// If the length of typed word is less than MINIMUM_SAFETY_NET_CHAR_LENGTH,
// we should not use net because relatively edit distance can be big.
if (typedWord.length() < MINIMUM_SAFETY_NET_CHAR_LENGTH) return false;
CharSequence candidateWord = suggestions.getWord(1);
final CharSequence suggestionWord = suggestions.getWord(1);
final int typedWordLength = typedWord.length();
final int maxEditDistanceOfNativeDictionary = typedWordLength < 5 ? 2 : typedWordLength / 2;
final int distance = Utils.editDistance(typedWord, candidateWord);
final int distance = Utils.editDistance(typedWord, suggestionWord);
if (DBG) {
Log.d(TAG, "Autocorrected edit distance = " + distance
+ ", " + maxEditDistanceOfNativeDictionary);
}
if (distance > maxEditDistanceOfNativeDictionary) {
if (DBG) {
Log.d(TAG, "Safety net: before = " + typedWord + ", after = " + candidateWord);
Log.d(TAG, "Safety net: before = " + typedWord + ", after = " + suggestionWord);
Log.w(TAG, "(Error) The edit distance of this correction exceeds limit. "
+ "Turning off auto-correction.");
}
@ -717,7 +715,7 @@ public class Utils {
// Don't cache suggestions.size(), since we may be removing items
while (i < suggestions.size()) {
final CharSequence cur = suggestions.get(i);
// Compare each candidate with each previous candidate
// Compare each suggestion with each previous suggestion
for (int j = 0; j < i; j++) {
CharSequence previous = suggestions.get(j);
if (TextUtils.equals(cur, previous)) {