diff --git a/java/res/values-xlarge/dimens.xml b/java/res/values-xlarge/dimens.xml index 4e1c52877189ba8078f585fd389e0cca2c7add4c..37e6b9ef09d332f8ea363691f15351d459d671d8 100644 --- a/java/res/values-xlarge/dimens.xml +++ b/java/res/values-xlarge/dimens.xml @@ -22,5 +22,6 @@ <dimen name="key_height">72dip</dimen> <dimen name="candidate_strip_height">46dip</dimen> <dimen name="spacebar_vertical_correction">0dip</dimen> - <dimen name="key_text_size">35sp</dimen> + <dimen name="key_text_size">28sp</dimen> + <dimen name="keyboard_vertical_correction">0dip</dimen> </resources> diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index b399af489de4dfd7d6d54b0e9516097ae3720578..75efddf6ca24e77f823ed81b93a1c17e6b39f6b0 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -31,4 +31,5 @@ <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> <!-- key_height * 1.7 --> <dimen name="mini_keyboard_slide_allowance">91.8dip</dimen> + <dimen name="keyboard_vertical_correction">-10dip</dimen> </resources> diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 5e239482f22221bccd455b5d8c77b84d5f5039ef..f30c9f196ce1af4a75b90cc5f8e0950ac9fccb6d 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -27,7 +27,7 @@ <item name="labelTextSize">14sp</item> <item name="popupLayout">@layout/keyboard_popup</item> <item name="keyHysteresisDistance">0.05in</item> - <item name="verticalCorrection">-10dip</item> + <item name="verticalCorrection">@dimen/keyboard_vertical_correction</item> <item name="shadowColor">#BB000000</item> <item name="shadowRadius">2.75</item> <item name="backgroundDimAmount">0.5</item> diff --git a/java/res/xml-xlarge/kbd_qwerty.xml b/java/res/xml-xlarge/kbd_qwerty.xml new file mode 100644 index 0000000000000000000000000000000000000000..e710b34c74b1d6e97fef4616dca107db81b00eb0 --- /dev/null +++ b/java/res/xml-xlarge/kbd_qwerty.xml @@ -0,0 +1,218 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2010, 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:android="http://schemas.android.com/apk/res/android" + android:keyWidth="7.5%p" + android:horizontalGap="0px" + android:verticalGap="0px" + android:keyHeight="@dimen/key_height" +> + <Row> + <Key + android:codes="@integer/key_tab" + android:keyLabel="Tab" + android:popupKeyboard="@xml/kbd_popup_template" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="q" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_q" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="w" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_w" /> + <Key + android:keyLabel="e" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_e" /> + <Key + android:keyLabel="r" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_r" /> + <Key + android:keyLabel="t" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_t" /> + <Key + android:keyLabel="y" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_y" /> + <Key + android:keyLabel="u" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_u" /> + <Key + android:keyLabel="i" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_i" /> + <Key + android:keyLabel="o" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_o" /> + <Key + android:keyLabel="p" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_p" /> + <Key + android:keyLabel="=" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="+" /> + <Key + android:codes="@integer/key_delete" + android:keyIcon="@drawable/sym_keyboard_delete" + android:iconPreview="@drawable/sym_keyboard_feedback_delete" + android:keyWidth="10.5%p" + android:isModifier="true" + android:isRepeatable="true" + android:keyEdgeFlags="right" /> + </Row> + <Row> + <Key + android:codes="@integer/key_symbol" + android:keyLabel="@string/label_symbol_key" + android:keyWidth="8.75%p" + android:isModifier="true" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="a" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_a" /> + <Key + android:keyLabel="s" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_s" /> + <Key + android:keyLabel="d" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_d" /> + <Key + android:keyLabel="f" /> + <Key + android:keyLabel="g" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_g" /> + <Key + android:keyLabel="h" /> + <Key + android:keyLabel="j" /> + <Key + android:keyLabel="k" /> + <Key + android:keyLabel="l" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_l" /> + <Key + android:keyLabel=";" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters=":" /> + <Key + android:keyLabel="\'" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters=""" /> + <Key + android:codes="@integer/key_return" + android:keyIcon="@drawable/sym_keyboard_return" + android:iconPreview="@drawable/sym_keyboard_feedback_return" + android:keyWidth="8.75%p" + android:isModifier="true" + android:keyEdgeFlags="right" /> + </Row> + <Row> + <Key + android:codes="@integer/key_shift" + android:keyIcon="@drawable/sym_keyboard_shift" + android:iconPreview="@drawable/sym_keyboard_feedback_shift" + android:keyWidth="12.5%p" + android:isModifier="true" + android:isSticky="true" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="z" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_z" /> + <Key + android:keyLabel="x" /> + <Key + android:keyLabel="c" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_c" /> + <Key + android:keyLabel="v" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_v" /> + <Key + android:keyLabel="b" /> + <Key + android:keyLabel="n" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="@string/alternates_for_n" /> + <Key + android:keyLabel="m" /> + <Key + android:keyLabel="," + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="*" /> + <Key + android:keyLabel="." + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="!" /> + <Key + android:keyLabel="/" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="\?" /> + <Key + android:codes="@integer/key_shift" + android:keyIcon="@drawable/sym_keyboard_shift" + android:iconPreview="@drawable/sym_keyboard_feedback_shift" + android:keyWidth="12.5%p" + android:isModifier="true" + android:isSticky="true" + android:keyEdgeFlags="left" /> + </Row> + <Row + android:rowEdgeFlags="bottom" + > + <Key + android:keyLabel="<" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="(" + android:horizontalGap="16.25%p" /> + <Key + android:keyLabel=">" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters=")" /> + <Key + android:codes="@integer/key_space" + android:keyIcon="@drawable/sym_keyboard_space" + android:iconPreview="@drawable/sym_keyboard_feedback_space" + android:keyWidth="37.5%p" + android:isModifier="true" /> + <Key + android:keyLabel="_" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="\@" /> + <Key + android:keyLabel="-" + android:popupKeyboard="@xml/kbd_popup_template" + android:popupCharacters="#" /> + </Row> +</Keyboard> diff --git a/java/res/xml-xlarge/kbd_symbols.xml b/java/res/xml-xlarge/kbd_symbols.xml new file mode 100644 index 0000000000000000000000000000000000000000..9ac7716e8e864e89825c9a2952c52da44fd6305b --- /dev/null +++ b/java/res/xml-xlarge/kbd_symbols.xml @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2010, 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:android="http://schemas.android.com/apk/res/android" + android:keyWidth="7.5%p" + android:horizontalGap="0px" + android:verticalGap="0px" + android:keyHeight="@dimen/key_height" +> + <Row + android:rowEdgeFlags="top" + > + <Key + android:codes="@integer/key_tab" + android:keyLabel="Tab" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="1" /> + <Key + android:keyLabel="2" /> + <Key + android:keyLabel="3" /> + <Key + android:keyLabel="4" /> + <Key + android:keyLabel="5" /> + <Key + android:keyLabel="6" /> + <Key + android:keyLabel="7" /> + <Key + android:keyLabel="8" /> + <Key + android:keyLabel="9" /> + <Key + android:keyLabel="0" /> + <Key + android:keyLabel="~" /> + <Key + android:codes="@integer/key_delete" + android:keyIcon="@drawable/sym_keyboard_delete" + android:iconPreview="@drawable/sym_keyboard_feedback_delete" + android:keyWidth="10.5%p" + android:isModifier="true" + android:isRepeatable="true" + android:keyEdgeFlags="right" /> + </Row> + <Row> + <Key + android:codes="@integer/key_symbol" + android:keyLabel="@string/label_symbol_key" + android:keyWidth="8.75%p" + android:isModifier="true" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="\@" /> + <Key + android:keyLabel="#" /> + <Key + android:keyLabel="$" /> + <Key + android:keyLabel="%" /> + <Key + android:keyLabel="^" /> + <Key + android:keyLabel="&" /> + <Key + android:keyLabel="*" /> + <Key + android:keyLabel="-" /> + <Key + android:keyLabel="+" /> + <Key + android:keyLabel="(" /> + <Key + android:keyLabel=")" /> + <Key + android:codes="@integer/key_return" + android:keyIcon="@drawable/sym_keyboard_return" + android:iconPreview="@drawable/sym_keyboard_feedback_return" + android:keyWidth="8.75%p" + android:isModifier="true" + android:keyEdgeFlags="right" /> + </Row> + <Row> + <Key + android:codes="@integer/key_shift" + android:keyIcon="@drawable/sym_keyboard_shift" + android:iconPreview="@drawable/sym_keyboard_feedback_shift" + android:keyWidth="12.5%p" + android:isModifier="true" + android:isSticky="true" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="!" /> + <Key + android:keyLabel=""" /> + <Key + android:keyLabel="\'" /> + <Key + android:keyLabel=":" /> + <Key + android:keyLabel=";" /> + <Key + android:keyLabel="/" /> + <Key + android:keyLabel="\\" /> + <Key + android:keyLabel="," /> + <Key + android:keyLabel="." /> + <Key + android:keyLabel="\?" /> + <Key + android:codes="@integer/key_shift" + android:keyIcon="@drawable/sym_keyboard_shift" + android:iconPreview="@drawable/sym_keyboard_feedback_shift" + android:keyWidth="12.5%p" + android:isModifier="true" + android:isSticky="true" + android:keyEdgeFlags="left" /> + </Row> + <Row + android:rowEdgeFlags="bottom" + > + <Key + android:keyLabel="<" + android:horizontalGap="16.25%p" /> + <Key + android:keyLabel=">" /> + <Key + android:codes="@integer/key_space" + android:keyIcon="@drawable/sym_keyboard_space" + android:iconPreview="@drawable/sym_keyboard_feedback_space" + android:keyWidth="37.5%p" + android:isModifier="true" /> + <Key + android:keyLabel="[" /> + <Key + android:keyLabel="]" /> + </Row> +</Keyboard> diff --git a/java/res/xml-xlarge/kbd_symbols_shift.xml b/java/res/xml-xlarge/kbd_symbols_shift.xml new file mode 100644 index 0000000000000000000000000000000000000000..fbbf68ebdba2bdfc847378f70958a52f1fbfed80 --- /dev/null +++ b/java/res/xml-xlarge/kbd_symbols_shift.xml @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2010, 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:android="http://schemas.android.com/apk/res/android" + android:keyWidth="7.5%p" + android:horizontalGap="0px" + android:verticalGap="0px" + android:keyHeight="@dimen/key_height" +> + <Row + android:rowEdgeFlags="top" + > + <Key + android:codes="@integer/key_tab" + android:keyLabel="Tab" + android:popupKeyboard="@xml/kbd_popup_template" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="∞" /> + <Key + android:keyLabel="±" /> + <Key + android:keyLabel="|" /> + <Key + android:keyLabel="•" /> + <Key + android:keyLabel="√" /> + <Key + android:keyLabel="π" /> + <Key + android:keyLabel="÷" /> + <Key + android:keyLabel="×" /> + <Key + android:keyLabel="±" /> + <Key + android:keyLabel="∆" /> + <Key + android:keyLabel="≈" /> + <Key + android:codes="@integer/key_delete" + android:keyIcon="@drawable/sym_keyboard_delete" + android:iconPreview="@drawable/sym_keyboard_feedback_delete" + android:keyWidth="10.5%p" + android:isModifier="true" + android:isRepeatable="true" + android:keyEdgeFlags="right" /> + </Row> + <Row> + <Key + android:codes="@integer/key_symbol" + android:keyLabel="@string/label_symbol_key" + android:keyWidth="8.75%p" + android:isModifier="true" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="£" /> + <Key + android:keyLabel="¢" /> + <Key + android:keyLabel="¥" /> + <Key + android:keyLabel="€" /> + <Key + android:keyLabel="¼" /> + <Key + android:keyLabel="½" /> + <Key + android:keyLabel="¾" /> + <Key + android:keyLabel="_" /> + <Key + android:keyLabel="=" /> + <Key + android:keyLabel="{" /> + <Key + android:keyLabel="}" /> + <Key + android:codes="@integer/key_return" + android:keyIcon="@drawable/sym_keyboard_return" + android:iconPreview="@drawable/sym_keyboard_feedback_return" + android:keyWidth="8.75%p" + android:isModifier="true" + android:keyEdgeFlags="right" /> + </Row> + <Row> + <Key + android:codes="@integer/key_shift" + android:keyIcon="@drawable/sym_keyboard_shift" + android:iconPreview="@drawable/sym_keyboard_feedback_shift" + android:keyWidth="12.5%p" + android:isModifier="true" + android:isSticky="true" + android:keyEdgeFlags="left" /> + <Key + android:keyLabel="¡" /> + <Key + android:keyLabel="°" /> + <Key + android:keyLabel="©" /> + <Key + android:keyLabel="®" /> + <Key + android:keyLabel="¶" /> + <Key + android:keyLabel="§" /> + <Key + android:keyLabel="¤" /> + <Key + android:keyLabel="¬" /> + <Key + android:keyLabel="…" /> + <Key + android:keyLabel="¿" /> + <Key + android:codes="@integer/key_shift" + android:keyIcon="@drawable/sym_keyboard_shift" + android:iconPreview="@drawable/sym_keyboard_feedback_shift" + android:keyWidth="12.5%p" + android:isModifier="true" + android:isSticky="true" + android:keyEdgeFlags="left" /> + </Row> + <Row + android:rowEdgeFlags="bottom" + > + <Key + android:keyLabel="≤" + android:horizontalGap="16.25%p" /> + <Key + android:keyLabel="≥" /> + <Key + android:codes="@integer/key_space" + android:keyIcon="@drawable/sym_keyboard_space" + android:iconPreview="@drawable/sym_keyboard_feedback_space" + android:keyWidth="37.5%p" + android:isModifier="true" /> + <Key + android:keyLabel="²" /> + <Key + android:keyLabel="³" /> + </Row> +</Keyboard> diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index 14a503bc35ac1b94f60754c5c6b53d771d876df1..9e24ee3226ba2be4d82346fbc4b6a5dbea371d86 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -36,6 +36,8 @@ import android.util.Log; import android.view.ViewConfiguration; import android.view.inputmethod.EditorInfo; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -48,7 +50,7 @@ public class LatinKeyboard extends Keyboard { private Drawable mShiftLockIcon; private Drawable mShiftLockPreviewIcon; - private Drawable mOldShiftIcon; + private final HashMap<Key, Drawable> mOldShiftIcons = new HashMap<Key, Drawable>(); private Drawable mSpaceIcon; private Drawable mSpaceAutoCompletionIndicator; private Drawable mSpacePreviewIcon; @@ -58,7 +60,7 @@ public class LatinKeyboard extends Keyboard { private Drawable m123MicPreviewIcon; private final Drawable mButtonArrowLeftIcon; private final Drawable mButtonArrowRightIcon; - private Key mShiftKey; + private ArrayList<Key> mShiftKeys; private Key mEnterKey; private Key mF1Key; private Key mSpaceKey; @@ -170,6 +172,13 @@ public class LatinKeyboard extends Keyboard { case LatinIME.KEYCODE_SPACE: mSpaceKey = key; break; + case KEYCODE_SHIFT: + // NOTE: This protected method is being called from the base class constructor before + // mShiftKeys gets initialized. + if (mShiftKeys == null) + mShiftKeys = new ArrayList<Key>(); + mShiftKeys.add(key); + break; case KEYCODE_MODE_CHANGE: m123Key = key; m123Label = key.label; @@ -195,7 +204,7 @@ public class LatinKeyboard extends Keyboard { return key; } - void setImeOptions(Resources res, int mode, int options) { + public void setImeOptions(Resources res, int mode, int options) { if (mEnterKey != null) { // Reset some of the rarely used attributes. mEnterKey.popupCharacters = null; @@ -253,61 +262,56 @@ public class LatinKeyboard extends Keyboard { } } } - - void enableShiftLock() { - int index = getShiftKeyIndex(); - if (index >= 0) { - mShiftKey = getKeys().get(index); - if (mShiftKey instanceof LatinKey) { - ((LatinKey)mShiftKey).enableShiftLock(); + + public void enableShiftLock() { + for (final Key key : mShiftKeys) { + if (key instanceof LatinKey) { + ((LatinKey)key).enableShiftLock(); } - mOldShiftIcon = mShiftKey.icon; + mOldShiftIcons.put(key, key.icon); } } - void setShiftLocked(boolean shiftLocked) { - if (mShiftKey != null) { - if (shiftLocked) { - mShiftKey.on = true; - mShiftKey.icon = mShiftLockIcon; - mShiftState = SHIFT_LOCKED; - } else { - mShiftKey.on = false; - mShiftKey.icon = mShiftLockIcon; - mShiftState = SHIFT_ON; - } + public void setShiftLocked(boolean shiftLocked) { + for (final Key key : mShiftKeys) { + key.on = shiftLocked; + key.icon = mShiftLockIcon; } + mShiftState = shiftLocked ? SHIFT_LOCKED : SHIFT_ON; } - boolean isShiftLocked() { + public boolean isShiftLocked() { return mShiftState == SHIFT_LOCKED; } @Override public boolean setShifted(boolean shiftState) { boolean shiftChanged = false; - if (mShiftKey != null) { + if (mShiftKeys.size() > 0) { + for (final Key key : mShiftKeys) { + if (shiftState == false) { + key.on = false; + key.icon = mOldShiftIcons.get(key); + } else if (mShiftState == SHIFT_OFF) { + key.icon = mShiftLockIcon; + } + } if (shiftState == false) { shiftChanged = mShiftState != SHIFT_OFF; mShiftState = SHIFT_OFF; - mShiftKey.on = false; - mShiftKey.icon = mOldShiftIcon; - } else { - if (mShiftState == SHIFT_OFF) { - shiftChanged = mShiftState == SHIFT_OFF; - mShiftState = SHIFT_ON; - mShiftKey.icon = mShiftLockIcon; - } + } else if (mShiftState == SHIFT_OFF) { + shiftChanged = mShiftState == SHIFT_OFF; + mShiftState = SHIFT_ON; } + return shiftChanged; } else { return super.setShifted(shiftState); } - return shiftChanged; } @Override public boolean isShifted() { - if (mShiftKey != null) { + if (mShiftKeys.size() > 0) { return mShiftState != SHIFT_OFF; } else { return super.isShifted();