diff options
Diffstat (limited to 'java')
27 files changed, 291 insertions, 106 deletions
diff --git a/java/NOTICE b/java/NOTICE index 7340b9e35..aa325547e 100644 --- a/java/NOTICE +++ b/java/NOTICE @@ -188,3 +188,5 @@ END OF TERMS AND CONDITIONS + +Includes Dictionaries © Lexiteria LLC. Used by permission. diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml index 6ce0ee75c..8d9c36e02 100644 --- a/java/res/values-bg/strings.xml +++ b/java/res/values-bg/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"Изскачащ прозорец при натискане на клавиш"</string> <string name="general_category" msgid="1859088467017573195">"Общи"</string> <string name="correction_category" msgid="2236750915056607613">"Корекция на текста"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"Писане с жест"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"Въвеждане чрез жест"</string> <string name="misc_category" msgid="6894192814868233453">"Други опции"</string> <string name="advanced_settings" msgid="362895144495591463">"Разширени настройки"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"Опции за експерти"</string> @@ -61,7 +61,7 @@ <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Много агресивно"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Предложения за следващата дума"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Използване на предишната дума при даване на предложения"</string> - <string name="gesture_input" msgid="826951152254563827">"Активиране на писането с жест"</string> + <string name="gesture_input" msgid="826951152254563827">"Активиране на въвеждането чрез жест"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Въвеждане на дума чрез плъзгане на пръст през буквите"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Следа на жестовете: Показване"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Динамична плаваща визуализация"</string> diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml index 95d8ff347..bc9b0c30a 100644 --- a/java/res/values-es-rUS/strings.xml +++ b/java/res/values-es-rUS/strings.xml @@ -51,7 +51,7 @@ <string name="prefs_show_suggestions" msgid="8026799663445531637">"Mostrar sugerencias de correcciones"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Mostrar palabras sugeridas al escribir"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar siempre"</string> - <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"Mostrar en modo retrato"</string> + <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"Mostrar en modo de retrato"</string> <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Ocultar siempre"</string> <string name="auto_correction" msgid="7630720885194996950">"Corrección automática"</string> <string name="auto_correction_summary" msgid="5625751551134658006">"La barra espaciadora y las teclas de puntuación insertan automáticamente la palabra corregida"</string> @@ -62,7 +62,7 @@ <string name="bigram_prediction" msgid="1084449187723948550">"Sugerencias para la palabra siguiente"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Usa la palabra anterior para hacer sugerencias"</string> <string name="gesture_input" msgid="826951152254563827">"Habilitar escritura gestual"</string> - <string name="gesture_input_summary" msgid="9180350639305731231">"Introduce una palabra al deslizarte sobre las letras"</string> + <string name="gesture_input_summary" msgid="9180350639305731231">"Ingresa una palabra al deslizarte sobre las letras."</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Mostrar recorrido de gesto"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Vista previa dinámica flotante"</string> <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Mira la palabra sugerida mientras haces gestos"</string> diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml index 31f704754..58393b041 100644 --- a/java/res/values-fr/strings.xml +++ b/java/res/values-fr/strings.xml @@ -61,8 +61,8 @@ <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Très exigeante"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Suggestions pour le mot suivant"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Utiliser le mot précédent pour les suggestions"</string> - <string name="gesture_input" msgid="826951152254563827">"Activer saisie gestuelle"</string> - <string name="gesture_input_summary" msgid="9180350639305731231">"Saisir un mot en traçant les lettres sans interruption"</string> + <string name="gesture_input" msgid="826951152254563827">"Activer la saisie gestuelle"</string> + <string name="gesture_input_summary" msgid="9180350639305731231">"Saisir un mot en faisant glisser le doigt sur les lettres"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Afficher le tracé du geste"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Aperçu flottant dynamique"</string> <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Afficher le mot suggéré lors des gestes"</string> diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml index 1e68162c7..bae1fc202 100644 --- a/java/res/values-hr/strings.xml +++ b/java/res/values-hr/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"Povećanja na pritisak tipke"</string> <string name="general_category" msgid="1859088467017573195">"Općenito"</string> <string name="correction_category" msgid="2236750915056607613">"Ispravak teksta"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"Tipkanje pokretom"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"Pisanje kretnjama"</string> <string name="misc_category" msgid="6894192814868233453">"Ostale opcije"</string> <string name="advanced_settings" msgid="362895144495591463">"Napredne postavke"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"Opcije za stručnjake"</string> @@ -45,7 +45,7 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Predlaži imena kontakata"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Upotreba imena iz Kontakata za prijedloge i ispravke"</string> <string name="auto_cap" msgid="1719746674854628252">"Automatsko pisanje velikih slova"</string> - <string name="auto_cap_summary" msgid="7934452761022946874">"Kapitaliziraj prvu riječ svake rečenice"</string> + <string name="auto_cap_summary" msgid="7934452761022946874">"Napiši velikim slovom prvu riječ svake rečenice"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Rječnici-dodaci"</string> <string name="main_dictionary" msgid="4798763781818361168">"Glavni rječnik"</string> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Pokaži prijedloge ispravka"</string> @@ -60,8 +60,8 @@ <string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Agresivno"</string> <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Vrlo agresivno"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Prijedlozi za sljedeću riječ"</string> - <string name="bigram_prediction_summary" msgid="3896362682751109677">"Koristi prethodnu riječ u izradi prijedloga"</string> - <string name="gesture_input" msgid="826951152254563827">"Omogući tipkanje pokretom"</string> + <string name="bigram_prediction_summary" msgid="3896362682751109677">"Koristi se prethodnom riječi u izradi prijedloga"</string> + <string name="gesture_input" msgid="826951152254563827">"Omogući pisanje kretnjama"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Unesi riječ klizanjem preko slova"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Prikaži trag pokreta"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Dinamički plutajući pregled"</string> diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml index c4a16d7d3..d1b715796 100644 --- a/java/res/values-hu/strings.xml +++ b/java/res/values-hu/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"Legyen nagyobb billentyű lenyomásakor"</string> <string name="general_category" msgid="1859088467017573195">"Általános"</string> <string name="correction_category" msgid="2236750915056607613">"Szövegjavítás"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"Gépelés kézmozdulatokkal"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"Kézmozdulatokkal történő gépelés"</string> <string name="misc_category" msgid="6894192814868233453">"Egyéb beállítások"</string> <string name="advanced_settings" msgid="362895144495591463">"Speciális beállítások"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"Beállítások gyakorlott felhasználóknak"</string> @@ -60,7 +60,7 @@ <string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Agresszív"</string> <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Nagyon agresszív"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Következő szóra vonatkozó javaslatok"</string> - <string name="bigram_prediction_summary" msgid="3896362682751109677">"Az előző szó használata javaslatok tételére"</string> + <string name="bigram_prediction_summary" msgid="3896362682751109677">"Az előző szó felhasználása a javaslatoknál"</string> <string name="gesture_input" msgid="826951152254563827">"Kézmozdulatokkal gépelés"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Szó beírása úgy, hogy ujjait végigcsúsztatja a betűkön"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Mozdulat irányának mutatása"</string> diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml index 059d171a5..d7ae04f07 100644 --- a/java/res/values-ja/strings.xml +++ b/java/res/values-ja/strings.xml @@ -62,7 +62,7 @@ <string name="bigram_prediction" msgid="1084449187723948550">"次の入力候補"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"前の単語に基づいて入力候補を表示します"</string> <string name="gesture_input" msgid="826951152254563827">"ジェスチャー入力を有効にする"</string> - <string name="gesture_input_summary" msgid="9180350639305731231">"文字をスライドして単語を入力できます"</string> + <string name="gesture_input_summary" msgid="9180350639305731231">"文字間をスライドして単語を入力できます"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"ジェスチャートレイルを表示"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"動的フローティングプレビュー"</string> <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"ジェスチャーで入力候補を表示できます"</string> diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml index 7e808d719..2be5db2ab 100644 --- a/java/res/values-ko/strings.xml +++ b/java/res/values-ko/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"키를 누를 때 팝업"</string> <string name="general_category" msgid="1859088467017573195">"일반"</string> <string name="correction_category" msgid="2236750915056607613">"텍스트 수정"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"동작으로 입력"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"제스처 타이핑"</string> <string name="misc_category" msgid="6894192814868233453">"기타 옵션"</string> <string name="advanced_settings" msgid="362895144495591463">"고급 설정"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"전문가용 옵션"</string> @@ -59,9 +59,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> - <string name="bigram_prediction" msgid="1084449187723948550">"다음 추천 검색어"</string> + <string name="bigram_prediction" msgid="1084449187723948550">"다음 단어 추천"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"추천할 때 이전 단어를 사용"</string> - <string name="gesture_input" msgid="826951152254563827">"동작으로 입력 사용"</string> + <string name="gesture_input" msgid="826951152254563827">"제스처 타이핑 사용"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"문자를 슬라이드하여 단어 입력"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"동작 흔적 표시"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"동적 플로팅 미리보기"</string> diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml index a88576dc6..dee3479aa 100644 --- a/java/res/values-lt/strings.xml +++ b/java/res/values-lt/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"Iššoka paspaudus klavišą"</string> <string name="general_category" msgid="1859088467017573195">"Bendra"</string> <string name="correction_category" msgid="2236750915056607613">"Teksto taisymas"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"Įvestis gestais"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"Teksto vedimas gestais"</string> <string name="misc_category" msgid="6894192814868233453">"Kitos parinktys"</string> <string name="advanced_settings" msgid="362895144495591463">"Išplėstiniai nustatymai"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"Parinktys ekspertams"</string> @@ -51,7 +51,7 @@ <string name="prefs_show_suggestions" msgid="8026799663445531637">"Rodyti taisymo pasiūlymus"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Įvedant tekstą pateikti siūlomų žodžių"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Visada rodyti"</string> - <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"Rodyti stačiuoju režimu"</string> + <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"Rodyti portreto režimu"</string> <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Visada slėpti"</string> <string name="auto_correction" msgid="7630720885194996950">"Automatinis taisymas"</string> <string name="auto_correction_summary" msgid="5625751551134658006">"Tarpo kl. ir skyr. ženkl. aut. išt. neteis. įv. žodž."</string> @@ -61,7 +61,7 @@ <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Labai agresyviai"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Kito žodžio pasiūlymai"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Sudarant pasiūlymus naudoti ankstesnį žodį"</string> - <string name="gesture_input" msgid="826951152254563827">"Įgalinti įvestį gestais"</string> + <string name="gesture_input" msgid="826951152254563827">"Įgalinti teksto vedimą gestais"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Įvesti žodį slenkant raidėmis"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Rodyti gestų kelią"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Dinaminė slankioji peržiūra"</string> diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml index 4dd1d0b3a..9b9d6ad80 100644 --- a/java/res/values-ms/strings.xml +++ b/java/res/values-ms/strings.xml @@ -45,7 +45,7 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Cadangkan nama Kenalan"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Menggunakan nama daripada Kenalan untuk cadangan dan pembetulan"</string> <string name="auto_cap" msgid="1719746674854628252">"Huruf besar auto"</string> - <string name="auto_cap_summary" msgid="7934452761022946874">"Besarkan huruf pertama setiap ayat"</string> + <string name="auto_cap_summary" msgid="7934452761022946874">"Besarkan perkataan pertama setiap ayat"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Kamus tambahan"</string> <string name="main_dictionary" msgid="4798763781818361168">"Kamus utama"</string> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Tunjukkan cadangan pembetulan"</string> @@ -65,7 +65,7 @@ <string name="gesture_input_summary" msgid="9180350639305731231">"Input perkataan dengan meluncur melalui huruf"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Tunjukkan jejak gerak isyarat"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Pratonton terapung dinamik"</string> - <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Lihat perkataan dicadangkan semasa membuat gerak isyarat"</string> + <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Lihat perkataan yang dicadangkan semasa membuat gerak isyarat"</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> <string name="label_next_key" msgid="362972844525672568">"Seterusnya"</string> diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml index 414aa9a97..9b73ad12d 100644 --- a/java/res/values-pl/strings.xml +++ b/java/res/values-pl/strings.xml @@ -91,7 +91,7 @@ <string name="spoken_description_settings" msgid="4627462689603838099">"Ustawienia"</string> <string name="spoken_description_tab" msgid="2667716002663482248">"Tab"</string> <string name="spoken_description_space" msgid="2582521050049860859">"Spacja"</string> - <string name="spoken_description_mic" msgid="615536748882611950">"Wprowadzanie głosowe"</string> + <string name="spoken_description_mic" msgid="615536748882611950">"Rozpoznawanie mowy"</string> <string name="spoken_description_smiley" msgid="2256309826200113918">"Uśmiechnięta buźka"</string> <string name="spoken_description_return" msgid="8178083177238315647">"Enter"</string> <string name="spoken_description_search" msgid="1247236163755920808">"Szukaj"</string> @@ -112,7 +112,7 @@ <string name="voice_input_modes_off" msgid="3745699748218082014">"Wyłącz"</string> <string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikrofon na klawiaturze głównej"</string> <string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikrofon na klawiaturze z symbolami"</string> - <string name="voice_input_modes_summary_off" msgid="63875609591897607">"Wprowadzanie głosowe jest wyłączone"</string> + <string name="voice_input_modes_summary_off" msgid="63875609591897607">"Rozpoznawanie mowy jest wyłączone"</string> <string name="configure_input_method" msgid="373356270290742459">"Konfiguruj metody wprowadzania"</string> <string name="language_selection_title" msgid="1651299598555326750">"Języki wprowadzania"</string> <string name="select_language" msgid="3693815588777926848">"Języki wprowadzania"</string> diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml index a2054c4d8..098d24565 100644 --- a/java/res/values-pt/strings.xml +++ b/java/res/values-pt/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"Exibir pop-up ao digitar"</string> <string name="general_category" msgid="1859088467017573195">"Geral"</string> <string name="correction_category" msgid="2236750915056607613">"Correção de texto"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"Digitação por gestos"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"Escrita com gestos"</string> <string name="misc_category" msgid="6894192814868233453">"Outras opções"</string> <string name="advanced_settings" msgid="362895144495591463">"Configurações avançadas"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"Opções para especialistas"</string> @@ -61,7 +61,7 @@ <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Muito agressivo"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Sugestões para a palavra seguinte"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Usar a palavra anterior ao fazer sugestões"</string> - <string name="gesture_input" msgid="826951152254563827">"Ativar a digitação por gestos"</string> + <string name="gesture_input" msgid="826951152254563827">"Ativar a escrita com gestos"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Inserir uma palavra deslizando os dedos pelas letras"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Mostrar percurso do gesto"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Visualizaç. dinâmica flutuante"</string> diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml index 2d92c2bc9..44f2bb1bd 100644 --- a/java/res/values-ro/strings.xml +++ b/java/res/values-ro/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"Fereastră pop-up la apăsarea tastei"</string> <string name="general_category" msgid="1859088467017573195">"General"</string> <string name="correction_category" msgid="2236750915056607613">"Corectare text"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"Introducere text prin gesturi"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"Tastare gestuală"</string> <string name="misc_category" msgid="6894192814868233453">"Alte opţiuni"</string> <string name="advanced_settings" msgid="362895144495591463">"Setări avansate"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"Opţiuni pentru experţi"</string> @@ -45,7 +45,7 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Sugeraţi nume din Agendă"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Utilizaţi numele din Agendă pentru sugestii şi corecţii"</string> <string name="auto_cap" msgid="1719746674854628252">"Auto-capitalizare"</string> - <string name="auto_cap_summary" msgid="7934452761022946874">"Scrieţi cu majusculă primul cuvânt din fiecare propoziţie"</string> + <string name="auto_cap_summary" msgid="7934452761022946874">"Scrie cu majusculă primul cuvânt din fiecare propoziţie"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Dicţionare suplimentare"</string> <string name="main_dictionary" msgid="4798763781818361168">"Dicţionar principal"</string> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Afişaţi sugestii de corectare"</string> @@ -60,8 +60,8 @@ <string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Agresivă"</string> <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Foarte exigentă"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Sugestii pentru cuvântul următor"</string> - <string name="bigram_prediction_summary" msgid="3896362682751109677">"Utilizaţi cuvântul anterior în efectuarea sugestiilor"</string> - <string name="gesture_input" msgid="826951152254563827">"Activaţi tastarea prin gesturi"</string> + <string name="bigram_prediction_summary" msgid="3896362682751109677">"Utilizează cuvântul anterior pentru sugestii"</string> + <string name="gesture_input" msgid="826951152254563827">"Activați tastarea gestuală"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Introduceţi un cuvânt glisând uşor între litere"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Se afişează urma gestului"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Sugestie flotantă dinamică"</string> diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml index c0dc11726..00e574e90 100644 --- a/java/res/values-ru/strings.xml +++ b/java/res/values-ru/strings.xml @@ -51,7 +51,7 @@ <string name="prefs_show_suggestions" msgid="8026799663445531637">"Показать варианты исправлений"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Предлагать варианты слов во время ввода"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Всегда показывать"</string> - <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"Показывать при вертикальном положении телефона"</string> + <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"Показать вертикально"</string> <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Всегда скрывать"</string> <string name="auto_correction" msgid="7630720885194996950">"Автоисправление"</string> <string name="auto_correction_summary" msgid="5625751551134658006">"Автоматическое исправление опечаток при вводе знака препинания или пробела"</string> @@ -62,10 +62,10 @@ <string name="bigram_prediction" msgid="1084449187723948550">"Подсказка следующего слова"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Предлагать подсказки на основе предыдущего слова"</string> <string name="gesture_input" msgid="826951152254563827">"Включить функцию"</string> - <string name="gesture_input_summary" msgid="9180350639305731231">"Вводить слова, не отрывая пальца от клавиатуры"</string> + <string name="gesture_input_summary" msgid="9180350639305731231">"Вводите слова, не отрывая пальца от клавиатуры"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Рисовать линию"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Показывать подсказки"</string> - <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Показывать предлагаемые слова при вводе текста"</string> + <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Показывать подсказки при вводе текста"</string> <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: сохранено"</string> <string name="label_go_key" msgid="1635148082137219148">"Поиск"</string> <string name="label_next_key" msgid="362972844525672568">"Далее"</string> diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml index 628f591c9..915fe14b7 100644 --- a/java/res/values-sk/strings.xml +++ b/java/res/values-sk/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"Zobraziť znaky pri stlačení klávesu"</string> <string name="general_category" msgid="1859088467017573195">"Všeobecné"</string> <string name="correction_category" msgid="2236750915056607613">"Oprava textu"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"Písanie gestami"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"Písanie gest"</string> <string name="misc_category" msgid="6894192814868233453">"Ďalšie možnosti"</string> <string name="advanced_settings" msgid="362895144495591463">"Rozšírené nastavenia"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"Možnosti pre odborníkov"</string> @@ -61,7 +61,7 @@ <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Veľmi agresívne"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Návrhy ďalšieho slova"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Návrhy podľa predchádzajúceho slova"</string> - <string name="gesture_input" msgid="826951152254563827">"Povoliť písanie gestami"</string> + <string name="gesture_input" msgid="826951152254563827">"Povoliť písanie gest"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Vkladanie slov prejdením prstom po písmenách"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Zobrazovať stopu gesta"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Dynamická plávajúca ukážka"</string> diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml index 44106dd2a..e986a79dd 100644 --- a/java/res/values-sv/strings.xml +++ b/java/res/values-sv/strings.xml @@ -64,7 +64,7 @@ <string name="gesture_input" msgid="826951152254563827">"Aktivera svepskrivning"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Skriv genom att dra från tecken till tecken utan att lyfta handen"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Visa spår efter rörelse"</string> - <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Visa ordförslag i skrivrörelse"</string> + <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Visa ordförslag vid svepskrivning"</string> <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Ordförslaget visas i rörelsen medan du skriver"</string> <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: sparat"</string> <string name="label_go_key" msgid="1635148082137219148">"Kör"</string> diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml index 0b002ffe8..18cd0afb3 100644 --- a/java/res/values-tl/strings.xml +++ b/java/res/values-tl/strings.xml @@ -31,7 +31,7 @@ <string name="popup_on_keypress" msgid="123894815723512944">"Popup sa keypress"</string> <string name="general_category" msgid="1859088467017573195">"Pangkalahatan"</string> <string name="correction_category" msgid="2236750915056607613">"Pagwawasto ng teksto"</string> - <string name="gesture_typing_category" msgid="497263612130532630">"Pag-type gamit ang galaw"</string> + <string name="gesture_typing_category" msgid="497263612130532630">"Gesture na pag-type"</string> <string name="misc_category" msgid="6894192814868233453">"Iba pang mga pagpipilian"</string> <string name="advanced_settings" msgid="362895144495591463">"Mga advanced na setting"</string> <string name="advanced_settings_summary" msgid="4487980456152830271">"Mga pagpipilian para sa mga dalubhasa"</string> @@ -61,7 +61,7 @@ <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Napaka-agresibo"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Mga suhestiyon sa susunod na salita"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Gamitin ang nakaraang salita sa paggawa ng mga suhestiyon"</string> - <string name="gesture_input" msgid="826951152254563827">"Paganahin pag-type gamit galaw"</string> + <string name="gesture_input" msgid="826951152254563827">"Paganahin ang gesture na pag-type"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Mag-input ng salita sa pamamagitan ng pag-slide sa mga titik"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Ipakita ang trail ng galaw"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Dynamic na floating preview"</string> diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml index f57615ec7..a57c58ab3 100644 --- a/java/res/values-tr/strings.xml +++ b/java/res/values-tr/strings.xml @@ -62,7 +62,7 @@ <string name="bigram_prediction" msgid="1084449187723948550">"Sonraki kelime önerileri"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Önerilerde bulunurken önceki kelimeyi kullan"</string> <string name="gesture_input" msgid="826951152254563827">"Hareketle yazmayı etkinleştir"</string> - <string name="gesture_input_summary" msgid="9180350639305731231">"Harflerin üzerinden geçerek kelime gir"</string> + <string name="gesture_input_summary" msgid="9180350639305731231">"Harflerin üzerinden parmağınızı kaydırarak kelime girin"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Hareket izini göster"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Dinamik kayan önizleme"</string> <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Hareket sırasında önerilen kelimeyi göster"</string> diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml index 9aa1650f4..658a4c4ff 100644 --- a/java/res/values-vi/strings.xml +++ b/java/res/values-vi/strings.xml @@ -65,7 +65,7 @@ <string name="gesture_input_summary" msgid="9180350639305731231">"Nhập từ bằng cách trượt qua các chữ cái"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Hiển thị vệt cử chỉ"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Xem trước nổi động"</string> - <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Xem từ được đề xuất trong khi tạo cử chỉ"</string> + <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Xem từ được đề xuất trong khi dùng cử chỉ"</string> <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Đã lưu"</string> <string name="label_go_key" msgid="1635148082137219148">"Tìm"</string> <string name="label_next_key" msgid="362972844525672568">"Tiếp theo"</string> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 7e8c77e13..72dcb0e35 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -127,6 +127,25 @@ <attr name="ignoreAltCodeKeyTimeout" format="integer" /> <!-- More keys keyboard will shown at touched point. --> <attr name="showMoreKeysKeyboardAtTouchedPoint" format="boolean" /> + <!-- Static threshold for gesture after fast typing (msec) --> + <attr name="gestureStaticTimeThresholdAfterFastTyping" format="integer" /> + <!-- Static threshold for starting gesture detection (keyWidth%/sec) --> + <attr name="gestureDetectFastMoveSpeedThreshold" format="fraction" /> + <!-- Dynamic threshold for gesture after fast typing (msec) --> + <attr name="gestureDynamicThresholdDecayDuration" format="integer" /> + <!-- Time based threshold values for gesture detection (msec) --> + <attr name="gestureDynamicTimeThresholdFrom" format="integer" /> + <attr name="gestureDynamicTimeThresholdTo" format="integer" /> + <!-- Distance based threshold values for gesture detection (keyWidth%/sec) --> + <attr name="gestureDynamicDistanceThresholdFrom" format="fraction" /> + <attr name="gestureDynamicDistanceThresholdTo" format="fraction" /> + <!-- Parameter for gesture sampling (keyWidth%/sec) --> + <attr name="gestureSamplingMinimumDistance" format="fraction" /> + <!-- Parameters for gesture recognition (msec) and (keyWidth%/sec) --> + <attr name="gestureRecognitionMinimumTime" format="integer" /> + <attr name="gestureRecognitionSpeedThreshold" format="fraction" /> + <!-- Suppress showing key preview duration after batch input in millisecond --> + <attr name="suppressKeyPreviewAfterBatchInputDuration" format="integer" /> </declare-styleable> <declare-styleable name="SuggestionStripView"> diff --git a/java/res/values/config.xml b/java/res/values/config.xml index 8e2d43e4e..7c57f1f2b 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -69,6 +69,25 @@ <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if false --> <bool name="config_show_more_keys_keyboard_at_touched_point">false</bool> + <!-- Static threshold for gesture after fast typing (msec) --> + <integer name="config_gesture_static_time_threshold_after_fast_typing">1000</integer> + <!-- Static threshold for starting gesture detection (keyWidth%/sec) --> + <fraction name="config_gesture_detect_fast_move_speed_threshold">150%</fraction> + <!-- Dynamic threshold for gesture after fast typing (msec) --> + <integer name="config_gesture_dynamic_threshold_decay_duration">450</integer> + <!-- Time based threshold values for gesture detection (msec) --> + <integer name="config_gesture_dynamic_time_threshold_from">300</integer> + <integer name="config_gesture_dynamic_time_threshold_to">20</integer> + <!-- Distance based threshold values for gesture detection (keyWidth%/sec) --> + <fraction name="config_gesture_dynamic_distance_threshold_from">600%</fraction> + <fraction name="config_gesture_dynamic_distance_threshold_to">35%</fraction> + <!-- Parameter for gesture sampling (keyWidth%/sec) --> + <fraction name="config_gesture_sampling_minimum_distance">16.6666%</fraction> + <!-- Parameters for gesture recognition (msec) and (keyWidth%/sec) --> + <integer name="config_gesture_recognition_minimum_time">100</integer> + <fraction name="config_gesture_recognition_speed_threshold">550%</fraction> + <!-- Suppress showing key preview duration after batch input in millisecond --> + <integer name="config_suppress_key_preview_after_batch_input_duration">1000</integer> <!-- Configuration for auto correction --> diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 9d3d71607..589962c27 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -94,6 +94,18 @@ <item name="languageOnSpacebarFadeoutAnimator">@anim/language_on_spacebar_fadeout</item> <item name="altCodeKeyWhileTypingFadeoutAnimator">@anim/alt_code_key_while_typing_fadeout</item> <item name="altCodeKeyWhileTypingFadeinAnimator">@anim/alt_code_key_while_typing_fadein</item> + <!-- Common attributes of MainKeyboardView for gesture typing detection and recognition --> + <item name="gestureStaticTimeThresholdAfterFastTyping">@integer/config_gesture_static_time_threshold_after_fast_typing</item> + <item name="gestureDetectFastMoveSpeedThreshold">@fraction/config_gesture_detect_fast_move_speed_threshold</item> + <item name="gestureDynamicThresholdDecayDuration">@integer/config_gesture_dynamic_threshold_decay_duration</item> + <item name="gestureDynamicTimeThresholdFrom">@integer/config_gesture_dynamic_time_threshold_from</item> + <item name="gestureDynamicTimeThresholdTo">@integer/config_gesture_dynamic_time_threshold_to</item> + <item name="gestureDynamicDistanceThresholdFrom">@fraction/config_gesture_dynamic_distance_threshold_from</item> + <item name="gestureDynamicDistanceThresholdTo">@fraction/config_gesture_dynamic_distance_threshold_to</item> + <item name="gestureSamplingMinimumDistance">@fraction/config_gesture_sampling_minimum_distance</item> + <item name="gestureRecognitionMinimumTime">@integer/config_gesture_recognition_minimum_time</item> + <item name="gestureRecognitionSpeedThreshold">@fraction/config_gesture_recognition_speed_threshold</item> + <item name="suppressKeyPreviewAfterBatchInputDuration">@integer/config_suppress_key_preview_after_batch_input_duration</item> </style> <style name="MainKeyboardView" diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java index b41631e83..20d7847ff 100644 --- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java @@ -82,6 +82,17 @@ import java.util.WeakHashMap; * @attr ref R.styleable#MainKeyboardView_longPressShiftKeyTimeout * @attr ref R.styleable#MainKeyboardView_ignoreAltCodeKeyTimeout * @attr ref R.styleable#MainKeyboardView_showMoreKeysKeyboardAtTouchPoint + * @attr ref R.styleable#MainKeyboardView_gestureStaticTimeThresholdAfterFastTyping + * @attr ref R.styleable#MainKeyboardView_gestureDetectFastMoveSpeedThreshold + * @attr ref R.styleable#MainKeyboardView_gestureDynamicThresholdDecayDuration + * @attr ref R.styleable#MainKeyboardView_gestureDynamicTimeThresholdFrom + * @attr ref R.styleable#MainKeyboardView_gestureDynamicTimeThresholdTo + * @attr ref R.styleable#MainKeyboardView_gestureDynamicDistanceThresholdFrom + * @attr ref R.styleable#MainKeyboardView_gestureDynamicDistanceThresholdTo + * @attr ref R.styleable#MainKeyboardView_gestureSamplingMinimumDistance + * @attr ref R.styleable#MainKeyboardView_gestureRecognitionMinimumTime + * @attr ref R.styleable#MainKeyboardView_gestureRecognitionSpeedThreshold + * @attr ref R.styleable#MainKeyboardView_suppressKeyPreviewAfterBatchInputDuration */ public final class MainKeyboardView extends KeyboardView implements PointerTracker.KeyEventHandler, SuddenJumpingTouchEventHandler.ProcessMotionEvent { diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java index ad7d0a39f..7aeddc279 100644 --- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java +++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java @@ -23,6 +23,7 @@ import android.view.MotionEvent; import com.android.inputmethod.accessibility.AccessibilityUtils; import com.android.inputmethod.keyboard.internal.GestureStroke; +import com.android.inputmethod.keyboard.internal.GestureStroke.GestureStrokeParams; import com.android.inputmethod.keyboard.internal.GestureStrokeWithPreviewPoints; import com.android.inputmethod.keyboard.internal.PointerTrackerQueue; import com.android.inputmethod.latin.CollectionUtils; @@ -47,9 +48,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element { private static boolean sGestureHandlingEnabledByInputField = false; private static boolean sGestureHandlingEnabledByUser = false; - // TODO: Move this to resource. - private static final int SUPPRESS_KEY_PREVIEW_AFTER_LAST_BATCH_INPUT_DURATION = 1000; // msec - public interface KeyEventHandler { /** * Get KeyDetector object that is used for this PointerTracker. @@ -125,6 +123,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element { public final int mTouchNoiseThresholdTime; public final float mTouchNoiseThresholdDistance; public final int mTouchNoiseThresholdDistanceSquared; + public final int mSuppressKeyPreviewAfterBatchInputDuration; public static final PointerTrackerParams DEFAULT = new PointerTrackerParams(); @@ -133,9 +132,10 @@ public final class PointerTracker implements PointerTrackerQueue.Element { mTouchNoiseThresholdTime = 0; mTouchNoiseThresholdDistance = 0.0f; mTouchNoiseThresholdDistanceSquared = 0; + mSuppressKeyPreviewAfterBatchInputDuration = 0; } - public PointerTrackerParams(TypedArray mainKeyboardViewAttr) { + public PointerTrackerParams(final TypedArray mainKeyboardViewAttr) { mSlidingKeyInputEnabled = mainKeyboardViewAttr.getBoolean( R.styleable.MainKeyboardView_slidingKeyInputEnable, false); mTouchNoiseThresholdTime = mainKeyboardViewAttr.getInt( @@ -145,11 +145,14 @@ public final class PointerTracker implements PointerTrackerQueue.Element { mTouchNoiseThresholdDistance = touchNouseThresholdDistance; mTouchNoiseThresholdDistanceSquared = (int)(touchNouseThresholdDistance * touchNouseThresholdDistance); + mSuppressKeyPreviewAfterBatchInputDuration = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_suppressKeyPreviewAfterBatchInputDuration, 0); } } // Parameters for pointer handling. private static PointerTrackerParams sParams; + private static GestureStrokeParams sGestureStrokeParams; private static boolean sNeedsPhantomSuddenMoveEventHack; private static final ArrayList<PointerTracker> sTrackers = CollectionUtils.newArrayList(); @@ -168,13 +171,80 @@ public final class PointerTracker implements PointerTrackerQueue.Element { private boolean mIsDetectingGesture = false; // per PointerTracker. private static boolean sInGesture = false; private static long sGestureFirstDownTime; - private static long sLastBatchInputTime; - private static long sLastLetterTypingUpTime; + private static TimeRecorder sTimeRecorder; private static final InputPointers sAggregratedPointers = new InputPointers( GestureStroke.DEFAULT_CAPACITY); private static int sLastRecognitionPointSize = 0; // synchronized using sAggregratedPointers private static long sLastRecognitionTime = 0; // synchronized using sAggregratedPointers + static final class TimeRecorder { + private final int mSuppressKeyPreviewAfterBatchInputDuration; + private final int mStaticTimeThresholdAfterFastTyping; // msec + private long mLastTypingTime; + private long mLastLetterTypingTime; + private long mLastBatchInputTime; + + public TimeRecorder(final PointerTrackerParams pointerTrackerParams, + final GestureStrokeParams gestureStrokeParams) { + mSuppressKeyPreviewAfterBatchInputDuration = + pointerTrackerParams.mSuppressKeyPreviewAfterBatchInputDuration; + mStaticTimeThresholdAfterFastTyping = + gestureStrokeParams.mStaticTimeThresholdAfterFastTyping; + } + + private void recordTyping(final long eventTime) { + mLastTypingTime = eventTime; + } + + private void recordLetterTyping(final long eventTime) { + mLastLetterTypingTime = eventTime; + // Reset gesture typing time + mLastBatchInputTime = 0; + } + + private void recordGestureTyping(final long eventTime) { + mLastBatchInputTime = eventTime; + // Reset typing time. + mLastTypingTime = 0; + } + + private boolean isInTyping() { + return mLastTypingTime != 0; + } + + private boolean isInBatchInput() { + return mLastBatchInputTime != 0; + } + + public void onCodeInput(final int code, final long eventTime) { + if (Keyboard.isLetterCode(code) && code != Keyboard.CODE_SPACE) { + if (isInTyping() + && eventTime - mLastTypingTime < mStaticTimeThresholdAfterFastTyping) { + recordLetterTyping(eventTime); + } + } else { + if (eventTime - mLastLetterTypingTime < mStaticTimeThresholdAfterFastTyping) { + // This non-letter typing should be treated as a part of fast typing. + recordLetterTyping(eventTime); + } + } + recordTyping(eventTime); + } + + public void onEndBatchInput(final long eventTime) { + recordGestureTyping(eventTime); + } + + public long getLastLetterTypingTime() { + return mLastLetterTypingTime; + } + + public boolean needsToSuppressKeyPreviewPopup(final long eventTime) { + return !isInTyping() && isInBatchInput() + && eventTime - mLastBatchInputTime < mSuppressKeyPreviewAfterBatchInputDuration; + } + } + // The position and time at which first down event occurred. private long mDownTime; private long mUpTime; @@ -222,10 +292,14 @@ public final class PointerTracker implements PointerTrackerQueue.Element { } sNeedsPhantomSuddenMoveEventHack = needsPhantomSuddenMoveEventHack; sParams = PointerTrackerParams.DEFAULT; + sGestureStrokeParams = GestureStrokeParams.DEFAULT; + sTimeRecorder = new TimeRecorder(sParams, sGestureStrokeParams); } public static void setParameters(final TypedArray mainKeyboardViewAttr) { sParams = new PointerTrackerParams(mainKeyboardViewAttr); + sGestureStrokeParams = new GestureStrokeParams(mainKeyboardViewAttr); + sTimeRecorder = new TimeRecorder(sParams, sGestureStrokeParams); } private static void updateGestureHandlingMode() { @@ -296,7 +370,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element { throw new NullPointerException(); } mPointerId = id; - mGestureStrokeWithPreviewPoints = new GestureStrokeWithPreviewPoints(id); + mGestureStrokeWithPreviewPoints = new GestureStrokeWithPreviewPoints( + id, sGestureStrokeParams); setKeyDetectorInner(handler.getKeyDetector()); mListener = handler.getKeyboardActionListener(); mDrawingProxy = handler.getDrawingProxy(); @@ -331,7 +406,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element { // Note that we need primaryCode argument because the keyboard may in shifted state and the // primaryCode is different from {@link Key#mCode}. private void callListenerOnCodeInput(final Key key, final int primaryCode, final int x, - final int y) { + final int y, final long eventTime) { final boolean ignoreModifierKey = mIgnoreModifierKey && key.isModifier(); final boolean altersCode = key.altCodeWhileTyping() && mTimerProxy.isTypingState(); final int code = altersCode ? key.getAltCode() : primaryCode; @@ -351,7 +426,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element { } // Even if the key is disabled, it should respond if it is in the altCodeWhileTyping state. if (key.isEnabled() || altersCode) { - sLastBatchInputTime = 0; // reset time + sTimeRecorder.onCodeInput(code, eventTime); if (code == Keyboard.CODE_OUTPUT_TEXT) { mListener.onTextInput(key.getOutputText()); } else if (code != Keyboard.CODE_UNSPECIFIED) { @@ -466,10 +541,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element { private static boolean needsToSuppressKeyPreviewPopup(final long eventTime) { if (!sShouldHandleGesture) return false; - if (sLastBatchInputTime == 0) return false; - final long elapsedTimeAfterTheLastBatchInput = eventTime - sLastBatchInputTime; - return elapsedTimeAfterTheLastBatchInput - < SUPPRESS_KEY_PREVIEW_AFTER_LAST_BATCH_INPUT_DURATION; + return sTimeRecorder.needsToSuppressKeyPreviewPopup(eventTime); } private void setPressedKeyGraphics(final Key key, final long eventTime) { @@ -587,10 +659,11 @@ public final class PointerTracker implements PointerTrackerQueue.Element { private void mayUpdateBatchInput(final long eventTime, final Key key) { if (key != null) { synchronized (sAggregratedPointers) { - mGestureStrokeWithPreviewPoints.appendIncrementalBatchPoints(sAggregratedPointers); + final GestureStroke stroke = mGestureStrokeWithPreviewPoints; + stroke.appendIncrementalBatchPoints(sAggregratedPointers); final int size = sAggregratedPointers.getPointerSize(); if (size > sLastRecognitionPointSize - && GestureStroke.hasRecognitionTimePast(eventTime, sLastRecognitionTime)) { + && stroke.hasRecognitionTimePast(eventTime, sLastRecognitionTime)) { sLastRecognitionPointSize = size; sLastRecognitionTime = eventTime; if (DEBUG_LISTENER) { @@ -614,7 +687,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element { mPointerId, sAggregratedPointers.getPointerSize())); } sInGesture = false; - sLastBatchInputTime = eventTime; + sTimeRecorder.onEndBatchInput(eventTime); mListener.onEndBatchInput(sAggregratedPointers); } } @@ -692,7 +765,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element { sGestureFirstDownTime = eventTime; } mGestureStrokeWithPreviewPoints.onDownEvent(x, y, eventTime, sGestureFirstDownTime, - sLastLetterTypingUpTime); + sTimeRecorder.getLastLetterTypingTime()); } } @@ -933,11 +1006,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element { return; } if (currentKey != null && !currentKey.isRepeatable()) { - detectAndSendKey(currentKey, mKeyX, mKeyY); - final int code = currentKey.mCode; - if (Keyboard.isLetterCode(code) && code != Keyboard.CODE_SPACE) { - sLastLetterTypingUpTime = eventTime; - } + detectAndSendKey(currentKey, mKeyX, mKeyY, eventTime); } } @@ -988,7 +1057,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element { public void onRegisterKey(final Key key) { if (key != null) { - detectAndSendKey(key, key.mX, key.mY); + detectAndSendKey(key, key.mX, key.mY, SystemClock.uptimeMillis()); mTimerProxy.startTypingStateTimer(key); } } @@ -1014,14 +1083,14 @@ public final class PointerTracker implements PointerTrackerQueue.Element { } } - private void detectAndSendKey(final Key key, final int x, final int y) { + private void detectAndSendKey(final Key key, final int x, final int y, final long eventTime) { if (key == null) { callListenerOnCancelInput(); return; } final int code = key.mCode; - callListenerOnCodeInput(key, code, x, y); + callListenerOnCodeInput(key, code, x, y, eventTime); callListenerOnRelease(key, code, false); } diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java b/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java index c0e92df32..9b1a20159 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java +++ b/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java @@ -14,10 +14,13 @@ package com.android.inputmethod.keyboard.internal; +import android.content.res.TypedArray; import android.util.Log; import com.android.inputmethod.latin.InputPointers; +import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.ResizableIntArray; +import com.android.inputmethod.latin.ResourceUtils; public class GestureStroke { private static final String TAG = GestureStroke.class.getSimpleName(); @@ -31,6 +34,8 @@ public class GestureStroke { private final ResizableIntArray mXCoordinates = new ResizableIntArray(DEFAULT_CAPACITY); private final ResizableIntArray mYCoordinates = new ResizableIntArray(DEFAULT_CAPACITY); + private final GestureStrokeParams mParams; + private int mKeyWidth; // pixel // Static threshold for starting gesture detection private int mDetectFastMoveSpeedThreshold; // pixel /sec @@ -51,53 +56,100 @@ public class GestureStroke { private int mIncrementalRecognitionSize; private int mLastIncrementalBatchSize; - // TODO: Move some of these to resource. - - // Static threshold for gesture after fast typing - public static final int GESTURE_STATIC_TIME_THRESHOLD_AFTER_FAST_TYPING = 350; // msec - - // Static threshold for starting gesture detection - private static final float DETECT_FAST_MOVE_SPEED_THRESHOLD = 1.5f; // keyWidth / sec + public static final class GestureStrokeParams { + // Static threshold for gesture after fast typing + public final int mStaticTimeThresholdAfterFastTyping; // msec + // Static threshold for starting gesture detection + public final float mDetectFastMoveSpeedThreshold; // keyWidth/sec + // Dynamic threshold for gesture after fast typing + public final int mDynamicThresholdDecayDuration; // msec + // Time based threshold values + public final int mDynamicTimeThresholdFrom; // msec + public final int mDynamicTimeThresholdTo; // msec + // Distance based threshold values + public final float mDynamicDistanceThresholdFrom; // keyWidth + public final float mDynamicDistanceThresholdTo; // keyWidth + // Parameters for gesture sampling + public final float mSamplingMinimumDistance; // keyWidth + // Parameters for gesture recognition + public final int mRecognitionMinimumTime; // msec + public final float mRecognitionSpeedThreshold; // keyWidth/sec - // Dynamic threshold for gesture after fast typing - private static final int GESTURE_DYNAMIC_THRESHOLD_DECAY_DURATION = 450; // msec - // Time based threshold values - private static final int GESTURE_DYNAMIC_TIME_THRESHOLD_FROM = 300; // msec - private static final int GESTURE_DYNAMIC_TIME_THRESHOLD_TO = 20; // msec - // Distance based threshold values - private static final float GESTURE_DYNAMIC_DISTANCE_THRESHOLD_FROM = 6.0f; // keyWidth - private static final float GESTURE_DYNAMIC_DISTANCE_THRESHOLD_TO = 0.35f; // keyWidth + // Default GestureStroke parameters for test. + public static final GestureStrokeParams FOR_TEST = new GestureStrokeParams(); + public static final GestureStrokeParams DEFAULT = FOR_TEST; - // Parameters for gesture sampling - private static final float GESTURE_SAMPLING_MINIMUM_DISTANCE = 1.0f / 6.0f; // keyWidth + private GestureStrokeParams() { + // These parameter values are default and intended for testing. + mStaticTimeThresholdAfterFastTyping = 350; // msec + mDetectFastMoveSpeedThreshold = 1.5f; // keyWidth / sec + mDynamicThresholdDecayDuration = 450; // msec + mDynamicTimeThresholdFrom = 300; // msec + mDynamicTimeThresholdTo = 20; // msec + mDynamicDistanceThresholdFrom = 6.0f; // keyWidth + mDynamicDistanceThresholdTo = 0.35f; // keyWidth + // The following parameters' change will affect the result of regression test. + mSamplingMinimumDistance = 1.0f / 6.0f; // keyWidth + mRecognitionMinimumTime = 100; // msec + mRecognitionSpeedThreshold = 5.5f; // keyWidth / sec + } - // Parameters for gesture recognition - private static final int GESTURE_RECOGNITION_MINIMUM_TIME = 100; // msec - private static final float GESTURE_RECOGNITION_SPEED_THRESHOLD = 5.5f; // keyWidth / sec + public GestureStrokeParams(final TypedArray mainKeyboardViewAttr) { + mStaticTimeThresholdAfterFastTyping = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_gestureStaticTimeThresholdAfterFastTyping, + DEFAULT.mStaticTimeThresholdAfterFastTyping); + mDetectFastMoveSpeedThreshold = ResourceUtils.getFraction(mainKeyboardViewAttr, + R.styleable.MainKeyboardView_gestureDetectFastMoveSpeedThreshold, + DEFAULT.mDetectFastMoveSpeedThreshold); + mDynamicThresholdDecayDuration = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_gestureDynamicThresholdDecayDuration, + DEFAULT.mDynamicThresholdDecayDuration); + mDynamicTimeThresholdFrom = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_gestureDynamicTimeThresholdFrom, + DEFAULT.mDynamicTimeThresholdFrom); + mDynamicTimeThresholdTo = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_gestureDynamicTimeThresholdTo, + DEFAULT.mDynamicTimeThresholdTo); + mDynamicDistanceThresholdFrom = ResourceUtils.getFraction(mainKeyboardViewAttr, + R.styleable.MainKeyboardView_gestureDynamicDistanceThresholdFrom, + DEFAULT.mDynamicDistanceThresholdFrom); + mDynamicDistanceThresholdTo = ResourceUtils.getFraction(mainKeyboardViewAttr, + R.styleable.MainKeyboardView_gestureDynamicDistanceThresholdTo, + DEFAULT.mDynamicDistanceThresholdTo); + mSamplingMinimumDistance = ResourceUtils.getFraction(mainKeyboardViewAttr, + R.styleable.MainKeyboardView_gestureSamplingMinimumDistance, + DEFAULT.mSamplingMinimumDistance); + mRecognitionMinimumTime = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_gestureRecognitionMinimumTime, + DEFAULT.mRecognitionMinimumTime); + mRecognitionSpeedThreshold = ResourceUtils.getFraction(mainKeyboardViewAttr, + R.styleable.MainKeyboardView_gestureRecognitionSpeedThreshold, + DEFAULT.mRecognitionSpeedThreshold); + } + } private static final int MSEC_PER_SEC = 1000; - public GestureStroke(final int pointerId) { + public GestureStroke(final int pointerId, final GestureStrokeParams params) { mPointerId = pointerId; + mParams = params; } public void setKeyboardGeometry(final int keyWidth) { mKeyWidth = keyWidth; // TODO: Find an appropriate base metric for these length. Maybe diagonal length of the key? - mDetectFastMoveSpeedThreshold = (int)(keyWidth * DETECT_FAST_MOVE_SPEED_THRESHOLD); + mDetectFastMoveSpeedThreshold = (int)(keyWidth * mParams.mDetectFastMoveSpeedThreshold); mGestureDynamicDistanceThresholdFrom = - (int)(keyWidth * GESTURE_DYNAMIC_DISTANCE_THRESHOLD_FROM); - mGestureDynamicDistanceThresholdTo = - (int)(keyWidth * GESTURE_DYNAMIC_DISTANCE_THRESHOLD_TO); - mGestureSamplingMinimumDistance = (int)(keyWidth * GESTURE_SAMPLING_MINIMUM_DISTANCE); - mGestureRecognitionSpeedThreshold = - (int)(keyWidth * GESTURE_RECOGNITION_SPEED_THRESHOLD); + (int)(keyWidth * mParams.mDynamicDistanceThresholdFrom); + mGestureDynamicDistanceThresholdTo = (int)(keyWidth * mParams.mDynamicDistanceThresholdTo); + mGestureSamplingMinimumDistance = (int)(keyWidth * mParams.mSamplingMinimumDistance); + mGestureRecognitionSpeedThreshold = (int)(keyWidth * mParams.mRecognitionSpeedThreshold); if (DEBUG) { Log.d(TAG, String.format( "[%d] setKeyboardGeometry: keyWidth=%3d tT=%3d >> %3d tD=%3d >> %3d", mPointerId, keyWidth, - GESTURE_DYNAMIC_TIME_THRESHOLD_FROM, - GESTURE_DYNAMIC_TIME_THRESHOLD_TO, + mParams.mDynamicTimeThresholdFrom, + mParams.mDynamicTimeThresholdTo, mGestureDynamicDistanceThresholdFrom, mGestureDynamicDistanceThresholdTo)); } @@ -107,7 +159,7 @@ public class GestureStroke { final long gestureFirstDownTime, final long lastTypingTime) { reset(); final long elapsedTimeAfterTyping = downTime - lastTypingTime; - if (elapsedTimeAfterTyping < GESTURE_STATIC_TIME_THRESHOLD_AFTER_FAST_TYPING) { + if (elapsedTimeAfterTyping < mParams.mStaticTimeThresholdAfterFastTyping) { mAfterFastTyping = true; } if (DEBUG) { @@ -119,23 +171,23 @@ public class GestureStroke { } private int getGestureDynamicDistanceThreshold(final int deltaTime) { - if (!mAfterFastTyping || deltaTime >= GESTURE_DYNAMIC_THRESHOLD_DECAY_DURATION) { + if (!mAfterFastTyping || deltaTime >= mParams.mDynamicThresholdDecayDuration) { return mGestureDynamicDistanceThresholdTo; } final int decayedThreshold = (mGestureDynamicDistanceThresholdFrom - mGestureDynamicDistanceThresholdTo) - * deltaTime / GESTURE_DYNAMIC_THRESHOLD_DECAY_DURATION; + * deltaTime / mParams.mDynamicThresholdDecayDuration; return mGestureDynamicDistanceThresholdFrom - decayedThreshold; } private int getGestureDynamicTimeThreshold(final int deltaTime) { - if (!mAfterFastTyping || deltaTime >= GESTURE_DYNAMIC_THRESHOLD_DECAY_DURATION) { - return GESTURE_DYNAMIC_TIME_THRESHOLD_TO; + if (!mAfterFastTyping || deltaTime >= mParams.mDynamicThresholdDecayDuration) { + return mParams.mDynamicTimeThresholdTo; } final int decayedThreshold = - (GESTURE_DYNAMIC_TIME_THRESHOLD_FROM - GESTURE_DYNAMIC_TIME_THRESHOLD_TO) - * deltaTime / GESTURE_DYNAMIC_THRESHOLD_DECAY_DURATION; - return GESTURE_DYNAMIC_TIME_THRESHOLD_FROM - decayedThreshold; + (mParams.mDynamicTimeThresholdFrom - mParams.mDynamicTimeThresholdTo) + * deltaTime / mParams.mDynamicThresholdDecayDuration; + return mParams.mDynamicTimeThresholdFrom - decayedThreshold; } public boolean isStartOfAGesture() { @@ -249,9 +301,9 @@ public class GestureStroke { } } - public static final boolean hasRecognitionTimePast( + public final boolean hasRecognitionTimePast( final long currentTime, final long lastRecognitionTime) { - return currentTime > lastRecognitionTime + GESTURE_RECOGNITION_MINIMUM_TIME; + return currentTime > lastRecognitionTime + mParams.mRecognitionMinimumTime; } public void appendAllBatchPoints(final InputPointers out) { diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeWithPreviewPoints.java b/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeWithPreviewPoints.java index 05e0a2ec3..8192c9076 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeWithPreviewPoints.java +++ b/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeWithPreviewPoints.java @@ -33,8 +33,8 @@ public final class GestureStrokeWithPreviewPoints extends GestureStroke { // TODO: Move this to resource. private static final float MIN_PREVIEW_SAMPLE_LENGTH_RATIO_TO_KEY_WIDTH = 0.1f; - public GestureStrokeWithPreviewPoints(final int pointerId) { - super(pointerId); + public GestureStrokeWithPreviewPoints(final int pointerId, final GestureStrokeParams params) { + super(pointerId, params); } @Override diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java index 0b115945b..46b363c10 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java @@ -200,6 +200,7 @@ public final class BinaryDictionaryFileDumper { outputStream.flush(); outputStream.close(); final File finalFile = new File(finalFileName); + finalFile.delete(); if (!outputFile.renameTo(finalFile)) { throw new IOException("Can't move the file to its final name"); } |