aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.pngbin126 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/btn_suggestion_pressed.9.png (renamed from java/res/drawable-hdpi/btn_candidate_pressed.9.png)bin1234 -> 1234 bytes
-rw-r--r--java/res/drawable-hdpi/ic_dialog_keyboard.pngbin1157 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/ic_subtype_mic.pngbin892 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/suggestion_feedback_background.9.png (renamed from java/res/drawable-hdpi/candidate_feedback_background.9.png)bin1607 -> 1607 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.pngbin999 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/btn_suggestion_pressed.9.png (renamed from java/res/drawable-mdpi/btn_candidate_pressed.9.png)bin11006 -> 11006 bytes
-rw-r--r--java/res/drawable-mdpi/ic_dialog_keyboard.pngbin528 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/ic_subtype_mic.pngbin648 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/suggestion_feedback_background.9.png (renamed from java/res/drawable-mdpi/candidate_feedback_background.9.png)bin1182 -> 1182 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_light_popup_normal.9.pngbin126 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_suggestion_pressed.9.png (renamed from java/res/drawable-xhdpi/btn_candidate_pressed.9.png)bin1266 -> 1266 bytes
-rw-r--r--java/res/drawable-xhdpi/ic_dialog_keyboard.pngbin1589 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/ic_subtype_mic.pngbin1099 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/suggestion_feedback_background.9.png (renamed from java/res/drawable-xhdpi/candidate_feedback_background.9.png)bin1676 -> 1676 bytes
-rw-r--r--java/res/drawable/btn_suggestion.xml (renamed from java/res/drawable/btn_candidate.xml)4
-rw-r--r--java/res/drawable/btn_suggestion_ics.xml (renamed from java/res/drawable/btn_candidate_ics.xml)0
-rw-r--r--java/res/layout/input_view.xml47
-rw-r--r--java/res/layout/more_suggestions.xml2
-rw-r--r--java/res/layout/suggestion_divider.xml (renamed from java/res/layout/candidate_divider.xml)2
-rw-r--r--java/res/layout/suggestion_info.xml (renamed from java/res/layout/candidate_info.xml)0
-rw-r--r--java/res/layout/suggestion_preview.xml (renamed from java/res/layout/candidate_preview.xml)20
-rw-r--r--java/res/layout/suggestion_word.xml (renamed from java/res/layout/candidate_word.xml)10
-rw-r--r--java/res/layout/suggestions_strip.xml (renamed from java/res/layout/candidates_strip.xml)4
-rw-r--r--java/res/values-land/dimens.xml5
-rw-r--r--java/res/values-sw600dp-land/dimens.xml2
-rw-r--r--java/res/values-sw600dp/dimens.xml10
-rw-r--r--java/res/values-sw768dp-land/dimens.xml2
-rw-r--r--java/res/values-sw768dp/dimens.xml12
-rw-r--r--java/res/values/attrs.xml8
-rw-r--r--java/res/values/config.xml4
-rw-r--r--java/res/values/dimens.xml17
-rw-r--r--java/res/values/donottranslate.xml7
-rw-r--r--java/res/values/strings.xml23
-rw-r--r--java/res/values/styles.xml18
-rw-r--r--java/res/values/themes-basic-highcontrast.xml2
-rw-r--r--java/res/values/themes-basic.xml2
-rw-r--r--java/res/values/themes-gingerbread.xml2
-rw-r--r--java/res/values/themes-ics.xml2
-rw-r--r--java/res/values/themes-stone-bold.xml2
-rw-r--r--java/res/values/themes-stone.xml2
-rw-r--r--java/res/xml/kbd_rows_russian.xml3
-rw-r--r--java/res/xml/kbd_rows_scandinavian.xml7
-rw-r--r--java/res/xml/kbd_rows_serbian.xml9
-rw-r--r--java/res/xml/method.xml6
-rw-r--r--java/res/xml/prefs.xml6
-rw-r--r--java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java9
-rw-r--r--java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java26
-rw-r--r--java/src/com/android/inputmethod/keyboard/Key.java217
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardView.java14
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java10
-rw-r--r--java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java48
-rw-r--r--java/src/com/android/inputmethod/keyboard/MoreKeysDetector.java64
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java88
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/Row.java49
-rw-r--r--java/src/com/android/inputmethod/latin/AutoCorrection.java10
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java121
-rw-r--r--java/src/com/android/inputmethod/latin/MoreSuggestions.java10
-rw-r--r--java/src/com/android/inputmethod/latin/MoreSuggestionsView.java51
-rw-r--r--java/src/com/android/inputmethod/latin/Settings.java11
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeSwitcher.java26
-rw-r--r--java/src/com/android/inputmethod/latin/Suggest.java20
-rw-r--r--java/src/com/android/inputmethod/latin/SuggestionsView.java (renamed from java/src/com/android/inputmethod/latin/CandidateView.java)427
-rw-r--r--java/src/com/android/inputmethod/latin/Utils.java26
64 files changed, 627 insertions, 840 deletions
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png
deleted file mode 100644
index 2ed1b3447..000000000
--- a/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_candidate_pressed.9.png b/java/res/drawable-hdpi/btn_suggestion_pressed.9.png
index 7acceaee7..7acceaee7 100644
--- a/java/res/drawable-hdpi/btn_candidate_pressed.9.png
+++ b/java/res/drawable-hdpi/btn_suggestion_pressed.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_dialog_keyboard.png b/java/res/drawable-hdpi/ic_dialog_keyboard.png
deleted file mode 100644
index 305441633..000000000
--- a/java/res/drawable-hdpi/ic_dialog_keyboard.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_subtype_mic.png b/java/res/drawable-hdpi/ic_subtype_mic.png
deleted file mode 100644
index 25c9ee2ab..000000000
--- a/java/res/drawable-hdpi/ic_subtype_mic.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/candidate_feedback_background.9.png b/java/res/drawable-hdpi/suggestion_feedback_background.9.png
index 16499002e..16499002e 100644
--- a/java/res/drawable-hdpi/candidate_feedback_background.9.png
+++ b/java/res/drawable-hdpi/suggestion_feedback_background.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png
deleted file mode 100644
index 0e828a6cf..000000000
--- a/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_candidate_pressed.9.png b/java/res/drawable-mdpi/btn_suggestion_pressed.9.png
index 02b4e9a53..02b4e9a53 100644
--- a/java/res/drawable-mdpi/btn_candidate_pressed.9.png
+++ b/java/res/drawable-mdpi/btn_suggestion_pressed.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_dialog_keyboard.png b/java/res/drawable-mdpi/ic_dialog_keyboard.png
deleted file mode 100644
index 9a5aada8b..000000000
--- a/java/res/drawable-mdpi/ic_dialog_keyboard.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_subtype_mic.png b/java/res/drawable-mdpi/ic_subtype_mic.png
deleted file mode 100644
index 0b6aca802..000000000
--- a/java/res/drawable-mdpi/ic_subtype_mic.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/candidate_feedback_background.9.png b/java/res/drawable-mdpi/suggestion_feedback_background.9.png
index 2a80f096d..2a80f096d 100644
--- a/java/res/drawable-mdpi/candidate_feedback_background.9.png
+++ b/java/res/drawable-mdpi/suggestion_feedback_background.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_normal.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_normal.9.png
deleted file mode 100644
index 2ed1b3447..000000000
--- a/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_candidate_pressed.9.png b/java/res/drawable-xhdpi/btn_suggestion_pressed.9.png
index 41e126a73..41e126a73 100644
--- a/java/res/drawable-xhdpi/btn_candidate_pressed.9.png
+++ b/java/res/drawable-xhdpi/btn_suggestion_pressed.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_dialog_keyboard.png b/java/res/drawable-xhdpi/ic_dialog_keyboard.png
deleted file mode 100644
index f114c93b6..000000000
--- a/java/res/drawable-xhdpi/ic_dialog_keyboard.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_subtype_mic.png b/java/res/drawable-xhdpi/ic_subtype_mic.png
deleted file mode 100644
index fc8d18cc2..000000000
--- a/java/res/drawable-xhdpi/ic_subtype_mic.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/candidate_feedback_background.9.png b/java/res/drawable-xhdpi/suggestion_feedback_background.9.png
index 0ec90e5ea..0ec90e5ea 100644
--- a/java/res/drawable-xhdpi/candidate_feedback_background.9.png
+++ b/java/res/drawable-xhdpi/suggestion_feedback_background.9.png
Binary files differ
diff --git a/java/res/drawable/btn_candidate.xml b/java/res/drawable/btn_suggestion.xml
index efcee9f54..cde12fe55 100644
--- a/java/res/drawable/btn_candidate.xml
+++ b/java/res/drawable/btn_suggestion.xml
@@ -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>
diff --git a/java/res/drawable/btn_candidate_ics.xml b/java/res/drawable/btn_suggestion_ics.xml
index e4257e327..e4257e327 100644
--- a/java/res/drawable/btn_candidate_ics.xml
+++ b/java/res/drawable/btn_suggestion_ics.xml
diff --git a/java/res/layout/input_view.xml b/java/res/layout/input_view.xml
index 821082f91..88b48fccd 100644
--- a/java/res/layout/input_view.xml
+++ b/java/res/layout/input_view.xml
@@ -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_view_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"
diff --git a/java/res/layout/more_suggestions.xml b/java/res/layout/more_suggestions.xml
index d387a1573..6aa82e197 100644
--- a/java/res/layout/more_suggestions.xml
+++ b/java/res/layout/more_suggestions.xml
@@ -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"
/>
diff --git a/java/res/layout/candidate_divider.xml b/java/res/layout/suggestion_divider.xml
index dc5e77966..e38a725b1 100644
--- a/java/res/layout/candidate_divider.xml
+++ b/java/res/layout/suggestion_divider.xml
@@ -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.
diff --git a/java/res/layout/candidate_info.xml b/java/res/layout/suggestion_info.xml
index a364d46aa..a364d46aa 100644
--- a/java/res/layout/candidate_info.xml
+++ b/java/res/layout/suggestion_info.xml
diff --git a/java/res/layout/candidate_preview.xml b/java/res/layout/suggestion_preview.xml
index 32705c996..3c026ae0e 100644
--- a/java/res/layout/candidate_preview.xml
+++ b/java/res/layout/suggestion_preview.xml
@@ -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.
*/
-->
diff --git a/java/res/layout/candidate_word.xml b/java/res/layout/suggestion_word.xml
index b711e8f29..d64cacf04 100644
--- a/java/res/layout/candidate_word.xml
+++ b/java/res/layout/suggestion_word.xml
@@ -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"
diff --git a/java/res/layout/candidates_strip.xml b/java/res/layout/suggestions_strip.xml
index fdb13f73e..9252017b4 100644
--- a/java/res/layout/candidates_strip.xml
+++ b/java/res/layout/suggestions_strip.xml
@@ -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" />
diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 4bf0e2092..9149b5d2a 100644
--- a/java/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
@@ -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_view_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>
diff --git a/java/res/values-sw600dp-land/dimens.xml b/java/res/values-sw600dp-land/dimens.xml
index 1d26338c5..f1715af64 100644
--- a/java/res/values-sw600dp-land/dimens.xml
+++ b/java/res/values-sw600dp-land/dimens.xml
@@ -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>
diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml
index 6ce23cc70..6955736b3 100644
--- a/java/res/values-sw600dp/dimens.xml
+++ b/java/res/values-sw600dp/dimens.xml
@@ -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>
diff --git a/java/res/values-sw768dp-land/dimens.xml b/java/res/values-sw768dp-land/dimens.xml
index 0cfdffddd..7303ea1e7 100644
--- a/java/res/values-sw768dp-land/dimens.xml
+++ b/java/res/values-sw768dp-land/dimens.xml
@@ -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>
diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml
index 9b307e6f3..7d2ac4860 100644
--- a/java/res/values-sw768dp/dimens.xml
+++ b/java/res/values-sw768dp/dimens.xml
@@ -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_view_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>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 9d3426842..fa6b2eb39 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -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">
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 923e37d85..1ffbbacbe 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -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>
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index b7609a4ac..a506ed74d 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -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_view_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. -->
diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 5cd995be9..228380da7 100644
--- a/java/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -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 -->
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 247bdba41..37cb23b70 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -75,11 +75,16 @@
<!-- Description for option enabling or disabling the use of names of people in Contacts for suggestion and correction [CHAR LIMIT=65] -->
<string name="use_contacts_dict_summary">Use names from Contacts for suggestions and corrections</string>
+ <!-- Option name for enabling insertion of suggestion spans (advanced option) [CHAR LIMIT=25] -->
+ <string name="enable_span_insert">Enable recorrections</string>
+ <!-- Option summary for enabling insertion of suggestion spans (advanced option) [CHAR LIMIT=65] -->
+ <string name="enable_span_insert_summary">Set suggestions for recorrections</string>
+
<!-- Option to enable auto capitalization of sentences -->
<string name="auto_cap">Auto-capitalization</string>
<!-- Option to configure dictionaries -->
- <string name="configure_dictionaries_title">Configure dictionaries</string>
+ <string name="configure_dictionaries_title">Add-on dictionaries</string>
<!-- Option to enable showing suggestions -->
<string name="prefs_show_suggestions">Show correction suggestions</string>
@@ -99,11 +104,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 -->
@@ -285,7 +290,7 @@
<string name="ok">OK</string>
<!-- Preferences item for enabling speech input -->
- <string name="voice_input">Voice input</string>
+ <string name="voice_input">Voice input key</string>
<!-- Voice Input modes -->
<!-- On settings screen, voice input pop-up menu option to show voice key on main keyboard [CHAR LIMIT=20] -->
@@ -312,7 +317,7 @@
<string name="language_selection_title">Input languages</string>
<!-- Preference for input language selection -->
- <string name="select_language">Select input languages</string>
+ <string name="select_language">Input languages</string>
<!-- Add to dictionary hint -->
<string name="hint_add_to_dictionary">\u2190 Touch again to save</string>
@@ -332,11 +337,11 @@
<!-- Title of the item to change the keyboard theme [CHAR LIMIT=20]-->
<string name="keyboard_layout">Keyboard theme</string>
- <!-- Description for German QWERTY keyboard subtype [CHAR LIMIT=35] -->
+ <!-- Description for German QWERTY keyboard subtype [CHAR LIMIT=22] -->
<string name="subtype_de_qwerty">German QWERTY</string>
- <!-- Description for English (United Kingdom) keyboard subtype [CHAR LIMIT=35] -->
+ <!-- Description for English (United Kingdom) keyboard subtype [CHAR LIMIT=22] -->
<string name="subtype_en_GB">English (UK)</string>
- <!-- Description for English (United States) keyboard subtype [CHAR LIMIT=35] -->
+ <!-- Description for English (United States) keyboard subtype [CHAR LIMIT=22] -->
<string name="subtype_en_US">English (US)</string>
<!-- Title of an option for usability study mode -->
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 4cc2a5306..17b3d14ab 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -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>
diff --git a/java/res/values/themes-basic-highcontrast.xml b/java/res/values/themes-basic-highcontrast.xml
index 51bf2f1d2..ee4109326 100644
--- a/java/res/values/themes-basic-highcontrast.xml
+++ b/java/res/values/themes-basic-highcontrast.xml
@@ -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>
diff --git a/java/res/values/themes-basic.xml b/java/res/values/themes-basic.xml
index 7288dbacb..ff7f9ed35 100644
--- a/java/res/values/themes-basic.xml
+++ b/java/res/values/themes-basic.xml
@@ -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>
diff --git a/java/res/values/themes-gingerbread.xml b/java/res/values/themes-gingerbread.xml
index 5b62378f6..af91c3bed 100644
--- a/java/res/values/themes-gingerbread.xml
+++ b/java/res/values/themes-gingerbread.xml
@@ -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>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 597d87b4c..341afcc53 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -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>
diff --git a/java/res/values/themes-stone-bold.xml b/java/res/values/themes-stone-bold.xml
index ff7107d32..915f2263e 100644
--- a/java/res/values/themes-stone-bold.xml
+++ b/java/res/values/themes-stone-bold.xml
@@ -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>
diff --git a/java/res/values/themes-stone.xml b/java/res/values/themes-stone.xml
index 35390d111..6d5b9dbae 100644
--- a/java/res/values/themes-stone.xml
+++ b/java/res/values/themes-stone.xml
@@ -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>
diff --git a/java/res/xml/kbd_rows_russian.xml b/java/res/xml/kbd_rows_russian.xml
index d6075d2e3..f1794e750 100644
--- a/java/res/xml/kbd_rows_russian.xml
+++ b/java/res/xml/kbd_rows_russian.xml
@@ -29,8 +29,7 @@
<Key
latin:keyLabel="й"
latin:keyHintLabel="1"
- latin:moreKeys="1"
- latin:keyWidth="8.75%p" />
+ latin:moreKeys="1" />
<Key
latin:keyLabel="ц"
latin:keyHintLabel="2"
diff --git a/java/res/xml/kbd_rows_scandinavian.xml b/java/res/xml/kbd_rows_scandinavian.xml
index 6ef54ebba..4f138c514 100644
--- a/java/res/xml/kbd_rows_scandinavian.xml
+++ b/java/res/xml/kbd_rows_scandinavian.xml
@@ -24,13 +24,12 @@
<include
latin:keyboardLayout="@xml/kbd_key_styles" />
<Row
- latin:keyWidth="9.09%p"
+ latin:keyWidth="9.091%p"
>
<Key
latin:keyLabel="q"
latin:keyHintLabel="1"
- latin:moreKeys="@string/more_keys_for_q"
- latin:keyWidth="8.75%p" />
+ latin:moreKeys="@string/more_keys_for_q" />
<Key
latin:keyLabel="w"
latin:keyHintLabel="2"
@@ -72,7 +71,7 @@
latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="9.09%p"
+ latin:keyWidth="9.091%p"
>
<Key
latin:keyLabel="a"
diff --git a/java/res/xml/kbd_rows_serbian.xml b/java/res/xml/kbd_rows_serbian.xml
index c911ae807..da4d69521 100644
--- a/java/res/xml/kbd_rows_serbian.xml
+++ b/java/res/xml/kbd_rows_serbian.xml
@@ -24,7 +24,7 @@
<include
latin:keyboardLayout="@xml/kbd_key_styles" />
<Row
- latin:keyWidth="9.09%p"
+ latin:keyWidth="9.091%p"
>
<Key
latin:keyLabel="Ñ™"
@@ -71,7 +71,7 @@
latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="9.09%p"
+ latin:keyWidth="9.091%p"
>
<Key
latin:keyLabel="а" />
@@ -98,10 +98,11 @@
latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="8.90%p"
+ latin:keyWidth="8.5%p"
>
<Key
- latin:keyStyle="shiftKeyStyle" />
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="11.75%p" />
<Key
latin:keyLabel="Ñ•" />
<Key
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 452294e04..f2f3178de 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -20,7 +20,7 @@
<!-- The attributes in this XML file provide configuration information -->
<!-- for the Input Method Manager. -->
-<!-- Keyboard: en_US, en_GB, ar, cs, da, de, de_ZZ, es, es_US, fi, fr, fr_CA, fr_CH, hr, hu, it, iw, nb, nl, pl, pt, ru, sr, sv, tr -->
+<!-- Keyboard: en_US, en_GB, ar, cs, da, de, de(QWERTY), es, es_US, fi, fr, fr_CA, fr_CH, hr, hu, it, iw, nb, nl, pl, pt, ru, sr, sv, tr -->
<!-- TODO: use <lang>_keyboard icon instead of a common keyboard icon. -->
<!-- If IME doesn't have an applicable subtype, the first subtype will be used as a default
subtype.-->
@@ -64,9 +64,9 @@
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_de_qwerty"
- android:imeSubtypeLocale="de_ZZ"
+ android:imeSubtypeLocale="de"
android:imeSubtypeMode="keyboard"
- android:imeSubtypeExtraValue="AsciiCapable"
+ android:imeSubtypeExtraValue="AsciiCapable,KeyboardLocale=de_ZZ"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 2f321814e..d02e5d7b6 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -132,6 +132,12 @@
android:summary="@string/bigram_suggestion_summary"
android:persistent="true"
android:defaultValue="true" />
+ <CheckBoxPreference
+ android:key="enable_span_insert"
+ android:title="@string/enable_span_insert"
+ android:summary="@string/enable_span_insert_summary"
+ android:persistent="true"
+ android:defaultValue="true" />
<!-- TODO: evaluate results and revive this option. The code already supports it. -->
<!-- <CheckBoxPreference -->
<!-- android:key="bigram_prediction" -->
diff --git a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
index 7aab66d05..8e2ee0f7a 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
@@ -73,16 +73,17 @@ public class InputMethodServiceCompatWrapper extends InputMethodService {
// This call is required to let LatinIME itself know a subtype changed
// event when the API level is 10 or previous.
@SuppressWarnings("unused")
- public void notifyOnCurrentInputMethodSubtypeChanged(InputMethodSubtypeCompatWrapper subtype) {
+ public void notifyOnCurrentInputMethodSubtypeChanged(
+ InputMethodSubtypeCompatWrapper newSubtype) {
// Do nothing when the API level is 11 or later
// and FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES is not true
if (CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED && !InputMethodManagerCompatWrapper.
FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES) {
return;
}
- if (subtype == null) {
- subtype = mImm.getCurrentInputMethodSubtype();
- }
+ final InputMethodSubtypeCompatWrapper subtype = (newSubtype == null)
+ ? mImm.getCurrentInputMethodSubtype()
+ : newSubtype;
if (subtype != null) {
if (!InputMethodManagerCompatWrapper.FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES
&& !subtype.isDummy()) return;
diff --git a/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java b/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java
index bf2512d7b..75efa52f2 100644
--- a/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java
+++ b/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java
@@ -16,28 +16,28 @@
package com.android.inputmethod.deprecated.recorrection;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.text.TextUtils;
+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.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.SuggestionsView;
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;
-import android.view.inputmethod.ExtractedText;
-import android.view.inputmethod.ExtractedTextRequest;
-import android.view.inputmethod.InputConnection;
-
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();
}
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index b919bcfc4..15ec80b6e 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -31,7 +31,6 @@ import com.android.inputmethod.keyboard.internal.KeyboardBuilder.ParseException;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.keyboard.internal.KeyboardParams;
import com.android.inputmethod.keyboard.internal.MoreKeySpecParser;
-import com.android.inputmethod.keyboard.internal.Row;
import com.android.inputmethod.latin.R;
import java.util.HashMap;
@@ -243,133 +242,125 @@ public class Key {
* parser.
* @param res resources associated with the caller's context
* @param params the keyboard building parameters.
- * @param row the row that this key belongs to.
- * @param x the x coordinate of the top-left
- * @param y the y coordinate of the top-left
+ * @param row the row that this key belongs to. row's x-coordinate will be the right edge of
+ * this key.
* @param parser the XML parser containing the attributes for this key
* @param keyStyles active key styles set
*/
- public Key(Resources res, KeyboardParams params, Row row, int x, int y,
+ public Key(Resources res, KeyboardParams params, KeyboardBuilder.Row row,
XmlResourceParser parser, KeyStyles keyStyles) {
final TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
- int keyWidth;
- try {
- mHeight = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_rowHeight,
- params.mHeight, row.mRowHeight) - params.mVerticalGap;
- mHorizontalGap = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_horizontalGap,
- params.mWidth, params.mHorizontalGap);
- mVerticalGap = params.mVerticalGap;
- keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_keyWidth,
- params.mWidth, row.mDefaultKeyWidth);
- } finally {
- keyboardAttr.recycle();
- }
+ mHeight = (int)KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
+ R.styleable.Keyboard_rowHeight, params.mHeight, row.mRowHeight)
+ - params.mVerticalGap;
+ final float horizontalGap = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
+ R.styleable.Keyboard_horizontalGap, params.mWidth, params.mHorizontalGap);
+ mVerticalGap = params.mVerticalGap;
+ float keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
+ R.styleable.Keyboard_keyWidth, params.mWidth, row.mDefaultKeyWidth);
+ keyboardAttr.recycle();
final TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard_Key);
- try {
- final KeyStyle style;
- if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyStyle)) {
- String styleName = keyAttr.getString(R.styleable.Keyboard_Key_keyStyle);
- style = keyStyles.getKeyStyle(styleName);
- if (style == null)
- throw new ParseException("Unknown key style: " + styleName, parser);
- } else {
- style = keyStyles.getEmptyKeyStyle();
- }
- final int keyboardWidth = params.mOccupiedWidth;
- int keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr,
- R.styleable.Keyboard_Key_keyXPos, keyboardWidth, x);
- if (keyXPos < 0) {
- // If keyXPos is negative, the actual x-coordinate will be k + keyXPos.
- keyXPos += keyboardWidth;
- if (keyXPos < x) {
- // keyXPos shouldn't be less than x because drawable area for this key starts
- // at x. Or, this key will overlaps the adjacent key on its left hand side.
- keyXPos = x;
- }
- }
- if (keyWidth == KEYWIDTH_FILL_RIGHT) {
- // If keyWidth is zero, the actual key width will be determined to fill out the
- // area up to the right edge of the keyboard.
- keyWidth = keyboardWidth - keyXPos;
- } else if (keyWidth <= KEYWIDTH_FILL_BOTH) {
- // If keyWidth is negative, the actual key width will be determined to fill out the
- // area between the nearest key on the left hand side and the right edge of the
- // keyboard.
+ final KeyStyle style;
+ if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyStyle)) {
+ String styleName = keyAttr.getString(R.styleable.Keyboard_Key_keyStyle);
+ style = keyStyles.getKeyStyle(styleName);
+ if (style == null)
+ throw new ParseException("Unknown key style: " + styleName, parser);
+ } else {
+ style = keyStyles.getEmptyKeyStyle();
+ }
+
+ final int keyboardWidth = params.mOccupiedWidth;
+ final float x = row.mCurrentX;
+ float keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr,
+ R.styleable.Keyboard_Key_keyXPos, keyboardWidth, x);
+ if (keyXPos < 0) {
+ // If keyXPos is negative, the actual x-coordinate will be keyboardWidth + keyXPos.
+ keyXPos += keyboardWidth;
+ if (keyXPos < x) {
+ // keyXPos shouldn't be less than x because drawable area for this key starts
+ // at x. Or, this key will overlaps the adjacent key on its left hand side.
keyXPos = x;
- keyWidth = keyboardWidth - keyXPos;
}
+ }
+ if (keyWidth == KEYWIDTH_FILL_RIGHT) {
+ // If keyWidth is zero, the actual key width will be determined to fill out the
+ // area up to the right edge of the keyboard.
+ keyWidth = keyboardWidth - keyXPos;
+ } else if (keyWidth <= KEYWIDTH_FILL_BOTH) {
+ // If keyWidth is negative, the actual key width will be determined to fill out the
+ // area between the nearest key on the left hand side and the right edge of the
+ // keyboard.
+ keyXPos = x;
+ keyWidth = keyboardWidth - keyXPos;
+ }
- // Horizontal gap is divided equally to both sides of the key.
- mX = keyXPos + mHorizontalGap / 2;
- mY = y;
- mWidth = keyWidth - mHorizontalGap;
-
- final CharSequence[] moreKeys = style.getTextArray(
- keyAttr, R.styleable.Keyboard_Key_moreKeys);
- // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of
- // config_digit_more_keys_enabled.
- if (params.mId.isAlphabetKeyboard() && !res.getBoolean(
- R.bool.config_digit_more_keys_enabled)) {
- mMoreKeys = MoreKeySpecParser.filterOut(
- res, moreKeys, MoreKeySpecParser.DIGIT_FILTER);
- } else {
- mMoreKeys = moreKeys;
- }
- mMaxMoreKeysColumn = style.getInt(keyboardAttr,
- R.styleable.Keyboard_Key_maxMoreKeysColumn,
- params.mMaxMiniKeyboardColumn);
-
- mRepeatable = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isRepeatable, false);
- mFunctional = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isFunctional, false);
- mSticky = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isSticky, false);
- mEnabled = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_enabled, true);
- mEdgeFlags = 0;
-
- final KeyboardIconsSet iconsSet = params.mIconsSet;
- mVisualInsetsLeft = KeyboardBuilder.getDimensionOrFraction(keyAttr,
- R.styleable.Keyboard_Key_visualInsetsLeft, keyboardWidth, 0);
- mVisualInsetsRight = KeyboardBuilder.getDimensionOrFraction(keyAttr,
- R.styleable.Keyboard_Key_visualInsetsRight, keyboardWidth, 0);
- mPreviewIcon = iconsSet.getIcon(style.getInt(
- keyAttr, R.styleable.Keyboard_Key_keyIconPreview,
- KeyboardIconsSet.ICON_UNDEFINED));
- mIcon = iconsSet.getIcon(style.getInt(
- keyAttr, R.styleable.Keyboard_Key_keyIcon,
- KeyboardIconsSet.ICON_UNDEFINED));
- final int shiftedIconId = style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconShifted,
- KeyboardIconsSet.ICON_UNDEFINED);
- if (shiftedIconId != KeyboardIconsSet.ICON_UNDEFINED) {
- final Drawable shiftedIcon = iconsSet.getIcon(shiftedIconId);
- params.addShiftedIcon(this, shiftedIcon);
- }
- mHintLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
-
- mLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyLabel);
- mLabelOption = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelOption, 0);
- mOutputText = style.getText(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
- // Choose the first letter of the label as primary code if not
- // specified.
- final int code = style.getInt(keyAttr, R.styleable.Keyboard_Key_code,
- Keyboard.CODE_UNSPECIFIED);
- if (code == Keyboard.CODE_UNSPECIFIED && !TextUtils.isEmpty(mLabel)) {
- final int firstChar = mLabel.charAt(0);
- mCode = getRtlParenthesisCode(firstChar, params.mIsRtlKeyboard);
- } else if (code != Keyboard.CODE_UNSPECIFIED) {
- mCode = code;
- } else {
- mCode = Keyboard.CODE_DUMMY;
- }
- } finally {
- keyAttr.recycle();
+ // Horizontal gap is divided equally to both sides of the key.
+ mX = (int) (keyXPos + horizontalGap / 2);
+ mY = row.mCurrentY;
+ mWidth = (int) (keyWidth - horizontalGap);
+ mHorizontalGap = (int) horizontalGap;
+ // Update row to have current x coordinate.
+ row.mCurrentX = keyXPos + keyWidth;
+
+ final CharSequence[] moreKeys = style.getTextArray(keyAttr,
+ R.styleable.Keyboard_Key_moreKeys);
+ // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of
+ // config_digit_more_keys_enabled.
+ if (params.mId.isAlphabetKeyboard()
+ && !res.getBoolean(R.bool.config_digit_more_keys_enabled)) {
+ mMoreKeys = MoreKeySpecParser.filterOut(res, moreKeys, MoreKeySpecParser.DIGIT_FILTER);
+ } else {
+ mMoreKeys = moreKeys;
+ }
+ mMaxMoreKeysColumn = style.getInt(keyboardAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn,
+ params.mMaxMiniKeyboardColumn);
+
+ mRepeatable = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isRepeatable, false);
+ mFunctional = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isFunctional, false);
+ mSticky = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isSticky, false);
+ mEnabled = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_enabled, true);
+ mEdgeFlags = 0;
+
+ final KeyboardIconsSet iconsSet = params.mIconsSet;
+ mVisualInsetsLeft = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr,
+ R.styleable.Keyboard_Key_visualInsetsLeft, keyboardWidth, 0);
+ mVisualInsetsRight = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr,
+ R.styleable.Keyboard_Key_visualInsetsRight, keyboardWidth, 0);
+ mPreviewIcon = iconsSet.getIcon(style.getInt(keyAttr,
+ R.styleable.Keyboard_Key_keyIconPreview, KeyboardIconsSet.ICON_UNDEFINED));
+ mIcon = iconsSet.getIcon(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIcon,
+ KeyboardIconsSet.ICON_UNDEFINED));
+ final int shiftedIconId = style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconShifted,
+ KeyboardIconsSet.ICON_UNDEFINED);
+ if (shiftedIconId != KeyboardIconsSet.ICON_UNDEFINED) {
+ final Drawable shiftedIcon = iconsSet.getIcon(shiftedIconId);
+ params.addShiftedIcon(this, shiftedIcon);
}
+ mHintLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
+
+ mLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyLabel);
+ mLabelOption = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelOption, 0);
+ mOutputText = style.getText(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
+ // Choose the first letter of the label as primary code if not
+ // specified.
+ final int code = style.getInt(keyAttr, R.styleable.Keyboard_Key_code,
+ Keyboard.CODE_UNSPECIFIED);
+ if (code == Keyboard.CODE_UNSPECIFIED && !TextUtils.isEmpty(mLabel)) {
+ final int firstChar = mLabel.charAt(0);
+ mCode = getRtlParenthesisCode(firstChar, params.mIsRtlKeyboard);
+ } else if (code != Keyboard.CODE_UNSPECIFIED) {
+ mCode = code;
+ } else {
+ mCode = Keyboard.CODE_DUMMY;
+ }
+
+ keyAttr.recycle();
}
public void addEdgeFlags(int flags) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index ceadc919c..96eb69407 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -103,6 +103,8 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
private ViewGroup mPreviewPlacer;
// Drawing
+ /** True if the entire keyboard needs to be dimmed. */
+ private boolean mNeedsToDimBackground;
/** Whether the keyboard bitmap buffer needs to be redrawn before it's blitted. **/
private boolean mBufferNeedsUpdate;
/** The dirty region in the keyboard bitmap */
@@ -481,8 +483,8 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
}
}
- // Overlay a dark rectangle to dim the keyboard
- if (needsToDimKeyboard()) {
+ // Overlay a dark rectangle to dim the entire keyboard
+ if (mNeedsToDimBackground) {
mPaint.setColor((int) (mBackgroundDimAmount * 0xFF) << 24);
canvas.drawRect(0, 0, width, height, mPaint);
}
@@ -491,8 +493,12 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
mDirtyRect.setEmpty();
}
- protected boolean needsToDimKeyboard() {
- return false;
+ public void dimEntireKeyboard(boolean dimmed) {
+ final boolean needsRedrawing = mNeedsToDimBackground != dimmed;
+ mNeedsToDimBackground = dimmed;
+ if (needsRedrawing) {
+ invalidateAllKeys();
+ }
}
private static void onBufferDrawKey(final Key key, final Keyboard keyboard, final Canvas canvas,
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 777bae3b0..d9089e199 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -373,11 +373,6 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
return miniKeyboardView;
}
- @Override
- protected boolean needsToDimKeyboard() {
- return mMoreKeysPanel != null;
- }
-
public void setSpacebarTextFadeFactor(float fadeFactor, LatinKeyboard oldKeyboard) {
final Keyboard keyboard = getKeyboard();
// We should not set text fade factor to the keyboard which does not display the language on
@@ -460,8 +455,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
final int translatedY = moreKeysPanel.translateY(tracker.getLastY());
tracker.onShowMoreKeysPanel(
translatedX, translatedY, SystemClock.uptimeMillis(), moreKeysPanel);
-
- invalidateAllKeys();
+ dimEntireKeyboard(true);
return true;
}
@@ -620,7 +614,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
mMoreKeysWindow.dismiss();
mMoreKeysPanel = null;
mMoreKeysPanelPointerTrackerId = -1;
- invalidateAllKeys();
+ dimEntireKeyboard(false);
return true;
}
return false;
diff --git a/java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java
index f331662d7..29861fe4a 100644
--- a/java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java
@@ -27,7 +27,6 @@ import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.latin.R;
-import java.util.List;
/**
* A view that renders a virtual {@link MiniKeyboard}. It handles rendering of keys and detecting
@@ -43,51 +42,6 @@ public class MiniKeyboardView extends KeyboardView implements MoreKeysPanel {
private int mOriginX;
private int mOriginY;
- private static class MiniKeyboardKeyDetector extends KeyDetector {
- private final int mSlideAllowanceSquare;
- private final int mSlideAllowanceSquareTop;
-
- public MiniKeyboardKeyDetector(float slideAllowance) {
- super(/* keyHysteresisDistance */0);
- mSlideAllowanceSquare = (int)(slideAllowance * slideAllowance);
- // Top slide allowance is slightly longer (sqrt(2) times) than other edges.
- mSlideAllowanceSquareTop = mSlideAllowanceSquare * 2;
- }
-
- @Override
- public boolean alwaysAllowsSlidingInput() {
- return true;
- }
-
- @Override
- protected int getMaxNearbyKeys() {
- // No nearby key will be returned.
- return 1;
- }
-
- @Override
- public int getKeyIndexAndNearbyCodes(int x, int y, final int[] allCodes) {
- final List<Key> keys = getKeyboard().mKeys;
- final int touchX = getTouchX(x);
- final int touchY = getTouchY(y);
-
- int nearestIndex = NOT_A_KEY;
- int nearestDist = (y < 0) ? mSlideAllowanceSquareTop : mSlideAllowanceSquare;
- final int keyCount = keys.size();
- for (int index = 0; index < keyCount; index++) {
- final int dist = keys.get(index).squaredDistanceToEdge(touchX, touchY);
- if (dist < nearestDist) {
- nearestIndex = index;
- nearestDist = dist;
- }
- }
-
- if (allCodes != null && nearestIndex != NOT_A_KEY)
- allCodes[0] = keys.get(nearestIndex).mCode;
- return nearestIndex;
- }
- }
-
private static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
private final KeyboardActionListener mMiniKeyboardListener =
@@ -126,7 +80,7 @@ public class MiniKeyboardView extends KeyboardView implements MoreKeysPanel {
final Resources res = context.getResources();
// Override default ProximityKeyDetector.
- mKeyDetector = new MiniKeyboardKeyDetector(res.getDimension(
+ mKeyDetector = new MoreKeysDetector(res.getDimension(
R.dimen.mini_keyboard_slide_allowance));
// Remove gesture detector on mini-keyboard
setKeyPreviewPopupEnabled(false, 0);
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysDetector.java b/java/src/com/android/inputmethod/keyboard/MoreKeysDetector.java
new file mode 100644
index 000000000..d20204611
--- /dev/null
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysDetector.java
@@ -0,0 +1,64 @@
+/*
+ * 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 the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.keyboard;
+
+import java.util.List;
+
+public class MoreKeysDetector extends KeyDetector {
+ private final int mSlideAllowanceSquare;
+ private final int mSlideAllowanceSquareTop;
+
+ public MoreKeysDetector(float slideAllowance) {
+ super(/* keyHysteresisDistance */0);
+ mSlideAllowanceSquare = (int)(slideAllowance * slideAllowance);
+ // Top slide allowance is slightly longer (sqrt(2) times) than other edges.
+ mSlideAllowanceSquareTop = mSlideAllowanceSquare * 2;
+ }
+
+ @Override
+ public boolean alwaysAllowsSlidingInput() {
+ return true;
+ }
+
+ @Override
+ protected int getMaxNearbyKeys() {
+ // No nearby key will be returned.
+ return 1;
+ }
+
+ @Override
+ public int getKeyIndexAndNearbyCodes(int x, int y, final int[] allCodes) {
+ final List<Key> keys = getKeyboard().mKeys;
+ final int touchX = getTouchX(x);
+ final int touchY = getTouchY(y);
+
+ int nearestIndex = NOT_A_KEY;
+ int nearestDist = (y < 0) ? mSlideAllowanceSquareTop : mSlideAllowanceSquare;
+ final int keyCount = keys.size();
+ for (int index = 0; index < keyCount; index++) {
+ final int dist = keys.get(index).squaredDistanceToEdge(touchX, touchY);
+ if (dist < nearestDist) {
+ nearestIndex = index;
+ nearestDist = dist;
+ }
+ }
+
+ if (allCodes != null && nearestIndex != NOT_A_KEY)
+ allCodes[0] = keys.get(nearestIndex).mCode;
+ return nearestIndex;
+ }
+} \ No newline at end of file
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index c605debab..fb1c06175 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -128,7 +128,6 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
protected final Resources mResources;
private final DisplayMetrics mDisplayMetrics;
- private int mCurrentX = 0;
private int mCurrentY = 0;
private Row mCurrentRow = null;
private boolean mLeftEdge;
@@ -136,6 +135,37 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
private Key mRightEdgeKey = null;
private final KeyStyles mKeyStyles = new KeyStyles();
+ /**
+ * Container for keys in the keyboard. All keys in a row are at the same Y-coordinate.
+ * Some of the key size defaults can be overridden per row from what the {@link Keyboard}
+ * defines.
+ */
+ public static class Row {
+ /** Default width of a key in this row. */
+ public final float mDefaultKeyWidth;
+ /** Default height of a key in this row. */
+ public final int mRowHeight;
+
+ public final int mCurrentY;
+ // Will be updated by {@link Key}'s constructor.
+ public float mCurrentX;
+
+ public Row(Resources res, KeyboardParams params, XmlResourceParser parser, int y) {
+ final int keyboardWidth = params.mWidth;
+ final int keyboardHeight = params.mHeight;
+ TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
+ R.styleable.Keyboard);
+ mDefaultKeyWidth = KeyboardBuilder.getDimensionOrFraction(a,
+ R.styleable.Keyboard_keyWidth, keyboardWidth, params.mDefaultKeyWidth);
+ mRowHeight = (int)KeyboardBuilder.getDimensionOrFraction(a,
+ R.styleable.Keyboard_rowHeight, keyboardHeight, params.mDefaultRowHeight);
+ a.recycle();
+
+ mCurrentY = y;
+ mCurrentX = 0.0f;
+ }
+ }
+
public KeyboardBuilder(Context context, KP params) {
mContext = context;
final Resources res = context.getResources();
@@ -219,14 +249,14 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
final int displayHeight = mDisplayMetrics.heightPixels;
final int keyboardHeight = (int)keyboardAttr.getDimension(
R.styleable.Keyboard_keyboardHeight, displayHeight / 2);
- final int maxKeyboardHeight = getDimensionOrFraction(keyboardAttr,
+ final int maxKeyboardHeight = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_maxKeyboardHeight, displayHeight, displayHeight / 2);
- int minKeyboardHeight = getDimensionOrFraction(keyboardAttr,
+ int minKeyboardHeight = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_minKeyboardHeight, displayHeight, displayHeight / 2);
if (minKeyboardHeight < 0) {
// Specified fraction was negative, so it should be calculated against display
// width.
- minKeyboardHeight = -getDimensionOrFraction(keyboardAttr,
+ minKeyboardHeight = -(int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_minKeyboardHeight, displayWidth, displayWidth / 2);
}
// Keyboard height will not exceed maxKeyboardHeight and will not be less than
@@ -234,9 +264,9 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
mParams.mOccupiedHeight = Math.max(
Math.min(keyboardHeight, maxKeyboardHeight), minKeyboardHeight);
mParams.mOccupiedWidth = mParams.mId.mWidth;
- mParams.mTopPadding = getDimensionOrFraction(keyboardAttr,
+ mParams.mTopPadding = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyboardTopPadding, mParams.mOccupiedHeight, 0);
- mParams.mBottomPadding = getDimensionOrFraction(keyboardAttr,
+ mParams.mBottomPadding = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyboardBottomPadding, mParams.mOccupiedHeight, 0);
final int height = mParams.mOccupiedHeight;
@@ -244,13 +274,13 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
- mParams.mHorizontalCenterPadding;
mParams.mHeight = height;
mParams.mWidth = width;
- mParams.mDefaultKeyWidth = getDimensionOrFraction(keyboardAttr,
+ mParams.mDefaultKeyWidth = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyWidth, width, width / 10);
- mParams.mDefaultRowHeight = getDimensionOrFraction(keyboardAttr,
+ mParams.mDefaultRowHeight = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_rowHeight, height, height / 4);
- mParams.mHorizontalGap = getDimensionOrFraction(keyboardAttr,
+ mParams.mHorizontalGap = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_horizontalGap, width, 0);
- mParams.mVerticalGap = getDimensionOrFraction(keyboardAttr,
+ mParams.mVerticalGap = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_verticalGap, height, 0);
mParams.mIsRtlKeyboard = keyboardAttr.getBoolean(
@@ -314,7 +344,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
throw new IllegalAttribute(parser, "horizontalGap");
if (a.hasValue(R.styleable.Keyboard_verticalGap))
throw new IllegalAttribute(parser, "verticalGap");
- return new Row(mResources, mParams, parser);
+ return new Row(mResources, mParams, parser, mCurrentY);
} finally {
a.recycle();
}
@@ -344,7 +374,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
if (TAG_ROW.equals(tag)) {
if (DEBUG) Log.d(TAG, String.format("</%s>", TAG_ROW));
if (!skip)
- endRow();
+ endRow(row);
break;
} else if (TAG_CASE.equals(tag) || TAG_DEFAULT.equals(tag)
|| TAG_MERGE.equals(tag)) {
@@ -364,7 +394,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
if (skip) {
checkEndTag(TAG_KEY, parser);
} else {
- Key key = new Key(mResources, mParams, row, mCurrentX, mCurrentY, parser, mKeyStyles);
+ Key key = new Key(mResources, mParams, row, parser, mKeyStyles);
if (DEBUG) Log.d(TAG, String.format("<%s%s keyLabel=%s code=%d moreKeys=%s />",
TAG_KEY, (key.isEnabled() ? "" : " disabled"), key.mLabel, key.mCode,
Arrays.toString(key.mMoreKeys)));
@@ -385,21 +415,21 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
if (keyboardAttr.hasValue(R.styleable.Keyboard_horizontalGap))
throw new IllegalAttribute(parser, "horizontalGap");
final int keyboardWidth = mParams.mWidth;
- final int keyWidth = getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth,
- keyboardWidth, row.mDefaultKeyWidth);
+ final float keyWidth = getDimensionOrFraction(keyboardAttr,
+ R.styleable.Keyboard_keyWidth, keyboardWidth, row.mDefaultKeyWidth);
keyboardAttr.recycle();
final TypedArray keyAttr = mResources.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard_Key);
- int keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr,
- R.styleable.Keyboard_Key_keyXPos, keyboardWidth, mCurrentX);
+ float keyXPos = getDimensionOrFraction(keyAttr,
+ R.styleable.Keyboard_Key_keyXPos, keyboardWidth, row.mCurrentX);
if (keyXPos < 0) {
// If keyXPos is negative, the actual x-coordinate will be display_width + keyXPos.
keyXPos += keyboardWidth;
}
checkEndTag(TAG_SPACER, parser);
- setSpacer(keyXPos, keyWidth);
+ setSpacer(keyXPos, keyWidth, row);
}
}
@@ -655,28 +685,27 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
}
private void startRow(Row row) {
- mCurrentX = 0;
- setSpacer(mCurrentX, mParams.mHorizontalEdgesPadding);
+ row.mCurrentX = 0;
+ setSpacer(row.mCurrentX, mParams.mHorizontalEdgesPadding, row);
mCurrentRow = row;
mLeftEdge = true;
mRightEdgeKey = null;
}
- private void endRow() {
+ private void endRow(Row row) {
if (mCurrentRow == null)
throw new InflateException("orphant end row tag");
if (mRightEdgeKey != null) {
mRightEdgeKey.addEdgeFlags(Keyboard.EDGE_RIGHT);
mRightEdgeKey = null;
}
- setSpacer(mCurrentX, mParams.mHorizontalEdgesPadding);
+ setSpacer(row.mCurrentX, mParams.mHorizontalEdgesPadding, row);
mCurrentY += mCurrentRow.mRowHeight;
mCurrentRow = null;
mTopEdge = false;
}
private void endKey(Key key) {
- mCurrentX = key.mX - key.mHorizontalGap / 2 + key.mWidth + key.mHorizontalGap;
if (mLeftEdge) {
key.addEdgeFlags(Keyboard.EDGE_LEFT);
mLeftEdge = false;
@@ -690,24 +719,23 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
private void endKeyboard() {
}
- private void setSpacer(int keyXPos, int width) {
- mCurrentX = keyXPos + width;
+ private void setSpacer(float keyXPos, float width, Row row) {
+ row.mCurrentX = keyXPos + width;
mLeftEdge = false;
mRightEdgeKey = null;
}
- public static int getDimensionOrFraction(TypedArray a, int index, int base, int defValue) {
+ public static float getDimensionOrFraction(TypedArray a, int index, int base, float defValue) {
final TypedValue value = a.peekValue(index);
if (value == null)
return defValue;
if (isFractionValue(value)) {
- // Round it to avoid values like 47.9999 from getting truncated
- return Math.round(a.getFraction(index, base, base, defValue));
+ return a.getFraction(index, base, base, defValue);
} else if (isDimensionValue(value)) {
- return a.getDimensionPixelOffset(index, defValue);
+ return a.getDimension(index, defValue);
} else if (isIntegerValue(value)) {
// For enum value.
- return a.getInt(index, defValue);
+ return a.getInt(index, 0);
}
return defValue;
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/Row.java b/java/src/com/android/inputmethod/keyboard/internal/Row.java
deleted file mode 100644
index d53fe12e2..000000000
--- a/java/src/com/android/inputmethod/keyboard/internal/Row.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.keyboard.internal;
-
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
-import android.util.Xml;
-
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.latin.R;
-
-/**
- * Container for keys in the keyboard. All keys in a row are at the same Y-coordinate.
- * Some of the key size defaults can be overridden per row from what the {@link Keyboard}
- * defines.
- */
-public class Row {
- /** Default width of a key in this row. */
- public final int mDefaultKeyWidth;
- /** Default height of a key in this row. */
- public final int mRowHeight;
-
- public Row(Resources res, KeyboardParams params, XmlResourceParser parser) {
- final int keyboardWidth = params.mWidth;
- final int keyboardHeight = params.mHeight;
- TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
- R.styleable.Keyboard);
- mDefaultKeyWidth = KeyboardBuilder.getDimensionOrFraction(a,
- R.styleable.Keyboard_keyWidth, keyboardWidth, params.mDefaultKeyWidth);
- mRowHeight = KeyboardBuilder.getDimensionOrFraction(a,
- R.styleable.Keyboard_rowHeight, keyboardHeight, params.mDefaultRowHeight);
- a.recycle();
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/AutoCorrection.java b/java/src/com/android/inputmethod/latin/AutoCorrection.java
index d3119792c..e6ae2c5c7 100644
--- a/java/src/com/android/inputmethod/latin/AutoCorrection.java
+++ b/java/src/com/android/inputmethod/latin/AutoCorrection.java
@@ -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) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 7559108f3..cea59fe0a 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -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;
@@ -118,6 +118,12 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
*/
public static final String SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE = "AsciiCapable";
+ /**
+ * The subtype extra value used to indicate that the subtype keyboard layout should be loaded
+ * from the specified locale.
+ */
+ public static final String SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE = "KeyboardLocale";
+
private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100;
// How many continuous deletes at which to start deleting at a higher speed.
@@ -151,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;
@@ -248,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);
@@ -601,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
@@ -672,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();
@@ -702,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;
@@ -813,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);
}
@@ -847,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);
}
@@ -860,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() {
@@ -875,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) {
@@ -932,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);
}
}
}
@@ -958,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
@@ -1315,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
@@ -1434,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();
}
@@ -1485,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) {
@@ -1521,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() {
@@ -1530,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;
@@ -1555,7 +1562,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
setInputView(v);
}
- setSuggestionStripShown(isCandidateStripVisible());
+ setSuggestionStripShown(isSuggestionsStripVisible());
updateInputViewShown();
mHandler.postUpdateSuggestions();
}
@@ -1565,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());
}
@@ -1619,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);
@@ -1645,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();
@@ -1668,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);
@@ -1684,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) {
@@ -1780,7 +1787,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
if (showingAddToDictionaryHint) {
if (mIsUserDictionaryAvaliable) {
- mCandidateView.showAddToDictionaryHint(suggestion);
+ mSuggestionsView.showAddToDictionaryHint(suggestion);
} else {
mHandler.postUpdateSuggestions();
}
@@ -1800,9 +1807,13 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
final InputConnection ic = getCurrentInputConnection();
if (ic != null) {
mVoiceProxy.rememberReplacedWord(bestWord, mSettingsValues.mWordSeparators);
- SuggestedWords suggestedWords = mCandidateView.getSuggestions();
- ic.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(
- this, bestWord, suggestedWords), 1);
+ if (mSettingsValues.mEnableSuggestionSpanInsertion) {
+ final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
+ ic.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(
+ this, bestWord, suggestedWords), 1);
+ } else {
+ ic.commitText(bestWord, 1);
+ }
}
mRecorrection.saveRecorrectionSuggestion(mWordComposer, bestWord);
mHasUncommittedTypedChars = false;
@@ -1836,7 +1847,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
public void setPunctuationSuggestions() {
setSuggestions(mSettingsValues.mSuggestPuncList);
- setSuggestionStripShown(isCandidateStripVisible());
+ setSuggestionStripShown(isSuggestionsStripVisible());
}
private void addToUserUnigramAndBigramDictionaries(CharSequence suggestion,
diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/MoreSuggestions.java
index 0446fb2a8..a9e75b7b3 100644
--- a/java/src/com/android/inputmethod/latin/MoreSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestions.java
@@ -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.
diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
index 828490112..9fd90241b 100644
--- a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
@@ -23,17 +23,15 @@ import android.view.Gravity;
import android.view.View;
import android.widget.PopupWindow;
-import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardActionListener;
import com.android.inputmethod.keyboard.KeyboardView;
+import com.android.inputmethod.keyboard.MoreKeysDetector;
import com.android.inputmethod.keyboard.MoreKeysPanel;
-import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
-import java.util.List;
/**
* A view that renders a virtual {@link MoreSuggestions}. It handles rendering of keys and detecting
@@ -49,51 +47,6 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
private int mOriginX;
private int mOriginY;
- private static class SuggestionsPaneKeyDetector extends KeyDetector {
- private final int mSlideAllowanceSquare;
- private final int mSlideAllowanceSquareTop;
-
- public SuggestionsPaneKeyDetector(float slideAllowance) {
- super(/* keyHysteresisDistance */0);
- mSlideAllowanceSquare = (int)(slideAllowance * slideAllowance);
- // Top slide allowance is slightly longer (sqrt(2) times) than other edges.
- mSlideAllowanceSquareTop = mSlideAllowanceSquare * 2;
- }
-
- @Override
- public boolean alwaysAllowsSlidingInput() {
- return true;
- }
-
- @Override
- protected int getMaxNearbyKeys() {
- // No nearby key will be returned.
- return 1;
- }
-
- @Override
- public int getKeyIndexAndNearbyCodes(int x, int y, final int[] allCodes) {
- final List<Key> keys = getKeyboard().mKeys;
- final int touchX = getTouchX(x);
- final int touchY = getTouchY(y);
-
- int nearestIndex = NOT_A_KEY;
- int nearestDist = (y < 0) ? mSlideAllowanceSquareTop : mSlideAllowanceSquare;
- final int keyCount = keys.size();
- for (int index = 0; index < keyCount; index++) {
- final int dist = keys.get(index).squaredDistanceToEdge(touchX, touchY);
- if (dist < nearestDist) {
- nearestIndex = index;
- nearestDist = dist;
- }
- }
-
- if (allCodes != null && nearestIndex != NOT_A_KEY)
- allCodes[0] = keys.get(nearestIndex).mCode;
- return nearestIndex;
- }
- }
-
private static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
private final KeyboardActionListener mSuggestionsPaneListener =
@@ -128,7 +81,7 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
final Resources res = context.getResources();
// Override default ProximityKeyDetector.
- mKeyDetector = new SuggestionsPaneKeyDetector(res.getDimension(
+ mKeyDetector = new MoreKeysDetector(res.getDimension(
R.dimen.more_suggestions_slide_allowance));
// Remove gesture detector on suggestions pane
setKeyPreviewPopupEnabled(false, 0);
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 1e2ef4824..e99bb7016 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -82,6 +82,8 @@ public class Settings extends InputMethodSettingsActivity
"pref_key_preview_popup_dismiss_delay";
public static final String PREF_KEY_USE_CONTACTS_DICT =
"pref_key_use_contacts_dict";
+ public static final String PREF_KEY_ENABLE_SPAN_INSERT =
+ "enable_span_insert";
public static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
@@ -117,6 +119,7 @@ public class Settings extends InputMethodSettingsActivity
// Prediction: use bigrams to predict the next word when there is no input for it yet
public final boolean mBigramPredictionEnabled;
public final boolean mUseContactsDict;
+ public final boolean mEnableSuggestionSpanInsertion;
private final boolean mShowSettingsKey;
private final boolean mVoiceKeyEnabled;
@@ -179,6 +182,8 @@ public class Settings extends InputMethodSettingsActivity
&& isBigramPredictionEnabled(prefs, res);
mAutoCorrectionThreshold = getAutoCorrectionThreshold(prefs, res);
mUseContactsDict = prefs.getBoolean(Settings.PREF_KEY_USE_CONTACTS_DICT, true);
+ mEnableSuggestionSpanInsertion =
+ prefs.getBoolean(Settings.PREF_KEY_ENABLE_SPAN_INSERT, true);
final boolean defaultShowSettingsKey = res.getBoolean(
R.bool.config_default_show_settings_key);
mShowSettingsKey = isShowSettingsKeyOption(res)
@@ -426,8 +431,10 @@ public class Settings extends InputMethodSettingsActivity
final boolean showBigramSuggestionsOption = res.getBoolean(
R.bool.config_enable_bigram_suggestions_option);
if (!showBigramSuggestionsOption) {
- textCorrectionGroup.removePreference(findPreference(PREF_BIGRAM_SUGGESTIONS));
- textCorrectionGroup.removePreference(findPreference(PREF_BIGRAM_PREDICTIONS));
+ textCorrectionGroup.removePreference(mBigramSuggestion);
+ if (null != mBigramPrediction) {
+ textCorrectionGroup.removePreference(mBigramPrediction);
+ }
}
final boolean showUsabilityModeStudyOption = res.getBoolean(
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index 87d854940..56f14de57 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -19,6 +19,7 @@ package com.android.inputmethod.latin;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
@@ -138,7 +139,7 @@ public class SubtypeSwitcher {
mEnabledLanguagesOfCurrentInputMethod.clear();
mEnabledKeyboardSubtypesOfCurrentInputMethod.clear();
for (InputMethodSubtypeCompatWrapper ims : mAllEnabledSubtypesOfCurrentInputMethod) {
- final String locale = ims.getLocale();
+ final String locale = getSubtypeLocale(ims);
final String mode = ims.getMode();
mLocaleSplitter.setString(locale);
if (mLocaleSplitter.hasNext()) {
@@ -167,7 +168,7 @@ public class SubtypeSwitcher {
Log.d(TAG, "Update shortcut IME from : "
+ (mShortcutInputMethodInfo == null
? "<null>" : mShortcutInputMethodInfo.getId()) + ", "
- + (mShortcutSubtype == null ? "<null>" : (mShortcutSubtype.getLocale()
+ + (mShortcutSubtype == null ? "<null>" : (getSubtypeLocale(mShortcutSubtype)
+ ", " + mShortcutSubtype.getMode())));
}
// TODO: Update an icon for shortcut IME
@@ -189,11 +190,17 @@ public class SubtypeSwitcher {
Log.d(TAG, "Update shortcut IME to : "
+ (mShortcutInputMethodInfo == null
? "<null>" : mShortcutInputMethodInfo.getId()) + ", "
- + (mShortcutSubtype == null ? "<null>" : (mShortcutSubtype.getLocale()
+ + (mShortcutSubtype == null ? "<null>" : (getSubtypeLocale(mShortcutSubtype)
+ ", " + mShortcutSubtype.getMode())));
}
}
+ private static String getSubtypeLocale(InputMethodSubtypeCompatWrapper subtype) {
+ final String keyboardLocale = subtype.getExtraValueOf(
+ LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE);
+ return keyboardLocale != null ? keyboardLocale : subtype.getLocale();
+ }
+
// Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function.
public void updateSubtype(InputMethodSubtypeCompatWrapper newSubtype) {
final String newLocale;
@@ -206,7 +213,7 @@ public class SubtypeSwitcher {
newLocale = "en_US";
newMode = KEYBOARD_MODE;
} else {
- newLocale = newSubtype.getLocale();
+ newLocale = getSubtypeLocale(newSubtype);
newMode = newSubtype.getMode();
}
if (DBG) {
@@ -257,6 +264,15 @@ public class SubtypeSwitcher {
// as it is not the current input mode.
mVoiceInputWrapper.reset();
}
+ final String packageName = mService.getPackageName();
+ int version = -1;
+ try {
+ version = mService.getPackageManager().getPackageInfo(
+ packageName, 0).versionCode;
+ } catch (NameNotFoundException e) {
+ }
+ throw new RuntimeException("Unknown subtype mode: " + version + ", " + packageName
+ + ", " + mVoiceInputWrapper);
}
}
@@ -332,7 +348,7 @@ public class SubtypeSwitcher {
final String imiPackageName = imi.getPackageName();
if (DBG) {
Log.d(TAG, "Update icons of IME: " + imiPackageName + ","
- + subtype.getLocale() + "," + subtype.getMode());
+ + getSubtypeLocale(subtype) + "," + subtype.getMode());
}
if (subtype != null) {
return pm.getDrawable(imiPackageName, subtype.getIconResId(),
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 29b629576..93933f1bc 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -371,24 +371,14 @@ public class Suggest implements Dictionary.WordCallback {
// Apply quick fix only for the typed word.
if (mQuickFixesEnabled) {
final String lowerCaseTypedWord = typedWordString.toLowerCase();
- CharSequence tempAutoText = capitalizeWord(
- mIsAllUpperCase, mIsFirstCharCapitalized, AutoText.get(
- lowerCaseTypedWord, 0, lowerCaseTypedWord.length(), view));
- // TODO: cleanup canAdd
// Is there an AutoText (also known as Quick Fixes) correction?
// Capitalize as needed
- boolean canAdd = tempAutoText != null;
- // Is that correction already the current prediction (or original word)?
- canAdd &= !TextUtils.equals(tempAutoText, typedWord);
- // Is that correction already the next predicted word?
- if (canAdd && mSuggestions.size() > 0 && mCorrectionMode != CORRECTION_BASIC) {
- canAdd &= !TextUtils.equals(tempAutoText, mSuggestions.get(0));
- }
- if (canAdd) {
- if (DBG) {
- Log.d(TAG, "Auto corrected by AUTOTEXT.");
+ autoText = capitalizeWord(mIsAllUpperCase, mIsFirstCharCapitalized, AutoText.get(
+ lowerCaseTypedWord, 0, lowerCaseTypedWord.length(), view));
+ if (DBG) {
+ if (autoText != null) {
+ Log.d(TAG, "Auto corrected by AUTOTEXT: " + typedWord + " -> " + autoText);
}
- autoText = tempAutoText;
}
}
}
diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java
index 0d355d01e..10cd73dd3 100644
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java
@@ -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
@@ -50,6 +50,7 @@ import android.widget.TextView;
import com.android.inputmethod.compat.FrameLayoutCompatUtils;
import com.android.inputmethod.compat.LinearLayoutCompatUtils;
import com.android.inputmethod.keyboard.KeyboardActionListener;
+import com.android.inputmethod.keyboard.KeyboardView;
import com.android.inputmethod.keyboard.MoreKeysPanel;
import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
@@ -57,7 +58,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,12 +69,9 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
private static final boolean DBG = LatinImeLogger.sDBG;
- private final ViewGroup mCandidatesPlacer;
- private final ViewGroup mCandidatesStrip;
- // TODO: Remove these pane related fields and stuffs.
- private ViewGroup mCandidatesPane;
- private ViewGroup mCandidatesPaneContainer;
- private View mKeyboardView;
+ private final ViewGroup mSuggestionsPlacer;
+ private final ViewGroup mSuggestionsStrip;
+ private KeyboardView mKeyboardView;
private final View mMoreSuggestionsContainer;
private final MoreSuggestionsView mMoreSuggestionsView;
@@ -91,32 +89,31 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
private SuggestedWords mSuggestions = SuggestedWords.EMPTY;
private boolean mShowingAutoCorrectionInverted;
- private final SuggestionsStripParams mStripParams;
- private final SuggestionsPaneParams mPaneParams;
+ private final SuggestionsViewParams mParams;
private static final float MIN_TEXT_XSCALE = 0.70f;
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;
}
}
@@ -146,133 +143,26 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
}
}
- private static class CandidateViewParams {
+ private static class 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;
+
public final int mPadding;
public final int mDividerWidth;
- public final int mDividerHeight;
- public final int mCandidateStripHeight;
-
- protected final List<TextView> mWords;
- protected final List<View> mDividers;
- protected final List<TextView> mInfos;
+ public final int mSuggestionsStripHeight;
+ public final int mSuggestionsCountInStrip;
- protected CandidateViewParams(List<TextView> words, List<View> dividers,
- List<TextView> infos) {
- mWords = words;
- mDividers = dividers;
- mInfos = infos;
-
- final TextView word = words.get(0);
- final View divider = dividers.get(0);
- mPadding = word.getCompoundPaddingLeft() + word.getCompoundPaddingRight();
- divider.measure(
- ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
- mDividerWidth = divider.getMeasuredWidth();
- mDividerHeight = divider.getMeasuredHeight();
-
- final Resources res = word.getResources();
- mCandidateStripHeight = res.getDimensionPixelSize(R.dimen.candidate_strip_height);
- }
- }
-
- private static class SuggestionsPaneParams extends CandidateViewParams {
- public SuggestionsPaneParams(List<TextView> words, List<View> dividers,
- List<TextView> infos) {
- super(words, dividers, infos);
- }
-
- public int layout(SuggestedWords suggestions, ViewGroup paneView, int from, int textColor,
- int paneWidth) {
- final int count = Math.min(mWords.size(), suggestions.size());
- View centeringFrom = null, lastView = null;
- int x = 0, y = 0;
- for (int index = from; index < count; index++) {
- final int pos = index;
- final TextView word = mWords.get(pos);
- final View divider = mDividers.get(pos);
- final TextPaint paint = word.getPaint();
- word.setTextColor(textColor);
- final CharSequence styled = suggestions.getWord(pos);
-
- final TextView info;
- if (DBG) {
- final CharSequence debugInfo = getDebugInfo(suggestions, index);
- if (debugInfo != null) {
- info = mInfos.get(index);
- info.setText(debugInfo);
- } else {
- info = null;
- }
- } else {
- info = null;
- }
-
- final CharSequence text;
- final float scaleX;
- paint.setTextScaleX(1.0f);
- final int textWidth = getTextWidth(styled, paint);
- int available = paneWidth - x - mPadding;
- if (textWidth >= available) {
- // Needs new row, centering previous row.
- centeringCandidates(paneView, centeringFrom, lastView, x, paneWidth);
- x = 0;
- y += mCandidateStripHeight;
- }
- if (x != 0) {
- // Add divider if this isn't the left most suggestion in current row.
- paneView.addView(divider);
- FrameLayoutCompatUtils.placeViewAt(divider, x, y
- + (mCandidateStripHeight - mDividerHeight) / 2, mDividerWidth,
- mDividerHeight);
- x += mDividerWidth;
- }
- available = paneWidth - x - mPadding;
- text = getEllipsizedText(styled, available, paint);
- scaleX = paint.getTextScaleX();
- word.setText(text);
- word.setTextScaleX(scaleX);
- paneView.addView(word);
- lastView = word;
- if (x == 0)
- centeringFrom = word;
- word.measure(ViewGroup.LayoutParams.WRAP_CONTENT,
- MeasureSpec.makeMeasureSpec(mCandidateStripHeight, MeasureSpec.EXACTLY));
- final int width = word.getMeasuredWidth();
- final int height = word.getMeasuredHeight();
- FrameLayoutCompatUtils.placeViewAt(word, x, y + (mCandidateStripHeight - height)
- / 2, width, height);
- x += width;
- if (info != null) {
- paneView.addView(info);
- lastView = info;
- info.measure(ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
- final int infoWidth = info.getMeasuredWidth();
- FrameLayoutCompatUtils.placeViewAt(
- info, x - infoWidth, y, infoWidth, info.getMeasuredHeight());
- }
- }
- if (x != 0) {
- // Centering last candidates row.
- centeringCandidates(paneView, centeringFrom, lastView, x, paneWidth);
- }
-
- return count - from;
- }
- }
-
- 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 final int PUNCTUATIONS_IN_STRIP = 6;
+ private final List<TextView> mWords;
+ private final List<View> mDividers;
+ private final List<TextView> mInfos;
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;
+ 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();
@@ -293,41 +183,49 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
private final TextView mHintToSaveView;
private final CharSequence mHintToSaveText;
- public SuggestionsStripParams(Context context, AttributeSet attrs, int defStyle,
+ public SuggestionsViewParams(Context context, AttributeSet attrs, int defStyle,
List<TextView> words, List<View> dividers, List<TextView> infos) {
- super(words, dividers, infos);
+ mWords = words;
+ mDividers = dividers;
+ mInfos = infos;
+
+ final TextView word = words.get(0);
+ final View divider = dividers.get(0);
+ mPadding = word.getCompoundPaddingLeft() + word.getCompoundPaddingRight();
+ divider.measure(
+ ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+ mDividerWidth = divider.getMeasuredWidth();
+
+ final Resources res = word.getResources();
+ mSuggestionsStripHeight = res.getDimensionPixelSize(R.dimen.suggestions_strip_height);
+
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;
- final Resources res = context.getResources();
- mMoreCandidateHint = res.getDrawable(R.drawable.more_suggestions_hint);
+ mCenterSuggestionIndex = mSuggestionsCountInStrip / 2;
+ 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);
}
- public int getTextColor() {
- return mColorTypedWord;
- }
-
- 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;
@@ -355,24 +253,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;
}
@@ -401,13 +299,14 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
return word;
}
- public int layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer,
+ public void layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer,
int stripWidth) {
if (suggestions.isPunctuationSuggestions()) {
- return layoutPunctuationSuggestions(suggestions, stripView);
+ layoutPunctuationSuggestions(suggestions, stripView);
+ return;
}
- final int countInStrip = mCandidateCountInStrip;
+ final int countInStrip = mSuggestionsCountInStrip;
setupTexts(suggestions, countInStrip);
mMoreSuggestionsAvailable = (suggestions.size() > countInStrip);
int x = 0;
@@ -416,34 +315,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) {
@@ -461,22 +360,21 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
}
}
}
- return countInStrip;
}
- 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);
}
}
@@ -484,7 +382,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++) {
@@ -493,11 +391,11 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
}
}
- private int layoutPunctuationSuggestions(SuggestedWords suggestions, ViewGroup stripView) {
+ private void layoutPunctuationSuggestions(SuggestedWords suggestions, ViewGroup stripView) {
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));
}
@@ -509,10 +407,9 @@ 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;
- return countInStrip;
}
public void layoutAddToDictionaryHint(CharSequence word, ViewGroup stripView,
@@ -521,14 +418,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));
@@ -540,62 +437,60 @@ 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,
- mInfos);
- mPaneParams = new SuggestionsPaneParams(mWords, mDividers, mInfos);
- mStripParams.mWordToSaveView.setOnClickListener(this);
+ mParams = new SuggestionsViewParams(context, attrs, defStyle, mWords, mDividers, mInfos);
+ mParams.mWordToSaveView.setOnClickListener(this);
mMoreSuggestionsContainer = inflater.inflate(R.layout.more_suggestions, null);
mMoreSuggestionsView = (MoreSuggestionsView)mMoreSuggestionsContainer
@@ -613,12 +508,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
*/
public void setListener(Listener listener, View inputView) {
mListener = listener;
- mKeyboardView = inputView.findViewById(R.id.keyboard_view);
- mCandidatesPane = FrameLayoutCompatUtils.getPlacer(
- (ViewGroup)inputView.findViewById(R.id.candidates_pane));
- mCandidatesPane.setOnClickListener(this);
- mCandidatesPaneContainer = (ViewGroup)inputView.findViewById(
- R.id.candidates_pane_container);
+ mKeyboardView = (KeyboardView)inputView.findViewById(R.id.keyboard_view);
}
public void setSuggestions(SuggestedWords suggestions) {
@@ -634,13 +524,10 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
private void updateSuggestions() {
clear();
- closeCandidatesPane();
if (mSuggestions.size() == 0)
return;
- final int width = getWidth();
- final int countInStrip = mStripParams.layout(
- mSuggestions, mCandidatesStrip, mCandidatesPlacer, width);
+ mParams.layout(mSuggestions, mSuggestionsStrip, mSuggestionsPlacer, getWidth());
}
private static CharSequence getDebugInfo(SuggestedWords suggestions, int pos) {
@@ -666,26 +553,6 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
}
}
- private static void centeringCandidates(ViewGroup parent, View from, View to, int width,
- int parentWidth) {
- final int fromIndex = parent.indexOfChild(from);
- final int toIndex = parent.indexOfChild(to);
- final int offset = (parentWidth - width) / 2;
- for (int index = fromIndex; index <= toIndex; index++) {
- offsetMargin(parent.getChildAt(index), offset, 0);
- }
- }
-
- private static void offsetMargin(View v, int dx, int dy) {
- if (v == null)
- return;
- final ViewGroup.LayoutParams lp = v.getLayoutParams();
- if (lp instanceof ViewGroup.MarginLayoutParams) {
- final ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams)lp;
- mlp.setMargins(mlp.leftMargin + dx, mlp.topMargin + dy, 0, 0);
- }
- }
-
private static float getTextScaleX(CharSequence text, int maxWidth, TextPaint paint) {
paint.setTextScaleX(1.0f);
final int width = getTextWidth(text, paint);
@@ -748,27 +615,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
}
}
- private void expandCandidatesPane() {
- mCandidatesPaneContainer.setMinimumHeight(mKeyboardView.getMeasuredHeight());
- mCandidatesPaneContainer.setVisibility(VISIBLE);
- mKeyboardView.setVisibility(GONE);
- }
-
- private void closeCandidatesPane() {
- mCandidatesPaneContainer.setVisibility(GONE);
- mKeyboardView.setVisibility(VISIBLE);
- }
-
- private void toggleCandidatesPane() {
- if (mCandidatesPaneContainer.getVisibility() == VISIBLE) {
- closeCandidatesPane();
- } else {
- expandCandidatesPane();
- }
- }
-
public void onAutoCorrectionInverted(CharSequence autoCorrectedWord) {
- final CharSequence inverted = mStripParams.getInvertedText(autoCorrectedWord);
+ final CharSequence inverted = mParams.getInvertedText(autoCorrectedWord);
if (inverted == null)
return;
final TextView tv = mWords.get(1);
@@ -777,13 +625,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) == mParams.mWordToSaveView;
}
public void showAddToDictionaryHint(CharSequence word) {
clear();
- mStripParams.layoutAddToDictionaryHint(word, mCandidatesStrip, getWidth());
+ mParams.layoutAddToDictionaryHint(word, mSuggestionsStrip, getWidth());
}
public boolean dismissAddToDictionaryHint() {
@@ -800,12 +648,10 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
public void clear() {
mShowingAutoCorrectionInverted = false;
- mCandidatesPlacer.removeAllViews();
- mCandidatesPlacer.addView(mCandidatesStrip);
- mCandidatesStrip.removeAllViews();
- mCandidatesPane.removeAllViews();
- closeCandidatesPane();
- mMoreSuggestionsWindow.dismiss();
+ mSuggestionsPlacer.removeAllViews();
+ mSuggestionsPlacer.addView(mSuggestionsStrip);
+ mSuggestionsStrip.removeAllViews();
+ dismissMoreSuggestions();
}
private void hidePreview() {
@@ -817,7 +663,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
return;
final TextView previewText = mPreviewText;
- previewText.setTextColor(mStripParams.mColorTypedWord);
+ previewText.setTextColor(mParams.mColorTypedWord);
previewText.setText(word);
previewText.measure(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
@@ -838,7 +684,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
private void addToDictionary(CharSequence word) {
if (mListener.addWordToDictionary(word.toString())) {
final CharSequence message = getContext().getString(R.string.added_word, word);
- showPreview(mStripParams.mWordToSaveView, message);
+ showPreview(mParams.mWordToSaveView, message);
}
}
@@ -849,13 +695,13 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
final int index = requestCode;
final CharSequence word = mSuggestions.getWord(index);
mListener.pickSuggestionManually(index, word);
- mMoreSuggestionsView.dismissMoreKeysPanel();
+ dismissMoreSuggestions();
return true;
}
@Override
public void onCancelInput() {
- mMoreSuggestionsView.dismissMoreKeysPanel();
+ dismissMoreSuggestions();
}
};
@@ -863,17 +709,22 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
new MoreKeysPanel.Controller() {
@Override
public boolean dismissMoreKeysPanel() {
- if (mMoreSuggestionsWindow.isShowing()) {
- mMoreSuggestionsWindow.dismiss();
- return true;
- }
- return false;
+ return dismissMoreSuggestions();
}
};
+ private boolean dismissMoreSuggestions() {
+ if (mMoreSuggestionsWindow.isShowing()) {
+ mMoreSuggestionsWindow.dismiss();
+ mKeyboardView.dimEntireKeyboard(false);
+ return true;
+ }
+ return false;
+ }
+
@Override
public boolean onLongClick(View view) {
- final SuggestionsStripParams params = mStripParams;
+ final SuggestionsViewParams params = mParams;
if (params.mMoreSuggestionsAvailable) {
final int stripWidth = getWidth();
final View container = mMoreSuggestionsContainer;
@@ -883,7 +734,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);
@@ -901,7 +752,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
tracker.onShowMoreKeysPanel(
translatedX, translatedY, SystemClock.uptimeMillis(), moreKeysPanel);
view.setPressed(false);
- // TODO: Should gray out the keyboard here as well?
+ mKeyboardView.dimEntireKeyboard(true);
return true;
}
return false;
@@ -940,17 +791,12 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
@Override
public void onClick(View view) {
- if (view == mStripParams.mWordToSaveView) {
+ if (view == mParams.mWordToSaveView) {
addToDictionary((CharSequence)view.getTag());
clear();
return;
}
- if (view == mCandidatesPane) {
- closeCandidatesPane();
- return;
- }
-
final Object tag = view.getTag();
if (!(tag instanceof Integer))
return;
@@ -960,9 +806,6 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
final CharSequence word = mSuggestions.getWord(index);
mListener.pickSuggestionManually(index, word);
- // Because some punctuation letters are not treated as word separator depending on locale,
- // {@link #setSuggestions} might not be called and candidates pane left opened.
- closeCandidatesPane();
}
@Override
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index 60a4cfb38..6263ebefa 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -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)) {