aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/layout-land/setup_steps_screen.xml4
-rw-r--r--java/res/layout-land/setup_welcome_screen.xml4
-rw-r--r--java/res/layout/setup_welcome_video.xml33
-rw-r--r--java/res/raw/setup_welcome_image.pngbin49087 -> 46594 bytes
-rw-r--r--java/res/raw/setup_welcome_video.mp4bin923297 -> 459085 bytes
-rw-r--r--java/res/values-h1200dp-port/setup-dimens-large-tablet-port.xml6
-rw-r--r--java/res/values-h330dp-land/setup-dimens-large-phone-land.xml6
-rw-r--r--java/res/values-h520dp-land/setup-dimens-small-tablet-land.xml4
-rw-r--r--java/res/values-h540dp-port/setup-dimens-large-phone-port.xml6
-rw-r--r--java/res/values-h720dp-land/setup-dimens-large-tablet-land.xml6
-rw-r--r--java/res/values-h800dp-port/setup-dimens-small-tablet-port.xml4
-rw-r--r--java/res/values-land/setup-dimens-small-phone-land.xml8
-rw-r--r--java/res/values-ms/strings-appname.xml2
-rw-r--r--java/res/values-ms/strings.xml4
-rw-r--r--java/res/values-port/setup-dimens-small-phone-port.xml6
-rw-r--r--java/res/values-pt/strings.xml2
-rw-r--r--java/res/values/colors.xml1
-rw-r--r--java/res/values/config.xml2
-rw-r--r--java/res/values/dimens.xml2
-rw-r--r--java/res/values/keypress-vibration-durations.xml2
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java12
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java14
-rw-r--r--java/src/com/android/inputmethod/keyboard/MainKeyboardView.java4
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java30
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java45
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java58
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java13
-rw-r--r--java/src/com/android/inputmethod/latin/SeekBarDialogPreference.java2
-rw-r--r--java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java6
29 files changed, 164 insertions, 122 deletions
diff --git a/java/res/layout-land/setup_steps_screen.xml b/java/res/layout-land/setup_steps_screen.xml
index 0b4a096cc..cf8c42475 100644
--- a/java/res/layout-land/setup_steps_screen.xml
+++ b/java/res/layout-land/setup_steps_screen.xml
@@ -27,7 +27,9 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="@integer/setup_title_weight_in_screen"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:layout_marginEnd="@dimen/setup_title_end_margin"
+ android:layout_marginRight="@dimen/setup_title_end_margin">
<include layout="@layout/setup_steps_title" />
</LinearLayout>
<LinearLayout
diff --git a/java/res/layout-land/setup_welcome_screen.xml b/java/res/layout-land/setup_welcome_screen.xml
index 8b162e27f..38aea2c4f 100644
--- a/java/res/layout-land/setup_welcome_screen.xml
+++ b/java/res/layout-land/setup_welcome_screen.xml
@@ -27,7 +27,9 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="@integer/setup_title_weight_in_screen"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:layout_marginEnd="@dimen/setup_title_end_margin"
+ android:layout_marginRight="@dimen/setup_title_end_margin">
<include layout="@layout/setup_welcome_title" />
</LinearLayout>
<LinearLayout
diff --git a/java/res/layout/setup_welcome_video.xml b/java/res/layout/setup_welcome_video.xml
index 8c04e637e..c39411e3d 100644
--- a/java/res/layout/setup_welcome_video.xml
+++ b/java/res/layout/setup_welcome_video.xml
@@ -25,24 +25,27 @@
android:orientation="horizontal"
android:paddingTop="@dimen/setup_welcome_video_vertical_margin"
android:paddingBottom="@dimen/setup_welcome_video_vertical_margin">
- <View
- android:layout_weight="@integer/setup_welcome_video_left_padding_weight_in_screen"
- android:layout_width="0dp"
- android:layout_height="0dp" />
- <VideoView
- android:id="@+id/setup_welcome_video"
- android:background="@color/setup_background"
- android:layout_weight="@integer/setup_welcome_video_weight_in_screen"
- android:layout_width="0dp"
- android:layout_height="wrap_content" />
- <ImageView
- android:id="@+id/setup_welcome_image"
- android:visibility="gone"
+ <LinearLayout
+ android:id="@+id/setup_welcome_video_frame"
android:layout_weight="@integer/setup_welcome_video_weight_in_screen"
android:layout_width="0dp"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="1dp"
+ android:background="@color/setup_welcome_video_margin_color" >
+ <VideoView
+ android:id="@+id/setup_welcome_video"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/setup_background" />
+ <ImageView
+ android:id="@+id/setup_welcome_image"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone" />
+ </LinearLayout>
<View
- android:layout_weight="@integer/setup_welcome_video_right_padding_weight_in_screen"
+ android:layout_weight="@integer/setup_welcome_video_end_padding_weight_in_screen"
android:layout_width="0dp"
android:layout_height="0dp" />
</LinearLayout>
diff --git a/java/res/raw/setup_welcome_image.png b/java/res/raw/setup_welcome_image.png
index 17e31111f..db5dc344f 100644
--- a/java/res/raw/setup_welcome_image.png
+++ b/java/res/raw/setup_welcome_image.png
Binary files differ
diff --git a/java/res/raw/setup_welcome_video.mp4 b/java/res/raw/setup_welcome_video.mp4
index 09357d8de..820852531 100644
--- a/java/res/raw/setup_welcome_video.mp4
+++ b/java/res/raw/setup_welcome_video.mp4
Binary files differ
diff --git a/java/res/values-h1200dp-port/setup-dimens-large-tablet-port.xml b/java/res/values-h1200dp-port/setup-dimens-large-tablet-port.xml
index ad61c1a3a..d1df81e01 100644
--- a/java/res/values-h1200dp-port/setup-dimens-large-tablet-port.xml
+++ b/java/res/values-h1200dp-port/setup-dimens-large-tablet-port.xml
@@ -33,8 +33,8 @@
<dimen name="setup_step_horizontal_line_height">2dp</dimen>
<integer name="setup_title_weight_in_screen">40</integer>
<integer name="setup_body_weight_in_screen">60</integer>
+ <dimen name="setup_title_end_margin">24dp</dimen>
<dimen name="setup_welcome_video_vertical_margin">24dp</dimen>
- <integer name="setup_welcome_video_weight_in_screen">50</integer>
- <integer name="setup_welcome_video_left_padding_weight_in_screen">25</integer>
- <integer name="setup_welcome_video_right_padding_weight_in_screen">25</integer>
+ <integer name="setup_welcome_video_weight_in_screen">70</integer>
+ <integer name="setup_welcome_video_end_padding_weight_in_screen">30</integer>
</resources>
diff --git a/java/res/values-h330dp-land/setup-dimens-large-phone-land.xml b/java/res/values-h330dp-land/setup-dimens-large-phone-land.xml
index 69a8a7ad5..babc05bf2 100644
--- a/java/res/values-h330dp-land/setup-dimens-large-phone-land.xml
+++ b/java/res/values-h330dp-land/setup-dimens-large-phone-land.xml
@@ -33,8 +33,8 @@
<dimen name="setup_step_horizontal_line_height">2dp</dimen>
<integer name="setup_title_weight_in_screen">40</integer>
<integer name="setup_body_weight_in_screen">60</integer>
+ <dimen name="setup_title_end_margin">24dp</dimen>
<dimen name="setup_welcome_video_vertical_margin">24dp</dimen>
- <integer name="setup_welcome_video_weight_in_screen">80</integer>
- <integer name="setup_welcome_video_left_padding_weight_in_screen">10</integer>
- <integer name="setup_welcome_video_right_padding_weight_in_screen">10</integer>
+ <integer name="setup_welcome_video_weight_in_screen">70</integer>
+ <integer name="setup_welcome_video_end_padding_weight_in_screen">30</integer>
</resources>
diff --git a/java/res/values-h520dp-land/setup-dimens-small-tablet-land.xml b/java/res/values-h520dp-land/setup-dimens-small-tablet-land.xml
index 6a14d5918..772587491 100644
--- a/java/res/values-h520dp-land/setup-dimens-small-tablet-land.xml
+++ b/java/res/values-h520dp-land/setup-dimens-small-tablet-land.xml
@@ -33,8 +33,8 @@
<dimen name="setup_step_horizontal_line_height">2dp</dimen>
<integer name="setup_title_weight_in_screen">40</integer>
<integer name="setup_body_weight_in_screen">60</integer>
+ <dimen name="setup_title_end_margin">24dp</dimen>
<dimen name="setup_welcome_video_vertical_margin">24dp</dimen>
<integer name="setup_welcome_video_weight_in_screen">60</integer>
- <integer name="setup_welcome_video_left_padding_weight_in_screen">20</integer>
- <integer name="setup_welcome_video_right_padding_weight_in_screen">20</integer>
+ <integer name="setup_welcome_video_end_padding_weight_in_screen">40</integer>
</resources>
diff --git a/java/res/values-h540dp-port/setup-dimens-large-phone-port.xml b/java/res/values-h540dp-port/setup-dimens-large-phone-port.xml
index b8dd33df4..42d2284f5 100644
--- a/java/res/values-h540dp-port/setup-dimens-large-phone-port.xml
+++ b/java/res/values-h540dp-port/setup-dimens-large-phone-port.xml
@@ -33,8 +33,8 @@
<dimen name="setup_step_horizontal_line_height">2dp</dimen>
<integer name="setup_title_weight_in_screen">40</integer>
<integer name="setup_body_weight_in_screen">60</integer>
+ <dimen name="setup_title_end_margin">24dp</dimen>
<dimen name="setup_welcome_video_vertical_margin">24dp</dimen>
- <integer name="setup_welcome_video_weight_in_screen">80</integer>
- <integer name="setup_welcome_video_left_padding_weight_in_screen">10</integer>
- <integer name="setup_welcome_video_right_padding_weight_in_screen">10</integer>
+ <integer name="setup_welcome_video_weight_in_screen">70</integer>
+ <integer name="setup_welcome_video_end_padding_weight_in_screen">30</integer>
</resources>
diff --git a/java/res/values-h720dp-land/setup-dimens-large-tablet-land.xml b/java/res/values-h720dp-land/setup-dimens-large-tablet-land.xml
index 0004a3c85..b5f0e5cea 100644
--- a/java/res/values-h720dp-land/setup-dimens-large-tablet-land.xml
+++ b/java/res/values-h720dp-land/setup-dimens-large-tablet-land.xml
@@ -33,8 +33,8 @@
<dimen name="setup_step_horizontal_line_height">2dp</dimen>
<integer name="setup_title_weight_in_screen">40</integer>
<integer name="setup_body_weight_in_screen">60</integer>
+ <dimen name="setup_title_end_margin">24dp</dimen>
<dimen name="setup_welcome_video_vertical_margin">24dp</dimen>
- <integer name="setup_welcome_video_weight_in_screen">50</integer>
- <integer name="setup_welcome_video_left_padding_weight_in_screen">25</integer>
- <integer name="setup_welcome_video_right_padding_weight_in_screen">25</integer>
+ <integer name="setup_welcome_video_weight_in_screen">70</integer>
+ <integer name="setup_welcome_video_end_padding_weight_in_screen">30</integer>
</resources>
diff --git a/java/res/values-h800dp-port/setup-dimens-small-tablet-port.xml b/java/res/values-h800dp-port/setup-dimens-small-tablet-port.xml
index 87c991c4d..770b4e825 100644
--- a/java/res/values-h800dp-port/setup-dimens-small-tablet-port.xml
+++ b/java/res/values-h800dp-port/setup-dimens-small-tablet-port.xml
@@ -33,8 +33,8 @@
<dimen name="setup_step_horizontal_line_height">2dp</dimen>
<integer name="setup_title_weight_in_screen">40</integer>
<integer name="setup_body_weight_in_screen">60</integer>
+ <dimen name="setup_title_end_margin">24dp</dimen>
<dimen name="setup_welcome_video_vertical_margin">24dp</dimen>
<integer name="setup_welcome_video_weight_in_screen">60</integer>
- <integer name="setup_welcome_video_left_padding_weight_in_screen">20</integer>
- <integer name="setup_welcome_video_right_padding_weight_in_screen">20</integer>
+ <integer name="setup_welcome_video_end_padding_weight_in_screen">40</integer>
</resources>
diff --git a/java/res/values-land/setup-dimens-small-phone-land.xml b/java/res/values-land/setup-dimens-small-phone-land.xml
index 63f4661d1..e6dbaa71c 100644
--- a/java/res/values-land/setup-dimens-small-phone-land.xml
+++ b/java/res/values-land/setup-dimens-small-phone-land.xml
@@ -33,8 +33,8 @@
<dimen name="setup_step_horizontal_line_height">2dp</dimen>
<integer name="setup_title_weight_in_screen">40</integer>
<integer name="setup_body_weight_in_screen">60</integer>
- <dimen name="setup_welcome_video_vertical_margin">24dp</dimen>
- <integer name="setup_welcome_video_weight_in_screen">80</integer>
- <integer name="setup_welcome_video_left_padding_weight_in_screen">10</integer>
- <integer name="setup_welcome_video_right_padding_weight_in_screen">10</integer>
+ <dimen name="setup_title_end_margin">12dp</dimen>
+ <dimen name="setup_welcome_video_vertical_margin">12dp</dimen>
+ <integer name="setup_welcome_video_weight_in_screen">60</integer>
+ <integer name="setup_welcome_video_end_padding_weight_in_screen">40</integer>
</resources>
diff --git a/java/res/values-ms/strings-appname.xml b/java/res/values-ms/strings-appname.xml
index 1f9501a7b..76d1d294c 100644
--- a/java/res/values-ms/strings-appname.xml
+++ b/java/res/values-ms/strings-appname.xml
@@ -20,7 +20,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="english_ime_name" msgid="5940510615957428904">"Papan kekunci Android (AOSP)"</string>
+ <string name="english_ime_name" msgid="5940510615957428904">"Papan Kekunci Android (AOSP)"</string>
<string name="spell_checker_service_name" msgid="1254221805440242662">"Penyemak Ejaan Android (AOSP)"</string>
<string name="english_ime_settings" msgid="5760361067176802794">"Tetapan Papan Kekunci Android (AOSP)"</string>
<string name="android_spell_checker_settings" msgid="6123949487832861885">"Tetapan Penyemak Ejaan Android (AOSP)"</string>
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index fe1a3cd0d..bb001efe9 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -177,7 +177,7 @@
<string name="setup_steps_title" msgid="6400373034871816182">"Menyediakan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="setup_step1_title" msgid="3147967630253462315">"Dayakan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="setup_step1_instruction" msgid="2578631936624637241">"Sila semak \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" dlm ttpn Bhs &amp; input. Ini mbnarkn apl djlnkn pd pranti anda."</string>
- <string name="setup_step1_finished_instruction" msgid="10761482004957994">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> sudah didayakan dlm ttpn Bahasa &amp; input anda, jd langkah ini tlh selesai. Beralih ke langkah seterusnya!"</string>
+ <string name="setup_step1_finished_instruction" msgid="10761482004957994">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> sudah didayakan dalam tetapan Bahasa &amp; input anda, jadi langkah ini telah selesai. Beralih ke langkah seterusnya!"</string>
<string name="setup_step1_action" msgid="4366513534999901728">"Dayakan dalam Tetapan"</string>
<string name="setup_step2_title" msgid="6860725447906690594">"Beralih ke <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="setup_step2_instruction" msgid="9141481964870023336">"Seterusnya, pilih \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" sebagai kaedah input teks aktif anda."</string>
@@ -233,7 +233,7 @@
<string name="user_dict_settings_edit_dialog_title" msgid="3765774633869590352">"Edit perkataan"</string>
<string name="user_dict_settings_context_menu_edit_title" msgid="6812255903472456302">"Edit"</string>
<string name="user_dict_settings_context_menu_delete_title" msgid="8142932447689461181">"Padam"</string>
- <string name="user_dict_settings_empty_text" msgid="558499587532668203">"Anda tidak mempunyai sebarang perkataan dalam kamus pengguna. Tambah perkataan dengan menyentuh butang Tambah (+)."</string>
+ <string name="user_dict_settings_empty_text" msgid="558499587532668203">"Anda tidak mempunyai sebarang perkataan dalam kamus pengguna. Tambahkan perkataan dengan menyentuh butang Tambah (+)."</string>
<string name="user_dict_settings_all_languages" msgid="8276126583216298886">"Untuk semua bahasa"</string>
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Lebih banyak bahasa..."</string>
<string name="user_dict_settings_delete" msgid="110413335187193859">"Padam"</string>
diff --git a/java/res/values-port/setup-dimens-small-phone-port.xml b/java/res/values-port/setup-dimens-small-phone-port.xml
index 34f4d9240..a3b18afbc 100644
--- a/java/res/values-port/setup-dimens-small-phone-port.xml
+++ b/java/res/values-port/setup-dimens-small-phone-port.xml
@@ -33,8 +33,8 @@
<dimen name="setup_step_horizontal_line_height">2dp</dimen>
<integer name="setup_title_weight_in_screen">40</integer>
<integer name="setup_body_weight_in_screen">60</integer>
+ <dimen name="setup_title_end_margin">16dp</dimen>
<dimen name="setup_welcome_video_vertical_margin">16dp</dimen>
- <integer name="setup_welcome_video_weight_in_screen">80</integer>
- <integer name="setup_welcome_video_left_padding_weight_in_screen">10</integer>
- <integer name="setup_welcome_video_right_padding_weight_in_screen">10</integer>
+ <integer name="setup_welcome_video_weight_in_screen">70</integer>
+ <integer name="setup_welcome_video_end_padding_weight_in_screen">30</integer>
</resources>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index 25592b1dc..907eee838 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -177,7 +177,7 @@
<string name="setup_steps_title" msgid="6400373034871816182">"Configurando o <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="setup_step1_title" msgid="3147967630253462315">"Ative o <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="setup_step1_instruction" msgid="2578631936624637241">"Marque \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" em \"Configurações de idioma e entrada\" para autorizar a execução."</string>
- <string name="setup_step1_finished_instruction" msgid="10761482004957994">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> já está ativado em suas configurações de idioma e entrada. Esta estapa está concluída. Vamos avançar para a próxima!"</string>
+ <string name="setup_step1_finished_instruction" msgid="10761482004957994">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> já está ativado em suas configurações de idioma e entrada. Esta etapa está concluída. Vamos avançar para a próxima!"</string>
<string name="setup_step1_action" msgid="4366513534999901728">"Ativar em \"Configurações\""</string>
<string name="setup_step2_title" msgid="6860725447906690594">"Abra o <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="setup_step2_instruction" msgid="9141481964870023336">"Em seguida, selecione \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" como o método de entrada de texto ativo."</string>
diff --git a/java/res/values/colors.xml b/java/res/values/colors.xml
index 8a8049f1f..daa167c8a 100644
--- a/java/res/values/colors.xml
+++ b/java/res/values/colors.xml
@@ -58,4 +58,5 @@
<color name="setup_text_dark">#FF707070</color>
<color name="setup_text_action">@android:color/holo_blue_light</color>
<color name="setup_step_background">@android:color/background_light</color>
+ <color name="setup_welcome_video_margin_color">#FFCCCCCC</color>
</resources>
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 742860bf2..d3a21f2aa 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -31,7 +31,7 @@
<bool name="config_default_next_word_prediction">true</bool>
<bool name="config_default_sound_enabled">false</bool>
<bool name="config_default_vibration_enabled">true</bool>
- <integer name="config_max_vibration_duration">250</integer> <!-- milliseconds -->
+ <integer name="config_max_vibration_duration">100</integer> <!-- milliseconds -->
<integer name="config_delay_update_suggestions">100</integer>
<integer name="config_delay_update_old_suggestions">300</integer>
<integer name="config_delay_update_shift_state">100</integer>
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index b6413b3f3..98ae76cb1 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -102,7 +102,7 @@
<!-- Gesture trail parameters -->
<!-- Minimum distance between gesture trail sampling points. -->
- <dimen name="gesture_trail_min_sampling_distance">6.4dp</dimen>
+ <dimen name="gesture_trail_min_sampling_distance">9.6dp</dimen>
<!-- Maximum angular threshold between gesture trails interpolation segments in degree. -->
<integer name="gesture_trail_max_interpolation_angular_threshold">15</integer>
<!-- Maximum distance threshold between gesture trails interpolation segments. -->
diff --git a/java/res/values/keypress-vibration-durations.xml b/java/res/values/keypress-vibration-durations.xml
index ac502f5b0..9ce5051d2 100644
--- a/java/res/values/keypress-vibration-durations.xml
+++ b/java/res/values/keypress-vibration-durations.xml
@@ -42,7 +42,7 @@
<!-- LG Optimus G -->
<item>MODEL=LG-E97[013]|LS970|L-01E:MANUFACTURER=LGE,15</item>
<!-- HTC One X -->
- <item>MODEL=HTC One X:MANUFACTURER=HTC,15</item>
+ <item>MODEL=HTC One X:MANUFACTURER=HTC,20</item>
<!-- Motorola Razor M -->
<item>MODEL=XT907:MANUFACTURER=motorola,30</item>
<!-- Sony Xperia Z -->
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
index 60d09d6fd..9eeee5baf 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
@@ -27,8 +27,9 @@ public interface KeyboardActionListener {
*
* @param primaryCode the unicode of the key being pressed. If the touch is not on a valid key,
* the value will be zero.
+ * @param isSinglePointer true if pressing has occurred while no other key is being pressed.
*/
- public void onPressKey(int primaryCode);
+ public void onPressKey(int primaryCode, boolean isSinglePointer);
/**
* Called when the user releases a key. This is sent after the {@link #onCodeInput} is called.
@@ -88,6 +89,11 @@ public interface KeyboardActionListener {
public void onCancelInput();
/**
+ * Called when user finished sliding key input.
+ */
+ public void onFinishSlidingInput();
+
+ /**
* Send a non-"code input" custom request to the listener.
* @return true if the request has been consumed, false otherwise.
*/
@@ -97,7 +103,7 @@ public interface KeyboardActionListener {
public static final Adapter EMPTY_LISTENER = new Adapter();
@Override
- public void onPressKey(int primaryCode) {}
+ public void onPressKey(int primaryCode, boolean isSinglePointer) {}
@Override
public void onReleaseKey(int primaryCode, boolean withSliding) {}
@Override
@@ -115,6 +121,8 @@ public interface KeyboardActionListener {
@Override
public void onCancelInput() {}
@Override
+ public void onFinishSlidingInput() {}
+ @Override
public boolean onCustomRequest(int requestCode) {
return false;
}
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 39afe9072..ad08d6477 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -216,19 +216,19 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
mState.onResetKeyboardStateToAlphabet();
}
- public void onPressKey(final int code) {
+ public void onPressKey(final int code, final boolean isSinglePointer) {
if (isVibrateAndSoundFeedbackRequired()) {
mFeedbackManager.hapticAndAudioFeedback(code, mKeyboardView);
}
- mState.onPressKey(code, isSinglePointer(), mLatinIME.getCurrentAutoCapsState());
+ mState.onPressKey(code, isSinglePointer, mLatinIME.getCurrentAutoCapsState());
}
public void onReleaseKey(final int code, final boolean withSliding) {
mState.onReleaseKey(code, withSliding);
}
- public void onCancelInput() {
- mState.onCancelInput(isSinglePointer());
+ public void onFinishSlidingInput() {
+ mState.onFinishSlidingInput();
}
// Implements {@link KeyboardState.SwitchActions}.
@@ -346,15 +346,11 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
return mKeyboardView != null && !mKeyboardView.isInSlidingKeyInput();
}
- private boolean isSinglePointer() {
- return mKeyboardView != null && mKeyboardView.getPointerCount() == 1;
- }
-
/**
* Updates state machine to figure out when to automatically switch back to the previous mode.
*/
public void onCodeInput(final int code) {
- mState.onCodeInput(code, isSinglePointer(), mLatinIME.getCurrentAutoCapsState());
+ mState.onCodeInput(code, mLatinIME.getCurrentAutoCapsState());
}
public MainKeyboardView getMainKeyboardView() {
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 3201d2e5b..6c6fc6157 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -1100,10 +1100,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
return false;
}
- public int getPointerCount() {
- return mOldPointerCount;
- }
-
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 5a2af8015..174239325 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -459,7 +459,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
return false;
}
if (key.isEnabled()) {
- mListener.onPressKey(key.mCode);
+ mListener.onPressKey(key.mCode, getActivePointerTrackerCount() == 1);
final boolean keyboardLayoutHasBeenChanged = mKeyboardLayoutHasBeenChanged;
mKeyboardLayoutHasBeenChanged = false;
mTimerProxy.startTypingStateTimer(key);
@@ -527,6 +527,13 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
}
+ private void callListenerOnFinishSlidingInput() {
+ if (DEBUG_LISTENER) {
+ Log.d(TAG, String.format("[%d] onFinishSlidingInput", mPointerId));
+ }
+ mListener.onFinishSlidingInput();
+ }
+
private void callListenerOnCancelInput() {
if (DEBUG_LISTENER) {
Log.d(TAG, String.format("[%d] onCancelInput", mPointerId));
@@ -1036,7 +1043,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
private void processSildeOutFromOldKey(final Key oldKey) {
setReleasedKeyGraphics(oldKey);
- callListenerOnRelease(oldKey, oldKey.mCode, true);
+ callListenerOnRelease(oldKey, oldKey.mCode, true /* withSliding */);
startSlidingKeyInput(oldKey);
mTimerProxy.cancelKeyTimers();
}
@@ -1168,6 +1175,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
private void onUpEventInternal(final int x, final int y, final long eventTime) {
mTimerProxy.cancelKeyTimers();
+ final boolean isInSlidingKeyInput = mIsInSlidingKeyInput;
+ final boolean isInSlidingKeyInputFromModifier = mIsInSlidingKeyInputFromModifier;
resetSlidingKeyInput();
mIsDetectingGesture = false;
final Key currentKey = mCurrentKey;
@@ -1188,7 +1197,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (sInGesture) {
if (currentKey != null) {
- callListenerOnRelease(currentKey, currentKey.mCode, true);
+ callListenerOnRelease(currentKey, currentKey.mCode, true /* withSliding */);
}
mayEndBatchInput(eventTime);
return;
@@ -1197,8 +1206,13 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (mIsTrackingForActionDisabled) {
return;
}
- if (currentKey != null && !currentKey.isRepeatable()) {
- detectAndSendKey(currentKey, mKeyX, mKeyY, eventTime);
+ if (currentKey != null && currentKey.isRepeatable() && !isInSlidingKeyInput) {
+ // Repeatable key has been registered in {@link #onDownEventInternal(int,int,long)}.
+ return;
+ }
+ detectAndSendKey(currentKey, mKeyX, mKeyY, eventTime);
+ if (isInSlidingKeyInputFromModifier) {
+ callListenerOnFinishSlidingInput();
}
}
@@ -1251,7 +1265,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (key == null) return;
if (!key.isRepeatable()) return;
// Don't start key repeat when we are in sliding input mode.
- if (mIsInSlidingKeyInputFromModifier) return;
+ if (mIsInSlidingKeyInput) return;
onRegisterKey(key);
mTimerProxy.startKeyRepeatTimer(this);
}
@@ -1313,7 +1327,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
// doesn't have its more keys. (e.g. spacebar, globe key)
// We always need to start the long press timer if the key has its more keys regardless of
// whether or not we are in the sliding input mode.
- if (mIsInSlidingKeyInputFromModifier && key.mMoreKeys == null) return;
+ if (mIsInSlidingKeyInput && key.mMoreKeys == null) return;
mTimerProxy.startLongPressTimer(this);
}
@@ -1325,7 +1339,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
final int code = key.mCode;
callListenerOnCodeInput(key, code, x, y, eventTime);
- callListenerOnRelease(key, code, false);
+ callListenerOnRelease(key, code, false /* withSliding */);
}
private void printTouchEvent(final String title, final int x, final int y,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index 962bde91e..6af1bd75f 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -28,9 +28,9 @@ import com.android.inputmethod.latin.RecapitalizeStatus;
* This class contains all keyboard state transition logic.
*
* The input events are {@link #onLoadKeyboard()}, {@link #onSaveKeyboardState()},
- * {@link #onPressKey(int, boolean, int)}, {@link #onReleaseKey(int, boolean)},
- * {@link #onCodeInput(int, boolean, int)}, {@link #onCancelInput(boolean)},
- * {@link #onUpdateShiftState(int, int)}, {@link #onLongPressTimeout(int)}.
+ * {@link #onPressKey(int,boolean,int)}, {@link #onReleaseKey(int,boolean)},
+ * {@link #onCodeInput(int,int)}, {@link #onFinishSlidingInput()}, {@link #onCancelInput()},
+ * {@link #onUpdateShiftState(int,int)}, {@link #onLongPressTimeout(int)}.
*
* The actions are {@link SwitchActions}'s methods.
*/
@@ -74,6 +74,7 @@ public final class KeyboardState {
private static final int SWITCH_STATE_SYMBOL = 2;
private static final int SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL = 3;
private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 4;
+ private static final int SWITCH_STATE_MOMENTARY_ALPHA_SHIFT = 5;
private int mSwitchState = SWITCH_STATE_ALPHA;
private boolean mIsAlphabetMode;
@@ -525,6 +526,9 @@ public final class KeyboardState {
} else if (mAlphabetShiftState.isShiftLockShifted() && withSliding) {
// In shift locked state, shift has been pressed and slid out to other key.
setShiftLocked(true);
+ } else if (mAlphabetShiftState.isManualShifted() && withSliding) {
+ // Shift has been pressed and slid out to other key.
+ mSwitchState = SWITCH_STATE_MOMENTARY_ALPHA_SHIFT;
} else if (isShiftLocked && !mAlphabetShiftState.isShiftLockShifted()
&& (mShiftKeyState.isPressing() || mShiftKeyState.isPressingOnShifted())
&& !withSliding) {
@@ -554,17 +558,21 @@ public final class KeyboardState {
mShiftKeyState.onRelease();
}
- public void onCancelInput(final boolean isSinglePointer) {
+ public void onFinishSlidingInput() {
if (DEBUG_EVENT) {
- Log.d(TAG, "onCancelInput: single=" + isSinglePointer + " " + this);
+ Log.d(TAG, "onFinishSlidingInput: " + this);
}
// Switch back to the previous keyboard mode if the user cancels sliding input.
- if (isSinglePointer) {
- if (mSwitchState == SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL) {
- toggleAlphabetAndSymbols();
- } else if (mSwitchState == SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE) {
- toggleShiftInSymbols();
- }
+ switch (mSwitchState) {
+ case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL:
+ toggleAlphabetAndSymbols();
+ break;
+ case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE:
+ toggleShiftInSymbols();
+ break;
+ case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT:
+ setAlphabetKeyboard();
+ break;
}
}
@@ -577,10 +585,9 @@ public final class KeyboardState {
return c == Constants.CODE_SPACE || c == Constants.CODE_ENTER;
}
- public void onCodeInput(final int code, final boolean isSinglePointer, final int autoCaps) {
+ public void onCodeInput(final int code, final int autoCaps) {
if (DEBUG_EVENT) {
Log.d(TAG, "onCodeInput: code=" + Constants.printableCode(code)
- + " single=" + isSinglePointer
+ " autoCaps=" + autoCaps + " " + this);
}
@@ -593,23 +600,12 @@ public final class KeyboardState {
} else {
mSwitchState = SWITCH_STATE_SYMBOL_BEGIN;
}
- } else if (isSinglePointer) {
- // Switch back to the previous keyboard mode if the user pressed the mode change key
- // and slid to other key, then released the finger.
- // If the user cancels the sliding input, switching back to the previous keyboard
- // mode is handled by {@link #onCancelInput}.
- toggleAlphabetAndSymbols();
}
break;
case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE:
if (code == Constants.CODE_SHIFT) {
// Detected only the shift key has been pressed on symbol layout, and then released.
mSwitchState = SWITCH_STATE_SYMBOL_BEGIN;
- } else if (isSinglePointer) {
- // Switch back to the previous keyboard mode if the user pressed the shift key on
- // symbol mode and slid to other key, then released the finger.
- toggleShiftInSymbols();
- mSwitchState = SWITCH_STATE_SYMBOL;
}
break;
case SWITCH_STATE_SYMBOL_BEGIN:
@@ -650,6 +646,7 @@ public final class KeyboardState {
case SWITCH_STATE_SYMBOL: return "SYMBOL";
case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL: return "MOMENTARY-ALPHA-SYMBOL";
case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE: return "MOMENTARY-SYMBOL-MORE";
+ case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT: return "MOMENTARY-ALPHA_SHIFT";
default: return null;
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
index 8901f99b7..31ef3cd8f 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -48,6 +48,9 @@ public final class PointerTrackerQueue {
public void add(final Element pointer) {
synchronized (mExpandableArrayOfActivePointers) {
+ if (DEBUG) {
+ Log.d(TAG, "add: " + pointer + " " + this);
+ }
final ArrayList<Element> expandableArray = mExpandableArrayOfActivePointers;
final int arraySize = mArraySize;
if (arraySize < expandableArray.size()) {
@@ -61,24 +64,27 @@ public final class PointerTrackerQueue {
public void remove(final Element pointer) {
synchronized (mExpandableArrayOfActivePointers) {
+ if (DEBUG) {
+ Log.d(TAG, "remove: " + pointer + " " + this);
+ }
final ArrayList<Element> expandableArray = mExpandableArrayOfActivePointers;
final int arraySize = mArraySize;
- int newSize = 0;
+ int newIndex = 0;
for (int index = 0; index < arraySize; index++) {
final Element element = expandableArray.get(index);
if (element == pointer) {
- if (newSize != index) {
+ if (newIndex != index) {
Log.w(TAG, "Found duplicated element in remove: " + pointer);
}
continue; // Remove this element from the expandableArray.
}
- if (newSize != index) {
+ if (newIndex != index) {
// Shift this element toward the beginning of the expandableArray.
- expandableArray.set(newSize, element);
+ expandableArray.set(newIndex, element);
}
- newSize++;
+ newIndex++;
}
- mArraySize = newSize;
+ mArraySize = newIndex;
}
}
@@ -95,8 +101,8 @@ public final class PointerTrackerQueue {
}
final ArrayList<Element> expandableArray = mExpandableArrayOfActivePointers;
final int arraySize = mArraySize;
- int newSize, index;
- for (newSize = index = 0; index < arraySize; index++) {
+ int newIndex, index;
+ for (newIndex = index = 0; index < arraySize; index++) {
final Element element = expandableArray.get(index);
if (element == pointer) {
break; // Stop releasing elements.
@@ -105,29 +111,30 @@ public final class PointerTrackerQueue {
element.onPhantomUpEvent(eventTime);
continue; // Remove this element from the expandableArray.
}
- if (newSize != index) {
+ if (newIndex != index) {
// Shift this element toward the beginning of the expandableArray.
- expandableArray.set(newSize, element);
+ expandableArray.set(newIndex, element);
}
- newSize++;
+ newIndex++;
}
// Shift rest of the expandableArray.
int count = 0;
for (; index < arraySize; index++) {
final Element element = expandableArray.get(index);
if (element == pointer) {
- if (count > 0) {
+ count++;
+ if (count > 1) {
Log.w(TAG, "Found duplicated element in releaseAllPointersOlderThan: "
+ pointer);
}
- count++;
}
- if (newSize != index) {
- expandableArray.set(newSize, expandableArray.get(index));
- newSize++;
+ if (newIndex != index) {
+ // Shift this element toward the beginning of the expandableArray.
+ expandableArray.set(newIndex, expandableArray.get(index));
}
+ newIndex++;
}
- mArraySize = newSize;
+ mArraySize = newIndex;
}
}
@@ -146,26 +153,26 @@ public final class PointerTrackerQueue {
}
final ArrayList<Element> expandableArray = mExpandableArrayOfActivePointers;
final int arraySize = mArraySize;
- int newSize = 0, count = 0;
+ int newIndex = 0, count = 0;
for (int index = 0; index < arraySize; index++) {
final Element element = expandableArray.get(index);
if (element == pointer) {
- if (count > 0) {
+ count++;
+ if (count > 1) {
Log.w(TAG, "Found duplicated element in releaseAllPointersExcept: "
+ pointer);
}
- count++;
} else {
element.onPhantomUpEvent(eventTime);
continue; // Remove this element from the expandableArray.
}
- if (newSize != index) {
+ if (newIndex != index) {
// Shift this element toward the beginning of the expandableArray.
- expandableArray.set(newSize, element);
+ expandableArray.set(newIndex, element);
}
- newSize++;
+ newIndex++;
}
- mArraySize = newSize;
+ mArraySize = newIndex;
}
}
@@ -202,6 +209,9 @@ public final class PointerTrackerQueue {
public void cancelAllPointerTracker() {
synchronized (mExpandableArrayOfActivePointers) {
+ if (DEBUG) {
+ Log.d(TAG, "cancelAllPointerTracker: " + this);
+ }
final ArrayList<Element> expandableArray = mExpandableArrayOfActivePointers;
final int arraySize = mArraySize;
for (int index = 0; index < arraySize; index++) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index fdd470cf1..9caec5592 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1752,9 +1752,16 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
// Called from PointerTracker through the KeyboardActionListener interface
@Override
+ public void onFinishSlidingInput() {
+ // User finished sliding input.
+ mKeyboardSwitcher.onFinishSlidingInput();
+ }
+
+ // Called from PointerTracker through the KeyboardActionListener interface
+ @Override
public void onCancelInput() {
// User released a finger outside any key
- mKeyboardSwitcher.onCancelInput();
+ // Nothing to do so far.
}
@Override
@@ -2612,8 +2619,8 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
// Callback called by PointerTracker through the KeyboardActionListener. This is called when a
// key is depressed; release matching call is onReleaseKey below.
@Override
- public void onPressKey(final int primaryCode) {
- mKeyboardSwitcher.onPressKey(primaryCode);
+ public void onPressKey(final int primaryCode, final boolean isSinglePointer) {
+ mKeyboardSwitcher.onPressKey(primaryCode, isSinglePointer);
}
// Callback by PointerTracker through the KeyboardActionListener. This is called when a key
diff --git a/java/src/com/android/inputmethod/latin/SeekBarDialogPreference.java b/java/src/com/android/inputmethod/latin/SeekBarDialogPreference.java
index 9819a02ef..7c4156c48 100644
--- a/java/src/com/android/inputmethod/latin/SeekBarDialogPreference.java
+++ b/java/src/com/android/inputmethod/latin/SeekBarDialogPreference.java
@@ -59,7 +59,7 @@ public final class SeekBarDialogPreference extends DialogPreference
public void setInterface(final ValueProxy proxy) {
mValueProxy = proxy;
- setSummary(getValueText(proxy.readValue(getKey())));
+ setSummary(getValueText(clipValue(proxy.readValue(getKey()))));
}
private String getValueText(final int value) {
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java b/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
index 3406ecf34..0d25bc338 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
@@ -27,6 +27,7 @@ import android.os.Message;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
+import android.view.ViewGroup;
import android.view.inputmethod.InputMethodInfo;
import android.widget.ImageView;
import android.widget.TextView;
@@ -199,6 +200,11 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL
welcomeVideoView.setVisibility(View.GONE);
welcomeImageView.setImageResource(R.raw.setup_welcome_image);
welcomeImageView.setVisibility(View.VISIBLE);
+ // Remove unnecessary light gray background around still image.
+ final ViewGroup videoFrame = (ViewGroup)findViewById(
+ R.id.setup_welcome_video_frame);
+ videoFrame.setBackgroundColor(getResources().getColor(R.color.setup_background));
+ videoFrame.requestLayout();
return true;
}
});