aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2011-09-26 11:26:38 +0900
committerTadashi G. Takaoka <takaoka@google.com>2011-09-26 17:11:01 +0900
commit287f4f83e9faa51efce6cc750c5a26b9556db728 (patch)
treeb245e3a7940007991dc3ee090550846436afe2d3 /java
parentacf6b6815a0cd474ef480537c0391b6851364916 (diff)
downloadlatinime-287f4f83e9faa51efce6cc750c5a26b9556db728.tar.gz
latinime-287f4f83e9faa51efce6cc750c5a26b9556db728.tar.xz
latinime-287f4f83e9faa51efce6cc750c5a26b9556db728.zip
Add horizontal edges paddings to phone/number layout
Bug: 4948171 Change-Id: I8a06a25ffcbd141c9418e77e982233166a347914
Diffstat (limited to 'java')
-rw-r--r--java/res/values-land/dimens.xml1
-rw-r--r--java/res/values-sw600dp-land/dimens.xml1
-rw-r--r--java/res/values-sw600dp/dimens.xml1
-rw-r--r--java/res/values-sw768dp-land/dimens.xml1
-rw-r--r--java/res/values-sw768dp/dimens.xml1
-rw-r--r--java/res/values/attrs.xml24
-rw-r--r--java/res/values/dimens.xml2
-rw-r--r--java/res/values/styles.xml1
-rw-r--r--java/res/xml-land/kbd_number.xml28
-rw-r--r--java/res/xml-land/kbd_phone.xml28
-rw-r--r--java/res/xml-land/kbd_phone_shift.xml28
-rw-r--r--java/res/xml/kbd_number.xml106
-rw-r--r--java/res/xml/kbd_phone.xml68
-rw-r--r--java/res/xml/kbd_phone_shift.xml81
-rw-r--r--java/res/xml/kbd_rows_number.xml130
-rw-r--r--java/res/xml/kbd_rows_phone.xml74
-rw-r--r--java/res/xml/kbd_rows_phone_shift.xml87
-rw-r--r--java/src/com/android/inputmethod/keyboard/Key.java63
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java96
19 files changed, 505 insertions, 316 deletions
diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 0f9bde882..4a5c5a44c 100644
--- a/java/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
@@ -25,7 +25,6 @@
<!-- 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="keyboard_horizontal_edges_padding">0.0in</dimen>
<fraction name="keyboard_top_padding">1.818%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>
diff --git a/java/res/values-sw600dp-land/dimens.xml b/java/res/values-sw600dp-land/dimens.xml
index c1cef1d24..1b8c8a64a 100644
--- a/java/res/values-sw600dp-land/dimens.xml
+++ b/java/res/values-sw600dp-land/dimens.xml
@@ -23,7 +23,6 @@
<dimen name="keyboardHeight">45.0mm</dimen>
<fraction name="minKeyboardHeight">45%p</fraction>
- <dimen name="keyboard_horizontal_edges_padding">0dp</dimen>
<fraction name="keyboard_top_padding">2.444%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>
<fraction name="key_bottom_gap">4.911%p</fraction>
diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml
index e1bdecfd9..31830239d 100644
--- a/java/res/values-sw600dp/dimens.xml
+++ b/java/res/values-sw600dp/dimens.xml
@@ -26,7 +26,6 @@
<dimen name="popup_key_height">10.0mm</dimen>
- <dimen name="keyboard_horizontal_edges_padding">0.0mm</dimen>
<fraction name="keyboard_top_padding">2.291%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>
<fraction name="key_bottom_gap">3.750%p</fraction>
diff --git a/java/res/values-sw768dp-land/dimens.xml b/java/res/values-sw768dp-land/dimens.xml
index 8f9b00672..664e8c159 100644
--- a/java/res/values-sw768dp-land/dimens.xml
+++ b/java/res/values-sw768dp-land/dimens.xml
@@ -23,7 +23,6 @@
<dimen name="keyboardHeight">58.0mm</dimen>
<fraction name="minKeyboardHeight">45%p</fraction>
- <dimen name="keyboard_horizontal_edges_padding">0.0mm</dimen>
<fraction name="keyboard_top_padding">1.896%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>
diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml
index b825b1457..bb4937dd5 100644
--- a/java/res/values-sw768dp/dimens.xml
+++ b/java/res/values-sw768dp/dimens.xml
@@ -24,7 +24,6 @@
<fraction name="maxKeyboardHeight">50%p</fraction>
<fraction name="minKeyboardHeight">-35.0%p</fraction>
- <dimen name="keyboard_horizontal_edges_padding">0.0mm</dimen>
<fraction name="keyboard_top_padding">2.291%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index cd1b46073..1776630d9 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -144,19 +144,10 @@
<!-- Minimum keyboard height represented in pixels, percentage of display height if fraction
is positive, or percentage of display width if fraction is negative. -->
<attr name="minKeyboardHeight" format="dimension|fraction" />
- <!-- Keyboard top and bottom paddings. -->
+ <!-- Keyboard top, bottom, both horizontal edges paddings. -->
<attr name="keyboardTopPadding" format="dimension|fraction" />
<attr name="keyboardBottomPadding" format="dimension|fraction" />
- <!-- Default width of a key, in pixels or percentage of display width.
- If the value is zero, the actual key width will be determined to fill out the area up
- to the right edge of the keyboard.
- If the value is negative, 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.
- -->
- <attr name="keyWidth" format="dimension|fraction|enum">
- <enum name="fillRight" value="-1" />
- <enum name="fillBoth" value="-2" />
- </attr>
+ <attr name="keyboardHorizontalEdgesPadding" format="dimension|fraction" />
<!-- Default height of a row (key height + vertical gap), in pixels or percentage of
keyboard height. -->
<attr name="rowHeight" format="dimension|fraction" />
@@ -258,6 +249,17 @@
<!-- Visual insets -->
<attr name="visualInsetsLeft" format="dimension|fraction" />
<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.
+ -->
+ <!-- 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. -->
<attr name="keyXPos" format="dimension|fraction" />
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index cbd557e52..8b4cd6d1b 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -29,9 +29,9 @@
<dimen name="mini_keyboard_horizontal_edges_padding">16dip</dimen>
<dimen name="mini_keyboard_key_horizontal_padding">8dip</dimen>
- <dimen name="keyboard_horizontal_edges_padding">0dp</dimen>
<fraction name="keyboard_top_padding">1.556%p</fraction>
<fraction name="keyboard_bottom_padding">4.669%p</fraction>
+ <fraction name="keyboard_horizontal_edges_padding">0%p</fraction>
<fraction name="key_bottom_gap">6.250%p</fraction>
<fraction name="key_horizontal_gap">1.352%p</fraction>
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 7b8bfa841..c6ea2a5f8 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -24,6 +24,7 @@
<item name="moreKeysTemplate">@xml/kbd_mini_keyboard_template</item>
<item name="keyboardTopPadding">@fraction/keyboard_top_padding</item>
<item name="keyboardBottomPadding">@fraction/keyboard_bottom_padding</item>
+ <item name="keyboardHorizontalEdgesPadding">@fraction/keyboard_horizontal_edges_padding</item>
<item name="horizontalGap">@fraction/key_horizontal_gap</item>
<item name="verticalGap">@fraction/key_bottom_gap</item>
<item name="maxMoreKeysColumn">@integer/config_max_more_keys_column</item>
diff --git a/java/res/xml-land/kbd_number.xml b/java/res/xml-land/kbd_number.xml
new file mode 100644
index 000000000..f5930ef41
--- /dev/null
+++ b/java/res/xml-land/kbd_number.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, 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.
+*/
+-->
+
+<Keyboard
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+ latin:keyboardHorizontalEdgesPadding="10%p"
+ latin:keyWidth="26.67%p"
+>
+ <include
+ latin:keyboardLayout="@xml/kbd_rows_number" />
+</Keyboard>
diff --git a/java/res/xml-land/kbd_phone.xml b/java/res/xml-land/kbd_phone.xml
new file mode 100644
index 000000000..3b1fb36ff
--- /dev/null
+++ b/java/res/xml-land/kbd_phone.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, 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.
+*/
+-->
+
+<Keyboard
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+ latin:keyboardHorizontalEdgesPadding="10%p"
+ latin:keyWidth="26.67%p"
+>
+ <include
+ latin:keyboardLayout="@xml/kbd_rows_phone" />
+</Keyboard>
diff --git a/java/res/xml-land/kbd_phone_shift.xml b/java/res/xml-land/kbd_phone_shift.xml
new file mode 100644
index 000000000..e59664776
--- /dev/null
+++ b/java/res/xml-land/kbd_phone_shift.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2008, 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.
+*/
+-->
+
+<Keyboard
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+ latin:keyboardHorizontalEdgesPadding="10%p"
+ latin:keyWidth="26.67%p"
+>
+ <include
+ latin:keyboardLayout="@xml/kbd_rows_phone_shift" />
+</Keyboard>
diff --git a/java/res/xml/kbd_number.xml b/java/res/xml/kbd_number.xml
index aabf0eb7a..38dd6bf62 100644
--- a/java/res/xml/kbd_number.xml
+++ b/java/res/xml/kbd_number.xml
@@ -23,109 +23,5 @@
latin:keyWidth="26.67%p"
>
<include
- latin:keyboardLayout="@xml/kbd_key_styles" />
- <include
- latin:keyboardLayout="@xml/kbd_numkey_styles" />
- <switch>
- <case
- latin:passwordInput="true"
- >
- <Row>
- <Key
- latin:keyStyle="num1KeyStyle" />
- <Key
- latin:keyStyle="num2KeyStyle" />
- <Key
- latin:keyStyle="num3KeyStyle" />
- </Row>
- <Row>
- <Key
- latin:keyStyle="num4KeyStyle" />
- <Key
- latin:keyStyle="num5KeyStyle" />
- <Key
- latin:keyStyle="num6KeyStyle" />
- </Row>
- <Row>
- <Key
- latin:keyStyle="num7KeyStyle" />
- <Key
- latin:keyStyle="num8KeyStyle" />
- <Key
- latin:keyStyle="num9KeyStyle" />
- <Key
- latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Spacer />
- <Key
- latin:keyStyle="num0KeyStyle" />
- <Spacer />
- <Key
- latin:keyStyle="returnKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- </case>
- <!-- latin:passwordInput="false" -->
- <default>
- <Row>
- <Key
- latin:keyLabel="1"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="2"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="3"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="-"
- latin:keyStyle="numFunctionalKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyLabel="4"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="5"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="6"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel=","
- latin:keyStyle="numFunctionalKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyLabel="7"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="8"
- latin:keyStyle="numKeyStyle"/>
- <Key
- latin:keyLabel="9"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyStyle="numSpaceKeyStyle" />
- <Key
- latin:keyLabel="0"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="."
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyStyle="returnKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- </default>
- </switch>
+ latin:keyboardLayout="@xml/kbd_rows_number" />
</Keyboard>
diff --git a/java/res/xml/kbd_phone.xml b/java/res/xml/kbd_phone.xml
index 4588ab2c9..b550f17c5 100644
--- a/java/res/xml/kbd_phone.xml
+++ b/java/res/xml/kbd_phone.xml
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
-/*
+/*
**
** Copyright 2008, 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
+** 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
+** 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
+** 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.
*/
-->
@@ -23,53 +23,5 @@
latin:keyWidth="26.67%p"
>
<include
- latin:keyboardLayout="@xml/kbd_key_styles" />
- <include
- latin:keyboardLayout="@xml/kbd_numkey_styles" />
- <Row>
- <Key
- latin:keyStyle="num1KeyStyle" />
- <Key
- latin:keyStyle="num2KeyStyle" />
- <Key
- latin:keyStyle="num3KeyStyle" />
- <Key
- latin:keyLabel="-"
- latin:keyStyle="numFunctionalKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyStyle="num4KeyStyle" />
- <Key
- latin:keyStyle="num5KeyStyle" />
- <Key
- latin:keyStyle="num6KeyStyle" />
- <Key
- latin:keyLabel="."
- latin:keyStyle="numFunctionalKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyStyle="num7KeyStyle" />
- <Key
- latin:keyStyle="num8KeyStyle" />
- <Key
- latin:keyStyle="num9KeyStyle" />
- <Key
- latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyStyle="numSwitchToAltKeyStyle" />
- <Key
- latin:keyStyle="num0KeyStyle" />
- <Key
- latin:keyStyle="numSpaceKeyStyle" />
- <Key
- latin:keyStyle="returnKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
+ latin:keyboardLayout="@xml/kbd_rows_phone" />
</Keyboard>
diff --git a/java/res/xml/kbd_phone_shift.xml b/java/res/xml/kbd_phone_shift.xml
index 5be9bf9a9..eea823fc0 100644
--- a/java/res/xml/kbd_phone_shift.xml
+++ b/java/res/xml/kbd_phone_shift.xml
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
-/*
+/*
**
** Copyright 2008, 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
+** 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
+** 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
+** 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.
*/
-->
@@ -23,66 +23,5 @@
latin:keyWidth="26.67%p"
>
<include
- latin:keyboardLayout="@xml/kbd_key_styles" />
- <include
- latin:keyboardLayout="@xml/kbd_numkey_styles" />
- <Row>
- <Key
- latin:keyLabel="("
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="/"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel=")"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="-"
- latin:keyStyle="numFunctionalKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyLabel="N" />
- <!-- Pause is a comma. Check PhoneNumberUtils.java to see if this
- has changed. -->
- <Key
- latin:code="44"
- latin:keyLabel="@string/label_pause_key"
- latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" />
- <Key
- latin:keyLabel=","
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyLabel="."
- latin:keyStyle="numFunctionalKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyStyle="numStarKeyStyle" />
- <!-- Wait is a semicolon. -->
- <Key
- latin:code="59"
- latin:keyLabel="@string/label_wait_key"
- latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" />
- <Key
- latin:keyLabel="#"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
- <Row>
- <Key
- latin:keyStyle="numSwitchToNumericKeyStyle" />
- <Key
- latin:keyLabel="+"
- latin:keyStyle="numKeyStyle" />
- <Key
- latin:keyStyle="numSpaceKeyStyle" />
- <Key
- latin:keyStyle="returnKeyStyle"
- latin:keyWidth="fillRight" />
- </Row>
+ latin:keyboardLayout="@xml/kbd_rows_phone_shift" />
</Keyboard>
diff --git a/java/res/xml/kbd_rows_number.xml b/java/res/xml/kbd_rows_number.xml
new file mode 100644
index 000000000..21d0656d1
--- /dev/null
+++ b/java/res/xml/kbd_rows_number.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, 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.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/kbd_key_styles" />
+ <include
+ latin:keyboardLayout="@xml/kbd_numkey_styles" />
+ <switch>
+ <case
+ latin:passwordInput="true"
+ >
+ <Row>
+ <Key
+ latin:keyStyle="num1KeyStyle" />
+ <Key
+ latin:keyStyle="num2KeyStyle" />
+ <Key
+ latin:keyStyle="num3KeyStyle" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyStyle="num4KeyStyle" />
+ <Key
+ latin:keyStyle="num5KeyStyle" />
+ <Key
+ latin:keyStyle="num6KeyStyle" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyStyle="num7KeyStyle" />
+ <Key
+ latin:keyStyle="num8KeyStyle" />
+ <Key
+ latin:keyStyle="num9KeyStyle" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Spacer />
+ <Key
+ latin:keyStyle="num0KeyStyle" />
+ <Spacer />
+ <Key
+ latin:keyStyle="returnKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ </case>
+ <!-- latin:passwordInput="false" -->
+ <default>
+ <Row>
+ <Key
+ latin:keyLabel="1"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="2"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="3"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="-"
+ latin:keyStyle="numFunctionalKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyLabel="4"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="5"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="6"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel=","
+ latin:keyStyle="numFunctionalKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyLabel="7"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="8"
+ latin:keyStyle="numKeyStyle"/>
+ <Key
+ latin:keyLabel="9"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyStyle="numSpaceKeyStyle" />
+ <Key
+ latin:keyLabel="0"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="."
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyStyle="returnKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml/kbd_rows_phone.xml b/java/res/xml/kbd_rows_phone.xml
new file mode 100644
index 000000000..5500a6078
--- /dev/null
+++ b/java/res/xml/kbd_rows_phone.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, 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.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/kbd_key_styles" />
+ <include
+ latin:keyboardLayout="@xml/kbd_numkey_styles" />
+ <Row>
+ <Key
+ latin:keyStyle="num1KeyStyle" />
+ <Key
+ latin:keyStyle="num2KeyStyle" />
+ <Key
+ latin:keyStyle="num3KeyStyle" />
+ <Key
+ latin:keyLabel="-"
+ latin:keyStyle="numFunctionalKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyStyle="num4KeyStyle" />
+ <Key
+ latin:keyStyle="num5KeyStyle" />
+ <Key
+ latin:keyStyle="num6KeyStyle" />
+ <Key
+ latin:keyLabel="."
+ latin:keyStyle="numFunctionalKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyStyle="num7KeyStyle" />
+ <Key
+ latin:keyStyle="num8KeyStyle" />
+ <Key
+ latin:keyStyle="num9KeyStyle" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyStyle="numSwitchToAltKeyStyle" />
+ <Key
+ latin:keyStyle="num0KeyStyle" />
+ <Key
+ latin:keyStyle="numSpaceKeyStyle" />
+ <Key
+ latin:keyStyle="returnKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+</merge>
diff --git a/java/res/xml/kbd_rows_phone_shift.xml b/java/res/xml/kbd_rows_phone_shift.xml
new file mode 100644
index 000000000..3c283d3e6
--- /dev/null
+++ b/java/res/xml/kbd_rows_phone_shift.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, 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.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/kbd_key_styles" />
+ <include
+ latin:keyboardLayout="@xml/kbd_numkey_styles" />
+ <Row>
+ <Key
+ latin:keyLabel="("
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="/"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel=")"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="-"
+ latin:keyStyle="numFunctionalKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyLabel="N" />
+ <!-- Pause is a comma. Check PhoneNumberUtils.java to see if this
+ has changed. -->
+ <Key
+ latin:code="44"
+ latin:keyLabel="@string/label_pause_key"
+ latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" />
+ <Key
+ latin:keyLabel=","
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyLabel="."
+ latin:keyStyle="numFunctionalKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyStyle="numStarKeyStyle" />
+ <!-- Wait is a semicolon. -->
+ <Key
+ latin:code="59"
+ latin:keyLabel="@string/label_wait_key"
+ latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" />
+ <Key
+ latin:keyLabel="#"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <Row>
+ <Key
+ latin:keyStyle="numSwitchToNumericKeyStyle" />
+ <Key
+ latin:keyLabel="+"
+ latin:keyStyle="numKeyStyle" />
+ <Key
+ latin:keyStyle="numSpaceKeyStyle" />
+ <Key
+ latin:keyStyle="returnKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+</merge>
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 997c4c9ad..b1cc7cafb 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -120,11 +120,6 @@ public class Key {
/** Whether this key needs to show the "..." popup hint for special purposes */
private boolean mNeedsSpecialPopupHint;
- // 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;
-
// RTL parenthesis character swapping map.
private static final Map<Integer, Integer> sRtlParenthesisMap = new HashMap<Integer, Integer>();
@@ -216,21 +211,9 @@ public class Key {
*/
public Key(Resources res, KeyboardParams params, KeyboardBuilder.Row row,
XmlResourceParser parser, KeyStyles keyStyles) {
- final TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
- R.styleable.Keyboard);
- mHeight = (int)KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_rowHeight, params.mBaseHeight, row.mRowHeight)
- - params.mVerticalGap;
- final float horizontalGap = isSpacer() ? 0
- : KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_horizontalGap, params.mBaseWidth,
- params.mHorizontalGap);
+ final float horizontalGap = isSpacer() ? 0 : params.mHorizontalGap;
mVerticalGap = params.mVerticalGap;
- final int widthType = KeyboardBuilder.getEnumValue(keyboardAttr,
- R.styleable.Keyboard_keyWidth, KEYWIDTH_NOT_ENUM);
- float keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_keyWidth, params.mBaseWidth, row.mDefaultKeyWidth);
- keyboardAttr.recycle();
+ mHeight = row.mRowHeight - mVerticalGap;
final TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard_Key);
@@ -245,38 +228,16 @@ public class Key {
style = keyStyles.getEmptyKeyStyle();
}
- final int keyboardWidth = params.mOccupiedWidth;
- final float x = row.mCurrentX;
- float keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr,
- R.styleable.Keyboard_Key_keyXPos, keyboardWidth, x);
- if (keyXPos < 0) {
- // If keyXPos is negative, the actual x-coordinate will be keyboardWidth + keyXPos.
- keyXPos += keyboardWidth;
- if (keyXPos < x) {
- // keyXPos shouldn't be less than x because drawable area for this key starts
- // at x. Or, this key will overlaps the adjacent key on its left hand side.
- keyXPos = x;
- }
- }
- if (widthType == KEYWIDTH_FILL_RIGHT) {
- // If keyWidth is zero, the actual key width will be determined to fill out the
- // area up to the right edge of the keyboard.
- keyWidth = keyboardWidth - keyXPos;
- } else if (widthType == KEYWIDTH_FILL_BOTH) {
- // If keyWidth is negative, 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.
- keyXPos = x;
- keyWidth = keyboardWidth - keyXPos;
- }
+ final float keyXPos = row.getKeyX(keyAttr);
+ final float keyWidth = row.getKeyWidth(keyAttr, keyXPos);
// Horizontal gap is divided equally to both sides of the key.
mX = (int) (keyXPos + horizontalGap / 2);
- mY = row.mCurrentY;
+ mY = row.getKeyY();
mWidth = (int) (keyWidth - horizontalGap);
mHorizontalGap = (int) horizontalGap;
// Update row to have current x coordinate.
- row.mCurrentX = keyXPos + keyWidth;
+ row.setXPos(keyXPos + keyWidth);
final CharSequence[] moreKeys = style.getTextArray(keyAttr,
R.styleable.Keyboard_Key_moreKeys);
@@ -288,20 +249,20 @@ public class Key {
} else {
mMoreKeys = moreKeys;
}
- mMaxMoreKeysColumn = style.getInt(keyboardAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn,
- params.mMaxMiniKeyboardColumn);
+ mMaxMoreKeysColumn = style.getInt(keyAttr,
+ R.styleable.Keyboard_Key_maxMoreKeysColumn, params.mMaxMiniKeyboardColumn);
- mBackgroundType = style.getInt(
- keyAttr, R.styleable.Keyboard_Key_backgroundType, BACKGROUND_TYPE_NORMAL);
+ mBackgroundType = style.getInt(keyAttr,
+ R.styleable.Keyboard_Key_backgroundType, BACKGROUND_TYPE_NORMAL);
mRepeatable = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isRepeatable, false);
mEnabled = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_enabled, true);
mEdgeFlags = 0;
final KeyboardIconsSet iconsSet = params.mIconsSet;
mVisualInsetsLeft = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr,
- R.styleable.Keyboard_Key_visualInsetsLeft, keyboardWidth, 0);
+ R.styleable.Keyboard_Key_visualInsetsLeft, params.mBaseWidth, 0);
mVisualInsetsRight = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr,
- R.styleable.Keyboard_Key_visualInsetsRight, keyboardWidth, 0);
+ R.styleable.Keyboard_Key_visualInsetsRight, params.mBaseWidth, 0);
mPreviewIcon = iconsSet.getIcon(style.getInt(keyAttr,
R.styleable.Keyboard_Key_keyIconPreview, KeyboardIconsSet.ICON_UNDEFINED));
mIcon = iconsSet.getIcon(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIcon,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index 8d246c490..99b917c86 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -144,27 +144,96 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
* defines.
*/
public static class Row {
+ // 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 KeyboardParams mParams;
/** Default width of a key in this row. */
public final float mDefaultKeyWidth;
/** Default height of a key in this row. */
public final int mRowHeight;
- public final int mCurrentY;
+ private final int mCurrentY;
// Will be updated by {@link Key}'s constructor.
- public float mCurrentX;
+ private float mCurrentX;
public Row(Resources res, KeyboardParams params, XmlResourceParser parser, int y) {
- TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
+ mParams = params;
+ TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
- mDefaultKeyWidth = KeyboardBuilder.getDimensionOrFraction(a,
- R.styleable.Keyboard_keyWidth, params.mBaseWidth, params.mDefaultKeyWidth);
- mRowHeight = (int)KeyboardBuilder.getDimensionOrFraction(a,
+ mRowHeight = (int)KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_rowHeight, params.mBaseHeight, params.mDefaultRowHeight);
- a.recycle();
+ keyboardAttr.recycle();
+ TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
+ R.styleable.Keyboard_Key);
+ mDefaultKeyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
+ R.styleable.Keyboard_Key_keyWidth, params.mBaseWidth, params.mDefaultKeyWidth);
+ keyAttr.recycle();
mCurrentY = y;
mCurrentX = 0.0f;
}
+
+ public void setXPos(float keyXPos) {
+ mCurrentX = keyXPos;
+ }
+
+ public void advanceXPos(float width) {
+ mCurrentX += width;
+ }
+
+ public int getKeyY() {
+ return mCurrentY;
+ }
+
+ public float getKeyX(TypedArray keyAttr) {
+ final int widthType = KeyboardBuilder.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;
+ if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyXPos)) {
+ final float keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr,
+ R.styleable.Keyboard_Key_keyXPos, mParams.mBaseWidth, 0);
+ if (keyXPos < 0) {
+ // If keyXPos is negative, the actual x-coordinate will be
+ // keyboardWidth + keyXPos.
+ // keyXPos shouldn't be less than mCurrentX because drawable area for this key
+ // starts at mCurrentX. Or, this key will overlaps the adjacent key on its left
+ // hand side.
+ return Math.max(keyXPos + keyboardRightEdge, mCurrentX);
+ } else {
+ return keyXPos + mParams.mHorizontalEdgesPadding;
+ }
+ }
+ return mCurrentX;
+ }
+
+ public float getKeyWidth(TypedArray keyAttr, float keyXPos) {
+ final int widthType = KeyboardBuilder.getEnumValue(keyAttr,
+ 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 KeyboardBuilder.getDimensionOrFraction(keyAttr,
+ R.styleable.Keyboard_Key_keyWidth, mParams.mBaseWidth, mDefaultKeyWidth);
+ }
+ }
}
public KeyboardBuilder(Context context, KP params) {
@@ -174,8 +243,6 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
mDisplayMetrics = res.getDisplayMetrics();
mParams = params;
- mParams.mHorizontalEdgesPadding = (int)res.getDimension(
- R.dimen.keyboard_horizontal_edges_padding);
mParams.GRID_WIDTH = res.getInteger(R.integer.config_keyboard_grid_width);
mParams.GRID_HEIGHT = res.getInteger(R.integer.config_keyboard_grid_height);
@@ -270,11 +337,13 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
R.styleable.Keyboard_keyboardTopPadding, params.mOccupiedHeight, 0);
params.mBottomPadding = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyboardBottomPadding, params.mOccupiedHeight, 0);
+ params.mHorizontalEdgesPadding = (int)getDimensionOrFraction(keyboardAttr,
+ R.styleable.Keyboard_keyboardHorizontalEdgesPadding, mParams.mOccupiedWidth, 0);
params.mBaseWidth = params.mOccupiedWidth - params.mHorizontalEdgesPadding * 2
- params.mHorizontalCenterPadding;
- params.mDefaultKeyWidth = (int)getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_keyWidth, params.mBaseWidth,
+ params.mDefaultKeyWidth = (int)getDimensionOrFraction(keyAttr,
+ R.styleable.Keyboard_Key_keyWidth, params.mBaseWidth,
params.mBaseWidth / DEFAULT_KEYBOARD_COLUMNS);
params.mHorizontalGap = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_horizontalGap, params.mBaseWidth, 0);
@@ -670,7 +739,6 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
}
private void startRow(Row row) {
- row.mCurrentX = 0;
addEdgeSpace(mParams.mHorizontalEdgesPadding, row);
mCurrentRow = row;
mLeftEdge = true;
@@ -685,7 +753,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
mRightEdgeKey = null;
}
addEdgeSpace(mParams.mHorizontalEdgesPadding, row);
- mCurrentY += mCurrentRow.mRowHeight;
+ mCurrentY += row.mRowHeight;
mCurrentRow = null;
mTopEdge = false;
}
@@ -706,7 +774,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
}
private void addEdgeSpace(float width, Row row) {
- row.mCurrentX += width;
+ row.advanceXPos(width);
mLeftEdge = false;
mRightEdgeKey = null;
}