aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/res/values-ar/keycodes.xml37
-rw-r--r--java/res/values-ca/strings.xml12
-rw-r--r--java/res/values-de/strings.xml12
-rw-r--r--java/res/values-el/strings.xml12
-rw-r--r--java/res/values-fa/keycodes.xml37
-rw-r--r--java/res/values-fa/strings.xml6
-rw-r--r--java/res/values-iw/keycodes.xml37
-rw-r--r--java/res/values-ko/strings.xml12
-rw-r--r--java/res/values-ms/strings.xml12
-rw-r--r--java/res/values-pt-rPT/strings.xml12
-rw-r--r--java/res/values-th/strings.xml12
-rw-r--r--java/res/values-uk/strings.xml14
-rw-r--r--java/res/values/attrs.xml15
-rw-r--r--java/res/values/donottranslate-more-keys.xml6
-rw-r--r--java/res/values/keycodes.xml53
-rw-r--r--java/res/xml-sw600dp/key_styles_common.xml28
-rw-r--r--java/res/xml-sw768dp/key_styles_common.xml28
-rw-r--r--java/res/xml/key_styles_common.xml34
-rw-r--r--java/res/xml/key_styles_enter.xml4
-rw-r--r--java/res/xml/key_styles_number.xml6
-rw-r--r--java/res/xml/keys_curly_brackets.xml4
-rw-r--r--java/res/xml/keys_less_greater.xml4
-rw-r--r--java/res/xml/keys_parentheses.xml4
-rw-r--r--java/res/xml/keys_square_brackets.xml4
-rw-r--r--java/src/com/android/inputmethod/keyboard/Key.java36
-rw-r--r--java/src/com/android/inputmethod/keyboard/Keyboard.java3
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java28
-rw-r--r--java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java12
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java23
-rw-r--r--java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java5
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java12
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java49
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java4
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java148
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java45
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java27
-rw-r--r--java/src/com/android/inputmethod/latin/ResearchLogger.java424
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java5
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java42
39 files changed, 830 insertions, 438 deletions
diff --git a/java/res/values-ar/keycodes.xml b/java/res/values-ar/keycodes.xml
deleted file mode 100644
index 1f65a7cad..000000000
--- a/java/res/values-ar/keycodes.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- U+0029: ")" RIGHT PARENTHESIS -->
- <integer name="keycode_for_left_parenthesis">0x0029</integer>
- <!-- U+0028: "(" LEFT PARENTHESIS -->
- <integer name="keycode_for_right_parenthesis">0x0028</integer>
- <!-- U+003E: ">" GREATER-THAN SIGN -->
- <integer name="keycode_for_less_than">0x003E</integer>
- <!-- U+003C: "<" LESS-THAN SIGN -->
- <integer name="keycode_for_greater_than">0x003C</integer>
- <!-- U+005D: "]" RIGHT SQUARE BRACKET -->
- <integer name="keycode_for_left_square_bracket">0x005D</integer>
- <!-- U+005B: "[" LEFT SQUARE BRACKET -->
- <integer name="keycode_for_right_square_bracket">0x005B</integer>
- <!-- U+007D: "}" RIGHT CURLY BRACKET -->
- <integer name="keycode_for_left_curly_bracket">0x007D</integer>
- <!-- U+007B: "{" LEFT CURLY BRACKET -->
- <integer name="keycode_for_right_curly_bracket">0x007B</integer>
-</resources>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index 338bc38a2..68715fca7 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -61,12 +61,9 @@
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Moderada"</string>
<string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Total"</string>
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Molt agressiu"</string>
- <!-- no translation found for bigram_suggestion (8169311444438922902) -->
- <skip />
- <!-- no translation found for bigram_suggestion_summary (6635527607242625713) -->
- <skip />
- <!-- no translation found for bigram_prediction (3216364899483135294) -->
- <skip />
+ <string name="bigram_suggestion" msgid="8169311444438922902">"Suggeriments de paraula següent"</string>
+ <string name="bigram_suggestion_summary" msgid="6635527607242625713">"Utilitza la paraula anterior per millorar els suggeriments"</string>
+ <string name="bigram_prediction" msgid="3216364899483135294">"Predicció de paraula següent"</string>
<string name="bigram_prediction_summary" msgid="1747261921174300098">"Utilitza també la paraula anterior per a la predicció"</string>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: desada"</string>
<string name="label_go_key" msgid="1635148082137219148">"Vés"</string>
@@ -121,8 +118,7 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema del teclat"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglès (Regne Unit)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglès (EUA)"</string>
- <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
- <skip />
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Cap idioma (QWERTY)"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'estudi d\'usabilitat"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Configuració de la durada de les vibracions per pulsació de tecla"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Configuració del volum de so de pulsació de tecla"</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 1ab030b27..399069e96 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -61,12 +61,9 @@
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Mäßig"</string>
<string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Stark"</string>
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Sehr stark"</string>
- <!-- no translation found for bigram_suggestion (8169311444438922902) -->
- <skip />
- <!-- no translation found for bigram_suggestion_summary (6635527607242625713) -->
- <skip />
- <!-- no translation found for bigram_prediction (3216364899483135294) -->
- <skip />
+ <string name="bigram_suggestion" msgid="8169311444438922902">"Vorschläge für nächstes Wort"</string>
+ <string name="bigram_suggestion_summary" msgid="6635527607242625713">"Zur Verbesserung von Vorschlägen vorheriges Wort verwenden"</string>
+ <string name="bigram_prediction" msgid="3216364899483135294">"Vervollständigung für nächstes Wort"</string>
<string name="bigram_prediction_summary" msgid="1747261921174300098">"Vorheriges Wort auch für Vervollständigung verwenden"</string>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: gespeichert"</string>
<string name="label_go_key" msgid="1635148082137219148">"Los"</string>
@@ -121,8 +118,7 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tastaturdesign"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Englisch (Großbritannien)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Englisch (USA)"</string>
- <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
- <skip />
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Keine Sprache (QWERTY)"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modus der Studie zur Benutzerfreundlichkeit"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Einstellungen für Vibrationsdauer bei Tastendruck"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Einstellungen für Tonlautstärke bei Tastendruck"</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index ea042f850..7552a2865 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -61,12 +61,9 @@
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Μέτρια"</string>
<string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Υψηλή"</string>
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Πολύ επιθετική"</string>
- <!-- no translation found for bigram_suggestion (8169311444438922902) -->
- <skip />
- <!-- no translation found for bigram_suggestion_summary (6635527607242625713) -->
- <skip />
- <!-- no translation found for bigram_prediction (3216364899483135294) -->
- <skip />
+ <string name="bigram_suggestion" msgid="8169311444438922902">"Προτάσεις επόμενων λέξεων"</string>
+ <string name="bigram_suggestion_summary" msgid="6635527607242625713">"Χρήση προηγούμενης λέξης για τη βελτίωση προτάσεων"</string>
+ <string name="bigram_prediction" msgid="3216364899483135294">"Πρόβλεψη επόμενης λέξης"</string>
<string name="bigram_prediction_summary" msgid="1747261921174300098">"Χρησιμοποιήστε, επίσης, την προηγούμενη λέξη για πρόβλεψη"</string>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Αποθηκεύτηκε"</string>
<string name="label_go_key" msgid="1635148082137219148">"Μετ."</string>
@@ -121,8 +118,7 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Θέμα πληκτρολογίου"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Αγγλικά (Η.Β.)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Αγγλικά (Η.Π.Α)"</string>
- <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
- <skip />
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Καμία γλώσσα (QWERTY)"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Λειτουργία μελέτης χρηστικότητας"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Ρυθμίσεις διάρκειας δόνησης κατά το πάτημα πλήκτρων"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Ρυθμίσεις έντασης ήχου κατά το πάτημα πλήκτρων"</string>
diff --git a/java/res/values-fa/keycodes.xml b/java/res/values-fa/keycodes.xml
deleted file mode 100644
index 1f65a7cad..000000000
--- a/java/res/values-fa/keycodes.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- U+0029: ")" RIGHT PARENTHESIS -->
- <integer name="keycode_for_left_parenthesis">0x0029</integer>
- <!-- U+0028: "(" LEFT PARENTHESIS -->
- <integer name="keycode_for_right_parenthesis">0x0028</integer>
- <!-- U+003E: ">" GREATER-THAN SIGN -->
- <integer name="keycode_for_less_than">0x003E</integer>
- <!-- U+003C: "<" LESS-THAN SIGN -->
- <integer name="keycode_for_greater_than">0x003C</integer>
- <!-- U+005D: "]" RIGHT SQUARE BRACKET -->
- <integer name="keycode_for_left_square_bracket">0x005D</integer>
- <!-- U+005B: "[" LEFT SQUARE BRACKET -->
- <integer name="keycode_for_right_square_bracket">0x005B</integer>
- <!-- U+007D: "}" RIGHT CURLY BRACKET -->
- <integer name="keycode_for_left_curly_bracket">0x007D</integer>
- <!-- U+007B: "{" LEFT CURLY BRACKET -->
- <integer name="keycode_for_right_curly_bracket">0x007B</integer>
-</resources>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index e50be020c..6951ab4a9 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -74,9 +74,9 @@
<string name="label_previous_key" msgid="1211868118071386787">"قبلی"</string>
<string name="label_done_key" msgid="2441578748772529288">"انجام شد"</string>
<string name="label_send_key" msgid="2815056534433717444">"ارسال"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
+ <string name="label_to_alpha_key" msgid="4793983863798817523">"اب‌پ"</string>
+ <string name="label_to_symbol_key" msgid="8516904117128967293">"۳۲۱؟"</string>
+ <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"۳۲۱"</string>
<string name="label_pause_key" msgid="181098308428035340">"توقف موقت"</string>
<string name="label_wait_key" msgid="6402152600878093134">"منتظر بمانید"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"برای شنیدن کلیدهای گذرواژه که با صدای بلند خوانده می‌شوند، از هدست استفاده کنید."</string>
diff --git a/java/res/values-iw/keycodes.xml b/java/res/values-iw/keycodes.xml
deleted file mode 100644
index 1f65a7cad..000000000
--- a/java/res/values-iw/keycodes.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- U+0029: ")" RIGHT PARENTHESIS -->
- <integer name="keycode_for_left_parenthesis">0x0029</integer>
- <!-- U+0028: "(" LEFT PARENTHESIS -->
- <integer name="keycode_for_right_parenthesis">0x0028</integer>
- <!-- U+003E: ">" GREATER-THAN SIGN -->
- <integer name="keycode_for_less_than">0x003E</integer>
- <!-- U+003C: "<" LESS-THAN SIGN -->
- <integer name="keycode_for_greater_than">0x003C</integer>
- <!-- U+005D: "]" RIGHT SQUARE BRACKET -->
- <integer name="keycode_for_left_square_bracket">0x005D</integer>
- <!-- U+005B: "[" LEFT SQUARE BRACKET -->
- <integer name="keycode_for_right_square_bracket">0x005B</integer>
- <!-- U+007D: "}" RIGHT CURLY BRACKET -->
- <integer name="keycode_for_left_curly_bracket">0x007D</integer>
- <!-- U+007B: "{" LEFT CURLY BRACKET -->
- <integer name="keycode_for_right_curly_bracket">0x007B</integer>
-</resources>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index b4d7a46d6..f9524cc68 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -61,12 +61,9 @@
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"약"</string>
<string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"중"</string>
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"강"</string>
- <!-- no translation found for bigram_suggestion (8169311444438922902) -->
- <skip />
- <!-- no translation found for bigram_suggestion_summary (6635527607242625713) -->
- <skip />
- <!-- no translation found for bigram_prediction (3216364899483135294) -->
- <skip />
+ <string name="bigram_suggestion" msgid="8169311444438922902">"다음 추천 검색어"</string>
+ <string name="bigram_suggestion_summary" msgid="6635527607242625713">"이전 단어를 사용하여 추천 검색어 개선"</string>
+ <string name="bigram_prediction" msgid="3216364899483135294">"다음 예상 검색어"</string>
<string name="bigram_prediction_summary" msgid="1747261921174300098">"이전 단어를 사용하여 예상 검색어를 표시합니다."</string>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: 저장됨"</string>
<string name="label_go_key" msgid="1635148082137219148">"이동"</string>
@@ -121,8 +118,7 @@
<string name="keyboard_layout" msgid="8451164783510487501">"키보드 테마"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"영어(영국)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"영어(미국)"</string>
- <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
- <skip />
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"언어가 없음(QWERTY)"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"가용성 연구 모드"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"키를 누를 때 진동 시간 설정"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"키를 누를 때 효과음 설정"</string>
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index 23481576e..95f9706f9 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -61,12 +61,9 @@
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Sederhana"</string>
<string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Agresif"</string>
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Sangat agresif"</string>
- <!-- no translation found for bigram_suggestion (8169311444438922902) -->
- <skip />
- <!-- no translation found for bigram_suggestion_summary (6635527607242625713) -->
- <skip />
- <!-- no translation found for bigram_prediction (3216364899483135294) -->
- <skip />
+ <string name="bigram_suggestion" msgid="8169311444438922902">"Cadangan perkataan seterusnya"</string>
+ <string name="bigram_suggestion_summary" msgid="6635527607242625713">"Gunakan perkataan sebelumnya untuk memperbaik cadangan"</string>
+ <string name="bigram_prediction" msgid="3216364899483135294">"Ramalan perkataan seterusnya"</string>
<string name="bigram_prediction_summary" msgid="1747261921174300098">"Gunakan juga perkataan sebelumnya untuk ramalan"</string>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Disimpan"</string>
<string name="label_go_key" msgid="1635148082137219148">"Pergi"</string>
@@ -121,8 +118,7 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema papan kekunci"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Bahasa Inggeris (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Bahasa Inggeris (AS)"</string>
- <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
- <skip />
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Tiada bahasa (QWERTY)"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mod kajian kebolehgunaan"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Tetapan tempoh getaran tekan kekunci"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Tetapan kelantangan bunyi tekanan kekunci"</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index d1fb0dcdd..037ceb915 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -61,12 +61,9 @@
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Moderada"</string>
<string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Agressiva"</string>
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Muito agressivo"</string>
- <!-- no translation found for bigram_suggestion (8169311444438922902) -->
- <skip />
- <!-- no translation found for bigram_suggestion_summary (6635527607242625713) -->
- <skip />
- <!-- no translation found for bigram_prediction (3216364899483135294) -->
- <skip />
+ <string name="bigram_suggestion" msgid="8169311444438922902">"Sugestões da palavra seguinte"</string>
+ <string name="bigram_suggestion_summary" msgid="6635527607242625713">"Utilizar palavra anterior para melhorar sugestões"</string>
+ <string name="bigram_prediction" msgid="3216364899483135294">"Previsão da palavra seguinte"</string>
<string name="bigram_prediction_summary" msgid="1747261921174300098">"Utilizar a palavra anterior também para predição"</string>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: guardada"</string>
<string name="label_go_key" msgid="1635148082137219148">"OK"</string>
@@ -121,8 +118,7 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema do teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglês (RU)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglês (EUA)"</string>
- <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
- <skip />
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nenhum idioma (QWERTY)"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudo da capacidade de utilização"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Definições de duração da vibração ao premir as teclas"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Definições de volume de som ao premir as teclas"</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index 78222ac5f..3595796de 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -61,12 +61,9 @@
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"ปานกลาง"</string>
<string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"เข้มงวด"</string>
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"เข้มงวดมาก"</string>
- <!-- no translation found for bigram_suggestion (8169311444438922902) -->
- <skip />
- <!-- no translation found for bigram_suggestion_summary (6635527607242625713) -->
- <skip />
- <!-- no translation found for bigram_prediction (3216364899483135294) -->
- <skip />
+ <string name="bigram_suggestion" msgid="8169311444438922902">"คำแนะนำสำหรับคำถัดไป"</string>
+ <string name="bigram_suggestion_summary" msgid="6635527607242625713">"ใช้คำก่อนหน้านี้เพื่อปรับปรุงคำแนะนำ"</string>
+ <string name="bigram_prediction" msgid="3216364899483135294">"การคาดคะเนคำถัดไป"</string>
<string name="bigram_prediction_summary" msgid="1747261921174300098">"ใช้คำก่อนหน้านี้สำหรับการคาดคะเน"</string>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : บันทึกแล้ว"</string>
<string name="label_go_key" msgid="1635148082137219148">"ไป"</string>
@@ -121,8 +118,7 @@
<string name="keyboard_layout" msgid="8451164783510487501">"ชุดรูปแบบแป้นพิมพ์"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"อังกฤษ (สหราชอาณาจักร)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"อังกฤษ (อเมริกัน)"</string>
- <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
- <skip />
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"ไม่มีภาษา (QWERTY)"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"โหมดศึกษาประโยชน์ในการใช้งาน"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"การตั้งค่าระยะเวลาการสั่นเมื่อกดแป้นพิมพ์"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"การตั้งค่าระดับเสียงเมื่อกดแป้นพิมพ์"</string>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index ae188aadf..1bc2ca791 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -61,12 +61,9 @@
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Середнє"</string>
<string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Повне"</string>
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Повне виправлення"</string>
- <!-- no translation found for bigram_suggestion (8169311444438922902) -->
- <skip />
- <!-- no translation found for bigram_suggestion_summary (6635527607242625713) -->
- <skip />
- <!-- no translation found for bigram_prediction (3216364899483135294) -->
- <skip />
+ <string name="bigram_suggestion" msgid="8169311444438922902">"Пропозиції наступного слова"</string>
+ <string name="bigram_suggestion_summary" msgid="6635527607242625713">"Використати попереднє слово для покращення пропозицій"</string>
+ <string name="bigram_prediction" msgid="3216364899483135294">"Передбачення наступного слова"</string>
<string name="bigram_prediction_summary" msgid="1747261921174300098">"Використовувати попереднє слово також як передбачений запит"</string>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : збережено"</string>
<string name="label_go_key" msgid="1635148082137219148">"Іти"</string>
@@ -74,7 +71,7 @@
<string name="label_previous_key" msgid="1211868118071386787">"Назад"</string>
<string name="label_done_key" msgid="2441578748772529288">"Готово"</string>
<string name="label_send_key" msgid="2815056534433717444">"Надісл."</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"Алфавіт"</string>
+ <string name="label_to_alpha_key" msgid="4793983863798817523">"АБВ"</string>
<string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
<string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Пауза"</string>
@@ -121,8 +118,7 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Тема клавіатури"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Англійська (Великобританія)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Англійська (США)"</string>
- <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
- <skip />
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Немає мови (QWERTY)"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим вивчення зручності у використанні"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Налаштування тривалості вібрації під час натискання клавіші"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Налаштування гучності звуку під час натискання клавіші"</string>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 39d50e348..573ec68b7 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -229,10 +229,14 @@
</declare-styleable>
<declare-styleable name="Keyboard_Key">
- <!-- The unicode value that this key outputs. -->
- <attr name="code" format="integer" />
- <!-- The alternate unicode value that this key outputs while typing. -->
- <attr name="altCode" format="integer" />
+ <!-- The unicode value that this key outputs.
+ Code value represented in hexadecimal prefixed with "0x" or code value reference using
+ "!code/<code_name>" notation. -->
+ <attr name="code" format="string" />
+ <!-- The alternate unicode value that this key outputs while typing.
+ Code value represented in hexadecimal prefixed with "0x" or code value reference using
+ "!code/<code_name>" notation. -->
+ <attr name="altCode" format="string" />
<!-- The keys to display in the more keys keyboard. -->
<attr name="moreKeys" format="string" />
<!-- The keys to display in the more keys keyboard in addition to moreKeys.
@@ -296,6 +300,7 @@
<flag name="disableAdditionalMoreKeys" value="0x80000000" />
</attr>
<!-- The icon to display on the key instead of the label. -->
+ <!-- TODO: Use string format !icon/name. -->
<attr name="keyIcon" format="enum">
<!-- This should be aligned with the KeyboardIconsSet.ICON_* -->
<enum name="iconUndefined" value="0" />
@@ -315,11 +320,13 @@
<enum name="iconZwjKey" value="16" />
</attr>
<!-- The icon for disabled key -->
+ <!-- TODO: Use string format !icon/name. -->
<attr name="keyIconDisabled" format="enum">
<!-- This should be aligned with the KeyboardIconsSet.ICON_* -->
<enum name="iconDisabledShortcutKey" value="12" />
</attr>
<!-- The icon to show in the popup preview. -->
+ <!-- TODO: Use string format !icon/name. -->
<attr name="keyIconPreview" format="enum">
<!-- This should be aligned with the KeyboardIconsSet.ICON_* -->
<enum name="iconPreviewTabKey" value="13" />
diff --git a/java/res/values/donottranslate-more-keys.xml b/java/res/values/donottranslate-more-keys.xml
index f50dd4f40..14c278af9 100644
--- a/java/res/values/donottranslate-more-keys.xml
+++ b/java/res/values/donottranslate-more-keys.xml
@@ -120,11 +120,11 @@
U+2205: "∅" EMPTY SET -->
<string name="more_keys_for_symbols_0">&#x207F;,&#x2205;</string>
<string name="more_keys_for_am_pm">!fixedColumnOrder!2,!hasLabels!,\@string/label_time_am,\@string/label_time_pm</string>
- <string name="settings_as_more_key">\@icon/settingsKey|\@integer/key_settings</string>
+ <string name="settings_as_more_key">!icon/settingsKey|!code/key_settings</string>
<string name="keylabel_for_comma">,</string>
<string name="more_keys_for_comma"></string>
- <string name="action_next_as_more_key">!hasLabels!,\@string/label_next_key|\@integer/key_action_next</string>
- <string name="action_previous_as_more_key">!hasLabels!,\@string/label_previous_key|\@integer/key_action_previous</string>
+ <string name="action_next_as_more_key">!hasLabels!,\@string/label_next_key|!code/key_action_next</string>
+ <string name="action_previous_as_more_key">!hasLabels!,\@string/label_previous_key|!code/key_action_previous</string>
<string name="keylabel_for_symbols_question">\?</string>
<string name="keylabel_for_symbols_semicolon">;</string>
<string name="keylabel_for_symbols_percent">%</string>
diff --git a/java/res/values/keycodes.xml b/java/res/values/keycodes.xml
deleted file mode 100644
index f42495a75..000000000
--- a/java/res/values/keycodes.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2009, 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.
-*/
--->
-
-<resources>
- <!-- These code should be aligned with Keyboard.CODE_*. -->
- <integer name="key_tab">9</integer>
- <integer name="key_enter">10</integer>
- <integer name="key_space">32</integer>
- <integer name="key_shift">-1</integer>
- <integer name="key_switch_alpha_symbol">-2</integer>
- <integer name="key_output_text">-3</integer>
- <integer name="key_delete">-4</integer>
- <integer name="key_settings">-5</integer>
- <integer name="key_shortcut">-6</integer>
- <integer name="key_action_enter">-7</integer>
- <integer name="key_action_next">-8</integer>
- <integer name="key_action_previous">-9</integer>
- <integer name="key_language_switch">-10</integer>
- <integer name="key_unspecified">-11</integer>
- <!-- U+0028: "(" LEFT PARENTHESIS -->
- <integer name="keycode_for_left_parenthesis">0x0028</integer>
- <!-- U+0029: ")" RIGHT PARENTHESIS -->
- <integer name="keycode_for_right_parenthesis">0x0029</integer>
- <!-- U+003C: "<" LESS-THAN SIGN -->
- <integer name="keycode_for_less_than">0x003C</integer>
- <!-- U+003E: ">" GREATER-THAN SIGN -->
- <integer name="keycode_for_greater_than">0x003E</integer>
- <!-- U+005B: "[" LEFT SQUARE BRACKET -->
- <integer name="keycode_for_left_square_bracket">0x005B</integer>
- <!-- U+005D: "]" RIGHT SQUARE BRACKET -->
- <integer name="keycode_for_right_square_bracket">0x005D</integer>
- <!-- U+007B: "{" LEFT CURLY BRACKET -->
- <integer name="keycode_for_left_curly_bracket">0x007B</integer>
- <!-- U+007D: "}" RIGHT CURLY BRACKET -->
- <integer name="keycode_for_right_curly_bracket">0x007D</integer>
-</resources>
diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index 45e22fce3..b0f610912 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -42,7 +42,7 @@
>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKeyShifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
@@ -52,7 +52,7 @@
>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKeyShifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOn" />
@@ -60,7 +60,7 @@
<default>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKey"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
@@ -68,7 +68,7 @@
</switch>
<key-style
latin:styleName="deleteKeyStyle"
- latin:code="@integer/key_delete"
+ latin:code="!code/key_delete"
latin:keyIcon="iconDeleteKey"
latin:keyActionFlags="isRepeatable|noKeyPreview"
latin:backgroundType="functional" />
@@ -76,7 +76,7 @@
latin:keyboardLayout="@xml/key_styles_enter" />
<key-style
latin:styleName="spaceKeyStyle"
- latin:code="@integer/key_space"
+ latin:code="!code/key_space"
latin:keyActionFlags="noKeyPreview" />
<!-- U+200C: ZERO WIDTH NON-JOINER
U+200D: ZERO WIDTH JOINER -->
@@ -84,7 +84,7 @@
latin:styleName="zwnjKeyStyle"
latin:code="0x200C"
latin:keyIcon="iconZwnjKey"
- latin:moreKeys="\@icon/zwjKey|&#x200D;"
+ latin:moreKeys="!icon/zwjKey|&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:keyActionFlags="noKeyPreview" />
<key-style
@@ -95,7 +95,7 @@
latin:moreKeys="@string/more_keys_for_smiley" />
<key-style
latin:styleName="shortcutKeyStyle"
- latin:code="@integer/key_shortcut"
+ latin:code="!code/key_shortcut"
latin:keyIcon="iconShortcutKey"
latin:keyIconDisabled="iconDisabledShortcutKey"
latin:keyLabelFlags="preserveCase"
@@ -103,7 +103,7 @@
latin:backgroundType="functional" />
<key-style
latin:styleName="settingsKeyStyle"
- latin:code="@integer/key_settings"
+ latin:code="!code/key_settings"
latin:keyIcon="iconSettingsKey"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:backgroundType="functional" />
@@ -114,7 +114,7 @@
>
<key-style
latin:styleName="tabKeyStyle"
- latin:code="@integer/key_action_previous"
+ latin:code="!code/key_action_previous"
latin:keyIcon="iconTabKey"
latin:keyIconPreview="iconPreviewTabKey"
latin:backgroundType="functional" />
@@ -122,7 +122,7 @@
<default>
<key-style
latin:styleName="tabKeyStyle"
- latin:code="@integer/key_tab"
+ latin:code="!code/key_tab"
latin:keyIcon="iconTabKey"
latin:keyIconPreview="iconPreviewTabKey"
latin:backgroundType="functional" />
@@ -130,28 +130,28 @@
</switch>
<key-style
latin:styleName="toSymbolKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_symbol_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toAlphaKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_alpha_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyLabel="@string/label_to_more_symbol_for_tablet_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyLabel="@string/label_to_symbol_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml
index e1c236912..aa9cd692a 100644
--- a/java/res/xml-sw768dp/key_styles_common.xml
+++ b/java/res/xml-sw768dp/key_styles_common.xml
@@ -41,7 +41,7 @@
>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKeyShifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
@@ -51,7 +51,7 @@
>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKeyShifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOn" />
@@ -59,7 +59,7 @@
<default>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKey"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
@@ -67,7 +67,7 @@
</switch>
<key-style
latin:styleName="deleteKeyStyle"
- latin:code="@integer/key_delete"
+ latin:code="!code/key_delete"
latin:keyIcon="iconDeleteKey"
latin:keyActionFlags="isRepeatable|noKeyPreview"
latin:backgroundType="functional" />
@@ -75,7 +75,7 @@
latin:keyboardLayout="@xml/key_styles_enter" />
<key-style
latin:styleName="spaceKeyStyle"
- latin:code="@integer/key_space"
+ latin:code="!code/key_space"
latin:keyActionFlags="noKeyPreview" />
<!-- U+200C: ZERO WIDTH NON-JOINER
U+200D: ZERO WIDTH JOINER -->
@@ -83,7 +83,7 @@
latin:styleName="zwnjKeyStyle"
latin:code="0x200C"
latin:keyIcon="iconZwnjKey"
- latin:moreKeys="\@icon/zwjKey|&#x200D;"
+ latin:moreKeys="!icon/zwjKey|&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:keyActionFlags="noKeyPreview" />
<key-style
@@ -94,7 +94,7 @@
latin:moreKeys="@string/more_keys_for_smiley" />
<key-style
latin:styleName="shortcutKeyStyle"
- latin:code="@integer/key_shortcut"
+ latin:code="!code/key_shortcut"
latin:keyIcon="iconShortcutKey"
latin:keyIconDisabled="iconDisabledShortcutKey"
latin:keyLabelFlags="preserveCase"
@@ -102,7 +102,7 @@
latin:backgroundType="functional" />
<key-style
latin:styleName="settingsKeyStyle"
- latin:code="@integer/key_settings"
+ latin:code="!code/key_settings"
latin:keyIcon="iconSettingsKey"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:backgroundType="functional" />
@@ -113,7 +113,7 @@
>
<key-style
latin:styleName="tabKeyStyle"
- latin:code="@integer/key_action_previous"
+ latin:code="!code/key_action_previous"
latin:keyLabel="@string/label_tab_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:backgroundType="functional" />
@@ -121,7 +121,7 @@
<default>
<key-style
latin:styleName="tabKeyStyle"
- latin:code="@integer/key_tab"
+ latin:code="!code/key_tab"
latin:keyLabel="@string/label_tab_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:backgroundType="functional" />
@@ -129,28 +129,28 @@
</switch>
<key-style
latin:styleName="toSymbolKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_symbol_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toAlphaKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_alpha_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyLabel="@string/label_to_more_symbol_for_tablet_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyLabel="@string/label_to_symbol_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:keyActionFlags="noKeyPreview"
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index 8d01091d6..b0b87a810 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -46,7 +46,7 @@
>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKeyShifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
@@ -56,7 +56,7 @@
>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKeyShifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOn" />
@@ -64,7 +64,7 @@
<default>
<key-style
latin:styleName="shiftKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyIcon="iconShiftKey"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
@@ -72,7 +72,7 @@
</switch>
<key-style
latin:styleName="deleteKeyStyle"
- latin:code="@integer/key_delete"
+ latin:code="!code/key_delete"
latin:keyIcon="iconDeleteKey"
latin:keyActionFlags="isRepeatable|noKeyPreview"
latin:backgroundType="functional" />
@@ -104,7 +104,7 @@
</switch>
<key-style
latin:styleName="spaceKeyStyle"
- latin:code="@integer/key_space"
+ latin:code="!code/key_space"
latin:keyActionFlags="noKeyPreview|enableLongPress"
latin:backgroundType="functional" />
<!-- U+200C: ZERO WIDTH NON-JOINER
@@ -113,29 +113,29 @@
latin:styleName="zwnjKeyStyle"
latin:code="0x200C"
latin:keyIcon="iconZwnjKey"
- latin:moreKeys="\@icon/zwjKey|&#x200D;"
+ latin:moreKeys="!icon/zwjKey|&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="shortcutKeyStyle"
- latin:code="@integer/key_shortcut"
+ latin:code="!code/key_shortcut"
latin:keyIcon="iconShortcutKey"
latin:keyIconDisabled="iconDisabledShortcutKey"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
- latin:altCode="@integer/key_space"
+ latin:altCode="!code/key_space"
latin:parentStyle="f1MoreKeysStyle" />
<key-style
latin:styleName="languageSwitchKeyStyle"
- latin:code="@integer/key_language_switch"
+ latin:code="!code/key_language_switch"
latin:keyIcon="iconLanguageSwitchKey"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping|enableLongPress"
- latin:altCode="@integer/key_space"
+ latin:altCode="!code/key_space"
latin:backgroundType="functional" />
<key-style
latin:styleName="tabKeyStyle"
- latin:code="@integer/key_tab"
+ latin:code="!code/key_tab"
latin:keyIcon="iconTabKey"
latin:keyIconPreview="iconPreviewTabKey"
latin:backgroundType="functional" />
@@ -143,7 +143,7 @@
laid out as normal letter key. -->
<key-style
latin:styleName="nonSpecialBackgroundTabKeyStyle"
- latin:code="@integer/key_tab"
+ latin:code="!code/key_tab"
latin:keyIcon="iconTabKey"
latin:keyIconPreview="iconPreviewTabKey" />
<switch>
@@ -156,7 +156,7 @@
>
<key-style
latin:styleName="toSymbolKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyIcon="iconShortcutForLabel"
latin:keyLabel="@string/label_to_symbol_with_microphone_key"
latin:keyLabelFlags="withIconRight|preserveCase"
@@ -166,7 +166,7 @@
<default>
<key-style
latin:styleName="toSymbolKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_symbol_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
@@ -175,21 +175,21 @@
</switch>
<key-style
latin:styleName="toAlphaKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_alpha_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyLabel="@string/label_to_more_symbol_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
- latin:code="@integer/key_shift"
+ latin:code="!code/key_shift"
latin:keyLabel="@string/label_to_symbol_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml
index e15a0bec7..49759c470 100644
--- a/java/res/xml/key_styles_enter.xml
+++ b/java/res/xml/key_styles_enter.xml
@@ -92,7 +92,7 @@
<!-- Enter key style -->
<key-style
latin:styleName="defaultEnterKeyStyle"
- latin:code="@integer/key_enter"
+ latin:code="!code/key_enter"
latin:keyIcon="iconReturnKey"
latin:keyLabelFlags="autoXScale|preserveCase"
latin:keyActionFlags="noKeyPreview"
@@ -100,7 +100,7 @@
latin:parentStyle="navigateMoreKeysStyle" />
<key-style
latin:styleName="defaultActionKeyStyle"
- latin:code="@integer/key_action_enter"
+ latin:code="!code/key_action_enter"
latin:keyIcon="iconUndefined"
latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
diff --git a/java/res/xml/key_styles_number.xml b/java/res/xml/key_styles_number.xml
index 1fc21694d..e1c5e5bca 100644
--- a/java/res/xml/key_styles_number.xml
+++ b/java/res/xml/key_styles_number.xml
@@ -99,12 +99,12 @@
<!-- Only for non-tablet device -->
<key-style
latin:styleName="numPhoneToSymbolKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_phone_symbols_key"
latin:parentStyle="numModeKeyStyle" />
<key-style
latin:styleName="numPhoneToNumericKeyStyle"
- latin:code="@integer/key_switch_alpha_symbol"
+ latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_phone_numeric_key"
latin:parentStyle="numModeKeyStyle" />
<!-- U+002C: "," COMMA -->
@@ -127,7 +127,7 @@
latin:parentStyle="tabKeyStyle" />
<key-style
latin:styleName="numSpaceKeyStyle"
- latin:code="@integer/key_space"
+ latin:code="!code/key_space"
latin:keyIcon="iconSpaceKeyForNumberLayout"
latin:keyActionFlags="enableLongPress"
latin:parentStyle="numKeyBaseStyle" />
diff --git a/java/res/xml/keys_curly_brackets.xml b/java/res/xml/keys_curly_brackets.xml
index d21a09281..6a4b1a945 100644
--- a/java/res/xml/keys_curly_brackets.xml
+++ b/java/res/xml/keys_curly_brackets.xml
@@ -23,8 +23,8 @@
>
<Key
latin:keyLabel="{"
- latin:code="@integer/keycode_for_left_curly_bracket" />
+ latin:code="!code/key_left_curly_bracket" />
<Key
latin:keyLabel="}"
- latin:code="@integer/keycode_for_right_curly_bracket" />
+ latin:code="!code/key_right_curly_bracket" />
</merge>
diff --git a/java/res/xml/keys_less_greater.xml b/java/res/xml/keys_less_greater.xml
index 8961d9ce6..831f2dd86 100644
--- a/java/res/xml/keys_less_greater.xml
+++ b/java/res/xml/keys_less_greater.xml
@@ -23,10 +23,10 @@
>
<Key
latin:keyLabel="&lt;"
- latin:code="@integer/keycode_for_less_than"
+ latin:code="!code/key_less_than"
latin:moreKeys="@string/more_keys_for_less_than" />
<Key
latin:keyLabel="&gt;"
- latin:code="@integer/keycode_for_greater_than"
+ latin:code="!code/key_greater_than"
latin:moreKeys="@string/more_keys_for_greater_than" />
</merge>
diff --git a/java/res/xml/keys_parentheses.xml b/java/res/xml/keys_parentheses.xml
index 6853bf167..502a84ede 100644
--- a/java/res/xml/keys_parentheses.xml
+++ b/java/res/xml/keys_parentheses.xml
@@ -23,10 +23,10 @@
>
<Key
latin:keyLabel="("
- latin:code="@integer/keycode_for_left_parenthesis"
+ latin:code="!code/key_left_parenthesis"
latin:moreKeys="@string/more_keys_for_left_parenthesis" />
<Key
latin:keyLabel=")"
- latin:code="@integer/keycode_for_right_parenthesis"
+ latin:code="!code/key_right_parenthesis"
latin:moreKeys="@string/more_keys_for_right_parenthesis" />
</merge>
diff --git a/java/res/xml/keys_square_brackets.xml b/java/res/xml/keys_square_brackets.xml
index 44387c3bf..5c128fd0c 100644
--- a/java/res/xml/keys_square_brackets.xml
+++ b/java/res/xml/keys_square_brackets.xml
@@ -23,8 +23,8 @@
>
<Key
latin:keyLabel="["
- latin:code="@integer/keycode_for_left_square_bracket" />
+ latin:code="!code/key_left_square_bracket" />
<Key
latin:keyLabel="]"
- latin:code="@integer/keycode_for_right_square_bracket" />
+ latin:code="!code/key_right_square_bracket" />
</merge>
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 0a2b010b6..fbb13c25f 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -26,6 +26,7 @@ import android.util.Log;
import android.util.Xml;
import com.android.inputmethod.keyboard.internal.KeySpecParser;
+import com.android.inputmethod.keyboard.internal.KeySpecParser.MoreKeySpec;
import com.android.inputmethod.keyboard.internal.KeyStyles;
import com.android.inputmethod.keyboard.internal.KeyStyles.KeyStyle;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
@@ -104,7 +105,7 @@ public class Key {
/** Text to output when pressed. This can be multiple characters, like ".com" */
public final CharSequence mOutputText;
/** More keys */
- public final String[] mMoreKeys;
+ public final MoreKeySpec[] mMoreKeys;
/** More keys column number and flags */
private final int mMoreKeysColumnAndFlags;
private static final int MORE_KEYS_COLUMN_MASK = 0x000000ff;
@@ -140,15 +141,12 @@ public class Key {
private boolean mEnabled = true;
/**
- * This constructor is being used only for key in more keys keyboard.
+ * This constructor is being used only for keys in more keys keyboard.
*/
- public Key(Resources res, Keyboard.Params params, String moreKeySpec,
- int x, int y, int width, int height, int labelFlags) {
- this(params, KeySpecParser.getLabel(moreKeySpec), null,
- KeySpecParser.getIconId(moreKeySpec),
- KeySpecParser.getCode(res, moreKeySpec),
- KeySpecParser.getOutputText(moreKeySpec),
- x, y, width, height, labelFlags);
+ public Key(Keyboard.Params params, MoreKeySpec moreKeySpec, int x, int y, int width, int height,
+ int labelFlags) {
+ this(params, moreKeySpec.mLabel, null, moreKeySpec.mIconId, moreKeySpec.mCode,
+ moreKeySpec.mOutputText, x, y, width, height, labelFlags);
}
/**
@@ -278,13 +276,15 @@ public class Key {
moreKeys = KeySpecParser.insertAddtionalMoreKeys(moreKeys, additionalMoreKeys);
if (moreKeys != null) {
actionFlags |= ACTION_FLAGS_ENABLE_LONG_PRESS;
+ mMoreKeys = new MoreKeySpec[moreKeys.length];
for (int i = 0; i < moreKeys.length; i++) {
- moreKeys[i] = adjustCaseOfStringForKeyboardId(
- moreKeys[i], preserveCase, params.mId);
+ mMoreKeys[i] = new MoreKeySpec(adjustCaseOfStringForKeyboardId(
+ moreKeys[i], preserveCase, params.mId), params.mCodesSet);
}
+ } else {
+ mMoreKeys = null;
}
mActionFlags = actionFlags;
- mMoreKeys = moreKeys;
if ((mLabelFlags & LABEL_FLAGS_FROM_CUSTOM_ACTION_LABEL) != 0) {
mLabel = params.mId.mCustomActionLabel;
@@ -300,8 +300,9 @@ public class Key {
}
String outputText = adjustCaseOfStringForKeyboardId(style.getString(
keyAttr, R.styleable.Keyboard_Key_keyOutputText), preserveCase, params.mId);
- final int code = style.getInt(
- keyAttr, R.styleable.Keyboard_Key_code, Keyboard.CODE_UNSPECIFIED);
+ final int code = KeySpecParser.parseCode(style.getString(
+ keyAttr, R.styleable.Keyboard_Key_code),
+ params.mCodesSet, Keyboard.CODE_UNSPECIFIED);
// Choose the first letter of the label as primary code if not specified.
if (code == Keyboard.CODE_UNSPECIFIED && TextUtils.isEmpty(outputText)
&& !TextUtils.isEmpty(mLabel)) {
@@ -331,9 +332,10 @@ public class Key {
mCode = adjustCaseOfCodeForKeyboardId(code, preserveCase, params.mId);
}
mOutputText = outputText;
- mAltCode = adjustCaseOfCodeForKeyboardId(style.getInt(keyAttr,
- R.styleable.Keyboard_Key_altCode, Keyboard.CODE_UNSPECIFIED), preserveCase,
- params.mId);
+ mAltCode = adjustCaseOfCodeForKeyboardId(KeySpecParser.parseCode(style.getString(
+ keyAttr, R.styleable.Keyboard_Key_altCode),
+ params.mCodesSet, Keyboard.CODE_UNSPECIFIED),
+ preserveCase, params.mId);
mHashCode = computeHashCode(this);
keyAttr.recycle();
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 950b5e99b..36a988bb6 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -28,6 +28,7 @@ import android.util.Xml;
import android.view.InflateException;
import com.android.inputmethod.keyboard.internal.KeyStyles;
+import com.android.inputmethod.keyboard.internal.KeyboardCodesSet;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
@@ -238,6 +239,7 @@ public class Keyboard {
public final ArrayList<Key> mShiftKeys = new ArrayList<Key>();
public final ArrayList<Key> mAltCodeKeysWhileTyping = new ArrayList<Key>();
public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();
+ public final KeyboardCodesSet mCodesSet = new KeyboardCodesSet();
public KeyboardLayoutSet.KeysCache mKeysCache;
@@ -775,6 +777,7 @@ public class Keyboard {
params.mThemeId = keyboardAttr.getInt(R.styleable.Keyboard_themeId, 0);
params.mIconsSet.loadIcons(keyboardAttr);
+ params.mCodesSet.setLanguage(params.mId.mLocale.getLanguage());
final int resourceId = keyboardAttr.getResourceId(
R.styleable.Keyboard_touchPositionCorrectionData, 0);
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 2689e6e13..5ebf92cf7 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -41,7 +41,6 @@ import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
-import com.android.inputmethod.keyboard.internal.KeySpecParser;
import com.android.inputmethod.latin.LatinIME;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
@@ -555,9 +554,12 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
* method on the base class if the subclass doesn't wish to handle the call.
*/
protected boolean onLongPress(Key parentKey, PointerTracker tracker) {
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.latinKeyboardView_onLongPress();
+ }
final int primaryCode = parentKey.mCode;
if (parentKey.hasEmbeddedMoreKey()) {
- final int embeddedCode = KeySpecParser.getCode(getResources(), parentKey.mMoreKeys[0]);
+ final int embeddedCode = parentKey.mMoreKeys[0].mCode;
tracker.onLongPressed();
invokeCodeInput(embeddedCode);
invokeReleaseKey(primaryCode);
@@ -695,17 +697,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
}
}
if (ProductionFlag.IS_EXPERIMENTAL) {
- if (ResearchLogger.sIsLogging) {
- // TODO: remove redundant calculations of size and pressure by
- // removing UsabilityStudyLog code once the ResearchLogger is mature enough
- final float size = me.getSize(index);
- final float pressure = me.getPressure(index);
- if (action != MotionEvent.ACTION_MOVE) {
- // Skip ACTION_MOVE events as they are logged below
- ResearchLogger.getInstance().logMotionEvent(action, eventTime, id, x, y,
- size, pressure);
- }
- }
+ ResearchLogger.latinKeyboardView_processMotionEvent(me, action, eventTime, index, id,
+ x, y);
}
if (mKeyTimerHandler.isInKeyRepeat()) {
@@ -773,13 +766,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
+ pointerSize + "," + pointerPressure);
}
if (ProductionFlag.IS_EXPERIMENTAL) {
- if (ResearchLogger.sIsLogging) {
- // TODO: earlier comment about redundant calculations applies here too
- final float pointerSize = me.getSize(i);
- final float pointerPressure = me.getPressure(i);
- ResearchLogger.getInstance().logMotionEvent(action, eventTime, pointerId,
- px, py, pointerSize, pointerPressure);
- }
+ ResearchLogger.latinKeyboardView_processMotionEvent(me, action, eventTime,
+ i, pointerId, px, py);
}
}
} else {
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
index 72a5d0f05..f8682d8ca 100644
--- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
@@ -19,7 +19,7 @@ package com.android.inputmethod.keyboard;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
-import com.android.inputmethod.keyboard.internal.KeySpecParser;
+import com.android.inputmethod.keyboard.internal.KeySpecParser.MoreKeySpec;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.StringUtils;
@@ -301,8 +301,8 @@ public class MoreKeysKeyboard extends Keyboard {
? view.mKeyDrawParams.mKeyLabelSize
: view.mKeyDrawParams.mKeyLetterSize);
int maxWidth = minKeyWidth;
- for (String moreKeySpec : parentKey.mMoreKeys) {
- final String label = KeySpecParser.getLabel(moreKeySpec);
+ for (final MoreKeySpec spec : parentKey.mMoreKeys) {
+ final String label = spec.mLabel;
// If the label is single letter, minKeyWidth is enough to hold the label.
if (label != null && StringUtils.codePointCount(label) > 1) {
final int width = (int)view.getLabelWidth(label, paint) + padding;
@@ -336,13 +336,13 @@ public class MoreKeysKeyboard extends Keyboard {
// label's code point count.
final int moreKeyFlags = mParentKey.hasLabelsInMoreKeys() ? 0
: Key.LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO;
- final String[] moreKeys = mParentKey.mMoreKeys;
+ final MoreKeySpec[] moreKeys = mParentKey.mMoreKeys;
for (int n = 0; n < moreKeys.length; n++) {
- final String moreKeySpec = moreKeys[n];
+ final MoreKeySpec moreKeySpec = moreKeys[n];
final int row = n / params.mNumColumns;
final int x = params.getX(n, row);
final int y = params.getY(row);
- final Key key = new Key(mResources, params, moreKeySpec, x, y,
+ final Key key = new Key(params, moreKeySpec, x, y,
params.mDefaultKeyWidth, params.mDefaultRowHeight, moreKeyFlags);
params.markAsEdgeKey(key, row);
params.onAddKey(key);
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index ec9081681..24ab54730 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -23,6 +23,8 @@ import android.widget.TextView;
import com.android.inputmethod.keyboard.internal.PointerTrackerQueue;
import com.android.inputmethod.latin.LatinImeLogger;
+import com.android.inputmethod.latin.ResearchLogger;
+import com.android.inputmethod.latin.define.ProductionFlag;
import java.util.ArrayList;
@@ -235,6 +237,10 @@ public class PointerTracker {
+ " ignoreModifier=" + ignoreModifierKey
+ " enabled=" + key.isEnabled());
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.pointerTracker_callListenerOnPressAndCheckKeyboardLayoutChange(key,
+ ignoreModifierKey);
+ }
if (ignoreModifierKey) {
return false;
}
@@ -259,6 +265,10 @@ public class PointerTracker {
+ " ignoreModifier=" + ignoreModifierKey + " altersCode=" + altersCode
+ " enabled=" + key.isEnabled());
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.pointerTracker_callListenerOnCodeInput(key, x, y, ignoreModifierKey,
+ altersCode, code);
+ }
if (ignoreModifierKey) {
return;
}
@@ -284,6 +294,10 @@ public class PointerTracker {
+ " sliding=" + withSliding + " ignoreModifier=" + ignoreModifierKey
+ " enabled="+ key.isEnabled());
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.pointerTracker_callListenerOnRelease(key, primaryCode, withSliding,
+ ignoreModifierKey);
+ }
if (ignoreModifierKey) {
return;
}
@@ -295,6 +309,9 @@ public class PointerTracker {
private void callListenerOnCancelInput() {
if (DEBUG_LISTENER)
Log.d(TAG, "onCancelInput");
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.pointerTracker_callListenerOnCancelInput();
+ }
mListener.onCancelInput();
}
@@ -479,6 +496,9 @@ public class PointerTracker {
if (DEBUG_MODE)
Log.w(TAG, "onDownEvent: ignore potential noise: time=" + deltaT
+ " distance=" + distanceSquared);
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.pointerTracker_onDownEvent(deltaT, distanceSquared);
+ }
mKeyAlreadyProcessed = true;
return;
}
@@ -583,6 +603,9 @@ public class PointerTracker {
if (DEBUG_MODE)
Log.w(TAG, String.format("onMoveEvent: sudden move is translated to "
+ "up[%d,%d]/down[%d,%d] events", lastX, lastY, x, y));
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.pointerTracker_onMoveEvent(x, y, lastX, lastY);
+ }
onUpEventInternal(lastX, lastY, eventTime);
onDownEventInternal(x, y, eventTime);
} else {
diff --git a/java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java b/java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java
index 347383f95..107138395 100644
--- a/java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java
+++ b/java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java
@@ -22,7 +22,9 @@ import android.view.MotionEvent;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.ResearchLogger;
import com.android.inputmethod.latin.Utils;
+import com.android.inputmethod.latin.define.ProductionFlag;
public class SuddenJumpingTouchEventHandler {
private static final String TAG = SuddenJumpingTouchEventHandler.class.getSimpleName();
@@ -141,6 +143,9 @@ public class SuddenJumpingTouchEventHandler {
if (handleSuddenJumping(me)) {
if (DEBUG_MODE)
Log.w(TAG, "onTouchEvent: ignore sudden jump " + me);
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.suddenJumpingTouchEventHandler_onTouchEvent(me);
+ }
return true;
}
return mView.processMotionEvent(me);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java b/java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java
index 5712df1fc..392afca97 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java
@@ -18,6 +18,9 @@ package com.android.inputmethod.keyboard.internal;
import android.util.Log;
+import com.android.inputmethod.latin.ResearchLogger;
+import com.android.inputmethod.latin.define.ProductionFlag;
+
public class AlphabetShiftState {
private static final String TAG = AlphabetShiftState.class.getSimpleName();
private static final boolean DEBUG = false;
@@ -59,6 +62,9 @@ public class AlphabetShiftState {
}
if (DEBUG)
Log.d(TAG, "setShifted(" + newShiftState + "): " + toString(oldState) + " > " + this);
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.alphabetShiftState_setShifted(newShiftState, oldState, this);
+ }
}
public void setShiftLocked(boolean newShiftLockState) {
@@ -78,6 +84,9 @@ public class AlphabetShiftState {
if (DEBUG)
Log.d(TAG, "setShiftLocked(" + newShiftLockState + "): " + toString(oldState)
+ " > " + this);
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.alphabetShiftState_setShiftLocked(newShiftLockState, oldState, this);
+ }
}
public void setAutomaticShifted() {
@@ -85,6 +94,9 @@ public class AlphabetShiftState {
mState = AUTOMATIC_SHIFTED;
if (DEBUG)
Log.d(TAG, "setAutomaticShifted: " + toString(oldState) + " > " + this);
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.alphabetShiftState_setAutomaticShifted(oldState, this);
+ }
}
public boolean isShiftedOrShiftLocked() {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
index 4abd887f0..288fb4556 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
@@ -21,7 +21,6 @@ import android.text.TextUtils;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.latin.LatinImeLogger;
-import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.StringUtils;
import java.util.ArrayList;
@@ -33,9 +32,11 @@ import java.util.Arrays;
* - String resource can be embedded into specification @string/name. This is done before parsing
* comma.
* Each "more key" specification is one of the following:
- * - A single letter (Letter)
* - Label optionally followed by keyOutputText or code (keyLabel|keyOutputText).
- * - Icon followed by keyOutputText or code (@icon/icon_name|@integer/key_code)
+ * - Icon followed by keyOutputText or code (!icon/icon_name|!code/code_name)
+ * - Icon should be a string representation of icon (!icon/icon_name).
+ * - Code should be a code point presented by hexadecimal string prefixed with "0x".
+ * Or a string representation of code (!code/code_name).
* Special character, comma ',' backslash '\', and bar '|' can be escaped by '\' character.
* Note that the character '@' and '\' are also parsed by XML parser and CSV parser as well.
* See {@link KeyboardIconsSet} about icon_name.
@@ -52,10 +53,25 @@ public class KeySpecParser {
private static final char SUFFIX_SLASH = '/';
private static final String PREFIX_STRING = PREFIX_AT + "string" + SUFFIX_SLASH;
private static final char LABEL_END = '|';
- private static final String PREFIX_ICON = PREFIX_AT + "icon" + SUFFIX_SLASH;
- private static final String PREFIX_CODE = PREFIX_AT + "integer" + SUFFIX_SLASH;
+ private static final String PREFIX_ICON = "!icon/";
+ private static final String PREFIX_CODE = "!code/";
+ private static final String PREFIX_HEX = "0x";
private static final String ADDITIONAL_MORE_KEY_MARKER = "%";
+ public static class MoreKeySpec {
+ public final int mCode;
+ public final String mLabel;
+ public final String mOutputText;
+ public final int mIconId;
+
+ public MoreKeySpec(final String moreKeySpec, final KeyboardCodesSet codesSet) {
+ mCode = getCode(moreKeySpec, codesSet);
+ mLabel = getLabel(moreKeySpec);
+ mOutputText = getOutputText(moreKeySpec);
+ mIconId = getIconId(moreKeySpec);
+ }
+ }
+
private KeySpecParser() {
// Intentional empty constructor for utility class.
}
@@ -144,7 +160,7 @@ public class KeySpecParser {
return parseEscape(moreKeySpec.substring(end + /* LABEL_END */1));
}
- public static String getOutputText(String moreKeySpec) {
+ private static String getOutputText(String moreKeySpec) {
if (hasCode(moreKeySpec)) {
return null;
}
@@ -168,17 +184,13 @@ public class KeySpecParser {
return (StringUtils.codePointCount(label) == 1) ? null : label;
}
- public static int getCode(Resources res, String moreKeySpec) {
+ private static int getCode(String moreKeySpec, KeyboardCodesSet codesSet) {
if (hasCode(moreKeySpec)) {
final int end = indexOfLabelEnd(moreKeySpec, 0);
if (indexOfLabelEnd(moreKeySpec, end + 1) >= 0) {
throw new KeySpecParserError("Multiple " + LABEL_END + ": " + moreKeySpec);
}
- final int resId = getResourceId(res,
- moreKeySpec.substring(end + /* LABEL_END */1 + /* PREFIX_AT */1),
- R.string.english_ime_name);
- final int code = res.getInteger(resId);
- return code;
+ return parseCode(moreKeySpec.substring(end + 1), codesSet, Keyboard.CODE_UNSPECIFIED);
}
final String outputText = getOutputTextInternal(moreKeySpec);
if (outputText != null) {
@@ -197,7 +209,18 @@ public class KeySpecParser {
return Keyboard.CODE_OUTPUT_TEXT;
}
- public static int getIconId(String moreKeySpec) {
+ public static int parseCode(String text, KeyboardCodesSet codesSet, int defCode) {
+ if (text == null) return defCode;
+ if (text.startsWith(PREFIX_CODE)) {
+ return codesSet.getCode(text.substring(PREFIX_CODE.length()));
+ } else if (text.startsWith(PREFIX_HEX)) {
+ return Integer.parseInt(text.substring(PREFIX_HEX.length()), 16);
+ } else {
+ return Integer.parseInt(text);
+ }
+ }
+
+ private static int getIconId(String moreKeySpec) {
if (hasIcon(moreKeySpec)) {
final int end = moreKeySpec.indexOf(LABEL_END, PREFIX_ICON.length());
final String name = moreKeySpec.substring(PREFIX_ICON.length(), end);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
index 9e5c227eb..405b7ad05 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
@@ -102,8 +102,8 @@ public class KeyStyles {
void readKeyAttributes(TypedArray keyAttr) {
// TODO: Currently not all Key attributes can be declared as style.
- readInt(keyAttr, R.styleable.Keyboard_Key_code);
- readInt(keyAttr, R.styleable.Keyboard_Key_altCode);
+ readString(keyAttr, R.styleable.Keyboard_Key_code);
+ readString(keyAttr, R.styleable.Keyboard_Key_altCode);
readString(keyAttr, R.styleable.Keyboard_Key_keyLabel);
readString(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
readString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
new file mode 100644
index 000000000..736a96c56
--- /dev/null
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2012 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 com.android.inputmethod.keyboard.Keyboard;
+
+import java.util.HashMap;
+
+public class KeyboardCodesSet {
+ private static final HashMap<String, int[]> sLanguageToCodesMap =
+ new HashMap<String, int[]>();
+ private static final HashMap<String, Integer> sNameToIdMap = new HashMap<String, Integer>();
+
+ private int[] mCodes = DEFAULT;
+
+ public void setLanguage(final String language) {
+ final int[] codes = sLanguageToCodesMap.get(language);
+ mCodes = (codes != null) ? codes : DEFAULT;
+ }
+
+ public int getCode(final String name) {
+ final Integer id = sNameToIdMap.get(name);
+ if (id == null) throw new RuntimeException("Unknown key code: " + name);
+ return mCodes[id];
+ }
+
+ private static final String[] ID_TO_NAME = {
+ "key_tab",
+ "key_enter",
+ "key_space",
+ "key_shift",
+ "key_switch_alpha_symbol",
+ "key_output_text",
+ "key_delete",
+ "key_settings",
+ "key_shortcut",
+ "key_action_enter",
+ "key_action_next",
+ "key_action_previous",
+ "key_language_switch",
+ "key_unspecified",
+ "key_left_parenthesis",
+ "key_right_parenthesis",
+ "key_less_than",
+ "key_greater_than",
+ "key_left_square_bracket",
+ "key_right_square_bracket",
+ "key_left_curly_bracket",
+ "key_right_curly_bracket",
+ };
+
+ private static final int CODE_LEFT_PARENTHESIS = '(';
+ private static final int CODE_RIGHT_PARENTHESIS = ')';
+ private static final int CODE_LESS_THAN_SIGN = '<';
+ private static final int CODE_GREATER_THAN_SIGN = '>';
+ private static final int CODE_LEFT_SQUARE_BRACKET = '[';
+ private static final int CODE_RIGHT_SQUARE_BRACKET = ']';
+ private static final int CODE_LEFT_CURLY_BRACKET = '{';
+ private static final int CODE_RIGHT_CURLY_BRACKET = '}';
+
+ private static final int[] DEFAULT = {
+ Keyboard.CODE_TAB,
+ Keyboard.CODE_ENTER,
+ Keyboard.CODE_SPACE,
+ Keyboard.CODE_SHIFT,
+ Keyboard.CODE_SWITCH_ALPHA_SYMBOL,
+ Keyboard.CODE_OUTPUT_TEXT,
+ Keyboard.CODE_DELETE,
+ Keyboard.CODE_SETTINGS,
+ Keyboard.CODE_SHORTCUT,
+ Keyboard.CODE_ACTION_ENTER,
+ Keyboard.CODE_ACTION_NEXT,
+ Keyboard.CODE_ACTION_PREVIOUS,
+ Keyboard.CODE_LANGUAGE_SWITCH,
+ Keyboard.CODE_UNSPECIFIED,
+ CODE_LEFT_PARENTHESIS,
+ CODE_RIGHT_PARENTHESIS,
+ CODE_LESS_THAN_SIGN,
+ CODE_GREATER_THAN_SIGN,
+ CODE_LEFT_SQUARE_BRACKET,
+ CODE_RIGHT_SQUARE_BRACKET,
+ CODE_LEFT_CURLY_BRACKET,
+ CODE_RIGHT_CURLY_BRACKET,
+ };
+
+ private static final int[] RTL = {
+ DEFAULT[0],
+ DEFAULT[1],
+ DEFAULT[2],
+ DEFAULT[3],
+ DEFAULT[4],
+ DEFAULT[5],
+ DEFAULT[6],
+ DEFAULT[7],
+ DEFAULT[8],
+ DEFAULT[9],
+ DEFAULT[10],
+ DEFAULT[11],
+ DEFAULT[12],
+ DEFAULT[13],
+ CODE_RIGHT_PARENTHESIS,
+ CODE_LEFT_PARENTHESIS,
+ CODE_GREATER_THAN_SIGN,
+ CODE_LESS_THAN_SIGN,
+ CODE_RIGHT_SQUARE_BRACKET,
+ CODE_LEFT_SQUARE_BRACKET,
+ CODE_RIGHT_CURLY_BRACKET,
+ CODE_LEFT_CURLY_BRACKET,
+ };
+
+ private static final String LANGUAGE_DEFAULT = "DEFAULT";
+ private static final String LANGUAGE_ARABIC = "ar";
+ private static final String LANGUAGE_PERSIAN = "fa";
+ private static final String LANGUAGE_HEBREW = "iw";
+
+ private static final Object[] LANGUAGE_AND_CODES = {
+ LANGUAGE_DEFAULT, DEFAULT,
+ LANGUAGE_ARABIC, RTL,
+ LANGUAGE_PERSIAN, RTL,
+ LANGUAGE_HEBREW, RTL,
+ };
+
+ static {
+ for (int i = 0; i < ID_TO_NAME.length; i++) {
+ sNameToIdMap.put(ID_TO_NAME[i], i);
+ }
+
+ for (int i = 0; i < LANGUAGE_AND_CODES.length; i += 2) {
+ final String language = (String)LANGUAGE_AND_CODES[i];
+ final int[] codes = (int[])LANGUAGE_AND_CODES[i + 1];
+ sLanguageToCodesMap.put(language, codes);
+ }
+ }
+}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index 18a3f9794..6949c9d12 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -20,6 +20,8 @@ import android.text.TextUtils;
import android.util.Log;
import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.latin.ResearchLogger;
+import com.android.inputmethod.latin.define.ProductionFlag;
/**
* Keyboard state machine.
@@ -139,6 +141,9 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onSaveKeyboardState: saved=" + state + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_onSaveKeyboardState(this, state.toString());
+ }
}
private void onRestoreKeyboardState() {
@@ -146,6 +151,9 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onRestoreKeyboardState: saved=" + state + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_onRestoreKeyboardState(this, state.toString());
+ }
if (!state.mIsValid || state.mIsAlphabetMode) {
setAlphabetKeyboard();
} else {
@@ -178,6 +186,9 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setShifted: shiftMode=" + shiftModeToString(shiftMode) + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_setShifted(this, shiftModeToString(shiftMode));
+ }
if (!mIsAlphabetMode) return;
final int prevShiftMode;
if (mAlphabetShiftState.isAutomaticShifted()) {
@@ -217,6 +228,9 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setShiftLocked: shiftLocked=" + shiftLocked + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_setShiftLocked(this, shiftLocked);
+ }
if (!mIsAlphabetMode) return;
if (shiftLocked && (!mAlphabetShiftState.isShiftLocked()
|| mAlphabetShiftState.isShiftLockShifted())) {
@@ -232,6 +246,9 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "toggleAlphabetAndSymbols: " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_toggleAlphabetAndSymbols(this);
+ }
if (mIsAlphabetMode) {
mPrevMainKeyboardWasShiftLocked = mAlphabetShiftState.isShiftLocked();
if (mPrevSymbolsKeyboardWasShifted) {
@@ -262,6 +279,10 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setAlphabetKeyboard");
}
+
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_setAlphabetKeyboard();
+ }
mSwitchActions.setAlphabetKeyboard();
mIsAlphabetMode = true;
mIsSymbolShifted = false;
@@ -273,6 +294,9 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setSymbolsKeyboard");
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_setSymbolsKeyboard();
+ }
mSwitchActions.setSymbolsKeyboard();
mIsAlphabetMode = false;
mIsSymbolShifted = false;
@@ -285,6 +309,9 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setSymbolsShiftedKeyboard");
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_setSymbolsShiftedKeyboard();
+ }
mSwitchActions.setSymbolsShiftedKeyboard();
mIsAlphabetMode = false;
mIsSymbolShifted = true;
@@ -297,6 +324,9 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onPressKey: code=" + Keyboard.printableCode(code) + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_onPressKey(code, this);
+ }
if (code == Keyboard.CODE_SHIFT) {
onPressShift();
} else if (code == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) {
@@ -314,6 +344,9 @@ public class KeyboardState {
Log.d(TAG, "onReleaseKey: code=" + Keyboard.printableCode(code)
+ " sliding=" + withSliding + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_onReleaseKey(this, code, withSliding);
+ }
if (code == Keyboard.CODE_SHIFT) {
onReleaseShift(withSliding);
} else if (code == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) {
@@ -345,6 +378,9 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onLongPressTimeout: code=" + Keyboard.printableCode(code) + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_onLongPressTimeout(code, this);
+ }
if (mIsAlphabetMode && code == Keyboard.CODE_SHIFT) {
if (mAlphabetShiftState.isShiftLocked()) {
setShiftLocked(false);
@@ -363,6 +399,9 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onUpdateShiftState: autoCaps=" + autoCaps + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_onUpdateShiftState(this, autoCaps);
+ }
updateAlphabetShiftState(autoCaps);
}
@@ -481,6 +520,9 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onCancelInput: single=" + isSinglePointer + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_onCancelInput(isSinglePointer, this);
+ }
// Switch back to the previous keyboard mode if the user cancels sliding input.
if (isSinglePointer) {
if (mSwitchState == SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL) {
@@ -512,6 +554,9 @@ public class KeyboardState {
+ " single=" + isSinglePointer
+ " autoCaps=" + autoCaps + " " + this);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.keyboardState_onCodeInput(code, isSinglePointer, autoCaps, this);
+ }
switch (mSwitchState) {
case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL:
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index f5c09974e..e0fa2f838 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -665,6 +665,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
+ String.format("inputType=0x%08x imeOptions=0x%08x",
editorInfo.inputType, editorInfo.imeOptions));
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.latinIME_onStartInputViewInternal(editorInfo);
+ }
if (StringUtils.inPrivateImeOptions(null, IME_OPTION_NO_MICROPHONE_COMPAT, editorInfo)) {
Log.w(TAG, "Deprecated private IME option specified: "
+ editorInfo.privateImeOptions);
@@ -762,19 +765,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd,
composingSpanStart, composingSpanEnd);
- if (ProductionFlag.IS_EXPERIMENTAL) {
- if (ResearchLogger.UnsLogGroup.ON_UPDATE_SELECTION.isEnabled) {
- final String s = "onUpdateSelection: oss=" + oldSelStart
- + ", ose=" + oldSelEnd
- + ", lss=" + mLastSelectionStart
- + ", lse=" + mLastSelectionEnd
- + ", nss=" + newSelStart
- + ", nse=" + newSelEnd
- + ", cs=" + composingSpanStart
- + ", ce=" + composingSpanEnd;
- ResearchLogger.logUnstructured(ResearchLogger.UnsLogGroup.ON_UPDATE_SELECTION, s);
- }
- }
if (DEBUG) {
Log.i(TAG, "onUpdateSelection: oss=" + oldSelStart
+ ", ose=" + oldSelEnd
@@ -785,6 +775,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
+ ", cs=" + composingSpanStart
+ ", ce=" + composingSpanEnd);
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.latinIME_onUpdateSelection(mLastSelectionStart, mLastSelectionEnd,
+ oldSelStart, oldSelEnd, newSelStart, newSelEnd, composingSpanStart,
+ composingSpanEnd);
+ }
// TODO: refactor the following code to be less contrived.
// "newSelStart != composingSpanEnd" || "newSelEnd != composingSpanEnd" means
@@ -886,6 +881,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
}
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.latinIME_onDisplayCompletions(applicationSpecifiedCompletions);
+ }
if (mInputAttributes.mApplicationSpecifiedCompletionOn) {
mApplicationSpecifiedCompletions = applicationSpecifiedCompletions;
if (applicationSpecifiedCompletions == null) {
@@ -1660,6 +1658,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (DEBUG) {
Log.d(TAG, "Switch to keyboard view.");
}
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.latinIME_switchToKeyboardView();
+ }
View v = mKeyboardSwitcher.getKeyboardView();
if (v != null) {
// Confirms that the keyboard view doesn't have parent view.
diff --git a/java/src/com/android/inputmethod/latin/ResearchLogger.java b/java/src/com/android/inputmethod/latin/ResearchLogger.java
index c5fb61f78..08c26a5df 100644
--- a/java/src/com/android/inputmethod/latin/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/latin/ResearchLogger.java
@@ -25,15 +25,20 @@ import android.os.SystemClock;
import android.text.TextUtils;
import android.util.Log;
import android.view.MotionEvent;
+import android.view.inputmethod.CompletionInfo;
+import android.view.inputmethod.EditorInfo;
+import com.android.inputmethod.keyboard.Key;
+import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.internal.AlphabetShiftState;
+import com.android.inputmethod.keyboard.internal.KeyboardState;
+import com.android.inputmethod.latin.define.ProductionFlag;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
-import java.text.SimpleDateFormat;
-import java.util.Date;
/**
* Logs the use of the LatinIME keyboard.
@@ -46,13 +51,12 @@ import java.util.Date;
public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = ResearchLogger.class.getSimpleName();
private static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
+ private static final boolean DEBUG = false;
private static final ResearchLogger sInstance = new ResearchLogger(new LogFileManager());
public static boolean sIsLogging = false;
/* package */ final Handler mLoggingHandler;
private InputMethodService mIms;
- private final Date mDate;
- private final SimpleDateFormat mDateFormat;
/**
* Isolates management of files. This variable should never be null, but can be changed
@@ -79,35 +83,36 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
/* package */ LogFileManager() {
}
- public void init(InputMethodService ims) {
+ public void init(final InputMethodService ims) {
mIms = ims;
}
- public synchronized void createLogFile() {
+ public synchronized boolean createLogFile() {
try {
- createLogFile(DEFAULT_LOG_DIRECTORY, DEFAULT_FILENAME);
- } catch (FileNotFoundException e) {
+ return createLogFile(DEFAULT_LOG_DIRECTORY, DEFAULT_FILENAME);
+ } catch (final FileNotFoundException e) {
Log.w(TAG, e);
+ return false;
}
}
- public synchronized void createLogFile(String dir, String filename)
+ public synchronized boolean createLogFile(final String dir, final String filename)
throws FileNotFoundException {
if (mIms == null) {
Log.w(TAG, "InputMethodService is not configured. Logging is off.");
- return;
+ return false;
}
- File filesDir = mIms.getFilesDir();
+ final File filesDir = mIms.getFilesDir();
if (filesDir == null || !filesDir.exists()) {
Log.w(TAG, "Storage directory does not exist. Logging is off.");
- return;
+ return false;
}
- File directory = new File(filesDir, dir);
+ final File directory = new File(filesDir, dir);
if (!directory.exists()) {
- boolean wasCreated = directory.mkdirs();
+ final boolean wasCreated = directory.mkdirs();
if (!wasCreated) {
Log.w(TAG, "Log directory cannot be created. Logging is off.");
- return;
+ return false;
}
}
@@ -120,16 +125,23 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
append = false;
}
mPrintWriter = new PrintWriter(new FileOutputStream(mFile, append), true);
+ return true;
}
- public synchronized boolean append(String s) {
+ public synchronized boolean append(final String s) {
if (mPrintWriter == null) {
- Log.w(TAG, "PrintWriter is null");
- return false;
- } else {
- mPrintWriter.print(s);
- return !mPrintWriter.checkError();
+ if (DEBUG) {
+ Log.w(TAG, "PrintWriter is null... attempting to create default log file");
+ }
+ if (!createLogFile()) {
+ if (DEBUG) {
+ Log.w(TAG, "Failed to create log file. Not logging.");
+ return false;
+ }
+ }
}
+ mPrintWriter.print(s);
+ return !mPrintWriter.checkError();
}
public synchronized void reset() {
@@ -152,11 +164,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
- private ResearchLogger(LogFileManager logFileManager) {
- mDate = new Date();
- mDateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss.SSSZ");
-
- HandlerThread handlerThread = new HandlerThread("ResearchLogger logging task",
+ private ResearchLogger(final LogFileManager logFileManager) {
+ final HandlerThread handlerThread = new HandlerThread("ResearchLogger logging task",
Process.THREAD_PRIORITY_BACKGROUND);
handlerThread.start();
mLoggingHandler = new Handler(handlerThread.getLooper());
@@ -167,11 +176,11 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
return sInstance;
}
- public static void init(InputMethodService ims, SharedPreferences prefs) {
+ public static void init(final InputMethodService ims, final SharedPreferences prefs) {
sInstance.initInternal(ims, prefs);
}
- public void initInternal(InputMethodService ims, SharedPreferences prefs) {
+ public void initInternal(final InputMethodService ims, final SharedPreferences prefs) {
mIms = ims;
if (mLogFileManager != null) {
mLogFileManager.init(ims);
@@ -188,7 +197,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
*
* @throws IllegalArgumentException if logFileManager is null
*/
- void setLogFileManager(LogFileManager manager) {
+ void setLogFileManager(final LogFileManager manager) {
if (manager == null) {
throw new IllegalArgumentException("warning: trying to set null logFileManager");
} else {
@@ -203,11 +212,12 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
MOTION_EVENT("m"),
KEY("k"),
CORRECTION("c"),
- STATE_CHANGE("s");
+ STATE_CHANGE("s"),
+ UNSTRUCTURED("u");
private final String mLogString;
- private LogGroup(String logString) {
+ private LogGroup(final String logString) {
mLogString = logString;
}
}
@@ -226,7 +236,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
default: eventTag = "[Action" + action + "]"; break;
}
if (!TextUtils.isEmpty(eventTag)) {
- StringBuilder sb = new StringBuilder();
+ final StringBuilder sb = new StringBuilder();
sb.append(eventTag);
sb.append('\t'); sb.append(eventTime);
sb.append('\t'); sb.append(id);
@@ -238,7 +248,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
- public void logKeyEvent(int code, int x, int y) {
+ public void logKeyEvent(final int code, final int x, final int y) {
final StringBuilder sb = new StringBuilder();
sb.append(Keyboard.printableCode(code));
sb.append('\t'); sb.append(x);
@@ -246,7 +256,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
write(LogGroup.KEY, sb.toString());
}
- public void logCorrection(String subgroup, String before, String after, int position) {
+ public void logCorrection(final String subgroup, final String before, final String after,
+ final int position) {
final StringBuilder sb = new StringBuilder();
sb.append(subgroup);
sb.append('\t'); sb.append(before);
@@ -255,19 +266,58 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
write(LogGroup.CORRECTION, sb.toString());
}
- public void logStateChange(String subgroup, String details) {
+ public void logStateChange(final String subgroup, final String details) {
write(LogGroup.STATE_CHANGE, subgroup + "\t" + details);
}
- public static enum UnsLogGroup {
- // TODO: expand to include one flag per log point
- // TODO: support selective enabling of flags
- ON_UPDATE_SELECTION;
-
- public boolean isEnabled = true;
+ public static class UnsLogGroup {
+ private static final boolean DEFAULT_ENABLED = true;
+
+ private static final boolean ALPHABETSHIFTSTATE_SETSHIFTED_ENABLED = DEFAULT_ENABLED;
+ private static final boolean ALPHABETSHIFTSTATE_SETSHIFTLOCKED_ENABLED = DEFAULT_ENABLED;
+ private static final boolean ALPHABETSHIFTSTATE_SETAUTOMATICSHIFTED_ENABLED
+ = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_ONCANCELINPUT_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_ONCODEINPUT_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_ONLONGPRESSTIMEOUT_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_ONPRESSKEY_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_ONRELEASEKEY_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_ONRESTOREKEYBOARDSTATE_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_ONSAVEKEYBOARDSTATE_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_ONUPDATESHIFTSTATE_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_SETALPHABETKEYBOARD_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_SETSHIFTED_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_SETSHIFTLOCKED_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_SETSYMBOLSKEYBOARD_ENABLED = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_SETSYMBOLSSHIFTEDKEYBOARD_ENABLED
+ = DEFAULT_ENABLED;
+ private static final boolean KEYBOARDSTATE_TOGGLEALPHABETANDSYMBOLS_ENABLED
+ = DEFAULT_ENABLED;
+ private static final boolean LATINIME_ONDISPLAYCOMPLETIONS_ENABLED = DEFAULT_ENABLED;
+ private static final boolean LATINIME_ONSTARTINPUTVIEWINTERNAL_ENABLED = DEFAULT_ENABLED;
+ private static final boolean LATINIME_ONUPDATESELECTION_ENABLED = DEFAULT_ENABLED;
+ private static final boolean LATINIME_SWITCHTOKEYBOARDVIEW_ENABLED = DEFAULT_ENABLED;
+ private static final boolean LATINKEYBOARDVIEW_ONLONGPRESS_ENABLED = DEFAULT_ENABLED;
+ private static final boolean LATINKEYBOARDVIEW_ONPROCESSMOTIONEVENT_ENABLED
+ = DEFAULT_ENABLED;
+ private static final boolean POINTERTRACKER_CALLLISTENERONCANCELINPUT_ENABLED
+ = DEFAULT_ENABLED;
+ private static final boolean POINTERTRACKER_CALLLISTENERONCODEINPUT_ENABLED
+ = DEFAULT_ENABLED;
+ private static final boolean
+ POINTERTRACKER_CALLLISTENERONPRESSANDCHECKKEYBOARDLAYOUTCHANGE_ENABLED
+ = DEFAULT_ENABLED;
+ private static final boolean POINTERTRACKER_CALLLISTENERONRELEASE_ENABLED = DEFAULT_ENABLED;
+ private static final boolean POINTERTRACKER_ONDOWNEVENT_ENABLED = DEFAULT_ENABLED;
+ private static final boolean POINTERTRACKER_ONMOVEEVENT_ENABLED = DEFAULT_ENABLED;
+ private static final boolean SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT_ENABLED
+ = DEFAULT_ENABLED;
+ private static final boolean SUGGESTIONSVIEW_SETSUGGESTIONS_ENABLED = DEFAULT_ENABLED;
}
- public static void logUnstructured(UnsLogGroup logGroup, String details) {
+ public static void logUnstructured(String logGroup, final String details) {
+ // TODO: improve performance by making entire class static and/or implementing natively
+ getInstance().write(LogGroup.UNSTRUCTURED, logGroup + "\t" + details);
}
private void write(final LogGroup logGroup, final String log) {
@@ -282,13 +332,14 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
builder.append('\t'); builder.append(upTime);
builder.append('\t'); builder.append(logGroup.mLogString);
builder.append('\t'); builder.append(log);
- if (LatinImeLogger.sDBG) {
+ builder.append('\n');
+ if (DEBUG) {
Log.d(TAG, "Write: " + '[' + logGroup.mLogString + ']' + log);
}
if (mLogFileManager.append(builder.toString())) {
// success
} else {
- if (LatinImeLogger.sDBG) {
+ if (DEBUG) {
Log.w(TAG, "Unable to write to log.");
}
}
@@ -300,7 +351,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
mLoggingHandler.post(new Runnable() {
@Override
public void run() {
- if (LatinImeLogger.sDBG) {
+ if (DEBUG) {
Log.d(TAG, "Delete log file.");
}
mLogFileManager.reset();
@@ -315,4 +366,287 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
sIsLogging = prefs.getBoolean(PREF_USABILITY_STUDY_MODE, false);
}
+
+ public static void alphabetShiftState_setShifted(final boolean newShiftState,
+ final int oldState, final AlphabetShiftState alphabetShiftState) {
+ if (UnsLogGroup.ALPHABETSHIFTSTATE_SETSHIFTED_ENABLED) {
+ final String s = "setShifted(" + newShiftState + "): " + oldState
+ + " > " + alphabetShiftState;
+ logUnstructured("AlphabetShiftState_setShifted", s);
+ }
+ }
+
+ public static void alphabetShiftState_setShiftLocked(final boolean newShiftLockState,
+ final int oldState, final AlphabetShiftState alphabetShiftState) {
+ if (UnsLogGroup.ALPHABETSHIFTSTATE_SETSHIFTLOCKED_ENABLED) {
+ final String s = "setShiftLocked(" + newShiftLockState + "): "
+ + oldState + " > " + alphabetShiftState;
+ logUnstructured("AlphabetShiftState_setShiftLocked", s);
+ }
+ }
+
+ public static void alphabetShiftState_setAutomaticShifted(final int oldState,
+ final AlphabetShiftState alphabetShiftState) {
+ if (UnsLogGroup.ALPHABETSHIFTSTATE_SETAUTOMATICSHIFTED_ENABLED) {
+ final String s = "setAutomaticShifted: " + oldState + " > " + alphabetShiftState;
+ logUnstructured("AlphabetShiftState_setAutomaticShifted", s);
+ }
+ }
+
+ public static void keyboardState_onCancelInput(final boolean isSinglePointer,
+ final KeyboardState keyboardState) {
+ if (UnsLogGroup.KEYBOARDSTATE_ONCANCELINPUT_ENABLED) {
+ final String s = "onCancelInput: single=" + isSinglePointer + " " + keyboardState;
+ logUnstructured("KeyboardState_onCancelInput", s);
+ }
+ }
+
+ public static void keyboardState_onCodeInput(
+ final int code, final boolean isSinglePointer, final boolean autoCaps,
+ final KeyboardState keyboardState) {
+ if (UnsLogGroup.KEYBOARDSTATE_ONCODEINPUT_ENABLED) {
+ final String s = "onCodeInput: code=" + Keyboard.printableCode(code)
+ + " single=" + isSinglePointer
+ + " autoCaps=" + autoCaps + " " + keyboardState;
+ logUnstructured("KeyboardState_onCodeInput", s);
+ }
+ }
+
+ public static void keyboardState_onLongPressTimeout(final int code,
+ final KeyboardState keyboardState) {
+ if (UnsLogGroup.KEYBOARDSTATE_ONLONGPRESSTIMEOUT_ENABLED) {
+ final String s = "onLongPressTimeout: code=" + Keyboard.printableCode(code) + " "
+ + keyboardState;
+ logUnstructured("KeyboardState_onLongPressTimeout", s);
+ }
+ }
+
+ public static void keyboardState_onPressKey(final int code,
+ final KeyboardState keyboardState) {
+ if (UnsLogGroup.KEYBOARDSTATE_ONPRESSKEY_ENABLED) {
+ final String s = "onPressKey: code=" + Keyboard.printableCode(code) + " "
+ + keyboardState;
+ logUnstructured("KeyboardState_onPressKey", s);
+ }
+ }
+
+ public static void keyboardState_onReleaseKey(final KeyboardState keyboardState, final int code,
+ final boolean withSliding) {
+ if (UnsLogGroup.KEYBOARDSTATE_ONRELEASEKEY_ENABLED) {
+ final String s = "onReleaseKey: code=" + Keyboard.printableCode(code)
+ + " sliding=" + withSliding + " " + keyboardState;
+ logUnstructured("KeyboardState_onReleaseKey", s);
+ }
+ }
+
+ public static void keyboardState_onRestoreKeyboardState(final KeyboardState keyboardState,
+ final String savedKeyboardState) {
+ if (UnsLogGroup.KEYBOARDSTATE_ONRESTOREKEYBOARDSTATE_ENABLED) {
+ final String s = "onRestoreKeyboardState: saved=" + savedKeyboardState + " "
+ + keyboardState;
+ logUnstructured("KeyboardState_onRestoreKeyboardState", s);
+ }
+ }
+
+ public static void keyboardState_onSaveKeyboardState(final KeyboardState keyboardState,
+ final String savedKeyboardState) {
+ if (UnsLogGroup.KEYBOARDSTATE_ONSAVEKEYBOARDSTATE_ENABLED) {
+ final String s = "onSaveKeyboardState: saved=" + savedKeyboardState + " "
+ + keyboardState;
+ logUnstructured("KeyboardState_onSaveKeyboardState", s);
+ }
+ }
+
+ public static void keyboardState_onUpdateShiftState(final KeyboardState keyboardState,
+ final boolean autoCaps) {
+ if (UnsLogGroup.KEYBOARDSTATE_ONUPDATESHIFTSTATE_ENABLED) {
+ final String s = "onUpdateShiftState: autoCaps=" + autoCaps + " " + keyboardState;
+ logUnstructured("KeyboardState_onUpdateShiftState", s);
+ }
+ }
+
+ public static void keyboardState_setAlphabetKeyboard() {
+ if (UnsLogGroup.KEYBOARDSTATE_SETALPHABETKEYBOARD_ENABLED) {
+ final String s = "setAlphabetKeyboard";
+ logUnstructured("KeyboardState_setAlphabetKeyboard", s);
+ }
+ }
+
+ public static void keyboardState_setShifted(final KeyboardState keyboardState,
+ final String shiftMode) {
+ if (UnsLogGroup.KEYBOARDSTATE_SETSHIFTED_ENABLED) {
+ final String s = "setShifted: shiftMode=" + shiftMode + " " + keyboardState;
+ logUnstructured("KeyboardState_setShifted", s);
+ }
+ }
+
+ public static void keyboardState_setShiftLocked(final KeyboardState keyboardState,
+ final boolean shiftLocked) {
+ if (UnsLogGroup.KEYBOARDSTATE_SETSHIFTLOCKED_ENABLED) {
+ final String s = "setShiftLocked: shiftLocked=" + shiftLocked + " " + keyboardState;
+ logUnstructured("KeyboardState_setShiftLocked", s);
+ }
+ }
+
+ public static void keyboardState_setSymbolsKeyboard() {
+ if (UnsLogGroup.KEYBOARDSTATE_SETSYMBOLSKEYBOARD_ENABLED) {
+ final String s = "setSymbolsKeyboard";
+ logUnstructured("KeyboardState_setSymbolsKeyboard", s);
+ }
+ }
+
+ public static void keyboardState_setSymbolsShiftedKeyboard() {
+ if (UnsLogGroup.KEYBOARDSTATE_SETSYMBOLSSHIFTEDKEYBOARD_ENABLED) {
+ final String s = "setSymbolsShiftedKeyboard";
+ logUnstructured("KeyboardState_setSymbolsShiftedKeyboard", s);
+ }
+ }
+
+ public static void keyboardState_toggleAlphabetAndSymbols(final KeyboardState keyboardState) {
+ if (UnsLogGroup.KEYBOARDSTATE_TOGGLEALPHABETANDSYMBOLS_ENABLED) {
+ final String s = "toggleAlphabetAndSymbols: " + keyboardState;
+ logUnstructured("KeyboardState_toggleAlphabetAndSymbols", s);
+ }
+ }
+
+ public static void latinIME_onDisplayCompletions(
+ final CompletionInfo[] applicationSpecifiedCompletions) {
+ if (UnsLogGroup.LATINIME_ONDISPLAYCOMPLETIONS_ENABLED) {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("Received completions:");
+ if (applicationSpecifiedCompletions != null) {
+ for (int i = 0; i < applicationSpecifiedCompletions.length; i++) {
+ builder.append(" #");
+ builder.append(i);
+ builder.append(": ");
+ builder.append(applicationSpecifiedCompletions[i]);
+ builder.append("\n");
+ }
+ }
+ logUnstructured("LatinIME_onDisplayCompletions", builder.toString());
+ }
+ }
+
+ public static void latinIME_onStartInputViewInternal(final EditorInfo editorInfo) {
+ if (UnsLogGroup.LATINIME_ONSTARTINPUTVIEWINTERNAL_ENABLED) {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("onStartInputView: editorInfo:");
+ builder.append("inputType=");
+ builder.append(editorInfo.inputType);
+ builder.append("imeOptions=");
+ builder.append(editorInfo.imeOptions);
+ logUnstructured("LatinIME_onStartInputViewInternal", builder.toString());
+ }
+ }
+
+ public static void latinIME_onUpdateSelection(final int lastSelectionStart,
+ final int lastSelectionEnd, final int oldSelStart, final int oldSelEnd,
+ final int newSelStart, final int newSelEnd, final int composingSpanStart,
+ final int composingSpanEnd) {
+ if (UnsLogGroup.LATINIME_ONUPDATESELECTION_ENABLED) {
+ final String s = "onUpdateSelection: oss=" + oldSelStart
+ + ", ose=" + oldSelEnd
+ + ", lss=" + lastSelectionStart
+ + ", lse=" + lastSelectionEnd
+ + ", nss=" + newSelStart
+ + ", nse=" + newSelEnd
+ + ", cs=" + composingSpanStart
+ + ", ce=" + composingSpanEnd;
+ logUnstructured("LatinIME_onUpdateSelection", s);
+ }
+ }
+
+ public static void latinIME_switchToKeyboardView() {
+ if (UnsLogGroup.LATINIME_SWITCHTOKEYBOARDVIEW_ENABLED) {
+ final String s = "Switch to keyboard view.";
+ logUnstructured("LatinIME_switchToKeyboardView", s);
+ }
+ }
+
+ public static void latinKeyboardView_onLongPress() {
+ if (UnsLogGroup.LATINKEYBOARDVIEW_ONLONGPRESS_ENABLED) {
+ final String s = "long press detected";
+ logUnstructured("LatinKeyboardView_onLongPress", s);
+ }
+ }
+
+ public static void latinKeyboardView_processMotionEvent(MotionEvent me, int action,
+ long eventTime, int index, int id, int x, int y) {
+ if (UnsLogGroup.LATINKEYBOARDVIEW_ONPROCESSMOTIONEVENT_ENABLED) {
+ final float size = me.getSize(index);
+ final float pressure = me.getPressure(index);
+ if (action != MotionEvent.ACTION_MOVE) {
+ getInstance().logMotionEvent(action, eventTime, id, x, y, size, pressure);
+ }
+ }
+ }
+
+ public static void pointerTracker_callListenerOnCancelInput() {
+ final String s = "onCancelInput";
+ if (UnsLogGroup.POINTERTRACKER_CALLLISTENERONCANCELINPUT_ENABLED) {
+ logUnstructured("PointerTracker_callListenerOnCancelInput", s);
+ }
+ }
+
+ public static void pointerTracker_callListenerOnCodeInput(final Key key, final int x,
+ final int y, final boolean ignoreModifierKey, final boolean altersCode,
+ final int code) {
+ if (UnsLogGroup.POINTERTRACKER_CALLLISTENERONCODEINPUT_ENABLED) {
+ final String s = "onCodeInput: " + Keyboard.printableCode(code)
+ + " text=" + key.mOutputText + " x=" + x + " y=" + y
+ + " ignoreModifier=" + ignoreModifierKey + " altersCode=" + altersCode
+ + " enabled=" + key.isEnabled();
+ logUnstructured("PointerTracker_callListenerOnCodeInput", s);
+ }
+ }
+
+ public static void pointerTracker_callListenerOnPressAndCheckKeyboardLayoutChange(
+ final Key key, final boolean ignoreModifierKey) {
+ if (UnsLogGroup.POINTERTRACKER_CALLLISTENERONPRESSANDCHECKKEYBOARDLAYOUTCHANGE_ENABLED) {
+ final String s = "onPress : " + KeyDetector.printableCode(key)
+ + " ignoreModifier=" + ignoreModifierKey
+ + " enabled=" + key.isEnabled();
+ logUnstructured("PointerTracker_callListenerOnPressAndCheckKeyboardLayoutChange", s);
+ }
+ }
+
+ public static void pointerTracker_callListenerOnRelease(final Key key, final int primaryCode,
+ final boolean withSliding, final boolean ignoreModifierKey) {
+ if (UnsLogGroup.POINTERTRACKER_CALLLISTENERONRELEASE_ENABLED) {
+ final String s = "onRelease : " + Keyboard.printableCode(primaryCode)
+ + " sliding=" + withSliding + " ignoreModifier=" + ignoreModifierKey
+ + " enabled="+ key.isEnabled();
+ logUnstructured("PointerTracker_callListenerOnRelease", s);
+ }
+ }
+
+ public static void pointerTracker_onDownEvent(long deltaT, int distanceSquared) {
+ if (UnsLogGroup.POINTERTRACKER_ONDOWNEVENT_ENABLED) {
+ final String s = "onDownEvent: ignore potential noise: time=" + deltaT
+ + " distance=" + distanceSquared;
+ logUnstructured("PointerTracker_onDownEvent", s);
+ }
+ }
+
+ public static void pointerTracker_onMoveEvent(final int x, final int y, final int lastX,
+ final int lastY) {
+ if (UnsLogGroup.POINTERTRACKER_ONMOVEEVENT_ENABLED) {
+ final String s = String.format("onMoveEvent: sudden move is translated to "
+ + "up[%d,%d]/down[%d,%d] events", lastX, lastY, x, y);
+ logUnstructured("PointerTracker_onMoveEvent", s);
+ }
+ }
+
+ public static void suddenJumpingTouchEventHandler_onTouchEvent(final MotionEvent me) {
+ if (UnsLogGroup.SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT_ENABLED) {
+ final String s = "onTouchEvent: ignore sudden jump " + me;
+ logUnstructured("SuddenJumpingTouchEventHandler_onTouchEvent", s);
+ }
+ }
+
+ public static void suggestionsView_setSuggestions(SuggestedWords mSuggestedWords) {
+ if (UnsLogGroup.SUGGESTIONSVIEW_SETSUGGESTIONS_ENABLED) {
+ logUnstructured("SuggestionsView_setSuggestions", mSuggestedWords.toString());
+ }
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java
index 1ad37b933..01d51d463 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java
@@ -59,10 +59,12 @@ import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.keyboard.ViewLayoutUtils;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.ResearchLogger;
import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
import com.android.inputmethod.latin.Suggest;
import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.Utils;
+import com.android.inputmethod.latin.define.ProductionFlag;
import java.util.ArrayList;
@@ -663,6 +665,9 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
clear();
mSuggestedWords = suggestedWords;
mParams.layout(mSuggestedWords, mSuggestionsStrip, this, getWidth());
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.suggestionsView_setSuggestions(mSuggestedWords);
+ }
}
public int setMoreSuggestionsHeight(int remainingHeight) {
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java
index 3fc2b021a..980b1e4d5 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java
@@ -16,54 +16,46 @@
package com.android.inputmethod.keyboard.internal;
-import android.content.res.Resources;
import android.test.AndroidTestCase;
import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.latin.R;
+import com.android.inputmethod.keyboard.internal.KeySpecParser.MoreKeySpec;
import java.util.Arrays;
+import java.util.Locale;
public class KeySpecParserTests extends AndroidTestCase {
- private Resources mRes;
+ private final KeyboardCodesSet mCodesSet = new KeyboardCodesSet();
private static final int ICON_UNDEFINED = KeyboardIconsSet.ICON_UNDEFINED;
- private static final String CODE_SETTINGS_RES = "integer/key_settings";
+ private static final String CODE_SETTINGS_NAME = "key_settings";
private static final String ICON_SETTINGS_NAME = "settingsKey";
- private static final String CODE_SETTINGS = "@" + CODE_SETTINGS_RES;
- private static final String ICON_SETTINGS = "@icon/" + ICON_SETTINGS_NAME;
- private static final String CODE_NON_EXISTING = "@integer/non_existing";
- private static final String ICON_NON_EXISTING = "@icon/non_existing";
+ private static final String CODE_SETTINGS = "!code/" + CODE_SETTINGS_NAME;
+ private static final String ICON_SETTINGS = "!icon/" + ICON_SETTINGS_NAME;
+ private static final String CODE_NON_EXISTING = "!code/non_existing";
+ private static final String ICON_NON_EXISTING = "!icon/non_existing";
private int mCodeSettings;
private int mSettingsIconId;
@Override
- protected void setUp() {
- Resources res = getContext().getResources();
- mRes = res;
+ protected void setUp() throws Exception {
+ super.setUp();
- final String packageName = res.getResourcePackageName(R.string.english_ime_name);
- final int codeId = res.getIdentifier(CODE_SETTINGS_RES, null, packageName);
- mCodeSettings = res.getInteger(codeId);
+ mCodesSet.setLanguage(Locale.ENGLISH.getLanguage());
+ mCodeSettings = mCodesSet.getCode(CODE_SETTINGS_NAME);
mSettingsIconId = KeyboardIconsSet.getIconId(ICON_SETTINGS_NAME);
}
private void assertParser(String message, String moreKeySpec, String expectedLabel,
String expectedOutputText, int expectedIcon, int expectedCode) {
- String actualLabel = KeySpecParser.getLabel(moreKeySpec);
- assertEquals(message + ": label:", expectedLabel, actualLabel);
-
- String actualOutputText = KeySpecParser.getOutputText(moreKeySpec);
- assertEquals(message + ": ouptputText:", expectedOutputText, actualOutputText);
-
- int actualIcon = KeySpecParser.getIconId(moreKeySpec);
- assertEquals(message + ": icon:", expectedIcon, actualIcon);
-
- int actualCode = KeySpecParser.getCode(mRes, moreKeySpec);
- assertEquals(message + ": codes value:", expectedCode, actualCode);
+ final MoreKeySpec spec = new MoreKeySpec(moreKeySpec, mCodesSet);
+ assertEquals(message + ": label:", expectedLabel, spec.mLabel);
+ assertEquals(message + ": ouptputText:", expectedOutputText, spec.mOutputText);
+ assertEquals(message + ": icon:", expectedIcon, spec.mIconId);
+ assertEquals(message + ": codes value:", expectedCode, spec.mCode);
}
private void assertParserError(String message, String moreKeySpec, String expectedLabel,