Support <key-style/> and keyStyle attribute for Keyboard XML
Change-Id: Ie052e989d0180eecfc8c244ba6c60594a46103d1main
parent
4092205833
commit
0b60f83192
|
@ -123,6 +123,8 @@
|
||||||
<!-- The hint icon to display on the key when keyboard is in manual temporary upper case
|
<!-- The hint icon to display on the key when keyboard is in manual temporary upper case
|
||||||
mode. -->
|
mode. -->
|
||||||
<attr name="manualTemporaryUpperCaseHintIcon" format="reference" />
|
<attr name="manualTemporaryUpperCaseHintIcon" format="reference" />
|
||||||
|
<!-- The key style to specify a set of key attributes defined by <key_style/> -->
|
||||||
|
<attr name="keyStyle" format="string" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<declare-styleable name="BaseKeyboard_Row">
|
<declare-styleable name="BaseKeyboard_Row">
|
||||||
|
@ -153,4 +155,9 @@
|
||||||
<attr name="voiceKeyEnabled" format="string" />
|
<attr name="voiceKeyEnabled" format="string" />
|
||||||
<attr name="hasVoiceKey" format="string" />
|
<attr name="hasVoiceKey" format="string" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
|
<declare-styleable name="BaseKeyboard_KeyStyle">
|
||||||
|
<attr name="styleName" format="string" />
|
||||||
|
<attr name="parentStyle" format="string" />
|
||||||
|
</declare-styleable>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
<integer name="key_return">10</integer>
|
<integer name="key_return">10</integer>
|
||||||
<integer name="key_space">32</integer>
|
<integer name="key_space">32</integer>
|
||||||
<integer name="key_shift">-1</integer>
|
<integer name="key_shift">-1</integer>
|
||||||
<integer name="key_symbol">-2</integer>
|
<integer name="key_switch_alpha_symbol">-2</integer>
|
||||||
<integer name="key_delete">-5</integer>
|
<integer name="key_delete">-5</integer>
|
||||||
<!-- Keycode for F1 (function) key. This one switches between language switch & comma/.com -->
|
<!-- Keycode for F1 (function) key. This one switches between language switch & comma/.com -->
|
||||||
<integer name="key_settings">-100</integer>
|
<integer name="key_settings">-100</integer>
|
||||||
|
|
|
@ -219,11 +219,11 @@
|
||||||
<!-- Label for soft enter key when it performs SEND action. Must be short to fit on key! -->
|
<!-- Label for soft enter key when it performs SEND action. Must be short to fit on key! -->
|
||||||
<string name="label_send_key">Send</string>
|
<string name="label_send_key">Send</string>
|
||||||
<!-- Label for "switch to symbols" key. Must be short to fit on key! -->
|
<!-- Label for "switch to symbols" key. Must be short to fit on key! -->
|
||||||
<string name="label_symbol_key">\?123</string>
|
<string name="label_to_symbol_key">\?123</string>
|
||||||
<!-- Label for "switch to numeric" key. Must be short to fit on key! -->
|
<!-- Label for "switch to numeric" key. Must be short to fit on key! -->
|
||||||
<string name="label_phone_key">123</string>
|
<string name="label_phone_key">123</string>
|
||||||
<!-- Label for "switch to alphabetic" key. Must be short to fit on key! -->
|
<!-- Label for "switch to alphabetic" key. Must be short to fit on key! -->
|
||||||
<string name="label_alpha_key">ABC</string>
|
<string name="label_to_alpha_key">ABC</string>
|
||||||
<!-- Label for ALT modifier key. Must be short to fit on key! -->
|
<!-- Label for ALT modifier key. Must be short to fit on key! -->
|
||||||
<string name="label_alt_key">ALT</string>
|
<string name="label_alt_key">ALT</string>
|
||||||
<!-- Label for Backspace modifier key. Must be short to fit on key! -->
|
<!-- Label for Backspace modifier key. Must be short to fit on key! -->
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_more_key"
|
latin:keyLabel="@string/label_more_key"
|
||||||
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
||||||
latin:isModifier="true"
|
latin:isModifier="true"
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_more_key"
|
latin:keyLabel="@string/label_more_key"
|
||||||
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
||||||
latin:isModifier="true"
|
latin:isModifier="true"
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
latin:keyWidth="8.157%p"
|
latin:keyWidth="8.157%p"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_symbol_key"
|
latin:keyLabel="@string/label_to_symbol_key"
|
||||||
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
||||||
latin:keyWidth="11.167%p"
|
latin:keyWidth="11.167%p"
|
||||||
latin:isModifier="true"
|
latin:isModifier="true"
|
||||||
|
|
|
@ -82,8 +82,8 @@
|
||||||
latin:keyWidth="8.157%p"
|
latin:keyWidth="8.157%p"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
latin:keyLabel="@string/label_to_alpha_key"
|
||||||
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
||||||
latin:keyWidth="11.167%p"
|
latin:keyWidth="11.167%p"
|
||||||
latin:isModifier="true"
|
latin:isModifier="true"
|
||||||
|
|
|
@ -72,8 +72,8 @@
|
||||||
latin:keyWidth="8.157%p"
|
latin:keyWidth="8.157%p"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
latin:keyLabel="@string/label_to_alpha_key"
|
||||||
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
latin:keyLabelOption="fontItalic|alignLeft|alignBottom"
|
||||||
latin:keyWidth="11.167%p"
|
latin:keyWidth="11.167%p"
|
||||||
latin:isModifier="true"
|
latin:isModifier="true"
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
<?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.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<merge
|
||||||
|
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="functionalKeyStyle"
|
||||||
|
latin:isModifier="true" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="shiftKeyStyle"
|
||||||
|
latin:codes="@integer/key_shift"
|
||||||
|
latin:keyIcon="@drawable/sym_keyboard_shift"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_shift"
|
||||||
|
latin:parentStyle="functionalKeyStyle"
|
||||||
|
latin:isSticky="true" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="deleteKeyStyle"
|
||||||
|
latin:codes="@integer/key_delete"
|
||||||
|
latin:keyIcon="@drawable/sym_keyboard_delete"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_delete"
|
||||||
|
latin:parentStyle="functionalKeyStyle"
|
||||||
|
latin:isRepeatable="true" />
|
||||||
|
<switch>
|
||||||
|
<!-- When this qwerty keyboard has no voice key but voice key is enabled, then symbol
|
||||||
|
keyboard will have mic key. That means we should use "?123mic" key here. -->
|
||||||
|
<case
|
||||||
|
latin:voiceKeyEnabled="true"
|
||||||
|
latin:hasVoiceKey="false"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="toSymbolKeyStyle"
|
||||||
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
|
latin:keyIcon="@drawable/sym_keyboard_123_mic"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
</case>
|
||||||
|
<default>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="toSymbolKeyStyle"
|
||||||
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
|
latin:keyLabel="@string/label_to_symbol_key"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
</default>
|
||||||
|
</switch>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="toAlphaKeyStyle"
|
||||||
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
|
latin:keyLabel="@string/label_to_alpha_key"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="settingsKeyStyle"
|
||||||
|
latin:codes="@integer/key_settings"
|
||||||
|
latin:keyIcon="@drawable/sym_keyboard_settings"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_settings"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="spaceKeyStyle"
|
||||||
|
latin:codes="@integer/key_space"
|
||||||
|
latin:keyIcon="@drawable/sym_keyboard_space"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="tabKeyStyle"
|
||||||
|
latin:codes="@integer/key_tab"
|
||||||
|
latin:keyIcon="@drawable/sym_keyboard_tab"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_tab"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="returnKeyStyle"
|
||||||
|
latin:codes="@integer/key_return"
|
||||||
|
latin:keyIcon="@drawable/sym_keyboard_return"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_return"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="altKeyStyle"
|
||||||
|
latin:codes="@integer/key_shift"
|
||||||
|
latin:keyLabel="@string/label_alt_key"
|
||||||
|
latin:parentStyle="functionalKeyStyle"
|
||||||
|
latin:isSticky="true" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="smileyKeyStyle"
|
||||||
|
latin:keyLabel=":-)"
|
||||||
|
latin:keyOutputText=":-) "
|
||||||
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
|
latin:popupKeyboard="@xml/popup_smileys"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="micKeyStyle"
|
||||||
|
latin:codes="@integer/key_voice"
|
||||||
|
latin:popupKeyboard="@xml/popup_mic"
|
||||||
|
latin:keyIcon="@drawable/sym_keyboard_mic"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_mic"
|
||||||
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
|
latin:parentStyle="functionalKeyStyle" />
|
||||||
|
</merge>
|
|
@ -25,6 +25,8 @@
|
||||||
latin:verticalGap="@dimen/key_bottom_gap"
|
latin:verticalGap="@dimen/key_bottom_gap"
|
||||||
latin:keyHeight="@dimen/key_height"
|
latin:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/kbd_functional_key_style" />
|
||||||
<Row
|
<Row
|
||||||
latin:rowEdgeFlags="top"
|
latin:rowEdgeFlags="top"
|
||||||
>
|
>
|
||||||
|
@ -40,8 +42,8 @@
|
||||||
latin:keyIcon="@drawable/sym_keyboard_num3" />
|
latin:keyIcon="@drawable/sym_keyboard_num3" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="-"
|
latin:keyLabel="-"
|
||||||
|
latin:keyStyle="functionalKeyStyle"
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
|
@ -57,8 +59,8 @@
|
||||||
latin:keyIcon="@drawable/sym_keyboard_num6" />
|
latin:keyIcon="@drawable/sym_keyboard_num6" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="."
|
latin:keyLabel="."
|
||||||
|
latin:keyStyle="functionalKeyStyle"
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
|
@ -73,19 +75,15 @@
|
||||||
latin:codes="57"
|
latin:codes="57"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_num9" />
|
latin:keyIcon="@drawable/sym_keyboard_num9" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_delete"
|
latin:keyStyle="deleteKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_delete"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_delete"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:isRepeatable="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<Row
|
<Row
|
||||||
latin:rowEdgeFlags="bottom"
|
latin:rowEdgeFlags="bottom"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_numalt"
|
latin:keyIcon="@drawable/sym_keyboard_numalt"
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_numalt"
|
latin:iconPreview="@drawable/sym_keyboard_feedback_numalt"
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
|
@ -97,10 +95,8 @@
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyIcon="@drawable/sym_keyboard_space"
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space" />
|
latin:iconPreview="@drawable/sym_keyboard_feedback_space" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
</Keyboard>
|
</Keyboard>
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
latin:rowEdgeFlags="bottom"
|
latin:rowEdgeFlags="bottom"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyIcon="@drawable/sym_bkeyboard_numalt"
|
latin:keyIcon="@drawable/sym_bkeyboard_numalt"
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_numalt" />
|
latin:iconPreview="@drawable/sym_keyboard_feedback_numalt" />
|
||||||
<Key
|
<Key
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
latin:verticalGap="@dimen/key_bottom_gap"
|
latin:verticalGap="@dimen/key_bottom_gap"
|
||||||
latin:keyHeight="@dimen/key_height"
|
latin:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
|
<include latin:keyboardLayout="@xml/kbd_functional_key_style" />
|
||||||
<Row
|
<Row
|
||||||
latin:rowEdgeFlags="top"
|
latin:rowEdgeFlags="top"
|
||||||
>
|
>
|
||||||
|
@ -37,8 +38,8 @@
|
||||||
latin:keyLabel=")" />
|
latin:keyLabel=")" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="-"
|
latin:keyLabel="-"
|
||||||
|
latin:keyStyle="functionalKeyStyle"
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
|
@ -54,8 +55,8 @@
|
||||||
latin:keyLabel="," />
|
latin:keyLabel="," />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="."
|
latin:keyLabel="."
|
||||||
|
latin:keyStyle="functionalKeyStyle"
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
|
@ -71,19 +72,15 @@
|
||||||
latin:codes="35"
|
latin:codes="35"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_numpound" />
|
latin:keyIcon="@drawable/sym_keyboard_numpound" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_delete"
|
latin:keyStyle="deleteKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_delete"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_delete"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:isRepeatable="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<Row
|
<Row
|
||||||
latin:rowEdgeFlags="bottom"
|
latin:rowEdgeFlags="bottom"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_phone_key"
|
latin:keyLabel="@string/label_phone_key"
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
|
@ -93,10 +90,8 @@
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyIcon="@drawable/sym_keyboard_space"
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space" />
|
latin:iconPreview="@drawable/sym_keyboard_feedback_space" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
</Keyboard>
|
</Keyboard>
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
latin:rowEdgeFlags="bottom"
|
latin:rowEdgeFlags="bottom"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_phone_key"
|
latin:keyLabel="@string/label_phone_key"
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
latin:verticalGap="@dimen/key_bottom_gap"
|
latin:verticalGap="@dimen/key_bottom_gap"
|
||||||
latin:keyHeight="@dimen/key_height"
|
latin:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/kbd_functional_key_style" />
|
||||||
<Row
|
<Row
|
||||||
latin:rowEdgeFlags="top"
|
latin:rowEdgeFlags="top"
|
||||||
>
|
>
|
||||||
|
@ -117,12 +119,8 @@
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_shift"
|
latin:keyStyle="shiftKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_shift"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_shift"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:isSticky="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="z"
|
latin:keyLabel="z"
|
||||||
|
@ -147,13 +145,10 @@
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="m" />
|
latin:keyLabel="m" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_delete"
|
latin:keyStyle="deleteKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_delete"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_delete"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:isRepeatable="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<include latin:keyboardLayout="@xml/kbd_qwerty_row4" />
|
<include
|
||||||
|
latin:keyboardLayout="@xml/kbd_qwerty_row4" />
|
||||||
</Keyboard>
|
</Keyboard>
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
latin:hasVoiceKey="false"
|
latin:hasVoiceKey="false"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyIcon="@drawable/sym_bkeyboard_123_mic"
|
latin:keyIcon="@drawable/sym_bkeyboard_123_mic"
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
|
latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_symbol_key"
|
latin:keyLabel="@string/label_symbol_key"
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
latin:isModifier="true"
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
latin:hasVoiceKey="false"
|
latin:hasVoiceKey="false"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyIcon="@drawable/sym_bkeyboard_123_mic"
|
latin:keyIcon="@drawable/sym_bkeyboard_123_mic"
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
|
latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_symbol_key"
|
latin:keyLabel="@string/label_symbol_key"
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
latin:isModifier="true"
|
||||||
|
|
|
@ -40,23 +40,24 @@
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
latin:isModifier="true" />
|
latin:isModifier="true" />
|
||||||
</case>
|
</case>
|
||||||
<case
|
|
||||||
latin:hasVoiceKey="true"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:codes="@integer/key_voice"
|
|
||||||
latin:popupKeyboard="@xml/popup_mic"
|
|
||||||
latin:keyIcon="@drawable/sym_keyboard_mic"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_mic"
|
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
</case>
|
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<switch>
|
||||||
latin:keyLabel=","
|
<case
|
||||||
latin:popupKeyboard="@xml/popup_comma"
|
latin:hasVoiceKey="true"
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
>
|
||||||
latin:isModifier="true" />
|
<Key
|
||||||
|
latin:keyStyle="micKeyStyle" />
|
||||||
|
</case>
|
||||||
|
<case
|
||||||
|
latin:hasVoiceKey="false"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keyLabel=","
|
||||||
|
latin:popupKeyboard="@xml/popup_comma"
|
||||||
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
|
latin:isModifier="true" />
|
||||||
|
</case>
|
||||||
|
</switch>
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -29,8 +29,10 @@
|
||||||
<case
|
<case
|
||||||
latin:hasSettingsKey="false"
|
latin:hasSettingsKey="false"
|
||||||
>
|
>
|
||||||
<include
|
<Key
|
||||||
latin:keyboardLayout="@xml/kbd_qwerty_symbol" />
|
latin:keyStyle="toSymbolKeyStyle"
|
||||||
|
latin:keyWidth="20%p"
|
||||||
|
latin:keyEdgeFlags="left" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/kbd_qwerty_f1" />
|
latin:keyboardLayout="@xml/kbd_qwerty_f1" />
|
||||||
<switch>
|
<switch>
|
||||||
|
@ -38,52 +40,36 @@
|
||||||
latin:mode="web"
|
latin:mode="web"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_space"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyWidth="20%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
|
||||||
latin:keyWidth="20%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_tab"
|
latin:keyStyle="tabKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_tab"
|
latin:keyWidth="20%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_tab"
|
|
||||||
latin:keyWidth="20%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_space"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyWidth="40%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
|
||||||
latin:keyWidth="40%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="."
|
latin:keyLabel="."
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
latin:popupKeyboard="@xml/popup_punctuation"
|
latin:popupKeyboard="@xml/popup_punctuation"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
<switch>
|
<switch>
|
||||||
<case
|
<case
|
||||||
latin:mode="im"
|
latin:mode="im"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel=":-)"
|
latin:keyStyle="smileyKeyStyle"
|
||||||
latin:keyOutputText=":-) "
|
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
|
||||||
latin:popupKeyboard="@xml/popup_smileys"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_return"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
|
@ -91,13 +77,12 @@
|
||||||
<case
|
<case
|
||||||
latin:hasSettingsKey="true"
|
latin:hasSettingsKey="true"
|
||||||
>
|
>
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/kbd_qwerty_symbol" />
|
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_settings"
|
latin:keyStyle="toSymbolKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_settings"
|
latin:keyWidth="15%p"
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_settings"
|
latin:keyEdgeFlags="left" />
|
||||||
latin:isModifier="true" />
|
<Key
|
||||||
|
latin:keyStyle="settingsKeyStyle" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/kbd_qwerty_f1" />
|
latin:keyboardLayout="@xml/kbd_qwerty_f1" />
|
||||||
<switch>
|
<switch>
|
||||||
|
@ -105,62 +90,43 @@
|
||||||
latin:mode="web"
|
latin:mode="web"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_space"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyWidth="30%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
|
||||||
latin:keyWidth="30%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_tab"
|
latin:keyStyle="tabKeyStyle" />
|
||||||
latin:keyIcon="@drawable/sym_keyboard_tab"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_tab"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_space"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyWidth="30%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
|
||||||
latin:keyWidth="30%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="."
|
latin:keyLabel="."
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
latin:popupKeyboard="@xml/popup_punctuation"
|
latin:popupKeyboard="@xml/popup_punctuation"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
<switch>
|
<switch>
|
||||||
<case
|
<case
|
||||||
latin:mode="im"
|
latin:mode="im"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel=":-)"
|
latin:keyStyle="smileyKeyStyle"
|
||||||
latin:keyOutputText=":-) "
|
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
|
||||||
latin:popupKeyboard="@xml/popup_smileys"
|
|
||||||
latin:keyWidth="25%p"
|
latin:keyWidth="25%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</case>
|
</case>
|
||||||
<case
|
<case
|
||||||
latin:mode="web"
|
latin:mode="web"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_return"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_return"
|
|
||||||
latin:keyWidth="25%p"
|
latin:keyWidth="25%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
<?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.
|
|
||||||
*/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<merge
|
|
||||||
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:hasSettingsKey="false"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<!-- When this qwerty keyboard has no voice key but voice key is enabled, then
|
|
||||||
symbol keyboard will have mic key. That means we should use "?123mic" key here.
|
|
||||||
-->
|
|
||||||
<case
|
|
||||||
latin:voiceKeyEnabled="true"
|
|
||||||
latin:hasVoiceKey="false"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:codes="@integer/key_symbol"
|
|
||||||
latin:keyIcon="@drawable/sym_keyboard_123_mic"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
|
|
||||||
latin:keyWidth="20%p"
|
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
|
||||||
</case>
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:codes="@integer/key_symbol"
|
|
||||||
latin:keyLabel="@string/label_symbol_key"
|
|
||||||
latin:keyWidth="20%p"
|
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:hasSettingsKey="true"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<!-- When this qwerty keyboard has no voice key but voice key is enabled, then
|
|
||||||
symbol keyboard will have mic key. That means we should use "?123mic" key here.
|
|
||||||
-->
|
|
||||||
<case
|
|
||||||
latin:voiceKeyEnabled="true"
|
|
||||||
latin:hasVoiceKey="false"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:codes="@integer/key_symbol"
|
|
||||||
latin:keyIcon="@drawable/sym_keyboard_123_mic"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
|
|
||||||
latin:keyWidth="15%p"
|
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
|
||||||
</case>
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:codes="@integer/key_symbol"
|
|
||||||
latin:keyLabel="@string/label_symbol_key"
|
|
||||||
latin:keyWidth="15%p"
|
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</case>
|
|
||||||
</switch>
|
|
||||||
</merge>
|
|
|
@ -25,6 +25,8 @@
|
||||||
latin:verticalGap="@dimen/key_bottom_gap"
|
latin:verticalGap="@dimen/key_bottom_gap"
|
||||||
latin:keyHeight="@dimen/key_height"
|
latin:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/kbd_functional_key_style" />
|
||||||
<Row
|
<Row
|
||||||
latin:rowEdgeFlags="top"
|
latin:rowEdgeFlags="top"
|
||||||
>
|
>
|
||||||
|
@ -105,11 +107,8 @@
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_shift"
|
latin:keyStyle="altKeyStyle"
|
||||||
latin:keyLabel="@string/label_alt_key"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:isSticky="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="!"
|
latin:keyLabel="!"
|
||||||
|
@ -134,12 +133,8 @@
|
||||||
latin:popupKeyboard="@xml/kbd_popup_template"
|
latin:popupKeyboard="@xml/kbd_popup_template"
|
||||||
latin:popupCharacters="¿" />
|
latin:popupCharacters="¿" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_delete"
|
latin:keyStyle="deleteKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_delete"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_delete"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:isRepeatable="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<include latin:keyboardLayout="@xml/kbd_symbols_row4" />
|
<include latin:keyboardLayout="@xml/kbd_symbols_row4" />
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
latin:hasSettingsKey="false"
|
latin:hasSettingsKey="false"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
latin:keyLabel="@string/label_to_alpha_key"
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<include
|
<include
|
||||||
|
@ -70,8 +70,8 @@
|
||||||
latin:hasSettingsKey="true"
|
latin:hasSettingsKey="true"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
latin:keyLabel="@string/label_to_alpha_key"
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
|
|
|
@ -26,12 +26,7 @@
|
||||||
latin:hasVoiceKey="true"
|
latin:hasVoiceKey="true"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_voice"
|
latin:keyStyle="micKeyStyle" />
|
||||||
latin:popupKeyboard="@xml/popup_mic"
|
|
||||||
latin:keyIcon="@drawable/sym_keyboard_mic"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_mic"
|
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
</case>
|
</case>
|
||||||
<case
|
<case
|
||||||
latin:hasVoiceKey="false"
|
latin:hasVoiceKey="false"
|
||||||
|
@ -40,7 +35,7 @@
|
||||||
latin:keyLabel=","
|
latin:keyLabel=","
|
||||||
latin:popupKeyboard="@xml/popup_comma"
|
latin:popupKeyboard="@xml/popup_comma"
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
</case>
|
</case>
|
||||||
</switch>
|
</switch>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -29,44 +29,32 @@
|
||||||
latin:hasSettingsKey="false"
|
latin:hasSettingsKey="false"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:keyStyle="toAlphaKeyStyle"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/kbd_symbols_f1" />
|
latin:keyboardLayout="@xml/kbd_symbols_f1" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_space"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyWidth="40%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
|
||||||
latin:keyWidth="40%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="."
|
latin:keyLabel="."
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
latin:popupKeyboard="@xml/popup_punctuation"
|
latin:popupKeyboard="@xml/popup_punctuation"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
<switch>
|
<switch>
|
||||||
<case
|
<case
|
||||||
latin:mode="im"
|
latin:mode="im"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel=":-)"
|
latin:keyStyle="smileyKeyStyle"
|
||||||
latin:keyOutputText=":-) "
|
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
|
||||||
latin:popupKeyboard="@xml/popup_smileys"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_return"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
|
@ -75,49 +63,34 @@
|
||||||
latin:hasSettingsKey="true"
|
latin:hasSettingsKey="true"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:keyStyle="toAlphaKeyStyle"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_settings"
|
latin:keyStyle="settingsKeyStyle" />
|
||||||
latin:keyIcon="@drawable/sym_keyboard_settings"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_settings"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/kbd_symbols_f1" />
|
latin:keyboardLayout="@xml/kbd_symbols_f1" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_space"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyWidth="30%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
|
||||||
latin:keyWidth="30%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="."
|
latin:keyLabel="."
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
latin:keyHintIcon="@drawable/hint_popup"
|
||||||
latin:popupKeyboard="@xml/popup_punctuation"
|
latin:popupKeyboard="@xml/popup_punctuation"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
<switch>
|
<switch>
|
||||||
<case
|
<case
|
||||||
latin:mode="im"
|
latin:mode="im"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel=":-)"
|
latin:keyStyle="smileyKeyStyle"
|
||||||
latin:keyOutputText=":-) "
|
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
|
||||||
latin:popupKeyboard="@xml/popup_smileys"
|
|
||||||
latin:keyWidth="25%p"
|
latin:keyWidth="25%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_return"
|
|
||||||
latin:keyWidth="25%p"
|
latin:keyWidth="25%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
latin:verticalGap="@dimen/key_bottom_gap"
|
latin:verticalGap="@dimen/key_bottom_gap"
|
||||||
latin:keyHeight="@dimen/key_height"
|
latin:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/kbd_functional_key_style" />
|
||||||
<Row
|
<Row
|
||||||
latin:rowEdgeFlags="top"
|
latin:rowEdgeFlags="top"
|
||||||
>
|
>
|
||||||
|
@ -58,7 +60,8 @@
|
||||||
<Row>
|
<Row>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_tab"
|
latin:codes="@integer/key_tab"
|
||||||
latin:keyLabel="\u21E5"
|
latin:keyIcon="@drawable/sym_keyboard_tab"
|
||||||
|
latin:iconPreview="@drawable/sym_keyboard_feedback_tab"
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="£" />
|
latin:keyLabel="£" />
|
||||||
|
@ -86,11 +89,8 @@
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_shift"
|
latin:keyStyle="shiftKeyStyle"
|
||||||
latin:keyLabel="@string/label_alt_key"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:isSticky="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="™" />
|
latin:keyLabel="™" />
|
||||||
|
@ -113,12 +113,8 @@
|
||||||
latin:popupKeyboard="@xml/kbd_popup_template"
|
latin:popupKeyboard="@xml/kbd_popup_template"
|
||||||
latin:popupCharacters="≥»›" />
|
latin:popupCharacters="≥»›" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_delete"
|
latin:keyStyle="deleteKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_delete"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_delete"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:isRepeatable="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</Row>
|
</Row>
|
||||||
<include latin:keyboardLayout="@xml/kbd_symbols_shift_row4" />
|
<include latin:keyboardLayout="@xml/kbd_symbols_shift_row4" />
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
latin:hasSettingsKey="false"
|
latin:hasSettingsKey="false"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
latin:keyLabel="@string/label_to_alpha_key"
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
|
@ -68,8 +68,8 @@
|
||||||
latin:hasSettingsKey="true"
|
latin:hasSettingsKey="true"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:codes="@integer/key_switch_alpha_symbol"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
latin:keyLabel="@string/label_to_alpha_key"
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
|
|
|
@ -29,43 +29,31 @@
|
||||||
latin:hasSettingsKey="false"
|
latin:hasSettingsKey="false"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:keyStyle="toAlphaKeyStyle"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="„"
|
latin:keyLabel="„"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_space"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyWidth="40%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
|
||||||
latin:keyWidth="40%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="…"
|
latin:keyLabel="…"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
<switch>
|
<switch>
|
||||||
<case
|
<case
|
||||||
latin:mode="im"
|
latin:mode="im"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel=":-)"
|
latin:keyStyle="smileyKeyStyle"
|
||||||
latin:keyOutputText=":-) "
|
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
|
||||||
latin:popupKeyboard="@xml/popup_smileys"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_return"
|
|
||||||
latin:keyWidth="20%p"
|
latin:keyWidth="20%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
|
@ -74,48 +62,33 @@
|
||||||
latin:hasSettingsKey="true"
|
latin:hasSettingsKey="true"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_symbol"
|
latin:keyStyle="toAlphaKeyStyle"
|
||||||
latin:keyLabel="@string/label_alpha_key"
|
|
||||||
latin:keyWidth="15%p"
|
latin:keyWidth="15%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="left" />
|
latin:keyEdgeFlags="left" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_settings"
|
latin:keyStyle="settingsKeyStyle" />
|
||||||
latin:keyIcon="@drawable/sym_keyboard_settings"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_settings"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="„"
|
latin:keyLabel="„"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_space"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_space"
|
latin:keyWidth="30%p" />
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_space"
|
|
||||||
latin:keyWidth="30%p"
|
|
||||||
latin:isModifier="true" />
|
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel="…"
|
latin:keyLabel="…"
|
||||||
latin:isModifier="true" />
|
latin:keyStyle="functionalKeyStyle" />
|
||||||
<switch>
|
<switch>
|
||||||
<case
|
<case
|
||||||
latin:mode="im"
|
latin:mode="im"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:keyLabel=":-)"
|
latin:keyStyle="smileyKeyStyle"
|
||||||
latin:keyOutputText=":-) "
|
|
||||||
latin:keyHintIcon="@drawable/hint_popup"
|
|
||||||
latin:popupKeyboard="@xml/popup_smileys"
|
|
||||||
latin:keyWidth="25%p"
|
latin:keyWidth="25%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</case>
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:codes="@integer/key_return"
|
latin:keyStyle="returnKeyStyle"
|
||||||
latin:keyIcon="@drawable/sym_keyboard_return"
|
|
||||||
latin:iconPreview="@drawable/sym_keyboard_feedback_return"
|
|
||||||
latin:keyWidth="25%p"
|
latin:keyWidth="25%p"
|
||||||
latin:isModifier="true"
|
|
||||||
latin:keyEdgeFlags="right" />
|
latin:keyEdgeFlags="right" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
package com.android.inputmethod.latin;
|
package com.android.inputmethod.latin;
|
||||||
|
|
||||||
|
import com.android.inputmethod.latin.BaseKeyboardParser.ParseException;
|
||||||
|
import com.android.inputmethod.latin.KeyStyles.KeyStyle;
|
||||||
import com.android.inputmethod.latin.KeyboardSwitcher.KeyboardId;
|
import com.android.inputmethod.latin.KeyboardSwitcher.KeyboardId;
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
@ -26,14 +28,11 @@ import android.content.res.TypedArray;
|
||||||
import android.content.res.XmlResourceParser;
|
import android.content.res.XmlResourceParser;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
|
||||||
import android.util.TypedValue;
|
|
||||||
import android.util.Xml;
|
import android.util.Xml;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.StringTokenizer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads an XML description of a keyboard and stores the attributes of the keys. A keyboard
|
* Loads an XML description of a keyboard and stores the attributes of the keys. A keyboard
|
||||||
|
@ -284,7 +283,8 @@ public class BaseKeyboard {
|
||||||
* @param y the y coordinate of the top-left
|
* @param y the y coordinate of the top-left
|
||||||
* @param parser the XML parser containing the attributes for this key
|
* @param parser the XML parser containing the attributes for this key
|
||||||
*/
|
*/
|
||||||
public Key(Resources res, Row parent, int x, int y, XmlResourceParser parser) {
|
public Key(Resources res, Row parent, int x, int y, XmlResourceParser parser,
|
||||||
|
KeyStyles keyStyles) {
|
||||||
this(parent);
|
this(parent);
|
||||||
|
|
||||||
TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
|
TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
|
||||||
|
@ -299,44 +299,47 @@ public class BaseKeyboard {
|
||||||
R.styleable.BaseKeyboard_keyWidth,
|
R.styleable.BaseKeyboard_keyWidth,
|
||||||
keyboard.mDisplayWidth, parent.defaultWidth) - gap;
|
keyboard.mDisplayWidth, parent.defaultWidth) - gap;
|
||||||
a.recycle();
|
a.recycle();
|
||||||
|
|
||||||
a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.BaseKeyboard_Key);
|
a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.BaseKeyboard_Key);
|
||||||
|
|
||||||
|
final KeyStyle style;
|
||||||
|
if (a.hasValue(R.styleable.BaseKeyboard_Key_keyStyle)) {
|
||||||
|
String styleName = a.getString(R.styleable.BaseKeyboard_Key_keyStyle);
|
||||||
|
style = keyStyles.getKeyStyle(styleName);
|
||||||
|
if (style == null)
|
||||||
|
throw new ParseException("Unknown key style: " + styleName, parser);
|
||||||
|
} else {
|
||||||
|
style = keyStyles.getEmptyKeyStyle();
|
||||||
|
}
|
||||||
|
|
||||||
// Horizontal gap is divided equally to both sides of the key.
|
// Horizontal gap is divided equally to both sides of the key.
|
||||||
this.x = x + gap / 2;
|
this.x = x + gap / 2;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
|
|
||||||
TypedValue codesValue = new TypedValue();
|
codes = style.getIntArray(a, R.styleable.BaseKeyboard_Key_codes);
|
||||||
a.getValue(R.styleable.BaseKeyboard_Key_codes, codesValue);
|
iconPreview = style.getDrawable(a, R.styleable.BaseKeyboard_Key_iconPreview);
|
||||||
if (codesValue.type == TypedValue.TYPE_INT_DEC
|
|
||||||
|| codesValue.type == TypedValue.TYPE_INT_HEX) {
|
|
||||||
codes = new int[] { codesValue.data };
|
|
||||||
} else if (codesValue.type == TypedValue.TYPE_STRING) {
|
|
||||||
codes = parseCSV(codesValue.string.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
iconPreview = a.getDrawable(R.styleable.BaseKeyboard_Key_iconPreview);
|
|
||||||
setDefaultBounds(iconPreview);
|
setDefaultBounds(iconPreview);
|
||||||
popupCharacters = a.getText(R.styleable.BaseKeyboard_Key_popupCharacters);
|
popupCharacters = style.getText(a, R.styleable.BaseKeyboard_Key_popupCharacters);
|
||||||
popupResId = a.getResourceId(R.styleable.BaseKeyboard_Key_popupKeyboard, 0);
|
popupResId = style.getResourceId(a, R.styleable.BaseKeyboard_Key_popupKeyboard, 0);
|
||||||
repeatable = a.getBoolean(R.styleable.BaseKeyboard_Key_isRepeatable, false);
|
repeatable = style.getBoolean(a, R.styleable.BaseKeyboard_Key_isRepeatable, false);
|
||||||
modifier = a.getBoolean(R.styleable.BaseKeyboard_Key_isModifier, false);
|
modifier = style.getBoolean(a, R.styleable.BaseKeyboard_Key_isModifier, false);
|
||||||
sticky = a.getBoolean(R.styleable.BaseKeyboard_Key_isSticky, false);
|
sticky = style.getBoolean(a, R.styleable.BaseKeyboard_Key_isSticky, false);
|
||||||
edgeFlags = a.getInt(R.styleable.BaseKeyboard_Key_keyEdgeFlags, 0);
|
edgeFlags = style.getFlag(a, R.styleable.BaseKeyboard_Key_keyEdgeFlags, 0);
|
||||||
edgeFlags |= parent.rowEdgeFlags;
|
edgeFlags |= parent.rowEdgeFlags;
|
||||||
|
|
||||||
icon = a.getDrawable(R.styleable.BaseKeyboard_Key_keyIcon);
|
icon = style.getDrawable(a, R.styleable.BaseKeyboard_Key_keyIcon);
|
||||||
setDefaultBounds(icon);
|
setDefaultBounds(icon);
|
||||||
hintIcon = a.getDrawable(R.styleable.BaseKeyboard_Key_keyHintIcon);
|
hintIcon = style.getDrawable(a, R.styleable.BaseKeyboard_Key_keyHintIcon);
|
||||||
setDefaultBounds(hintIcon);
|
setDefaultBounds(hintIcon);
|
||||||
manualTemporaryUpperCaseHintIcon = a.getDrawable(
|
manualTemporaryUpperCaseHintIcon = style.getDrawable(a,
|
||||||
R.styleable.BaseKeyboard_Key_manualTemporaryUpperCaseHintIcon);
|
R.styleable.BaseKeyboard_Key_manualTemporaryUpperCaseHintIcon);
|
||||||
setDefaultBounds(manualTemporaryUpperCaseHintIcon);
|
setDefaultBounds(manualTemporaryUpperCaseHintIcon);
|
||||||
|
|
||||||
label = a.getText(R.styleable.BaseKeyboard_Key_keyLabel);
|
label = style.getText(a, R.styleable.BaseKeyboard_Key_keyLabel);
|
||||||
labelOption = a.getInt(R.styleable.BaseKeyboard_Key_keyLabelOption, 0);
|
labelOption = style.getFlag(a, R.styleable.BaseKeyboard_Key_keyLabelOption, 0);
|
||||||
manualTemporaryUpperCaseCode = a.getInt(
|
manualTemporaryUpperCaseCode = style.getInt(a,
|
||||||
R.styleable.BaseKeyboard_Key_manualTemporaryUpperCaseCode, 0);
|
R.styleable.BaseKeyboard_Key_manualTemporaryUpperCaseCode, 0);
|
||||||
text = a.getText(R.styleable.BaseKeyboard_Key_keyOutputText);
|
text = style.getText(a, R.styleable.BaseKeyboard_Key_keyOutputText);
|
||||||
|
|
||||||
if (codes == null && !TextUtils.isEmpty(label)) {
|
if (codes == null && !TextUtils.isEmpty(label)) {
|
||||||
codes = new int[] { label.charAt(0) };
|
codes = new int[] { label.charAt(0) };
|
||||||
|
@ -366,28 +369,6 @@ public class BaseKeyboard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int[] parseCSV(String value) {
|
|
||||||
int count = 0;
|
|
||||||
int lastIndex = 0;
|
|
||||||
if (value.length() > 0) {
|
|
||||||
count++;
|
|
||||||
while ((lastIndex = value.indexOf(",", lastIndex + 1)) > 0) {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int[] values = new int[count];
|
|
||||||
count = 0;
|
|
||||||
StringTokenizer st = new StringTokenizer(value, ",");
|
|
||||||
while (st.hasMoreTokens()) {
|
|
||||||
try {
|
|
||||||
values[count++] = Integer.parseInt(st.nextToken());
|
|
||||||
} catch (NumberFormatException nfe) {
|
|
||||||
Log.e(TAG, "Error parsing keycodes " + value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detects if a point falls inside this key.
|
* Detects if a point falls inside this key.
|
||||||
* @param x the x-coordinate of the point
|
* @param x the x-coordinate of the point
|
||||||
|
@ -560,6 +541,10 @@ public class BaseKeyboard {
|
||||||
mTotalHeight = y + mDefaultHeight;
|
mTotalHeight = y + mDefaultHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public KeyboardId getKeyboardId() {
|
||||||
|
return mId;
|
||||||
|
}
|
||||||
|
|
||||||
public List<Key> getKeys() {
|
public List<Key> getKeys() {
|
||||||
return mKeys;
|
return mKeys;
|
||||||
}
|
}
|
||||||
|
@ -688,14 +673,15 @@ public class BaseKeyboard {
|
||||||
|
|
||||||
// TODO should be private
|
// TODO should be private
|
||||||
protected BaseKeyboard.Key createKeyFromXml(Resources res, Row parent, int x, int y,
|
protected BaseKeyboard.Key createKeyFromXml(Resources res, Row parent, int x, int y,
|
||||||
XmlResourceParser parser) {
|
XmlResourceParser parser, KeyStyles keyStyles) {
|
||||||
return new BaseKeyboard.Key(res, parent, x, y, parser);
|
return new BaseKeyboard.Key(res, parent, x, y, parser, keyStyles);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadKeyboard(Context context, int xmlLayoutResId) {
|
private void loadKeyboard(Context context, int xmlLayoutResId) {
|
||||||
try {
|
try {
|
||||||
BaseKeyboardParser parser = new BaseKeyboardParser(this, context.getResources());
|
final Resources res = context.getResources();
|
||||||
parser.parseKeyboard(context.getResources().getXml(xmlLayoutResId));
|
BaseKeyboardParser parser = new BaseKeyboardParser(this, res);
|
||||||
|
parser.parseKeyboard(res.getXml(xmlLayoutResId));
|
||||||
// mTotalWidth is the width of this keyboard which is maximum width of row.
|
// mTotalWidth is the width of this keyboard which is maximum width of row.
|
||||||
mTotalWidth = parser.getMaxRowWidth();
|
mTotalWidth = parser.getMaxRowWidth();
|
||||||
mTotalHeight = parser.getTotalHeight();
|
mTotalHeight = parser.getTotalHeight();
|
||||||
|
|
|
@ -83,27 +83,25 @@ import java.util.List;
|
||||||
* >/default<
|
* >/default<
|
||||||
* >/switch<
|
* >/switch<
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
* You can declare Key style and specify styles within Key tags.
|
||||||
* TODO: These are some random ideas to improve this parser.
|
* <pre>
|
||||||
* - can specify keyWidth attribute by multiplication of default keyWidth
|
|
||||||
* for example: keyWidth="200%b" ("b" stands for "base")
|
|
||||||
* - can declare style and specify styles within tags.
|
|
||||||
* for example:
|
|
||||||
* >switch<
|
* >switch<
|
||||||
* >case colorScheme="white"<
|
* >case colorScheme="white"<
|
||||||
* >declare-style name="shift-key" parentStyle="modifier-key"<
|
* >key-style styleName="shift-key" parentStyle="modifier-key"
|
||||||
* >item name="keyIcon"<@drawable/sym_keyboard_shift">/item<
|
* keyIcon="@drawable/sym_keyboard_shift"
|
||||||
* >/declare-style<
|
* /<
|
||||||
* >/case<
|
* >/case<
|
||||||
* >case colorScheme="black"<
|
* >case colorScheme="black"<
|
||||||
* >declare-style name="shift-key" parentStyle="modifier-key"<
|
* >key-style styleName="shift-key" parentStyle="modifier-key"
|
||||||
* >item name="keyIcon"<@drawable/sym_bkeyboard_shift">/item<
|
* keyIcon="@drawable/sym_bkeyboard_shift"
|
||||||
* >/declare-style<
|
* /<
|
||||||
* >/case<
|
* >/case<
|
||||||
* >/switch<
|
* >/switch<
|
||||||
* ...
|
* ...
|
||||||
* >Key include-style="shift-key" ... /<
|
* >Key keyStyle="shift-key" ... /<
|
||||||
|
* </pre>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class BaseKeyboardParser {
|
public class BaseKeyboardParser {
|
||||||
private static final String TAG = "BaseKeyboardParser";
|
private static final String TAG = "BaseKeyboardParser";
|
||||||
private static final boolean DEBUG_TAG = false;
|
private static final boolean DEBUG_TAG = false;
|
||||||
|
@ -118,6 +116,7 @@ public class BaseKeyboardParser {
|
||||||
private static final String TAG_SWITCH = "switch";
|
private static final String TAG_SWITCH = "switch";
|
||||||
private static final String TAG_CASE = "case";
|
private static final String TAG_CASE = "case";
|
||||||
private static final String TAG_DEFAULT = "default";
|
private static final String TAG_DEFAULT = "default";
|
||||||
|
private static final String TAG_KEY_STYLE = "key-style";
|
||||||
|
|
||||||
private final BaseKeyboard mKeyboard;
|
private final BaseKeyboard mKeyboard;
|
||||||
private final Resources mResources;
|
private final Resources mResources;
|
||||||
|
@ -127,6 +126,7 @@ public class BaseKeyboardParser {
|
||||||
private int mMaxRowWidth = 0;
|
private int mMaxRowWidth = 0;
|
||||||
private int mTotalHeight = 0;
|
private int mTotalHeight = 0;
|
||||||
private Row mCurrentRow = null;
|
private Row mCurrentRow = null;
|
||||||
|
private final KeyStyles mKeyStyles = new KeyStyles();
|
||||||
|
|
||||||
public BaseKeyboardParser(BaseKeyboard keyboard, Resources res) {
|
public BaseKeyboardParser(BaseKeyboard keyboard, Resources res) {
|
||||||
mKeyboard = keyboard;
|
mKeyboard = keyboard;
|
||||||
|
@ -192,6 +192,8 @@ public class BaseKeyboardParser {
|
||||||
parseIncludeKeyboardContent(parser, keys);
|
parseIncludeKeyboardContent(parser, keys);
|
||||||
} else if (TAG_SWITCH.equals(tag)) {
|
} else if (TAG_SWITCH.equals(tag)) {
|
||||||
parseSwitchKeyboardContent(parser, keys);
|
parseSwitchKeyboardContent(parser, keys);
|
||||||
|
} else if (TAG_KEY_STYLE.equals(tag)) {
|
||||||
|
parseKeyStyle(parser, keys);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStartTag(parser, TAG_ROW);
|
throw new IllegalStartTag(parser, TAG_ROW);
|
||||||
}
|
}
|
||||||
|
@ -205,6 +207,8 @@ public class BaseKeyboardParser {
|
||||||
break;
|
break;
|
||||||
} else if (TAG_MERGE.equals(tag)) {
|
} else if (TAG_MERGE.equals(tag)) {
|
||||||
break;
|
break;
|
||||||
|
} else if (TAG_KEY_STYLE.equals(tag)) {
|
||||||
|
continue;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalEndTag(parser, TAG_ROW);
|
throw new IllegalEndTag(parser, TAG_ROW);
|
||||||
}
|
}
|
||||||
|
@ -227,6 +231,8 @@ public class BaseKeyboardParser {
|
||||||
parseIncludeRowContent(parser, row, keys);
|
parseIncludeRowContent(parser, row, keys);
|
||||||
} else if (TAG_SWITCH.equals(tag)) {
|
} else if (TAG_SWITCH.equals(tag)) {
|
||||||
parseSwitchRowContent(parser, row, keys);
|
parseSwitchRowContent(parser, row, keys);
|
||||||
|
} else if (TAG_KEY_STYLE.equals(tag)) {
|
||||||
|
parseKeyStyle(parser, keys);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStartTag(parser, TAG_KEY);
|
throw new IllegalStartTag(parser, TAG_KEY);
|
||||||
}
|
}
|
||||||
|
@ -241,6 +247,8 @@ public class BaseKeyboardParser {
|
||||||
break;
|
break;
|
||||||
} else if (TAG_MERGE.equals(tag)) {
|
} else if (TAG_MERGE.equals(tag)) {
|
||||||
break;
|
break;
|
||||||
|
} else if (TAG_KEY_STYLE.equals(tag)) {
|
||||||
|
continue;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalEndTag(parser, TAG_KEY);
|
throw new IllegalEndTag(parser, TAG_KEY);
|
||||||
}
|
}
|
||||||
|
@ -253,7 +261,8 @@ public class BaseKeyboardParser {
|
||||||
if (keys == null) {
|
if (keys == null) {
|
||||||
checkEndTag(TAG_KEY, parser);
|
checkEndTag(TAG_KEY, parser);
|
||||||
} else {
|
} else {
|
||||||
Key key = mKeyboard.createKeyFromXml(mResources, row, mCurrentX, mCurrentY, parser);
|
Key key = mKeyboard.createKeyFromXml(mResources, row, mCurrentX, mCurrentY, parser,
|
||||||
|
mKeyStyles);
|
||||||
checkEndTag(TAG_KEY, parser);
|
checkEndTag(TAG_KEY, parser);
|
||||||
keys.add(key);
|
keys.add(key);
|
||||||
if (key.codes[0] == BaseKeyboard.KEYCODE_SHIFT)
|
if (key.codes[0] == BaseKeyboard.KEYCODE_SHIFT)
|
||||||
|
@ -439,6 +448,24 @@ public class BaseKeyboardParser {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void parseKeyStyle(XmlResourceParser parser, List<Key> keys)
|
||||||
|
throws XmlPullParserException, IOException {
|
||||||
|
TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
|
||||||
|
R.styleable.BaseKeyboard_KeyStyle);
|
||||||
|
TypedArray keyAttrs = mResources.obtainAttributes(Xml.asAttributeSet(parser),
|
||||||
|
R.styleable.BaseKeyboard_Key);
|
||||||
|
try {
|
||||||
|
if (!a.hasValue(R.styleable.BaseKeyboard_KeyStyle_styleName))
|
||||||
|
throw new ParseException("<" + TAG_KEY_STYLE
|
||||||
|
+ "/> needs styleName attribute", parser);
|
||||||
|
if (keys != null)
|
||||||
|
mKeyStyles.parseKeyStyleAttributes(a, keyAttrs, parser);
|
||||||
|
} finally {
|
||||||
|
a.recycle();
|
||||||
|
keyAttrs.recycle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void checkEndTag(String tag, XmlResourceParser parser)
|
private static void checkEndTag(String tag, XmlResourceParser parser)
|
||||||
throws XmlPullParserException, IOException {
|
throws XmlPullParserException, IOException {
|
||||||
if (parser.next() == XmlResourceParser.END_TAG && tag.equals(parser.getName()))
|
if (parser.next() == XmlResourceParser.END_TAG && tag.equals(parser.getName()))
|
||||||
|
@ -486,7 +513,7 @@ public class BaseKeyboardParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
private static class ParseException extends InflateException {
|
public static class ParseException extends InflateException {
|
||||||
public ParseException(String msg, XmlResourceParser parser) {
|
public ParseException(String msg, XmlResourceParser parser) {
|
||||||
super(msg + " at line " + parser.getLineNumber());
|
super(msg + " at line " + parser.getLineNumber());
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,237 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2010 Google Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
|
* use this file except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations under
|
||||||
|
* the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.inputmethod.latin;
|
||||||
|
|
||||||
|
import com.android.inputmethod.latin.BaseKeyboardParser.ParseException;
|
||||||
|
|
||||||
|
import android.content.res.TypedArray;
|
||||||
|
import android.content.res.XmlResourceParser;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.util.TypedValue;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
public class KeyStyles {
|
||||||
|
private static final String TAG = "KeyStyles";
|
||||||
|
|
||||||
|
private final HashMap<String, DeclaredKeyStyle> mStyles =
|
||||||
|
new HashMap<String, DeclaredKeyStyle>();
|
||||||
|
private static final KeyStyle EMPTY_KEY_STYLE = new EmptyKeyStyle();
|
||||||
|
|
||||||
|
public interface KeyStyle {
|
||||||
|
public int[] getIntArray(TypedArray a, int index);
|
||||||
|
public Drawable getDrawable(TypedArray a, int index);
|
||||||
|
public CharSequence getText(TypedArray a, int index);
|
||||||
|
public int getResourceId(TypedArray a, int index, int defaultValue);
|
||||||
|
public int getInt(TypedArray a, int index, int defaultValue);
|
||||||
|
public int getFlag(TypedArray a, int index, int defaultValue);
|
||||||
|
public boolean getBoolean(TypedArray a, int index, boolean defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class EmptyKeyStyle implements KeyStyle {
|
||||||
|
private EmptyKeyStyle() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getIntArray(TypedArray a, int index) {
|
||||||
|
return parseIntArray(a, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Drawable getDrawable(TypedArray a, int index) {
|
||||||
|
return a.getDrawable(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CharSequence getText(TypedArray a, int index) {
|
||||||
|
return a.getText(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getResourceId(TypedArray a, int index, int defaultValue) {
|
||||||
|
return a.getResourceId(index, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInt(TypedArray a, int index, int defaultValue) {
|
||||||
|
return a.getInt(index, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFlag(TypedArray a, int index, int defaultValue) {
|
||||||
|
return a.getInt(index, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getBoolean(TypedArray a, int index, boolean defaultValue) {
|
||||||
|
return a.getBoolean(index, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static int[] parseIntArray(TypedArray a, int index) {
|
||||||
|
TypedValue v = new TypedValue();
|
||||||
|
a.getValue(index, v);
|
||||||
|
if (v.type == TypedValue.TYPE_INT_DEC || v.type == TypedValue.TYPE_INT_HEX) {
|
||||||
|
return new int[] { v.data };
|
||||||
|
} else if (v.type == TypedValue.TYPE_STRING) {
|
||||||
|
return parseCSV(v.string.toString());
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int[] parseCSV(String value) {
|
||||||
|
int count = 0;
|
||||||
|
int lastIndex = 0;
|
||||||
|
if (value.length() > 0) {
|
||||||
|
count++;
|
||||||
|
while ((lastIndex = value.indexOf(",", lastIndex + 1)) > 0) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int[] values = new int[count];
|
||||||
|
count = 0;
|
||||||
|
StringTokenizer st = new StringTokenizer(value, ",");
|
||||||
|
while (st.hasMoreTokens()) {
|
||||||
|
try {
|
||||||
|
values[count++] = Integer.parseInt(st.nextToken());
|
||||||
|
} catch (NumberFormatException nfe) {
|
||||||
|
Log.e(TAG, "Error parsing integer CSV " + value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DeclaredKeyStyle extends EmptyKeyStyle {
|
||||||
|
private final HashMap<Integer, Object> mAttributes = new HashMap<Integer, Object>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] getIntArray(TypedArray a, int index) {
|
||||||
|
return a.hasValue(index)
|
||||||
|
? super.getIntArray(a, index) : (int[])mAttributes.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Drawable getDrawable(TypedArray a, int index) {
|
||||||
|
return a.hasValue(index)
|
||||||
|
? super.getDrawable(a, index) : (Drawable)mAttributes.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CharSequence getText(TypedArray a, int index) {
|
||||||
|
return a.hasValue(index)
|
||||||
|
? super.getText(a, index) : (CharSequence)mAttributes.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getResourceId(TypedArray a, int index, int defaultValue) {
|
||||||
|
final Integer value = (Integer)mAttributes.get(index);
|
||||||
|
return super.getResourceId(a, index, (value != null) ? value : defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFlag(TypedArray a, int index, int defaultValue) {
|
||||||
|
final Integer value = (Integer)mAttributes.get(index);
|
||||||
|
return super.getFlag(a, index, defaultValue) | (value != null ? value : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getBoolean(TypedArray a, int index, boolean defaultValue) {
|
||||||
|
final Boolean value = (Boolean)mAttributes.get(index);
|
||||||
|
return super.getBoolean(a, index, (value != null) ? value : defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DeclaredKeyStyle() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void parseKeyStyleAttributes(TypedArray a) {
|
||||||
|
// TODO: Currently not all Key attributes can be declared as style.
|
||||||
|
readIntArray(a, R.styleable.BaseKeyboard_Key_codes);
|
||||||
|
readText(a, R.styleable.BaseKeyboard_Key_keyLabel);
|
||||||
|
readFlag(a, R.styleable.BaseKeyboard_Key_keyLabelOption);
|
||||||
|
readText(a, R.styleable.BaseKeyboard_Key_keyOutputText);
|
||||||
|
readDrawable(a, R.styleable.BaseKeyboard_Key_keyIcon);
|
||||||
|
readDrawable(a, R.styleable.BaseKeyboard_Key_iconPreview);
|
||||||
|
readDrawable(a, R.styleable.BaseKeyboard_Key_keyHintIcon);
|
||||||
|
readResourceId(a, R.styleable.BaseKeyboard_Key_popupKeyboard);
|
||||||
|
readBoolean(a, R.styleable.BaseKeyboard_Key_isModifier);
|
||||||
|
readBoolean(a, R.styleable.BaseKeyboard_Key_isSticky);
|
||||||
|
readBoolean(a, R.styleable.BaseKeyboard_Key_isRepeatable);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readDrawable(TypedArray a, int index) {
|
||||||
|
if (a.hasValue(index))
|
||||||
|
mAttributes.put(index, a.getDrawable(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readText(TypedArray a, int index) {
|
||||||
|
if (a.hasValue(index))
|
||||||
|
mAttributes.put(index, a.getText(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readResourceId(TypedArray a, int index) {
|
||||||
|
if (a.hasValue(index))
|
||||||
|
mAttributes.put(index, a.getResourceId(index, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readFlag(TypedArray a, int index) {
|
||||||
|
final Integer value = (Integer)mAttributes.get(index);
|
||||||
|
if (a.hasValue(index))
|
||||||
|
mAttributes.put(index, a.getInt(index, 0) | (value != null ? value : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readBoolean(TypedArray a, int index) {
|
||||||
|
if (a.hasValue(index))
|
||||||
|
mAttributes.put(index, a.getBoolean(index, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readIntArray(TypedArray a, int index) {
|
||||||
|
if (a.hasValue(index)) {
|
||||||
|
final int[] value = parseIntArray(a, index);
|
||||||
|
if (value != null)
|
||||||
|
mAttributes.put(index, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addParent(DeclaredKeyStyle parentStyle) {
|
||||||
|
mAttributes.putAll(parentStyle.mAttributes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void parseKeyStyleAttributes(TypedArray a, TypedArray keyAttrs,
|
||||||
|
XmlResourceParser parser) {
|
||||||
|
String styleName = a.getString(R.styleable.BaseKeyboard_KeyStyle_styleName);
|
||||||
|
if (mStyles.containsKey(styleName))
|
||||||
|
throw new ParseException("duplicate key style declared: " + styleName, parser);
|
||||||
|
|
||||||
|
final DeclaredKeyStyle style = new DeclaredKeyStyle();
|
||||||
|
if (a.hasValue(R.styleable.BaseKeyboard_KeyStyle_parentStyle)) {
|
||||||
|
String parentStyle = a.getString(
|
||||||
|
R.styleable.BaseKeyboard_KeyStyle_parentStyle);
|
||||||
|
final DeclaredKeyStyle parent = mStyles.get(parentStyle);
|
||||||
|
if (parent == null)
|
||||||
|
throw new ParseException("Unknown parentStyle " + parent, parser);
|
||||||
|
style.addParent(parent);
|
||||||
|
}
|
||||||
|
style.parseKeyStyleAttributes(keyAttrs);
|
||||||
|
mStyles.put(styleName, style);
|
||||||
|
}
|
||||||
|
|
||||||
|
public KeyStyle getKeyStyle(String styleName) {
|
||||||
|
return mStyles.get(styleName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public KeyStyle getEmptyKeyStyle() {
|
||||||
|
return EMPTY_KEY_STYLE;
|
||||||
|
}
|
||||||
|
}
|
|
@ -127,8 +127,8 @@ public class LatinKeyboard extends BaseKeyboard {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Key createKeyFromXml(Resources res, Row parent, int x, int y,
|
protected Key createKeyFromXml(Resources res, Row parent, int x, int y,
|
||||||
XmlResourceParser parser) {
|
XmlResourceParser parser, KeyStyles keyStyles) {
|
||||||
Key key = new LatinKey(res, parent, x, y, parser);
|
Key key = new LatinKey(res, parent, x, y, parser, keyStyles);
|
||||||
switch (key.codes[0]) {
|
switch (key.codes[0]) {
|
||||||
case LatinIME.KEYCODE_ENTER:
|
case LatinIME.KEYCODE_ENTER:
|
||||||
mEnterKey = key;
|
mEnterKey = key;
|
||||||
|
@ -619,8 +619,8 @@ public class LatinKeyboard extends BaseKeyboard {
|
||||||
private boolean mShiftLockEnabled;
|
private boolean mShiftLockEnabled;
|
||||||
|
|
||||||
public LatinKey(Resources res, BaseKeyboard.Row parent, int x, int y,
|
public LatinKey(Resources res, BaseKeyboard.Row parent, int x, int y,
|
||||||
XmlResourceParser parser) {
|
XmlResourceParser parser, KeyStyles keyStyles) {
|
||||||
super(res, parent, x, y, parser);
|
super(res, parent, x, y, parser, keyStyles);
|
||||||
if (popupCharacters != null && popupCharacters.length() == 0) {
|
if (popupCharacters != null && popupCharacters.length() == 0) {
|
||||||
// If there is a keyboard with no keys specified in popupCharacters
|
// If there is a keyboard with no keys specified in popupCharacters
|
||||||
popupResId = 0;
|
popupResId = 0;
|
||||||
|
|
Loading…
Reference in New Issue