diff options
32 files changed, 291 insertions, 87 deletions
diff --git a/java/proguard.flags b/java/proguard.flags index 701786a84..e33706c47 100644 --- a/java/proguard.flags +++ b/java/proguard.flags @@ -47,6 +47,10 @@ <init>(...); } +-keep class com.android.inputmethod.latin.ResearchLogger { + void setLogFileManager(...); +} + # The support library contains references to newer platform versions. # Don't warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. diff --git a/java/res/drawable-hdpi/sym_keyboard_zwj_holo.png b/java/res/drawable-hdpi/sym_keyboard_zwj_holo.png Binary files differnew file mode 100644 index 000000000..5fa30ceb8 --- /dev/null +++ b/java/res/drawable-hdpi/sym_keyboard_zwj_holo.png diff --git a/java/res/drawable-hdpi/sym_keyboard_zwnj_holo.png b/java/res/drawable-hdpi/sym_keyboard_zwnj_holo.png Binary files differnew file mode 100644 index 000000000..91367f3d2 --- /dev/null +++ b/java/res/drawable-hdpi/sym_keyboard_zwnj_holo.png diff --git a/java/res/drawable-mdpi/sym_keyboard_zwj_holo.png b/java/res/drawable-mdpi/sym_keyboard_zwj_holo.png Binary files differnew file mode 100644 index 000000000..70370d83d --- /dev/null +++ b/java/res/drawable-mdpi/sym_keyboard_zwj_holo.png diff --git a/java/res/drawable-mdpi/sym_keyboard_zwnj_holo.png b/java/res/drawable-mdpi/sym_keyboard_zwnj_holo.png Binary files differnew file mode 100644 index 000000000..a69eade17 --- /dev/null +++ b/java/res/drawable-mdpi/sym_keyboard_zwnj_holo.png diff --git a/java/res/drawable-xhdpi/sym_keyboard_zwj_holo.png b/java/res/drawable-xhdpi/sym_keyboard_zwj_holo.png Binary files differnew file mode 100644 index 000000000..26694274e --- /dev/null +++ b/java/res/drawable-xhdpi/sym_keyboard_zwj_holo.png diff --git a/java/res/drawable-xhdpi/sym_keyboard_zwnj_holo.png b/java/res/drawable-xhdpi/sym_keyboard_zwnj_holo.png Binary files differnew file mode 100644 index 000000000..75a22b65f --- /dev/null +++ b/java/res/drawable-xhdpi/sym_keyboard_zwnj_holo.png diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml index 550d29f76..1157b2733 100644 --- a/java/res/values-land/dimens.xml +++ b/java/res/values-land/dimens.xml @@ -24,8 +24,7 @@ <dimen name="keyboardHeight">176.0dp</dimen> <fraction name="minKeyboardHeight">45%p</fraction> <!-- key_height + key_bottom_gap = popup_key_height --> -<!-- <dimen name="key_height">0.260in</dimen>--> - <dimen name="popup_key_height">0.280in</dimen> + <dimen name="popup_key_height">44.8dp</dimen> <fraction name="keyboard_top_padding">1.818%p</fraction> <fraction name="keyboard_bottom_padding">0.0%p</fraction> @@ -54,11 +53,11 @@ <fraction name="key_uppercase_letter_ratio">40%</fraction> <fraction name="key_preview_text_ratio">90%</fraction> <fraction name="spacebar_text_ratio">40.000%</fraction> - <dimen name="key_preview_offset">0.08in</dimen> + <dimen name="key_preview_offset">12.8dp</dimen> - <dimen name="key_preview_offset_ics">0.01in</dimen> + <dimen name="key_preview_offset_ics">1.6dp</dimen> <!-- popup_key_height x -0.5 --> - <dimen name="more_keys_keyboard_vertical_correction_ics">-0.140in</dimen> + <dimen name="more_keys_keyboard_vertical_correction_ics">-22.4dp</dimen> <dimen name="suggestions_strip_height">36dp</dimen> <dimen name="more_suggestions_row_height">36dp</dimen> @@ -66,7 +65,7 @@ <fraction name="min_more_suggestions_width">60%</fraction> <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> <!-- popup_key_height x 1.2 --> - <dimen name="more_keys_keyboard_slide_allowance">0.336in</dimen> + <dimen name="more_keys_keyboard_slide_allowance">53.76dp</dimen> <!-- popup_key_height x -1.0 --> - <dimen name="more_keys_keyboard_vertical_correction">-0.280in</dimen> + <dimen name="more_keys_keyboard_vertical_correction">-44.8dp</dimen> </resources> diff --git a/java/res/values-sw600dp-land/dimens.xml b/java/res/values-sw600dp-land/dimens.xml index c6c6f2b3b..8a59c9b54 100644 --- a/java/res/values-sw600dp-land/dimens.xml +++ b/java/res/values-sw600dp-land/dimens.xml @@ -38,7 +38,7 @@ <fraction name="key_bottom_gap_ics">4.0%p</fraction> <fraction name="keyboard_bottom_padding_ics">0.0%p</fraction> - <dimen name="popup_key_height">13.0mm</dimen> + <dimen name="popup_key_height">81.9dp</dimen> <!-- left or right padding of label alignment --> <dimen name="key_label_horizontal_padding">18dp</dimen> @@ -51,7 +51,7 @@ <fraction name="key_uppercase_letter_ratio">29%</fraction> <fraction name="spacebar_text_ratio">33.33%</fraction> - <dimen name="suggestions_strip_padding">40.0mm</dimen> + <dimen name="suggestions_strip_padding">252.0dp</dimen> <integer name="max_more_suggestions_row">5</integer> <fraction name="min_more_suggestions_width">50%</fraction> </resources> diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml index ebe388263..f03ce2943 100644 --- a/java/res/values-sw600dp/dimens.xml +++ b/java/res/values-sw600dp/dimens.xml @@ -25,7 +25,7 @@ <fraction name="maxKeyboardHeight">50%p</fraction> <fraction name="minKeyboardHeight">-35.0%p</fraction> - <dimen name="popup_key_height">10.0mm</dimen> + <dimen name="popup_key_height">63.0dp</dimen> <fraction name="keyboard_top_padding">2.291%p</fraction> <fraction name="keyboard_bottom_padding">0.0%p</fraction> @@ -44,9 +44,9 @@ <dimen name="more_keys_keyboard_key_horizontal_padding">6dp</dimen> <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> <!-- popup_key_height x 1.2 --> - <dimen name="more_keys_keyboard_slide_allowance">15.6mm</dimen> + <dimen name="more_keys_keyboard_slide_allowance">98.3dp</dimen> <!-- popup_key_height x -1.0 --> - <dimen name="more_keys_keyboard_vertical_correction">-13.0mm</dimen> + <dimen name="more_keys_keyboard_vertical_correction">-81.9dp</dimen> <!-- left or right padding of label alignment --> <dimen name="key_label_horizontal_padding">6dp</dimen> @@ -61,19 +61,19 @@ <fraction name="key_uppercase_letter_ratio">26%</fraction> <fraction name="key_preview_text_ratio">50%</fraction> <fraction name="spacebar_text_ratio">32.14%</fraction> - <dimen name="key_preview_height">15.0mm</dimen> - <dimen name="key_preview_offset">0.1in</dimen> + <dimen name="key_preview_height">94.5dp</dimen> + <dimen name="key_preview_offset">16.0dp</dimen> - <dimen name="key_preview_offset_ics">0.05in</dimen> + <dimen name="key_preview_offset_ics">8.0dp</dimen> <!-- popup_key_height x -0.5 --> - <dimen name="more_keys_keyboard_vertical_correction_ics">-5mm</dimen> + <dimen name="more_keys_keyboard_vertical_correction_ics">-31.5dp</dimen> <dimen name="suggestions_strip_height">44dp</dimen> <dimen name="more_suggestions_row_height">44dp</dimen> <integer name="max_more_suggestions_row">6</integer> <fraction name="min_more_suggestions_width">90%</fraction> - <dimen name="suggestions_strip_padding">15.0mm</dimen> - <dimen name="suggestion_min_width">0.3in</dimen> + <dimen name="suggestions_strip_padding">94.5dp</dimen> + <dimen name="suggestion_min_width">48.0dp</dimen> <dimen name="suggestion_padding">12dp</dimen> <dimen name="suggestion_text_size">22dp</dimen> <dimen name="more_suggestions_hint_text_size">33dp</dimen> diff --git a/java/res/values-sw768dp-land/dimens.xml b/java/res/values-sw768dp-land/dimens.xml index 597ed5102..b95c858dc 100644 --- a/java/res/values-sw768dp-land/dimens.xml +++ b/java/res/values-sw768dp-land/dimens.xml @@ -41,7 +41,7 @@ <fraction name="key_bottom_gap_ics">3.690%p</fraction> <fraction name="key_horizontal_gap_ics">1.030%p</fraction> - <dimen name="popup_key_height">13.0mm</dimen> + <dimen name="popup_key_height">81.9dp</dimen> <!-- left or right padding of label alignment --> <dimen name="key_label_horizontal_padding">18dp</dimen> @@ -53,10 +53,10 @@ <fraction name="key_hint_label_ratio">28%</fraction> <fraction name="key_uppercase_letter_ratio">24%</fraction> <fraction name="spacebar_text_ratio">24.00%</fraction> - <dimen name="key_preview_height">17.0mm</dimen> + <dimen name="key_preview_height">107.1dp</dimen> - <dimen name="key_preview_offset_ics">0.05in</dimen> + <dimen name="key_preview_offset_ics">8.0dp</dimen> - <dimen name="suggestions_strip_padding">40.0mm</dimen> + <dimen name="suggestions_strip_padding">252.0dp</dimen> <fraction name="min_more_suggestions_width">50%</fraction> </resources> diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml index a9f0c00aa..0a362fd68 100644 --- a/java/res/values-sw768dp/dimens.xml +++ b/java/res/values-sw768dp/dimens.xml @@ -41,14 +41,14 @@ <fraction name="key_bottom_gap_ics">3.312%p</fraction> <fraction name="key_horizontal_gap_ics">1.066%p</fraction> - <dimen name="popup_key_height">10.0mm</dimen> + <dimen name="popup_key_height">63.0dp</dimen> <dimen name="more_keys_keyboard_key_horizontal_padding">12dp</dimen> <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> <!-- popup_key_height x 1.2 --> - <dimen name="more_keys_keyboard_slide_allowance">15.6mm</dimen> + <dimen name="more_keys_keyboard_slide_allowance">98.3dp</dimen> <!-- popup_key_height x -1.0 --> - <dimen name="more_keys_keyboard_vertical_correction">-13.0mm</dimen> + <dimen name="more_keys_keyboard_vertical_correction">-81.9dp</dimen> <!-- left or right padding of label alignment --> <dimen name="key_label_horizontal_padding">6dp</dimen> @@ -63,18 +63,18 @@ <fraction name="key_uppercase_letter_ratio">26%</fraction> <fraction name="key_preview_text_ratio">50%</fraction> <fraction name="spacebar_text_ratio">29.03%</fraction> - <dimen name="key_preview_height">15.0mm</dimen> - <dimen name="key_preview_offset">0.1in</dimen> + <dimen name="key_preview_height">94.5dp</dimen> + <dimen name="key_preview_offset">16.0dp</dimen> - <dimen name="key_preview_offset_ics">0.05in</dimen> + <dimen name="key_preview_offset_ics">8.0dp</dimen> <!-- popup_key_height x -0.5 --> - <dimen name="more_keys_keyboard_vertical_correction_ics">-5mm</dimen> + <dimen name="more_keys_keyboard_vertical_correction_ics">-31.5dp</dimen> <dimen name="suggestions_strip_height">44dp</dimen> <dimen name="more_suggestions_row_height">44dp</dimen> <integer name="max_more_suggestions_row">6</integer> <fraction name="min_more_suggestions_width">90%</fraction> - <dimen name="suggestions_strip_padding">15.0mm</dimen> + <dimen name="suggestions_strip_padding">94.5dp</dimen> <dimen name="suggestion_min_width">46dp</dimen> <dimen name="suggestion_padding">8dp</dimen> <dimen name="suggestion_text_size">22dp</dimen> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index e33f0ba8a..550f5acf7 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -224,6 +224,8 @@ <attr name="iconDisabledShortcutKey" format="reference" /> <attr name="iconPreviewTabKey" format="reference" /> <attr name="iconLanguageSwitchKey" format="reference" /> + <attr name="iconZwnjKey" format="reference" /> + <attr name="iconZwjKey" format="reference" /> </declare-styleable> <declare-styleable name="Keyboard_Key"> @@ -309,6 +311,8 @@ <enum name="iconSpaceKeyForNumberLayout" value="10" /> <enum name="iconShiftKeyShifted" value="11" /> <enum name="iconLanguageSwitchKey" value="14" /> + <enum name="iconZwnjKey" value="15" /> + <enum name="iconZwjKey" value="16" /> </attr> <!-- The icon for disabled key --> <attr name="keyIconDisabled" format="enum"> diff --git a/java/res/values/config.xml b/java/res/values/config.xml index 1aa0dffc9..f0b12e92b 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -54,9 +54,9 @@ <!-- Configuration for LatinKeyboardView --> - <dimen name="config_key_hysteresis_distance">0.05in</dimen> + <dimen name="config_key_hysteresis_distance">8.0dp</dimen> <integer name="config_touch_noise_threshold_time">40</integer> - <dimen name="config_touch_noise_threshold_distance">2.0mm</dimen> + <dimen name="config_touch_noise_threshold_distance">12.6dp</dimen> <bool name="config_sliding_key_input_enabled">true</bool> <integer name="config_key_repeat_start_timeout">400</integer> <integer name="config_key_repeat_interval">50</integer> diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index 9d64a618a..1889758b9 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -25,7 +25,7 @@ <fraction name="maxKeyboardHeight">50%p</fraction> <fraction name="minKeyboardHeight">-61.8%p</fraction> - <dimen name="popup_key_height">0.330in</dimen> + <dimen name="popup_key_height">52.8dp</dimen> <dimen name="more_keys_keyboard_horizontal_edges_padding">16dp</dimen> <dimen name="more_keys_keyboard_key_horizontal_padding">8dp</dimen> @@ -52,12 +52,10 @@ <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> <!-- popup_key_height x 1.2 --> - <dimen name="more_keys_keyboard_slide_allowance">0.396in</dimen> + <dimen name="more_keys_keyboard_slide_allowance">63.36dp</dimen> <!-- popup_key_height x -1.0 --> - <dimen name="more_keys_keyboard_vertical_correction">-0.330in</dimen> - <!-- We use "inch", not "dip" because this value tries dealing with physical distance related - to user's finger. --> - <dimen name="keyboard_vertical_correction">0.0in</dimen> + <dimen name="more_keys_keyboard_vertical_correction">-52.8dp</dimen> + <dimen name="keyboard_vertical_correction">0.0dp</dimen> <fraction name="key_letter_ratio">55%</fraction> <fraction name="key_large_letter_ratio">65%</fraction> @@ -68,23 +66,23 @@ <fraction name="key_preview_text_ratio">82%</fraction> <fraction name="spacebar_text_ratio">33.735%</fraction> <dimen name="key_preview_height">80dp</dimen> - <dimen name="key_preview_offset">0.1in</dimen> + <dimen name="key_preview_offset">16.0dp</dimen> <dimen name="key_label_horizontal_padding">4dp</dimen> <dimen name="key_hint_letter_padding">1dp</dimen> <dimen name="key_popup_hint_letter_padding">2dp</dimen> <dimen name="key_uppercase_letter_padding">2dp</dimen> - <dimen name="key_preview_offset_ics">0.05in</dimen> + <dimen name="key_preview_offset_ics">8.0dp</dimen> <!-- popup_key_height x -0.5 --> - <dimen name="more_keys_keyboard_vertical_correction_ics">-0.165in</dimen> + <dimen name="more_keys_keyboard_vertical_correction_ics">-26.4dp</dimen> <dimen name="suggestions_strip_height">40dp</dimen> <dimen name="more_suggestions_key_horizontal_padding">12dp</dimen> <dimen name="more_suggestions_row_height">40dp</dimen> <dimen name="more_suggestions_bottom_gap">6dp</dimen> - <dimen name="more_suggestions_modal_tolerance">0.2in</dimen> - <dimen name="more_suggestions_slide_allowance">0.1in</dimen> + <dimen name="more_suggestions_modal_tolerance">32.0dp</dimen> + <dimen name="more_suggestions_slide_allowance">16.0dp</dimen> <integer name="max_more_suggestions_row">6</integer> <fraction name="min_more_suggestions_width">90%</fraction> <fraction name="more_suggestions_info_ratio">18%</fraction> diff --git a/java/res/values/keyboard-icons-black.xml b/java/res/values/keyboard-icons-black.xml index 44fc2b9c1..1ff597a49 100644 --- a/java/res/values/keyboard-icons-black.xml +++ b/java/res/values/keyboard-icons-black.xml @@ -36,5 +36,8 @@ <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item> <!-- TODO: Needs dedicated black theme globe icon --> <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item> + <!-- TODO: Needs dedicated black theme ZWNJ and ZWJ icons --> + <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo</item> + <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo</item> </style> </resources> diff --git a/java/res/values/keyboard-icons-ics.xml b/java/res/values/keyboard-icons-ics.xml index 5fba0253d..0774d57ac 100644 --- a/java/res/values/keyboard-icons-ics.xml +++ b/java/res/values/keyboard-icons-ics.xml @@ -34,5 +34,7 @@ <item name="iconDisabledShortcutKey">@drawable/sym_keyboard_voice_off_holo</item> <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item> <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item> + <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo</item> + <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo</item> </style> </resources> diff --git a/java/res/values/keyboard-icons-white.xml b/java/res/values/keyboard-icons-white.xml index 837b1a37a..5798786f8 100644 --- a/java/res/values/keyboard-icons-white.xml +++ b/java/res/values/keyboard-icons-white.xml @@ -32,5 +32,8 @@ <item name="iconDisabledShortcutKey">@drawable/sym_keyboard_voice_off_holo</item> <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item> <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item> + <!-- TODO: Needs dedicated black theme ZWNJ and ZWJ icons --> + <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo</item> + <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo</item> </style> </resources> diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml index a263acd9b..77c0efd22 100644 --- a/java/res/xml-sw600dp/key_styles_common.xml +++ b/java/res/xml-sw600dp/key_styles_common.xml @@ -78,11 +78,15 @@ latin:styleName="spaceKeyStyle" latin:code="@integer/key_space" latin:keyActionFlags="noKeyPreview" /> + <!-- U+200C: ZERO WIDTH NON-JOINER + U+200D: ZERO WIDTH JOINER --> <key-style latin:styleName="zwnjKeyStyle" - latin:keyLabel="‌" - latin:moreKeys="‍" - latin:keyLabelFlags="hasPopupHint" /> + latin:code="0x200C" + latin:keyIcon="iconZwnjKey" + latin:moreKeys="\@icon/zwjKey|‍" + latin:keyLabelFlags="hasPopupHint" + latin:keyActionFlags="noKeyPreview" /> <key-style latin:styleName="smileyKeyStyle" latin:keyLabel=":-)" diff --git a/java/res/xml-sw600dp/rowkeys_thai3.xml b/java/res/xml-sw600dp/rowkeys_thai3.xml index 529d7bff0..abd67631c 100644 --- a/java/res/xml-sw600dp/rowkeys_thai3.xml +++ b/java/res/xml-sw600dp/rowkeys_thai3.xml @@ -82,13 +82,13 @@ latin:keyLabel="่" /> <!-- U+0E32: "า" THAI CHARACTER SARA AA --> <Key - latin:keyLabel="ๆ" /> + latin:keyLabel="า" /> <!-- U+0E2A: "ส" THAI CHARACTER SO SUA --> <Key - latin:keyLabel="ๆ" /> + latin:keyLabel="ส" /> <!-- U+0E27: "ว" THAI CHARACTER WO WAEN --> <Key - latin:keyLabel="ฯ" /> + latin:keyLabel="ว" /> <!-- U+0E07: "ง" THAI CHARACTER NGO NGU --> <Key latin:keyLabel="ง" /> diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml index fade151ed..f4a1a4ea5 100644 --- a/java/res/xml-sw768dp/key_styles_common.xml +++ b/java/res/xml-sw768dp/key_styles_common.xml @@ -77,11 +77,15 @@ latin:styleName="spaceKeyStyle" latin:code="@integer/key_space" latin:keyActionFlags="noKeyPreview" /> + <!-- U+200C: ZERO WIDTH NON-JOINER + U+200D: ZERO WIDTH JOINER --> <key-style latin:styleName="zwnjKeyStyle" - latin:keyLabel="‌" - latin:moreKeys="‍" - latin:keyLabelFlags="hasPopupHint" /> + latin:code="0x200C" + latin:keyIcon="iconZwnjKey" + latin:moreKeys="\@icon/zwjKey|‍" + latin:keyLabelFlags="hasPopupHint" + latin:keyActionFlags="noKeyPreview" /> <key-style latin:styleName="smileyKeyStyle" latin:keyLabel=":-)" diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml index 087b8952f..66d8d4d9d 100644 --- a/java/res/xml/key_styles_common.xml +++ b/java/res/xml/key_styles_common.xml @@ -107,11 +107,15 @@ latin:code="@integer/key_space" latin:keyActionFlags="noKeyPreview|enableLongPress" latin:backgroundType="functional" /> + <!-- U+200C: ZERO WIDTH NON-JOINER + U+200D: ZERO WIDTH JOINER --> <key-style latin:styleName="zwnjKeyStyle" - latin:keyLabel="‌" - latin:moreKeys="‍" + latin:code="0x200C" + latin:keyIcon="iconZwnjKey" + latin:moreKeys="\@icon/zwjKey|‍" latin:keyLabelFlags="hasPopupHint" + latin:keyActionFlags="noKeyPreview" latin:backgroundType="functional" /> <key-style latin:styleName="shortcutKeyStyle" @@ -129,8 +133,6 @@ latin:keyActionFlags="noKeyPreview|altCodeWhileTyping|enableLongPress" latin:altCode="@integer/key_space" latin:backgroundType="functional" /> - <!-- U+200C: "" ZERO WIDTH NON-JOINER - U+200D: "" ZERO WIDTH JOINER --> <key-style latin:styleName="tabKeyStyle" latin:code="@integer/key_tab" diff --git a/java/res/xml/key_styles_currency.xml b/java/res/xml/key_styles_currency.xml index 3e4afdfb5..6ddeb4c60 100644 --- a/java/res/xml/key_styles_currency.xml +++ b/java/res/xml/key_styles_currency.xml @@ -79,45 +79,53 @@ <case latin:languageCode="iw" > + <!-- U+20AA: "₪" NEW SHEQEL SIGN + U+00A3: "£" POUND SIGN + U+20AC: "€" EURO SIGN + U+00A2: "¢" CENT SIGN --> <key-style latin:styleName="currencyKeyStyle" - latin:keyLabel="₪" + latin:keyLabel="₪" latin:moreKeys="@string/more_keys_for_currency_general" /> <key-style latin:styleName="moreCurrency1KeyStyle" - latin:keyLabel="£" /> + latin:keyLabel="£" /> <key-style latin:styleName="moreCurrency2KeyStyle" - latin:keyLabel="€" /> + latin:keyLabel="€" /> <key-style latin:styleName="moreCurrency3KeyStyle" latin:keyLabel="$" - latin:moreKeys="¢" /> + latin:moreKeys="¢" /> <key-style latin:styleName="moreCurrency4KeyStyle" - latin:keyLabel="¢" /> + latin:keyLabel="¢" /> </case> <!-- United Kingdom --> <case latin:countryCode="GB" > + <!-- U+00A3: "£" POUND SIGN + U+20AC: "€" EURO SIGN + U+00A5: "¥" YEN SIGN + U+00A2: "¢" CENT SIGN --> <key-style latin:styleName="currencyKeyStyle" - latin:keyLabel="£" + latin:keyLabel="£" latin:moreKeys="@string/more_keys_for_currency_pound" /> <key-style latin:styleName="moreCurrency1KeyStyle" - latin:keyLabel="€" /> + latin:keyLabel="€" /> <key-style latin:styleName="moreCurrency2KeyStyle" - latin:keyLabel="¥" /> + latin:keyLabel="¥" /> <key-style latin:styleName="moreCurrency3KeyStyle" latin:keyLabel="$" - latin:moreKeys="¢" /> + latin:moreKeys="¢" /> <key-style latin:styleName="moreCurrency4KeyStyle" - latin:keyLabel="¢" /> + latin:keyLabel="¢" /> </case> <default> <include diff --git a/java/res/xml/key_styles_currency_dollar.xml b/java/res/xml/key_styles_currency_dollar.xml index d5dca2afa..8dd849879 100644 --- a/java/res/xml/key_styles_currency_dollar.xml +++ b/java/res/xml/key_styles_currency_dollar.xml @@ -19,20 +19,24 @@ --> <merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> + <!-- U+00A3: "£" POUND SIGN + U+00A2: "¢" CENT SIGN + U+20AC: "€" EURO SIGN + U+00A5: "¥" YEN SIGN --> <key-style latin:styleName="currencyKeyStyle" latin:keyLabel="$" latin:moreKeys="@string/more_keys_for_currency_dollar" /> <key-style latin:styleName="moreCurrency1KeyStyle" - latin:keyLabel="£" /> + latin:keyLabel="£" /> <key-style latin:styleName="moreCurrency2KeyStyle" - latin:keyLabel="¢" /> + latin:keyLabel="¢" /> <key-style latin:styleName="moreCurrency3KeyStyle" - latin:keyLabel="€" /> + latin:keyLabel="€" /> <key-style latin:styleName="moreCurrency4KeyStyle" - latin:keyLabel="¥" /> + latin:keyLabel="¥" /> </merge> diff --git a/java/res/xml/key_styles_currency_euro.xml b/java/res/xml/key_styles_currency_euro.xml index 6edddf074..0573e0991 100644 --- a/java/res/xml/key_styles_currency_euro.xml +++ b/java/res/xml/key_styles_currency_euro.xml @@ -19,21 +19,25 @@ --> <merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> + <!-- U+20AC: "€" EURO SIGN + U+00A3: "£" POUND SIGN + U+00A5: "¥" YEN SIGN + U+00A2: "¢" CENT SIGN --> <key-style latin:styleName="currencyKeyStyle" - latin:keyLabel="€" + latin:keyLabel="€" latin:moreKeys="@string/more_keys_for_currency_euro" /> <key-style latin:styleName="moreCurrency1KeyStyle" - latin:keyLabel="£" /> + latin:keyLabel="£" /> <key-style latin:styleName="moreCurrency2KeyStyle" - latin:keyLabel="¥" /> + latin:keyLabel="¥" /> <key-style latin:styleName="moreCurrency3KeyStyle" latin:keyLabel="$" - latin:moreKeys="¢" /> + latin:moreKeys="¢" /> <key-style latin:styleName="moreCurrency4KeyStyle" - latin:keyLabel="¢" /> + latin:keyLabel="¢" /> </merge> diff --git a/java/res/xml/rowkeys_thai2.xml b/java/res/xml/rowkeys_thai2.xml index a5db66519..02ea6c5f8 100644 --- a/java/res/xml/rowkeys_thai2.xml +++ b/java/res/xml/rowkeys_thai2.xml @@ -46,9 +46,11 @@ <!-- U+0E0B: "ซ" THAI CHARACTER SO SO --> <Key latin:keyLabel="ซ" /> - <!-- U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT --> + <!-- U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT + U+0E45: "ๅ" THAI CHARACTER LAKKHANGYAO --> <Key - latin:keyLabel="฿" /> + latin:keyLabel="฿" + latin:moreKeys="ๅ" /> <!-- U+0E46: "ๆ" THAI CHARACTER MAIYAMOK U+0E2F: "ฯ" THAI CHARACTER PAIYANNOI --> <Key diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index 07b9c1e8c..962379016 100644 --- a/java/src/com/android/inputmethod/keyboard/Keyboard.java +++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java @@ -394,7 +394,7 @@ public class Keyboard { * >Row row_attributes*< * >!-- Row Content --< * >Key key_attributes* /< - * >Spacer horizontalGap="0.2in" /< + * >Spacer horizontalGap="32.0dp" /< * >include keyboardLayout="@xml/other_keys"< * ... * >/Row< diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java index 9b9c86179..ded89b1b8 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java @@ -30,7 +30,7 @@ public class KeyboardIconsSet { // The value should be aligned with the enum value of Key.keyIcon. public static final int ICON_UNDEFINED = 0; - private static final int NUM_ICONS = 14; + private static final int NUM_ICONS = 16; private final Drawable[] mIcons = new Drawable[NUM_ICONS + 1]; @@ -58,6 +58,8 @@ public class KeyboardIconsSet { addIconIdMap(12, "disabledShortcurKey", R.styleable.Keyboard_iconDisabledShortcutKey); addIconIdMap(13, "previewTabKey", R.styleable.Keyboard_iconPreviewTabKey); addIconIdMap(14, "languageSwitchKey", R.styleable.Keyboard_iconLanguageSwitchKey); + addIconIdMap(15, "zwnjKey", R.styleable.Keyboard_iconZwnjKey); + addIconIdMap(16, "zwjKey", R.styleable.Keyboard_iconZwjKey); } private static void addIconIdMap(int iconId, String name, int attrId) { diff --git a/java/src/com/android/inputmethod/latin/ResearchLogger.java b/java/src/com/android/inputmethod/latin/ResearchLogger.java index 6ba9118d6..3b110bd78 100644 --- a/java/src/com/android/inputmethod/latin/ResearchLogger.java +++ b/java/src/com/android/inputmethod/latin/ResearchLogger.java @@ -49,7 +49,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang private static final ResearchLogger sInstance = new ResearchLogger(new LogFileManager()); public static boolean sIsLogging = false; - private final Handler mLoggingHandler; + /* package */ final Handler mLoggingHandler; private InputMethodService mIms; private final Date mDate; private final SimpleDateFormat mDateFormat; @@ -183,11 +183,13 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang } /** - * Change to a different logFileManager. Will not allow it to be set to null. + * Change to a different logFileManager. + * + * @throws IllegalArgumentException if logFileManager is null */ - /* package */ void setLogFileManager(ResearchLogger.LogFileManager manager) { + void setLogFileManager(LogFileManager manager) { if (manager == null) { - Log.w(TAG, "warning: trying to set null logFileManager. ignoring."); + throw new IllegalArgumentException("warning: trying to set null logFileManager"); } else { mLogFileManager = manager; } @@ -241,8 +243,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang sb.append('\t'); sb.append(x); sb.append('\t'); sb.append(y); write(LogGroup.KEY, sb.toString()); - - LatinImeLogger.onPrintAllUsabilityStudyLogs(); } public void logCorrection(String subgroup, String before, String after, int position) { diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java index cd34ba832..5a173857e 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java @@ -353,6 +353,11 @@ public class AndroidSpellCheckerService extends SpellCheckerService @Override public boolean onUnbind(final Intent intent) { + closeAllDictionaries(); + return false; + } + + private void closeAllDictionaries() { final Map<String, DictionaryPool> oldPools = mDictionaryPools; mDictionaryPools = Collections.synchronizedMap(new TreeMap<String, DictionaryPool>()); final Map<String, Dictionary> oldUserDictionaries = mUserDictionaries; @@ -378,7 +383,6 @@ public class AndroidSpellCheckerService extends SpellCheckerService dictToClose.close(); } } - return false; } private DictionaryPool getDictionaryPool(final String locale) { diff --git a/native/src/bigram_dictionary.cpp b/native/src/bigram_dictionary.cpp index fa69de854..3704c47e6 100644 --- a/native/src/bigram_dictionary.cpp +++ b/native/src/bigram_dictionary.cpp @@ -151,8 +151,9 @@ bool BigramDictionary::checkFirstCharacter(unsigned short *word) { int *inputCodes = mInputCodes; int maxAlt = MAX_ALTERNATIVES; + const unsigned short firstBaseChar = toBaseLowerCase(*word); while (maxAlt > 0) { - if ((unsigned int) *inputCodes == (unsigned int) *word) { + if (toBaseLowerCase(*inputCodes) == firstBaseChar) { return true; } inputCodes++; diff --git a/tests/src/com/android/inputmethod/latin/ResearchLoggerTests.java b/tests/src/com/android/inputmethod/latin/ResearchLoggerTests.java new file mode 100644 index 000000000..6ccc4f22b --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/ResearchLoggerTests.java @@ -0,0 +1,156 @@ +/* + * 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.latin; + +import android.inputmethodservice.InputMethodService; +import android.os.Handler; +import android.util.Log; +import android.view.MotionEvent; + +import com.android.inputmethod.latin.ResearchLogger.LogFileManager; + +import java.io.FileNotFoundException; + +public class ResearchLoggerTests extends InputTestsBase { + + private static final String TAG = ResearchLoggerTests.class.getSimpleName(); + private static final int TEST_INT = 0x12345678; + private static final long TEST_LONG = 0x1234567812345678L; + + private static ResearchLogger sLogger; + private MockLogFileManager mMockLogFileManager; + + @Override + protected void setUp() { + super.setUp(); + sLogger = ResearchLogger.getInstance(); + mMockLogFileManager = new MockLogFileManager(); + sLogger.setLogFileManager(mMockLogFileManager); + ResearchLogger.sIsLogging = true; + } + + public static class MockLogFileManager extends LogFileManager { + private final StringBuilder mContents = new StringBuilder(); + + @Override + public void init(InputMethodService ims) { + } + + @Override + public synchronized void createLogFile() { + mContents.setLength(0); + } + + @Override + public synchronized void createLogFile(String dir, String filename) + throws FileNotFoundException { + mContents.setLength(0); + } + + @Override + public synchronized boolean append(String s) { + mContents.append(s); + return true; + } + + @Override + public synchronized void reset() { + mContents.setLength(0); + } + + @Override + public synchronized void close() { + mContents.setLength(0); + } + + private String getAppendedString() { + return mContents.toString(); + } + } + + private void waitOnResearchLogger() { + // post another Runnable that notify()'s the test that it may proceed. + // assumes that the MessageQueue is processed in-order + Handler handler = sLogger.mLoggingHandler; + handler.post(new Runnable() { + @Override + public void run() { + synchronized (ResearchLoggerTests.this) { + ResearchLoggerTests.this.notify(); + } + } + }); + synchronized (this) { + try { + wait(); + } catch (InterruptedException e) { + Log.i(TAG, "interrupted when waiting for handler to finish.", e); + } + } + } + + /*********************** Tests *********************/ + public void testLogStartsEmpty() { + waitOnResearchLogger(); + String result = mMockLogFileManager.getAppendedString(); + assertEquals(result, ""); + } + + public void testMotionEvent() { + // verify that input values appear somewhere in output + sLogger.logMotionEvent(MotionEvent.ACTION_CANCEL, + TEST_LONG, TEST_INT, 1111, 3333, 5555, 7777); + waitOnResearchLogger(); + String output = mMockLogFileManager.getAppendedString(); + assertTrue(output.matches("(?sui).*\\bcancel\\b.*")); + assertFalse(output.matches("(?sui).*\\bdown\\b.*")); + assertTrue(output.matches("(?s).*\\b" + TEST_LONG + "\\b.*")); + assertTrue(output.matches("(?s).*\\b" + TEST_INT + "\\b.*")); + assertTrue(output.matches("(?s).*\\b1111\\b.*")); + assertTrue(output.matches("(?s).*\\b3333\\b.*")); + assertTrue(output.matches("(?s).*\\b5555\\b.*")); + assertTrue(output.matches("(?s).*\\b7777\\b.*")); + } + + public void testKeyEvent() { + type("abc"); + waitOnResearchLogger(); + String output = mMockLogFileManager.getAppendedString(); + assertTrue(output.matches("(?s).*\\ba\\b.*")); + assertTrue(output.matches("(?s).*\\bb\\b.*")); + assertTrue(output.matches("(?s).*\\bc\\b.*")); + } + + public void testCorrection() { + sLogger.logCorrection("aaaa", "thos", "this", 1); + waitOnResearchLogger(); + String output = mMockLogFileManager.getAppendedString(); + assertTrue(output.matches("(?sui).*\\baaaa\\b.*")); + assertTrue(output.matches("(?sui).*\\bthos\\b.*")); + assertTrue(output.matches("(?sui).*\\bthis\\b.*")); + } + + public void testStateChange() { + sLogger.logStateChange("aaaa", "bbbb"); + waitOnResearchLogger(); + String output = mMockLogFileManager.getAppendedString(); + assertTrue(output.matches("(?sui).*\\baaaa\\b.*")); + assertTrue(output.matches("(?sui).*\\bbbbb\\b.*")); + } + + // TODO: add integration tests that start at point of event generation. +} |