Support Persian Keyboard

This is a first trial implementation based on Arabic layout.

Bug: 5456620
Change-Id: Ifa21d7fbd408853a44678623c13b9c078283732c
main
Tadashi G. Takaoka 2012-02-28 15:13:41 +09:00
parent e1a91d0b26
commit fe8555536a
14 changed files with 324 additions and 18 deletions

View File

@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- U+061F: "؟" ARABIC QUESTION MARK
U+060C: "،" ARABIC COMMA
U+061B: "؛" ARABIC SEMICOLON -->
<!-- U+0650: "ِ" ARABIC KASRA
U+064E: "َ" ARABIC FATHA
U+064D: "ٍ" ARABIC KASRATAN
U+064B: "ً" ARABIC FATHATAN
U+0656: "ٖ" ARABIC SUBSCRIPT ALEF
U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF
U+0655: "ٕ" ARABIC HAMZA BELOW
U+0654: "ٔ" ARABIC HAMZA ABOVE -->
<!-- U+064F: "ُ" ARABIC DAMMA
U+064C: "ٌ" ARABIC DAMMATAN
U+0651: "ّ" ARABIC SHADDA
U+0652: "ْ" ARABIC SUKUN
U+0653: "ٓ" ARABIC MADDAH ABOVE
U+0640: "ـ" ARABIC TATWEEL -->
<!-- In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label. -->
<string name="more_keys_for_punctuation">"!fixedColumnOrder!8,\",\',-,:,!,&#x061F;,&#x060C;,&#x061B;,&#x0650;,&#x064E;,&#x064D;,&#x064B;,&#x0656;,&#x0670;,&#x0655;,&#x0654;,&#x064F;,&#x064C;,&#x0651;,&#x0652;,&#x0653;,&#x0640;&#x0640;&#x0640;|&#x0640;,/"</string>
<string name="keyhintlabel_for_punctuation">&#x064B;</string>
<!-- U+0661: "١" ARABIC-INDIC DIGIT ONE -->
<string name="keylabel_for_symbols_1">&#x0661;</string>
<!-- U+0662: "٢" ARABIC-INDIC DIGIT TWO -->
<string name="keylabel_for_symbols_2">&#x0662;</string>
<!-- U+0663: "٣" ARABIC-INDIC DIGIT THREE -->
<string name="keylabel_for_symbols_3">&#x0663;</string>
<!-- U+0664: "٤" ARABIC-INDIC DIGIT FOUR -->
<string name="keylabel_for_symbols_4">&#x0664;</string>
<!-- U+0665: "٥" ARABIC-INDIC DIGIT FIVE -->
<string name="keylabel_for_symbols_5">&#x0665;</string>
<!-- U+0666: "٦" ARABIC-INDIC DIGIT SIX -->
<string name="keylabel_for_symbols_6">&#x0666;</string>
<!-- U+0667: "٧" ARABIC-INDIC DIGIT SEVEN -->
<string name="keylabel_for_symbols_7">&#x0667;</string>
<!-- U+0668: "٨" ARABIC-INDIC DIGIT EIGHT -->
<string name="keylabel_for_symbols_8">&#x0668;</string>
<!-- U+0669: "٩" ARABIC-INDIC DIGIT NINE -->
<string name="keylabel_for_symbols_9">&#x0669;</string>
<!-- U+0660: "٠" ARABIC-INDIC DIGIT ZERO -->
<string name="keylabel_for_symbols_0">&#x0660;</string>
<string name="additional_more_keys_for_symbols_1">1</string>
<string name="additional_more_keys_for_symbols_2">2</string>
<string name="additional_more_keys_for_symbols_3">3</string>
<string name="additional_more_keys_for_symbols_4">4</string>
<string name="additional_more_keys_for_symbols_5">5</string>
<string name="additional_more_keys_for_symbols_6">6</string>
<string name="additional_more_keys_for_symbols_7">7</string>
<string name="additional_more_keys_for_symbols_8">8</string>
<string name="additional_more_keys_for_symbols_9">9</string>
<!-- U+066B: "٫" ARABIC DECIMAL SEPARATOR
U+066C: "٬" ARABIC THOUSANDS SEPARATOR -->
<string name="additional_more_keys_for_symbols_0">0,&#x066B;,&#x066C;</string>
<!-- U+060C: "،" ARABIC COMMA -->
<string name="keylabel_for_comma">&#x060C;</string>
<string name="more_keys_for_comma">"\\,"</string>
<string name="keylabel_for_symbols_question">&#x061F;</string>
<string name="keylabel_for_symbols_semicolon">&#x061B;</string>
<!-- U+066A: "٪" ARABIC PERCENT SIGN -->
<string name="keylabel_for_symbols_percent">&#x066A;</string>
<string name="more_keys_for_symbols_question">\?</string>
<string name="more_keys_for_symbols_semicolon">;</string>
<!-- U+2030: "‰" PER MILLE SIGN -->
<string name="more_keys_for_symbols_percent">%,&#x2030;</string>
<!-- U+060C: "،" ARABIC COMMA
U+061B: "؛" ARABIC SEMICOLON
U+061F: "؟" ARABIC QUESTION MARK -->
<string name="keylabel_for_apostrophe">&#x060C;</string>
<string name="keylabel_for_dash">"."</string>
<string name="keyhintlabel_for_apostrophe">&#x061F;</string>
<string name="keyhintlabel_for_dash">&#x064B;</string>
<string name="more_keys_for_apostrophe">"&#x061F;,&#x061B;,!,:,-,/,\',\""</string>
<!-- U+0651: "ّ" ARABIC SHADDA
U+0652: "ْ" ARABIC SUKUN
U+064C: "ٌ" ARABIC DAMMATAN
U+0653: "ٓ" ARABIC MADDAH ABOVE
U+064F: "ُ" ARABIC DAMMA -->
<!-- U+0650: "ِ" ARABIC KASRA
U+064E: "َ" ARABIC FATHA
U+064B: "ً" ARABIC FATHATAN
U+0640: "ـ" ARABIC TATWEEL
U+064D: "ٍ" ARABIC KASRATAN -->
<!-- U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF
U+0656: "ٖ" ARABIC SUBSCRIPT ALEF
U+0654: "ٔ" ARABIC HAMZA ABOVE
U+0655: "ٕ" ARABIC HAMZA BELOW -->
<!-- In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label. -->
<string name="more_keys_for_dash">"&#x0651;,&#x0652;,&#x064C;,&#x0653;,&#x064F;,&#x0650;,&#x064E;,&#x064B;,&#x0640;&#x0640;&#x0640;|&#x0640;,&#x064D;,&#x0654;,&#x0656;,&#x0655;,&#x0670;"</string>
<!-- U+266A: "♪" EIGHTH NOTE -->
<string name="more_keys_for_bullet">&#x266A;</string>
<!-- U+2605: "★" BLACK STAR
U+066D: "٭" ARABIC FIVE POINTED STAR -->
<string name="more_keys_for_star">&#x2605;,&#x066D;</string>
<!-- The all letters need to be mirrored are found at
http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
<!-- U+0029: ")" RIGHT PARENTHESIS -->
<integer name="keycode_for_left_parenthesis">0x0029</integer>
<!-- U+0028: "(" LEFT PARENTHESIS -->
<integer name="keycode_for_right_parenthesis">0x0028</integer>
<!-- U+FD3E: "" ORNATE LEFT PARENTHESIS
U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS -->
<!-- TODO: DroidSansArabic lacks the glyph of U+FD3E ORNATE LEFT PARENTHESIS -->
<!-- TODO: DroidSansArabic lacks the glyph of U+FD3F ORNATE RIGHT PARENTHESIS -->
<string name="more_keys_for_left_parenthesis">!fixedColumnOrder!4,&#xFD3E;|&#xFD3F;,&lt;|&gt;,{|},[|]</string>
<string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,&#xFD3F;|&#xFD3E;,&gt;|&lt;,}|{,]|[</string>
<!-- U+003E: ">" GREATER-THAN SIGN -->
<integer name="keycode_for_less_than">0x003E</integer>
<!-- U+003C: "<" LESS-THAN SIGN -->
<integer name="keycode_for_greater_than">0x003C</integer>
<!-- U+2264: "≤" LESS-THAN OR EQUAL TO
U+2265: "≥" GREATER-THAN EQUAL TO
U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
The following characters don't need BIDI mirroring.
U+2018: "" LEFT SINGLE QUOTATION MARK
U+2019: "" RIGHT SINGLE QUOTATION MARK
U+201A: "" SINGLE LOW-9 QUOTATION MARK
U+201B: "" SINGLE HIGH-REVERSED-9 QUOTATION MARK
U+201C: "“" LEFT DOUBLE QUOTATION MARK
U+201D: "”" RIGHT DOUBLE QUOTATION MARK
U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
<string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;|&#x203A;,&#x2264;|&#x2265;,&#x00AB;|&#x00BB;</string>
<string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;|&#x2039;,&#x2265;|&#x2264;,&#x00BB;|&#x00AB;</string>
<!-- U+005D: "]" RIGHT SQUARE BRACKET -->
<integer name="keycode_for_left_square_bracket">0x005D</integer>
<!-- U+005B: "[" LEFT SQUARE BRACKET -->
<integer name="keycode_for_right_square_bracket">0x005B</integer>
<!-- U+007D: "}" RIGHT CURLY BRACKET -->
<integer name="keycode_for_left_curly_bracket">0x007D</integer>
<!-- U+007B: "{" LEFT CURLY BRACKET -->
<integer name="keycode_for_right_curly_bracket">0x007B</integer>
<!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
<!-- <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string> -->
<string name="more_keys_for_double_quote">!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
<!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
<!-- <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string> -->
<string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
</resources>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- The all letters need to be mirrored are found at
http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
<!-- Symbols that are suggested between words -->
<string name="suggested_punctuations">!,?,\\,,:,;,\",(|),)|(,\',-,/,@,_</string>
</resources>

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<KeyboardSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
latin:keyboardLocale="fa" >
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_arabic" />
<Element
latin:elementName="symbols"
latin:elementKeyboard="@xml/kbd_symbols" />
<Element
latin:elementName="symbolsShifted"
latin:elementKeyboard="@xml/kbd_symbols_shift" />
<Element
latin:elementName="phone"
latin:elementKeyboard="@xml/kbd_phone" />
<Element
latin:elementName="phoneSymbols"
latin:elementKeyboard="@xml/kbd_phone_symbols" />
<Element
latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet>

View File

@ -79,9 +79,12 @@
latin:code="@integer/key_space" latin:code="@integer/key_space"
latin:keyActionFlags="noKeyPreview" /> latin:keyActionFlags="noKeyPreview" />
<key-style <key-style
latin:styleName="nonSpecialBackgroundSpaceKeyStyle" latin:styleName="zwnjKeyStyle"
latin:code="@integer/key_space" latin:keyLabel="&#x200C;"
latin:keyActionFlags="noKeyPreview" /> latin:moreKeys="&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:altCode="@integer/key_space"
latin:keyActionFlags="altCodeWhileTyping" />
<key-style <key-style
latin:styleName="smileyKeyStyle" latin:styleName="smileyKeyStyle"
latin:keyLabel=":-)" latin:keyLabel=":-)"

View File

@ -50,10 +50,24 @@
latin:keyStyle="hasShiftedLetterHintStyle" /> latin:keyStyle="hasShiftedLetterHintStyle" />
</default> </default>
</switch> </switch>
<switch>
<case
latin:languageCode="fa"
>
<Key
latin:keyStyle="spaceKeyStyle"
latin:keyXPos="30.750%p"
latin:keyWidth="30.850%p" />
<Key
latin:keyStyle="zwnjKeyStyle" />
</case>
<default>
<Key <Key
latin:keyStyle="spaceKeyStyle" latin:keyStyle="spaceKeyStyle"
latin:keyXPos="30.750%p" latin:keyXPos="30.750%p"
latin:keyWidth="39.750%p" /> latin:keyWidth="39.750%p" />
</default>
</switch>
<switch> <switch>
<case <case
latin:languageCode="iw" latin:languageCode="iw"

View File

@ -143,7 +143,7 @@
latin:keyStyle="numTabKeyStyle" latin:keyStyle="numTabKeyStyle"
latin:keyWidth="11.00%p" /> latin:keyWidth="11.00%p" />
<Key <Key
latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle" latin:keyStyle="spaceKeyStyle"
latin:keyWidth="27.75%p" latin:keyWidth="27.75%p"
latin:keyXPos="12.75%p" /> latin:keyXPos="12.75%p" />
<Key <Key

View File

@ -112,7 +112,7 @@
latin:keyStyle="numTabKeyStyle" latin:keyStyle="numTabKeyStyle"
latin:keyWidth="11.00%p" /> latin:keyWidth="11.00%p" />
<Key <Key
latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle" latin:keyStyle="spaceKeyStyle"
latin:keyWidth="27.75%p" latin:keyWidth="27.75%p"
latin:keyXPos="12.75%p" /> latin:keyXPos="12.75%p" />
<Key <Key

View File

@ -78,9 +78,12 @@
latin:code="@integer/key_space" latin:code="@integer/key_space"
latin:keyActionFlags="noKeyPreview" /> latin:keyActionFlags="noKeyPreview" />
<key-style <key-style
latin:styleName="nonSpecialBackgroundSpaceKeyStyle" latin:styleName="zwnjKeyStyle"
latin:code="@integer/key_space" latin:keyLabel="&#x200C;"
latin:keyActionFlags="noKeyPreview" /> latin:moreKeys="&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:altCode="@integer/key_space"
latin:keyActionFlags="altCodeWhileTyping" />
<key-style <key-style
latin:styleName="smileyKeyStyle" latin:styleName="smileyKeyStyle"
latin:keyLabel=":-)" latin:keyLabel=":-)"

View File

@ -76,10 +76,30 @@
</switch> </switch>
</default> </default>
</switch> </switch>
<switch>
<case
latin:languageCode="fa"
>
<Key
latin:keyStyle="spaceKeyStyle"
latin:keyXPos="31.250%p"
latin:keyWidth="29.453%p" />
<!-- U+200C: "" ZERO WIDTH NON-JOINER
U+200D: "" ZERO WIDTH JOINER -->
<Key
latin:keyLabel="&#x200C;"
latin:moreKeys="&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:altCode="@integer/key_space"
latin:keyActionFlags="altCodeWhileTyping" />
</case>
<default>
<Key <Key
latin:keyStyle="spaceKeyStyle" latin:keyStyle="spaceKeyStyle"
latin:keyXPos="31.250%p" latin:keyXPos="31.250%p"
latin:keyWidth="37.500%p" /> latin:keyWidth="37.500%p" />
</default>
</switch>
<switch> <switch>
<case <case
latin:languageCode="iw" latin:languageCode="iw"

View File

@ -145,7 +145,7 @@
latin:keyboardLayout="@xml/key_settings" latin:keyboardLayout="@xml/key_settings"
latin:keyWidth="8.047%p" /> latin:keyWidth="8.047%p" />
<Key <Key
latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle" latin:keyStyle="spaceKeyStyle"
latin:keyXPos="13.829%p" latin:keyXPos="13.829%p"
latin:keyWidth="24.140%p" /> latin:keyWidth="24.140%p" />
<Key <Key

View File

@ -114,7 +114,7 @@
latin:keyboardLayout="@xml/key_settings" latin:keyboardLayout="@xml/key_settings"
latin:keyWidth="8.047%p" /> latin:keyWidth="8.047%p" />
<Key <Key
latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle" latin:keyStyle="spaceKeyStyle"
latin:keyXPos="13.829%p" latin:keyXPos="13.829%p"
latin:keyWidth="24.140%p" /> latin:keyWidth="24.140%p" />
<Key <Key

View File

@ -107,6 +107,14 @@
latin:code="@integer/key_space" latin:code="@integer/key_space"
latin:keyActionFlags="noKeyPreview|enableLongPress" latin:keyActionFlags="noKeyPreview|enableLongPress"
latin:backgroundType="functional" /> latin:backgroundType="functional" />
<key-style
latin:styleName="zwnjKeyStyle"
latin:keyLabel="&#x200C;"
latin:moreKeys="&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:altCode="@integer/key_space"
latin:keyActionFlags="altCodeWhileTyping"
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="shortcutKeyStyle" latin:styleName="shortcutKeyStyle"
latin:code="@integer/key_shortcut" latin:code="@integer/key_shortcut"
@ -123,6 +131,8 @@
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping|enableLongPress" latin:keyActionFlags="noKeyPreview|altCodeWhileTyping|enableLongPress"
latin:altCode="@integer/key_space" latin:altCode="@integer/key_space"
latin:backgroundType="functional" /> latin:backgroundType="functional" />
<!-- U+200C: "" ZERO WIDTH NON-JOINER
U+200D: "" ZERO WIDTH JOINER -->
<key-style <key-style
latin:styleName="tabKeyStyle" latin:styleName="tabKeyStyle"
latin:code="@integer/key_tab" latin:code="@integer/key_tab"

View File

@ -33,6 +33,7 @@
en_GB: English Great Britain/qwerty en_GB: English Great Britain/qwerty
es: Spanish/spanish es: Spanish/spanish
et: Estonian/nordic et: Estonian/nordic
fa: Persian/arabic
fi: Finnish/nordic fi: Finnish/nordic
fr: French/azerty fr: French/azerty
fr_CA: French Canada/qwerty fr_CA: French Canada/qwerty
@ -138,6 +139,12 @@
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection" android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection"
/> />
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="fa"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="SupportTouchPositionCorrection"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard" <subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic" android:label="@string/subtype_generic"
android:imeSubtypeLocale="fi" android:imeSubtypeLocale="fi"

View File

@ -58,6 +58,28 @@
</default> </default>
</switch> </switch>
<switch> <switch>
<case
latin:languageCode="fa"
latin:languageSwitchKeyEnabled="true"
>
<Key
latin:keyStyle="languageSwitchKeyStyle" />
<Key
latin:keyStyle="spaceKeyStyle"
latin:keyWidth="30%p" />
<Key
latin:keyStyle="zwnjKeyStyle" />
</case>
<case
latin:languageCode="fa"
latin:languageSwitchKeyEnabled="false"
>
<Key
latin:keyStyle="spaceKeyStyle"
latin:keyWidth="40%p" />
<Key
latin:keyStyle="zwnjKeyStyle" />
</case>
<case <case
latin:languageSwitchKeyEnabled="true" latin:languageSwitchKeyEnabled="true"
> >