Support Persian Keyboard
This is a first trial implementation based on Arabic layout.
Bug: 5456620
Change-Id: Ifa21d7fbd408853a44678623c13b9c078283732c
diff --git a/java/res/values-fa/donottranslate-more-keys.xml b/java/res/values-fa/donottranslate-more-keys.xml
new file mode 100644
index 0000000..3e13c79
--- /dev/null
+++ b/java/res/values-fa/donottranslate-more-keys.xml
@@ -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,\",\',-,:,!,؟,،,؛,ِ,َ,ٍ,ً,ٖ,ٰ,ٕ,ٔ,ُ,ٌ,ّ,ْ,ٓ,ـــ|ـ,/"</string>
+ <string name="keyhintlabel_for_punctuation">ً</string>
+ <!-- U+0661: "١" ARABIC-INDIC DIGIT ONE -->
+ <string name="keylabel_for_symbols_1">١</string>
+ <!-- U+0662: "٢" ARABIC-INDIC DIGIT TWO -->
+ <string name="keylabel_for_symbols_2">٢</string>
+ <!-- U+0663: "٣" ARABIC-INDIC DIGIT THREE -->
+ <string name="keylabel_for_symbols_3">٣</string>
+ <!-- U+0664: "٤" ARABIC-INDIC DIGIT FOUR -->
+ <string name="keylabel_for_symbols_4">٤</string>
+ <!-- U+0665: "٥" ARABIC-INDIC DIGIT FIVE -->
+ <string name="keylabel_for_symbols_5">٥</string>
+ <!-- U+0666: "٦" ARABIC-INDIC DIGIT SIX -->
+ <string name="keylabel_for_symbols_6">٦</string>
+ <!-- U+0667: "٧" ARABIC-INDIC DIGIT SEVEN -->
+ <string name="keylabel_for_symbols_7">٧</string>
+ <!-- U+0668: "٨" ARABIC-INDIC DIGIT EIGHT -->
+ <string name="keylabel_for_symbols_8">٨</string>
+ <!-- U+0669: "٩" ARABIC-INDIC DIGIT NINE -->
+ <string name="keylabel_for_symbols_9">٩</string>
+ <!-- U+0660: "٠" ARABIC-INDIC DIGIT ZERO -->
+ <string name="keylabel_for_symbols_0">٠</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,٫,٬</string>
+ <!-- U+060C: "،" ARABIC COMMA -->
+ <string name="keylabel_for_comma">،</string>
+ <string name="more_keys_for_comma">"\\,"</string>
+ <string name="keylabel_for_symbols_question">؟</string>
+ <string name="keylabel_for_symbols_semicolon">؛</string>
+ <!-- U+066A: "٪" ARABIC PERCENT SIGN -->
+ <string name="keylabel_for_symbols_percent">٪</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">%,‰</string>
+ <!-- U+060C: "،" ARABIC COMMA
+ U+061B: "؛" ARABIC SEMICOLON
+ U+061F: "؟" ARABIC QUESTION MARK -->
+ <string name="keylabel_for_apostrophe">،</string>
+ <string name="keylabel_for_dash">"."</string>
+ <string name="keyhintlabel_for_apostrophe">؟</string>
+ <string name="keyhintlabel_for_dash">ً</string>
+ <string name="more_keys_for_apostrophe">"؟,؛,!,:,-,/,\',\""</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">"ّ,ْ,ٌ,ٓ,ُ,ِ,َ,ً,ـــ|ـ,ٍ,ٔ,ٖ,ٕ,ٰ"</string>
+ <!-- U+266A: "♪" EIGHTH NOTE -->
+ <string name="more_keys_for_bullet">♪</string>
+ <!-- U+2605: "★" BLACK STAR
+ U+066D: "٭" ARABIC FIVE POINTED STAR -->
+ <string name="more_keys_for_star">★,٭</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,﴾|﴿,<|>,{|},[|]</string>
+ <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,﴿|﴾,>|<,}|{,]|[</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,‹|›,≤|≥,«|»</string>
+ <string name="more_keys_for_greater_than">!fixedColumnOrder!3,›|‹,≥|≤,»|«</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">“,”,„,‟,«|»,»|«</string> -->
+ <string name="more_keys_for_double_quote">!fixedColumnOrder!4,“,”,«|»,»|«</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,“,”,„,‟,«|»,»|«;,‘,’,‚,‛</string> -->
+ <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!4,“,”,«|»,»|«,‘,’,‚,‛</string>
+</resources>
diff --git a/java/res/values-fa/donottranslate.xml b/java/res/values-fa/donottranslate.xml
new file mode 100644
index 0000000..57de253
--- /dev/null
+++ b/java/res/values-fa/donottranslate.xml
@@ -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>
diff --git a/java/res/xml-fa/keyboard_set.xml b/java/res/xml-fa/keyboard_set.xml
new file mode 100644
index 0000000..9bd1050
--- /dev/null
+++ b/java/res/xml-fa/keyboard_set.xml
@@ -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>
diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index 2fa8b38..b206f0e 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -79,9 +79,12 @@
latin:code="@integer/key_space"
latin:keyActionFlags="noKeyPreview" />
<key-style
- latin:styleName="nonSpecialBackgroundSpaceKeyStyle"
- latin:code="@integer/key_space"
- latin:keyActionFlags="noKeyPreview" />
+ latin:styleName="zwnjKeyStyle"
+ latin:keyLabel="‌"
+ latin:moreKeys="‍"
+ latin:keyLabelFlags="hasPopupHint"
+ latin:altCode="@integer/key_space"
+ latin:keyActionFlags="altCodeWhileTyping" />
<key-style
latin:styleName="smileyKeyStyle"
latin:keyLabel=":-)"
diff --git a/java/res/xml-sw600dp/row_qwerty4.xml b/java/res/xml-sw600dp/row_qwerty4.xml
index 3c2f06d..eec35b0 100644
--- a/java/res/xml-sw600dp/row_qwerty4.xml
+++ b/java/res/xml-sw600dp/row_qwerty4.xml
@@ -50,10 +50,24 @@
latin:keyStyle="hasShiftedLetterHintStyle" />
</default>
</switch>
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="30.750%p"
- latin:keyWidth="39.750%p" />
+ <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
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyXPos="30.750%p"
+ latin:keyWidth="39.750%p" />
+ </default>
+ </switch>
<switch>
<case
latin:languageCode="iw"
diff --git a/java/res/xml-sw600dp/rows_number_normal.xml b/java/res/xml-sw600dp/rows_number_normal.xml
index 3704c52..be5776b 100644
--- a/java/res/xml-sw600dp/rows_number_normal.xml
+++ b/java/res/xml-sw600dp/rows_number_normal.xml
@@ -143,7 +143,7 @@
latin:keyStyle="numTabKeyStyle"
latin:keyWidth="11.00%p" />
<Key
- latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
+ latin:keyStyle="spaceKeyStyle"
latin:keyWidth="27.75%p"
latin:keyXPos="12.75%p" />
<Key
diff --git a/java/res/xml-sw600dp/rows_phone.xml b/java/res/xml-sw600dp/rows_phone.xml
index 4c896e9..e892693 100644
--- a/java/res/xml-sw600dp/rows_phone.xml
+++ b/java/res/xml-sw600dp/rows_phone.xml
@@ -112,7 +112,7 @@
latin:keyStyle="numTabKeyStyle"
latin:keyWidth="11.00%p" />
<Key
- latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
+ latin:keyStyle="spaceKeyStyle"
latin:keyWidth="27.75%p"
latin:keyXPos="12.75%p" />
<Key
diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml
index 5c35f1c..069fc63 100644
--- a/java/res/xml-sw768dp/key_styles_common.xml
+++ b/java/res/xml-sw768dp/key_styles_common.xml
@@ -78,9 +78,12 @@
latin:code="@integer/key_space"
latin:keyActionFlags="noKeyPreview" />
<key-style
- latin:styleName="nonSpecialBackgroundSpaceKeyStyle"
- latin:code="@integer/key_space"
- latin:keyActionFlags="noKeyPreview" />
+ latin:styleName="zwnjKeyStyle"
+ latin:keyLabel="‌"
+ latin:moreKeys="‍"
+ latin:keyLabelFlags="hasPopupHint"
+ latin:altCode="@integer/key_space"
+ latin:keyActionFlags="altCodeWhileTyping" />
<key-style
latin:styleName="smileyKeyStyle"
latin:keyLabel=":-)"
diff --git a/java/res/xml-sw768dp/row_qwerty4.xml b/java/res/xml-sw768dp/row_qwerty4.xml
index 24c081e..0aa04f8 100644
--- a/java/res/xml-sw768dp/row_qwerty4.xml
+++ b/java/res/xml-sw768dp/row_qwerty4.xml
@@ -76,10 +76,30 @@
</switch>
</default>
</switch>
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="31.250%p"
- latin:keyWidth="37.500%p" />
+ <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="‌"
+ latin:moreKeys="‍"
+ latin:keyLabelFlags="hasPopupHint"
+ latin:altCode="@integer/key_space"
+ latin:keyActionFlags="altCodeWhileTyping" />
+ </case>
+ <default>
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyXPos="31.250%p"
+ latin:keyWidth="37.500%p" />
+ </default>
+ </switch>
<switch>
<case
latin:languageCode="iw"
diff --git a/java/res/xml-sw768dp/rows_number_normal.xml b/java/res/xml-sw768dp/rows_number_normal.xml
index 8bf1a17..2eeb6c9 100644
--- a/java/res/xml-sw768dp/rows_number_normal.xml
+++ b/java/res/xml-sw768dp/rows_number_normal.xml
@@ -145,7 +145,7 @@
latin:keyboardLayout="@xml/key_settings"
latin:keyWidth="8.047%p" />
<Key
- latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
+ latin:keyStyle="spaceKeyStyle"
latin:keyXPos="13.829%p"
latin:keyWidth="24.140%p" />
<Key
diff --git a/java/res/xml-sw768dp/rows_phone.xml b/java/res/xml-sw768dp/rows_phone.xml
index 69c9e86..216fbed 100644
--- a/java/res/xml-sw768dp/rows_phone.xml
+++ b/java/res/xml-sw768dp/rows_phone.xml
@@ -114,7 +114,7 @@
latin:keyboardLayout="@xml/key_settings"
latin:keyWidth="8.047%p" />
<Key
- latin:keyStyle="nonSpecialBackgroundSpaceKeyStyle"
+ latin:keyStyle="spaceKeyStyle"
latin:keyXPos="13.829%p"
latin:keyWidth="24.140%p" />
<Key
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index f153a7d..7b526c0 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -108,6 +108,14 @@
latin:keyActionFlags="noKeyPreview|enableLongPress"
latin:backgroundType="functional" />
<key-style
+ latin:styleName="zwnjKeyStyle"
+ latin:keyLabel="‌"
+ latin:moreKeys="‍"
+ latin:keyLabelFlags="hasPopupHint"
+ latin:altCode="@integer/key_space"
+ latin:keyActionFlags="altCodeWhileTyping"
+ latin:backgroundType="functional" />
+ <key-style
latin:styleName="shortcutKeyStyle"
latin:code="@integer/key_shortcut"
latin:keyIcon="iconShortcutKey"
@@ -123,6 +131,8 @@
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping|enableLongPress"
latin:altCode="@integer/key_space"
latin:backgroundType="functional" />
+ <!-- U+200C: "" ZERO WIDTH NON-JOINER
+ U+200D: "" ZERO WIDTH JOINER -->
<key-style
latin:styleName="tabKeyStyle"
latin:code="@integer/key_tab"
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index f330b26..cdcea0e 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -33,6 +33,7 @@
en_GB: English Great Britain/qwerty
es: Spanish/spanish
et: Estonian/nordic
+ fa: Persian/arabic
fi: Finnish/nordic
fr: French/azerty
fr_CA: French Canada/qwerty
@@ -140,6 +141,12 @@
/>
<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"
+ android:label="@string/subtype_generic"
android:imeSubtypeLocale="fi"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection"
diff --git a/java/res/xml/row_qwerty4.xml b/java/res/xml/row_qwerty4.xml
index 0dd2177..b2b47e9 100644
--- a/java/res/xml/row_qwerty4.xml
+++ b/java/res/xml/row_qwerty4.xml
@@ -59,6 +59,28 @@
</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
latin:languageSwitchKeyEnabled="true"
>
<Key