Merge "Use a formula packing more information into 4 bits field" into jb-dev
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 4bf5414..7cad3f5 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -308,14 +308,10 @@
<attr name="visualInsetsRight" format="dimension|fraction" />
<!-- Width of the key, in pixels or percentage of display width.
If the value is fillRight, the actual key width will be determined to fill out the area
- up to the right edge of the keyboard.
- If the value is fillBoth, the actual key width will be determined to fill out the
- area between the nearest key on the left hand side and the right edge of the keyboard.
- -->
+ up to the right edge of the keyboard. -->
<!-- This should be aligned with KeyboardBuilder.Row.KEYWIDTH_* -->
<attr name="keyWidth" format="dimension|fraction|enum">
<enum name="fillRight" value="-1" />
- <enum name="fillBoth" value="-2" />
</attr>
<!-- The X-coordinate of upper right corner of this key including horizontal gap.
If the value is negative, the origin is the right edge of the keyboard. -->
diff --git a/java/res/xml-sw768dp/key_space.xml b/java/res/xml-sw768dp/key_space.xml
index 36326c4..8968f08 100644
--- a/java/res/xml-sw768dp/key_space.xml
+++ b/java/res/xml-sw768dp/key_space.xml
@@ -27,7 +27,7 @@
>
<Key
latin:keyStyle="spaceKeyStyle"
- latin:keyWidth="29.453%p" />
+ latin:keyWidth="32.188%p" />
<!-- U+200C: "" ZERO WIDTH NON-JOINER
U+200D: "" ZERO WIDTH JOINER -->
<Key
@@ -36,7 +36,7 @@
<default>
<Key
latin:keyStyle="spaceKeyStyle"
- latin:keyWidth="37.500%p" />
+ latin:keyWidth="40.235%p" />
</default>
</switch>
</merge>
diff --git a/java/res/xml-sw768dp/row_dvorak4.xml b/java/res/xml-sw768dp/row_dvorak4.xml
index 251b4f5..ebe517d 100644
--- a/java/res/xml-sw768dp/row_dvorak4.xml
+++ b/java/res/xml-sw768dp/row_dvorak4.xml
@@ -27,10 +27,10 @@
<include
latin:keyboardLayout="@xml/key_settings" />
<include
- latin:keyXPos="15.157%p"
+ latin:keyXPos="13.829%p"
latin:keyboardLayout="@xml/keys_f1f2" />
<include
- latin:keyXPos="31.250%p"
+ latin:keyXPos="29.923%p"
latin:keyboardLayout="@xml/key_space" />
<include
latin:keyboardLayout="@xml/key_question_exclamation" />
diff --git a/java/res/xml-sw768dp/row_hebrew4.xml b/java/res/xml-sw768dp/row_hebrew4.xml
index 8ec7ea7..477fd0d 100644
--- a/java/res/xml-sw768dp/row_hebrew4.xml
+++ b/java/res/xml-sw768dp/row_hebrew4.xml
@@ -27,9 +27,10 @@
<include
latin:keyboardLayout="@xml/key_settings" />
<include
- latin:keyXPos="15.157%p"
+ latin:keyXPos="13.829%p"
latin:keyboardLayout="@xml/keys_f1f2" />
<include
+ latin:keyXPos="29.923%p"
latin:keyboardLayout="@xml/key_space" />
<include
latin:keyboardLayout="@xml/keys_comma_period" />
diff --git a/java/res/xml-sw768dp/row_qwerty4.xml b/java/res/xml-sw768dp/row_qwerty4.xml
index 0cf964f..32a6476 100644
--- a/java/res/xml-sw768dp/row_qwerty4.xml
+++ b/java/res/xml-sw768dp/row_qwerty4.xml
@@ -27,10 +27,10 @@
<include
latin:keyboardLayout="@xml/key_settings" />
<include
- latin:keyXPos="15.157%p"
+ latin:keyXPos="13.829%p"
latin:keyboardLayout="@xml/keys_f1f2" />
<include
- latin:keyXPos="31.250%p"
+ latin:keyXPos="29.923%p"
latin:keyboardLayout="@xml/key_space" />
<include
latin:keyboardLayout="@xml/key_apostrophe" />
diff --git a/java/res/xml-sw768dp/row_symbols4.xml b/java/res/xml-sw768dp/row_symbols4.xml
index 167fc5e..bd85b40 100644
--- a/java/res/xml-sw768dp/row_symbols4.xml
+++ b/java/res/xml-sw768dp/row_symbols4.xml
@@ -28,11 +28,11 @@
latin:keyboardLayout="@xml/key_settings" />
<Key
latin:keyLabel="/"
- latin:keyXPos="15.157%p" />
+ latin:keyXPos="13.829%p" />
<Key
latin:keyLabel="\@" />
<include
- latin:keyXPos="31.250%p"
+ latin:keyXPos="29.923%p"
latin:keyboardLayout="@xml/key_space" />
<Key
latin:keyLabel="""
diff --git a/java/res/xml-sw768dp/row_symbols_shift4.xml b/java/res/xml-sw768dp/row_symbols_shift4.xml
index 683ec43..82c1d17 100644
--- a/java/res/xml-sw768dp/row_symbols_shift4.xml
+++ b/java/res/xml-sw768dp/row_symbols_shift4.xml
@@ -27,7 +27,7 @@
<include
latin:keyboardLayout="@xml/key_settings" />
<include
- latin:keyXPos="31.250%p"
+ latin:keyXPos="29.923%p"
latin:keyboardLayout="@xml/key_space" />
<include
latin:keyXPos="-8.047%p"
diff --git a/java/res/xml-sw768dp/rows_10_10_7_symbols.xml b/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
index 44f0964..d9b0d23 100644
--- a/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
+++ b/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
@@ -49,7 +49,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -62,7 +62,7 @@
<Key
latin:keyStyle="toMoreSymbolKeyStyle"
latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_symbols4" />
diff --git a/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml b/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
index bea0d9c..a317dbf 100644
--- a/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
@@ -36,7 +36,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -49,7 +49,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -62,7 +62,7 @@
<Key
latin:keyStyle="backFromMoreSymbolKeyStyle"
latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_symbols_shift4" />
diff --git a/java/res/xml-sw768dp/rows_arabic.xml b/java/res/xml-sw768dp/rows_arabic.xml
index eaa64e5..8b05d93 100644
--- a/java/res/xml-sw768dp/rows_arabic.xml
+++ b/java/res/xml-sw768dp/rows_arabic.xml
@@ -34,10 +34,10 @@
latin:keyboardLayout="@xml/rowkeys_arabic1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.375%p"
+ latin:keyWidth="7.227%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
@@ -47,10 +47,10 @@
latin:keyboardLayout="@xml/rowkeys_arabic2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.375%p"
+ latin:keyWidth="7.227%p"
>
<include
latin:keyboardLayout="@xml/rowkeys_arabic3"
diff --git a/java/res/xml-sw768dp/rows_azerty.xml b/java/res/xml-sw768dp/rows_azerty.xml
index 1fc1a06..dcc403b 100644
--- a/java/res/xml-sw768dp/rows_azerty.xml
+++ b/java/res/xml-sw768dp/rows_azerty.xml
@@ -35,7 +35,7 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -48,7 +48,7 @@
latin:keyboardLayout="@xml/rowkeys_azerty2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -62,7 +62,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_bulgarian.xml b/java/res/xml-sw768dp/rows_bulgarian.xml
index cb05fd5..6453414 100644
--- a/java/res/xml-sw768dp/rows_bulgarian.xml
+++ b/java/res/xml-sw768dp/rows_bulgarian.xml
@@ -24,7 +24,7 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.186%p"
+ latin:keyWidth="7.375%p"
>
<Key
latin:keyStyle="tabKeyStyle"
@@ -35,10 +35,10 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.186%p"
+ latin:keyWidth="7.227%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
@@ -48,10 +48,10 @@
latin:keyboardLayout="@xml/rowkeys_bulgarian2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.125%p"
+ latin:keyWidth="7.186%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
@@ -62,7 +62,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_bulgarian_bds.xml b/java/res/xml-sw768dp/rows_bulgarian_bds.xml
index 31343d2..8acb4d2 100644
--- a/java/res/xml-sw768dp/rows_bulgarian_bds.xml
+++ b/java/res/xml-sw768dp/rows_bulgarian_bds.xml
@@ -24,7 +24,7 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.000%p"
+ latin:keyWidth="7.375%p"
>
<Key
latin:keyStyle="tabKeyStyle"
@@ -35,10 +35,10 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.000%p"
+ latin:keyWidth="7.227%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
@@ -48,7 +48,7 @@
latin:keyboardLayout="@xml/rowkeys_bulgarian_bds2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.000%p"
@@ -62,7 +62,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_colemak.xml b/java/res/xml-sw768dp/rows_colemak.xml
index 01ebead..db9b0c2 100644
--- a/java/res/xml-sw768dp/rows_colemak.xml
+++ b/java/res/xml-sw768dp/rows_colemak.xml
@@ -37,7 +37,7 @@
latin:keyboardLayout="@xml/key_colemak_colon" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -50,7 +50,7 @@
latin:keyboardLayout="@xml/rowkeys_colemak2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -64,7 +64,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_dvorak.xml b/java/res/xml-sw768dp/rows_dvorak.xml
index 91d0f1b..9416478 100644
--- a/java/res/xml-sw768dp/rows_dvorak.xml
+++ b/java/res/xml-sw768dp/rows_dvorak.xml
@@ -37,7 +37,7 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -50,7 +50,7 @@
latin:keyboardLayout="@xml/rowkeys_dvorak2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -62,7 +62,7 @@
latin:keyboardLayout="@xml/rowkeys_dvorak3" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_dvorak4" />
diff --git a/java/res/xml-sw768dp/rows_east_slavic.xml b/java/res/xml-sw768dp/rows_east_slavic.xml
index 480881b..0316c76 100644
--- a/java/res/xml-sw768dp/rows_east_slavic.xml
+++ b/java/res/xml-sw768dp/rows_east_slavic.xml
@@ -38,7 +38,7 @@
latin:keyLabel="ъ" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.000%p"
@@ -51,7 +51,7 @@
latin:keyboardLayout="@xml/rowkeys_east_slavic2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.000%p"
@@ -65,7 +65,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_farsi.xml b/java/res/xml-sw768dp/rows_farsi.xml
index 8a70df9..28031bb 100644
--- a/java/res/xml-sw768dp/rows_farsi.xml
+++ b/java/res/xml-sw768dp/rows_farsi.xml
@@ -24,7 +24,7 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.125%p"
+ latin:keyWidth="7.375%p"
>
<Key
latin:keyStyle="tabKeyStyle"
@@ -34,7 +34,7 @@
latin:keyboardLayout="@xml/rowkeys_farsi1" />
</Row>
<Row
- latin:keyWidth="7.125%p"
+ latin:keyWidth="7.227%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
@@ -44,10 +44,10 @@
latin:keyboardLayout="@xml/rowkeys_farsi2" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.375%p"
+ latin:keyWidth="7.186%p"
>
<include
latin:keyboardLayout="@xml/rowkeys_farsi3"
@@ -56,7 +56,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_georgian.xml b/java/res/xml-sw768dp/rows_georgian.xml
index 3805b5d..74f1a07 100644
--- a/java/res/xml-sw768dp/rows_georgian.xml
+++ b/java/res/xml-sw768dp/rows_georgian.xml
@@ -35,7 +35,7 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"/>
+ latin:keyWidth="fillRight"/>
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -48,7 +48,7 @@
latin:keyboardLayout="@xml/rowkeys_georgian2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -62,8 +62,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_greek.xml b/java/res/xml-sw768dp/rows_greek.xml
index cf2fa40..aebe129 100644
--- a/java/res/xml-sw768dp/rows_greek.xml
+++ b/java/res/xml-sw768dp/rows_greek.xml
@@ -37,7 +37,7 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"/>
+ latin:keyWidth="fillRight"/>
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -50,7 +50,7 @@
latin:keyboardLayout="@xml/rowkeys_greek2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -64,7 +64,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_hebrew.xml b/java/res/xml-sw768dp/rows_hebrew.xml
index beb59b4..e588b83 100644
--- a/java/res/xml-sw768dp/rows_hebrew.xml
+++ b/java/res/xml-sw768dp/rows_hebrew.xml
@@ -38,7 +38,7 @@
latin:keyboardLayout="@xml/rowkeys_hebrew1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -51,7 +51,7 @@
latin:keyboardLayout="@xml/rowkeys_hebrew2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
diff --git a/java/res/xml-sw768dp/rows_hindi.xml b/java/res/xml-sw768dp/rows_hindi.xml
index 86e925f..510772b 100644
--- a/java/res/xml-sw768dp/rows_hindi.xml
+++ b/java/res/xml-sw768dp/rows_hindi.xml
@@ -24,7 +24,7 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.333%p"
+ latin:keyWidth="7.375%p"
>
<Key
latin:keyStyle="tabKeyStyle"
@@ -35,10 +35,10 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.186%p"
+ latin:keyWidth="7.227%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
@@ -48,10 +48,10 @@
latin:keyboardLayout="@xml/rowkeys_hindi2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.040%p"
+ latin:keyWidth="7.000%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
@@ -62,7 +62,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_nordic.xml b/java/res/xml-sw768dp/rows_nordic.xml
index 9a45251..06591a6 100644
--- a/java/res/xml-sw768dp/rows_nordic.xml
+++ b/java/res/xml-sw768dp/rows_nordic.xml
@@ -35,7 +35,7 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.227%p"
@@ -48,7 +48,7 @@
latin:keyboardLayout="@xml/rowkeys_nordic2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.227%p"
diff --git a/java/res/xml-sw768dp/rows_pcqwerty.xml b/java/res/xml-sw768dp/rows_pcqwerty.xml
index c14fb12..a844728 100644
--- a/java/res/xml-sw768dp/rows_pcqwerty.xml
+++ b/java/res/xml-sw768dp/rows_pcqwerty.xml
@@ -30,7 +30,7 @@
latin:keyboardLayout="@xml/rowkeys_pcqwerty1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.0%p"
@@ -52,7 +52,7 @@
latin:keyboardLayout="@xml/rowkeys_pcqwerty3" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.0%p"
@@ -64,7 +64,7 @@
latin:keyboardLayout="@xml/rowkeys_pcqwerty4" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_pcqwerty5" />
diff --git a/java/res/xml-sw768dp/rows_pcqwerty_symbols.xml b/java/res/xml-sw768dp/rows_pcqwerty_symbols.xml
index faa9d8a..956da97 100644
--- a/java/res/xml-sw768dp/rows_pcqwerty_symbols.xml
+++ b/java/res/xml-sw768dp/rows_pcqwerty_symbols.xml
@@ -32,7 +32,7 @@
latin:keyboardLayout="@xml/rowkeys_pcqwerty1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.0%p"
@@ -53,7 +53,7 @@
latin:keyboardLayout="@xml/rowkeys_pcqwerty3" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.0%p"
diff --git a/java/res/xml-sw768dp/rows_qwerty.xml b/java/res/xml-sw768dp/rows_qwerty.xml
index edfb401..a1deabd 100644
--- a/java/res/xml-sw768dp/rows_qwerty.xml
+++ b/java/res/xml-sw768dp/rows_qwerty.xml
@@ -35,7 +35,7 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"/>
+ latin:keyWidth="fillRight"/>
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -48,7 +48,7 @@
latin:keyboardLayout="@xml/rowkeys_qwerty2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -62,8 +62,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_qwertz.xml b/java/res/xml-sw768dp/rows_qwertz.xml
index 7e75506..801dd38 100644
--- a/java/res/xml-sw768dp/rows_qwertz.xml
+++ b/java/res/xml-sw768dp/rows_qwertz.xml
@@ -35,7 +35,7 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"/>
+ latin:keyWidth="fillRight"/>
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -48,7 +48,7 @@
latin:keyboardLayout="@xml/rowkeys_qwerty2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -62,8 +62,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_south_slavic.xml b/java/res/xml-sw768dp/rows_south_slavic.xml
index 7ea0ff4..b556853 100644
--- a/java/res/xml-sw768dp/rows_south_slavic.xml
+++ b/java/res/xml-sw768dp/rows_south_slavic.xml
@@ -24,7 +24,7 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.000%p"
+ latin:keyWidth="7.375%p"
>
<Key
latin:keyStyle="tabKeyStyle"
@@ -35,10 +35,10 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
- latin:keyWidth="7.000%p"
+ latin:keyWidth="7.227%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
@@ -48,7 +48,7 @@
latin:keyboardLayout="@xml/rowkeys_south_slavic2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.000%p"
@@ -62,7 +62,7 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_spanish.xml b/java/res/xml-sw768dp/rows_spanish.xml
index fc3388d..8b80332 100644
--- a/java/res/xml-sw768dp/rows_spanish.xml
+++ b/java/res/xml-sw768dp/rows_spanish.xml
@@ -35,7 +35,7 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"/>
+ latin:keyWidth="fillRight"/>
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -48,7 +48,7 @@
latin:keyboardLayout="@xml/rowkeys_spanish2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -63,7 +63,7 @@
<Key
latin:keyStyle="shiftKeyStyle"
latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_symbols.xml b/java/res/xml-sw768dp/rows_symbols.xml
index fcc624f..efd7735 100644
--- a/java/res/xml-sw768dp/rows_symbols.xml
+++ b/java/res/xml-sw768dp/rows_symbols.xml
@@ -49,7 +49,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -61,8 +61,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols3" />
<Key
latin:keyStyle="toMoreSymbolKeyStyle"
- latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_symbols4" />
diff --git a/java/res/xml-sw768dp/rows_symbols_shift.xml b/java/res/xml-sw768dp/rows_symbols_shift.xml
index 1d13bb1..fd1b93d 100644
--- a/java/res/xml-sw768dp/rows_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_symbols_shift.xml
@@ -36,7 +36,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.125%p"
@@ -49,7 +49,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -61,8 +61,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift3" />
<Key
latin:keyStyle="backFromMoreSymbolKeyStyle"
- latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_symbols_shift4" />
diff --git a/java/res/xml-sw768dp/rows_thai.xml b/java/res/xml-sw768dp/rows_thai.xml
index c7720c9..7721bc5 100644
--- a/java/res/xml-sw768dp/rows_thai.xml
+++ b/java/res/xml-sw768dp/rows_thai.xml
@@ -31,7 +31,7 @@
latin:keyXPos="11.508%p" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"/>
+ latin:keyWidth="fillRight"/>
</Row>
<Row
latin:keyWidth="7.079%p"
@@ -54,7 +54,7 @@
latin:keyboardLayout="@xml/rowkeys_thai3" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="7.181%p"
diff --git a/java/res/xml-sw768dp/rows_thai_symbols.xml b/java/res/xml-sw768dp/rows_thai_symbols.xml
index b3f60f5..5285141 100644
--- a/java/res/xml-sw768dp/rows_thai_symbols.xml
+++ b/java/res/xml-sw768dp/rows_thai_symbols.xml
@@ -56,7 +56,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -69,7 +69,7 @@
<Key
latin:keyStyle="toMoreSymbolKeyStyle"
latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_symbols4" />
diff --git a/java/res/xml-sw768dp/rows_thai_symbols_shift.xml b/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
index 573e0e3..9d2694b 100644
--- a/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
@@ -33,7 +33,7 @@
latin:keyXPos="7.969%p" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.282%p"
@@ -56,7 +56,7 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<Row
latin:keyWidth="8.047%p"
@@ -69,7 +69,7 @@
<Key
latin:keyStyle="backFromMoreSymbolKeyStyle"
latin:keyXPos="-13.750%p"
- latin:keyWidth="fillBoth" />
+ latin:keyWidth="fillRight" />
</Row>
<include
latin:keyboardLayout="@xml/row_symbols_shift4" />
diff --git a/java/res/xml/rows_georgian.xml b/java/res/xml/rows_georgian.xml
index 9bddfc7..8c81dd0 100644
--- a/java/res/xml/rows_georgian.xml
+++ b/java/res/xml/rows_georgian.xml
@@ -47,7 +47,7 @@
latin:keyboardLayout="@xml/rowkeys_georgian3" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"
+ latin:keyWidth="fillRight"
latin:visualInsetsLeft="1%p" />
</Row>
<include
diff --git a/java/res/xml/rows_qwerty.xml b/java/res/xml/rows_qwerty.xml
index 716d106..cdd4203 100644
--- a/java/res/xml/rows_qwerty.xml
+++ b/java/res/xml/rows_qwerty.xml
@@ -47,7 +47,7 @@
latin:keyboardLayout="@xml/rowkeys_qwerty3" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"
+ latin:keyWidth="fillRight"
latin:visualInsetsLeft="1%p" />
</Row>
<include
diff --git a/java/res/xml/rows_spanish.xml b/java/res/xml/rows_spanish.xml
index b311297..ecda4a4 100644
--- a/java/res/xml/rows_spanish.xml
+++ b/java/res/xml/rows_spanish.xml
@@ -46,7 +46,7 @@
latin:keyboardLayout="@xml/rowkeys_qwerty3" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"
+ latin:keyWidth="fillRight"
latin:visualInsetsLeft="1%p" />
</Row>
<include
diff --git a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
index 25afef1..a0f48d2 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
@@ -108,6 +108,7 @@
if (!dictionaryAvailable || TextUtils.isEmpty(pickedWord)
|| CONSTRUCTOR_SuggestionSpan == null
|| suggestedWords == null || suggestedWords.size() == 0
+ || suggestedWords.mIsPrediction || suggestedWords.mIsPunctuationSuggestions
|| OBJ_SUGGESTIONS_MAX_SIZE == null) {
return pickedWord;
}
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 28855f5..bd3b0e1 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -511,7 +511,6 @@
// keyWidth enum constants
private static final int KEYWIDTH_NOT_ENUM = 0;
private static final int KEYWIDTH_FILL_RIGHT = -1;
- private static final int KEYWIDTH_FILL_BOTH = -2;
private final Params mParams;
/** Default width of a key in this row. */
@@ -576,11 +575,6 @@
public float getKeyX(TypedArray keyAttr) {
final int widthType = Builder.getEnumValue(keyAttr,
R.styleable.Keyboard_Key_keyWidth, KEYWIDTH_NOT_ENUM);
- if (widthType == KEYWIDTH_FILL_BOTH) {
- // If keyWidth is fillBoth, the key width should start right after the nearest
- // key on the left hand side.
- return mCurrentX;
- }
final int keyboardRightEdge = mParams.mOccupiedWidth
- mParams.mHorizontalEdgesPadding;
@@ -610,14 +604,10 @@
R.styleable.Keyboard_Key_keyWidth, KEYWIDTH_NOT_ENUM);
switch (widthType) {
case KEYWIDTH_FILL_RIGHT:
- case KEYWIDTH_FILL_BOTH:
final int keyboardRightEdge =
mParams.mOccupiedWidth - mParams.mHorizontalEdgesPadding;
// If keyWidth is fillRight, the actual key width will be determined to fill
// out the area up to the right edge of the keyboard.
- // If keyWidth is fillBoth, the actual key width will be determined to fill out
- // the area between the nearest key on the left hand side and the right edge of
- // the keyboard.
return keyboardRightEdge - keyXPos;
default: // KEYWIDTH_NOT_ENUM
return Builder.getDimensionOrFraction(keyAttr,
diff --git a/java/src/com/android/inputmethod/latin/ContactsDictionary.java b/java/src/com/android/inputmethod/latin/ContactsDictionary.java
index 8a7dfb8..83bc904 100644
--- a/java/src/com/android/inputmethod/latin/ContactsDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ContactsDictionary.java
@@ -149,7 +149,8 @@
// capitalization of i.
final int wordLen = word.length();
if (wordLen < maxWordLength && wordLen > 1) {
- super.addWord(word, FREQUENCY_FOR_CONTACTS);
+ super.addWord(word, null /* shortcut */,
+ FREQUENCY_FOR_CONTACTS);
if (!TextUtils.isEmpty(prevWord)) {
super.setBigram(prevWord, word,
FREQUENCY_FOR_CONTACTS_BIGRAM);
diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index a405aa4..1ec678f 100644
--- a/java/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -24,11 +24,6 @@
*/
public abstract class Dictionary {
/**
- * Whether or not to replicate the typed word in the suggested list, even if it's valid.
- */
- protected static final boolean INCLUDE_TYPED_WORD_IF_VALID = false;
-
- /**
* The weight to give to a word if it's length is the same as the number of typed characters.
*/
protected static final int FULL_WORD_SCORE_MULTIPLIER = 2;
diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
index fe21ebe..7a740b3 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
@@ -22,6 +22,7 @@
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.ProximityInfo;
+import java.util.ArrayList;
import java.util.LinkedList;
/**
@@ -53,6 +54,8 @@
boolean mTerminal;
Node mParent;
NodeArray mChildren;
+ ArrayList<char[]> mShortcutTargets;
+ boolean mShortcutOnly;
LinkedList<NextWord> mNGrams; // Supports ngram
}
@@ -150,15 +153,15 @@
return BinaryDictionary.MAX_WORD_LENGTH;
}
- public void addWord(String word, int frequency) {
+ public void addWord(final String word, final String shortcutTarget, final int frequency) {
if (word.length() >= BinaryDictionary.MAX_WORD_LENGTH) {
return;
}
- addWordRec(mRoots, word, 0, frequency, null);
+ addWordRec(mRoots, word, 0, shortcutTarget, frequency, null);
}
private void addWordRec(NodeArray children, final String word, final int depth,
- final int frequency, Node parentNode) {
+ final String shortcutTarget, final int frequency, Node parentNode) {
final int wordLength = word.length();
if (wordLength <= depth) return;
final char c = word.charAt(depth);
@@ -172,15 +175,25 @@
break;
}
}
+ final boolean isShortcutOnly = (null != shortcutTarget);
if (childNode == null) {
childNode = new Node();
childNode.mCode = c;
childNode.mParent = parentNode;
+ childNode.mShortcutOnly = isShortcutOnly;
children.add(childNode);
}
if (wordLength == depth + 1) {
// Terminate this word
childNode.mTerminal = true;
+ if (isShortcutOnly) {
+ if (null == childNode.mShortcutTargets) {
+ childNode.mShortcutTargets = new ArrayList<char[]>();
+ }
+ childNode.mShortcutTargets.add(shortcutTarget.toCharArray());
+ } else {
+ childNode.mShortcutOnly = false;
+ }
childNode.mFrequency = Math.max(frequency, childNode.mFrequency);
if (childNode.mFrequency > 255) childNode.mFrequency = 255;
return;
@@ -188,7 +201,7 @@
if (childNode.mChildren == null) {
childNode.mChildren = new NodeArray();
}
- addWordRec(childNode.mChildren, word, depth + 1, frequency, childNode);
+ addWordRec(childNode.mChildren, word, depth + 1, shortcutTarget, frequency, childNode);
}
@Override
@@ -239,7 +252,13 @@
if (mRequiresReload) startDictionaryLoadingTaskLocked();
if (mUpdatingDictionary) return false;
}
- return getWordFrequency(word) > -1;
+ final Node node = searchNode(mRoots, word, 0, word.length());
+ // If node is null, we didn't find the word, so it's not valid.
+ // If node.mShortcutOnly is true, then it exists as a shortcut but not as a word,
+ // so that means it's not a valid word.
+ // If node.mShortcutOnly is false, then it exists as a word (it may also exist as
+ // a shortcut, but this does not matter), so it's a valid word.
+ return (node == null) ? false : !node.mShortcutOnly;
}
/**
@@ -247,7 +266,7 @@
*/
protected int getWordFrequency(CharSequence word) {
// Case-sensitive search
- Node node = searchNode(mRoots, word, 0, word.length());
+ final Node node = searchNode(mRoots, word, 0, word.length());
return (node == null) ? -1 : node.mFrequency;
}
@@ -262,6 +281,35 @@
}
/**
+ * Helper method to add a word and its shortcuts.
+ *
+ * @param node the terminal node
+ * @param word the word to insert, as an array of code points
+ * @param depth the depth of the node in the tree
+ * @param finalFreq the frequency for this word
+ * @return whether there is still space for more words. {@see Dictionary.WordCallback#addWord}.
+ */
+ private boolean addWordAndShortcutsFromNode(final Node node, final char[] word, final int depth,
+ final int finalFreq, final WordCallback callback) {
+ if (finalFreq > 0 && !node.mShortcutOnly) {
+ if (!callback.addWord(word, 0, depth + 1, finalFreq, mDicTypeId, Dictionary.UNIGRAM)) {
+ return false;
+ }
+ }
+ if (null != node.mShortcutTargets) {
+ final int length = node.mShortcutTargets.size();
+ for (int shortcutIndex = 0; shortcutIndex < length; ++shortcutIndex) {
+ final char[] shortcut = node.mShortcutTargets.get(shortcutIndex);
+ if (!callback.addWord(shortcut, 0, shortcut.length, finalFreq, mDicTypeId,
+ Dictionary.UNIGRAM)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
* Recursively traverse the tree for words that match the input. Input consists of
* a list of arrays. Each item in the list is one input character position. An input
* character is actually an array of multiple possible candidates. This function is not
@@ -313,8 +361,8 @@
} else {
finalFreq = computeSkippedWordFinalFreq(freq, snr, mInputLength);
}
- if (!callback.addWord(word, 0, depth + 1, finalFreq, mDicTypeId,
- Dictionary.UNIGRAM)) {
+ if (!addWordAndShortcutsFromNode(node, word, depth, finalFreq, callback)) {
+ // No space left in the queue, bail out
return;
}
}
@@ -344,18 +392,18 @@
if (codeSize == inputIndex + 1) {
if (terminal) {
- if (INCLUDE_TYPED_WORD_IF_VALID
- || !same(word, depth + 1, codes.getTypedWord())) {
- final int finalFreq;
- if (skipPos < 0) {
- finalFreq = freq * snr * addedAttenuation
- * FULL_WORD_SCORE_MULTIPLIER;
- } else {
- finalFreq = computeSkippedWordFinalFreq(freq,
- snr * addedAttenuation, mInputLength);
- }
- callback.addWord(word, 0, depth + 1, finalFreq, mDicTypeId,
- Dictionary.UNIGRAM);
+ final int finalFreq;
+ if (skipPos < 0) {
+ finalFreq = freq * snr * addedAttenuation
+ * FULL_WORD_SCORE_MULTIPLIER;
+ } else {
+ finalFreq = computeSkippedWordFinalFreq(freq,
+ snr * addedAttenuation, mInputLength);
+ }
+ if (!addWordAndShortcutsFromNode(node, word, depth, finalFreq,
+ callback)) {
+ // No space left in the queue, bail out
+ return;
}
}
if (children != null) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 011b512..b59e939 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -877,7 +877,8 @@
false /* hasAutoCorrectionCandidate */,
false /* allowsToBeAutoCorrected */,
false /* isPunctuationSuggestions */,
- false /* isObsoleteSuggestions */);
+ false /* isObsoleteSuggestions */,
+ false /* isPrediction */);
// When in fullscreen mode, show completions generated by the application
final boolean isAutoCorrection = false;
setSuggestions(suggestedWords, isAutoCorrection);
@@ -1120,7 +1121,7 @@
@Override
public boolean addWordToDictionary(String word) {
- mUserDictionary.addWord(word, 128);
+ mUserDictionary.addWordToUserDictionary(word, 128);
// Suggestion strip should be updated after the operation of adding word to the
// user dictionary
mHandler.postUpdateSuggestions();
@@ -1772,7 +1773,8 @@
false /* hasAutoCorrectionCandidate */,
false /* allowsToBeAutoCorrected */,
false /* isPunctuationSuggestions */,
- true /* isObsoleteSuggestions */);
+ true /* isObsoleteSuggestions */,
+ false /* isPrediction */);
showSuggestions(obsoleteSuggestedWords, typedWord);
}
}
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index 5f9e1bc..55b896f 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -166,7 +166,8 @@
false /* hasAutoCorrectionCandidate */,
false /* allowsToBeAutoCorrected */,
true /* isPunctuationSuggestions */,
- false /* isObsoleteSuggestions */);
+ false /* isObsoleteSuggestions */,
+ false /* isPrediction */);
}
private static String createWordSeparators(final String weakSpaceStrippers,
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 112bde6..845df81 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -253,13 +253,12 @@
SuggestedWordInfo.removeDups(mSuggestions);
return new SuggestedWords(mSuggestions,
- // TODO: Just assuming the suggestions that came from the bigram prediction are
- // valid now. Need to assign a correct value for typedWordValid.
- true /* typedWordValid */,
+ false /* typedWordValid */,
false /* hasAutoCorrectionCandidate */,
false /* allowsToBeAutoCorrected */,
false /* isPunctuationSuggestions */,
- false /* isObsoleteSuggestions */);
+ false /* isObsoleteSuggestions */,
+ true /* isPrediction */);
}
// TODO: cleanup dictionaries looking up and suggestions building with SuggestedWords.Builder
@@ -396,7 +395,8 @@
autoCorrectionAvailable /* hasAutoCorrectionCandidate */,
allowsToBeAutoCorrected /* allowsToBeAutoCorrected */,
false /* isPunctuationSuggestions */,
- false /* isObsoleteSuggestions */);
+ false /* isObsoleteSuggestions */,
+ false /* isPrediction */);
}
/**
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 91110d8..497fd3b 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -25,13 +25,14 @@
public class SuggestedWords {
public static final SuggestedWords EMPTY = new SuggestedWords(
- new ArrayList<SuggestedWordInfo>(0), false, false, false, false, false);
+ new ArrayList<SuggestedWordInfo>(0), false, false, false, false, false, false);
public final boolean mTypedWordValid;
public final boolean mHasAutoCorrectionCandidate;
public final boolean mIsPunctuationSuggestions;
public final boolean mAllowsToBeAutoCorrected;
public final boolean mIsObsoleteSuggestions;
+ public final boolean mIsPrediction;
private final ArrayList<SuggestedWordInfo> mSuggestedWordInfoList;
public SuggestedWords(final ArrayList<SuggestedWordInfo> suggestedWordInfoList,
@@ -39,13 +40,15 @@
final boolean hasAutoCorrectionCandidate,
final boolean allowsToBeAutoCorrected,
final boolean isPunctuationSuggestions,
- final boolean isObsoleteSuggestions) {
+ final boolean isObsoleteSuggestions,
+ final boolean isPrediction) {
mSuggestedWordInfoList = suggestedWordInfoList;
mTypedWordValid = typedWordValid;
mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate;
mAllowsToBeAutoCorrected = allowsToBeAutoCorrected;
mIsPunctuationSuggestions = isPunctuationSuggestions;
mIsObsoleteSuggestions = isObsoleteSuggestions;
+ mIsPrediction = isPrediction;
}
public int size() {
diff --git a/java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserDictionary.java b/java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserDictionary.java
index 50e8b24..b78be89 100644
--- a/java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserDictionary.java
+++ b/java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserDictionary.java
@@ -42,6 +42,6 @@
@Override
public synchronized boolean isValidWord(CharSequence word) {
blockingReloadDictionaryIfRequired();
- return getWordFrequency(word) > -1;
+ return super.isValidWord(word);
}
}
diff --git a/java/src/com/android/inputmethod/latin/UserDictionary.java b/java/src/com/android/inputmethod/latin/UserDictionary.java
index 6beeaac..218bac7 100644
--- a/java/src/com/android/inputmethod/latin/UserDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserDictionary.java
@@ -31,8 +31,11 @@
public class UserDictionary extends ExpandableDictionary {
+ // TODO: use Words.SHORTCUT when it's public in the SDK
+ final static String SHORTCUT = "shortcut";
private static final String[] PROJECTION_QUERY = {
Words.WORD,
+ SHORTCUT,
Words.FREQUENCY,
};
@@ -149,15 +152,18 @@
}
/**
- * Adds a word to the dictionary and makes it persistent.
+ * Adds a word to the user dictionary and makes it persistent.
+ *
+ * This will call upon the system interface to do the actual work through the intent
+ * readied by the system to this effect.
+ *
* @param word the word to add. If the word is capitalized, then the dictionary will
* recognize it as a capitalized word when searched.
* @param frequency the frequency of occurrence of the word. A frequency of 255 is considered
* the highest.
* @TODO use a higher or float range for frequency
*/
- @Override
- public synchronized void addWord(final String word, final int frequency) {
+ public synchronized void addWordToUserDictionary(final String word, final int frequency) {
// Force load the dictionary here synchronously
if (getRequiresReload()) loadDictionaryAsync();
// TODO: do something for the UI. With the following, any sufficiently long word will
@@ -191,14 +197,19 @@
final int maxWordLength = getMaxWordLength();
if (cursor.moveToFirst()) {
final int indexWord = cursor.getColumnIndex(Words.WORD);
+ final int indexShortcut = cursor.getColumnIndex(SHORTCUT);
final int indexFrequency = cursor.getColumnIndex(Words.FREQUENCY);
while (!cursor.isAfterLast()) {
String word = cursor.getString(indexWord);
+ String shortcut = cursor.getString(indexShortcut);
int frequency = cursor.getInt(indexFrequency);
// Safeguard against adding really long words. Stack may overflow due
// to recursion
if (word.length() < maxWordLength) {
- super.addWord(word, frequency);
+ super.addWord(word, null, frequency);
+ }
+ if (null != shortcut && shortcut.length() < maxWordLength) {
+ super.addWord(shortcut, word, frequency);
}
cursor.moveToNext();
}
diff --git a/java/src/com/android/inputmethod/latin/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/UserHistoryDictionary.java
index 9191aa9..e13602e 100644
--- a/java/src/com/android/inputmethod/latin/UserHistoryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserHistoryDictionary.java
@@ -176,7 +176,7 @@
* The second word may not be null (a NullPointerException would be thrown).
*/
public int addToUserHistory(final String word1, String word2) {
- super.addWord(word2, FREQUENCY_FOR_TYPED);
+ super.addWord(word2, null /* shortcut */, FREQUENCY_FOR_TYPED);
// Do not insert a word as a bigram of itself
if (word2.equals(word1)) {
return 0;
@@ -246,7 +246,7 @@
// Safeguard against adding really long words. Stack may overflow due
// to recursive lookup
if (null == word1) {
- super.addWord(word2, frequency);
+ super.addWord(word2, null /* shortcut */, frequency);
} else if (word1.length() < BinaryDictionary.MAX_WORD_LENGTH
&& word2.length() < BinaryDictionary.MAX_WORD_LENGTH) {
super.setBigram(word1, word2, frequency);
diff --git a/java/src/com/android/inputmethod/latin/WhitelistDictionary.java b/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
index bb3ba86..a0de2f9 100644
--- a/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
+++ b/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
@@ -66,7 +66,7 @@
if (before != null && after != null) {
mWhitelistWords.put(
before.toLowerCase(), new Pair<Integer, String>(score, after));
- addWord(after, score);
+ addWord(after, null /* shortcut */, score);
}
}
} catch (NumberFormatException e) {
diff --git a/native/jni/src/correction.cpp b/native/jni/src/correction.cpp
index 376e9a1..a1f8129 100644
--- a/native/jni/src/correction.cpp
+++ b/native/jni/src/correction.cpp
@@ -344,8 +344,10 @@
mDistances[mOutputIndex] =
mProximityInfo->getNormalizedSquaredDistance(mInputIndex, proximityIndex);
}
- incrementInputIndex();
- incremented = true;
+ if (!isQuote(c)) {
+ incrementInputIndex();
+ incremented = true;
+ }
}
return processSkipChar(c, isTerminal, incremented);
}
@@ -710,7 +712,7 @@
ed = max(0, ed - quoteDiffCount);
adjustedProximityMatchedCount = min(max(0, ed - (outputLength - inputLength)),
proximityMatchedCount);
- if (transposedCount < 1) {
+ if (transposedCount <= 0) {
if (ed == 1 && (inputLength == outputLength - 1 || inputLength == outputLength + 1)) {
// Promote a word with just one skipped or excessive char
if (sameLength) {