Use keyboardSet extra value of subtype to specify layout type

Change-Id: Ice1f345a08a8d760e3b847c885c4072e3e142c97
main
Tadashi G. Takaoka 2012-04-04 14:30:42 +09:00
parent cb389ef0d6
commit 11d9ee742f
74 changed files with 384 additions and 1294 deletions

View File

@ -40,7 +40,7 @@
void setLogFileManager(...); void setLogFileManager(...);
} }
-keep class com.android.inputmethod.keyboard.KeyboardSet$Builder { -keep class com.android.inputmethod.keyboard.KeyboardLayoutSet$Builder {
void setTouchPositionCorrectionEnabled(...); void setTouchPositionCorrectionEnabled(...);
} }

View File

@ -350,8 +350,8 @@
</declare-styleable> </declare-styleable>
<declare-styleable name="Keyboard_Case"> <declare-styleable name="Keyboard_Case">
<!-- This should be aligned with KeyboardSet_Element's elementName. --> <!-- This should be aligned with KeyboardLayoutSet_Element's elementName. -->
<attr name="keyboardSetElement" format="enum|string"> <attr name="keyboardLayoutSetElement" format="enum|string">
<enum name="alphabet" value="0" /> <enum name="alphabet" value="0" />
<enum name="alphabetManualShifted" value="1" /> <enum name="alphabetManualShifted" value="1" />
<enum name="alphabetAutomaticShifted" value="2" /> <enum name="alphabetAutomaticShifted" value="2" />
@ -403,7 +403,7 @@
<attr name="parentStyle" format="string" /> <attr name="parentStyle" format="string" />
</declare-styleable> </declare-styleable>
<declare-styleable name="KeyboardSet_Element"> <declare-styleable name="KeyboardLayoutSet_Element">
<!-- This should be aligned with KeyboardId.ELEMENT_* --> <!-- This should be aligned with KeyboardId.ELEMENT_* -->
<attr name="elementName" format="enum"> <attr name="elementName" format="enum">
<enum name="alphabet" value="0" /> <enum name="alphabet" value="0" />

View File

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
> >
<key-style <key-style
latin:styleName="hasShiftedLetterHintStyle" latin:styleName="hasShiftedLetterHintStyle"
@ -38,7 +38,7 @@
<!-- Functional key styles --> <!-- Functional key styles -->
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetAutomaticShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetAutomaticShifted"
> >
<key-style <key-style
latin:styleName="shiftKeyStyle" latin:styleName="shiftKeyStyle"
@ -48,7 +48,7 @@
latin:backgroundType="stickyOff" /> latin:backgroundType="stickyOff" />
</case> </case>
<case <case
latin:keyboardSetElement="alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetShiftLocked|alphabetShiftLockShifted"
> >
<key-style <key-style
latin:styleName="shiftKeyStyle" latin:styleName="shiftKeyStyle"
@ -109,7 +109,7 @@
latin:backgroundType="functional" /> latin:backgroundType="functional" />
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
latin:navigatePrevious="true" latin:navigatePrevious="true"
> >
<key-style <key-style

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0E51: "๑" THAI DIGIT ONE --> <!-- U+0E51: "๑" THAI DIGIT ONE -->
<Key <Key

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0E50: "" THAI DIGIT ZERO --> <!-- U+0E50: "" THAI DIGIT ZERO -->
<Key <Key

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0E24: "ฤ" THAI CHARACTER RU --> <!-- U+0E24: "ฤ" THAI CHARACTER RU -->
<Key <Key

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<Key <Key
latin:keyLabel="(" /> latin:keyLabel="(" />

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
> >
<key-style <key-style
latin:styleName="hasShiftedLetterHintStyle" latin:styleName="hasShiftedLetterHintStyle"
@ -37,7 +37,7 @@
</switch> </switch>
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetAutomaticShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetAutomaticShifted"
> >
<key-style <key-style
latin:styleName="shiftKeyStyle" latin:styleName="shiftKeyStyle"
@ -47,7 +47,7 @@
latin:backgroundType="stickyOff" /> latin:backgroundType="stickyOff" />
</case> </case>
<case <case
latin:keyboardSetElement="alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetShiftLocked|alphabetShiftLockShifted"
> >
<key-style <key-style
latin:styleName="shiftKeyStyle" latin:styleName="shiftKeyStyle"
@ -108,7 +108,7 @@
latin:backgroundType="functional" /> latin:backgroundType="functional" />
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
latin:navigatePrevious="true" latin:navigatePrevious="true"
> >
<key-style <key-style

View File

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

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

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

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
> >
<Key <Key
latin:keyLabel="\?" /> latin:keyLabel="\?" />

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
> >
<Key <Key
latin:keyLabel=":" latin:keyLabel=":"

View File

@ -42,7 +42,7 @@
<!-- Functional key styles --> <!-- Functional key styles -->
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetAutomaticShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetAutomaticShifted"
> >
<key-style <key-style
latin:styleName="shiftKeyStyle" latin:styleName="shiftKeyStyle"
@ -52,7 +52,7 @@
latin:backgroundType="stickyOff" /> latin:backgroundType="stickyOff" />
</case> </case>
<case <case
latin:keyboardSetElement="alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetShiftLocked|alphabetShiftLockShifted"
> >
<key-style <key-style
latin:styleName="shiftKeyStyle" latin:styleName="shiftKeyStyle"
@ -82,7 +82,7 @@
<!-- Shift + Enter in textMultiLine field. --> <!-- Shift + Enter in textMultiLine field. -->
<case <case
latin:isMultiLine="true" latin:isMultiLine="true"
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
> >
<key-style <key-style
latin:styleName="enterKeyStyle" latin:styleName="enterKeyStyle"

View File

@ -108,7 +108,7 @@
<!-- Shift + Enter in textMultiLine field. --> <!-- Shift + Enter in textMultiLine field. -->
<case <case
latin:isMultiLine="true" latin:isMultiLine="true"
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
> >
<key-style <key-style
latin:styleName="enterKeyStyle" latin:styleName="enterKeyStyle"

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.
*/
-->
<KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_arabic"
latin:enableProximityCharsCorrection="true" />
<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" />
</KeyboardLayoutSet>

View File

@ -2,7 +2,7 @@
<!-- <!--
/* /*
** **
** Copyright 2011, The Android Open Source Project ** Copyright 2012, The Android Open Source Project
** **
** Licensed under the Apache License, Version 2.0 (the "License"); ** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License. ** you may not use this file except in compliance with the License.
@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -2,7 +2,7 @@
<!-- <!--
/* /*
** **
** Copyright 2011, The Android Open Source Project ** Copyright 2012, The Android Open Source Project
** **
** Licensed under the Apache License, Version 2.0 (the "License"); ** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License. ** you may not use this file except in compliance with the License.
@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -55,4 +55,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -2,7 +2,7 @@
<!-- <!--
/* /*
** **
** Copyright 2011, The Android Open Source Project ** Copyright 2012, The Android Open Source Project
** **
** Licensed under the Apache License, Version 2.0 (the "License"); ** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License. ** you may not use this file except in compliance with the License.
@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -55,4 +55,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

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.
*/
-->
<KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwertz"
latin:enableProximityCharsCorrection="true" />
<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" />
</KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -2,7 +2,7 @@
<!-- <!--
/* /*
** **
** Copyright 2011, The Android Open Source Project ** Copyright 2012, The Android Open Source Project
** **
** Licensed under the Apache License, Version 2.0 (the "License"); ** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License. ** you may not use this file except in compliance with the License.
@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -39,4 +39,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

@ -18,7 +18,7 @@
*/ */
--> -->
<KeyboardSet <KeyboardLayoutSet
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"> xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element <Element
latin:elementName="alphabet" latin:elementName="alphabet"
@ -55,4 +55,4 @@
<Element <Element
latin:elementName="number" latin:elementName="number"
latin:elementKeyboard="@xml/kbd_number" /> latin:elementKeyboard="@xml/kbd_number" />
</KeyboardSet> </KeyboardLayoutSet>

View File

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

@ -20,7 +20,8 @@
<!-- The attributes in this XML file provide configuration information --> <!-- The attributes in this XML file provide configuration information -->
<!-- for the Input Method Manager. --> <!-- for the Input Method Manager. -->
<!-- Supported locales: name/layout <!-- Supported subtypes
keyboard_locale: script_name/keyboard_layout_set[:keyboard_locale]
ar: Arabic/arabic ar: Arabic/arabic
be: Belarusian/east_slavic be: Belarusian/east_slavic
bg: Bulgarian/bulgarian bg: Bulgarian/bulgarian
@ -75,246 +76,259 @@
android:label="@string/subtype_en_US" android:label="@string/subtype_en_US"
android:imeSubtypeLocale="en_US" android:imeSubtypeLocale="en_US"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="TrySuppressingImeSwitcher,AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,TrySuppressingImeSwitcher,AsciiCapable"
/> />
<subtype android:icon="@drawable/ic_subtype_keyboard" <subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_en_GB" android:label="@string/subtype_en_GB"
android:imeSubtypeLocale="en_GB" android:imeSubtypeLocale="en_GB"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="TrySuppressingImeSwitcher,AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,TrySuppressingImeSwitcher,AsciiCapable"
/> />
<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="ar" android:imeSubtypeLocale="ar"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=arabic"
/> />
<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="be" android:imeSubtypeLocale="be"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic"
/> />
<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="bg" android:imeSubtypeLocale="bg"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=bulgarian"
/> />
<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="cs" android:imeSubtypeLocale="cs"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable"
/> />
<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="da" android:imeSubtypeLocale="da"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=nordic,AsciiCapable"
/> />
<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="de" android:imeSubtypeLocale="de"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable"
/> />
<subtype android:icon="@drawable/ic_subtype_keyboard" <subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic_qwerty" android:label="@string/subtype_generic_qwerty"
android:imeSubtypeLocale="de" android:imeSubtypeLocale="de"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,KeyboardLocale=de_QY" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty:de_QY,AsciiCapable"
/> />
<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="el" android:imeSubtypeLocale="el"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=greek"
/> />
<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="es" android:imeSubtypeLocale="es"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable"
/> />
<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="et" android:imeSubtypeLocale="et"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=nordic,AsciiCapable"
/> />
<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="fa" android:imeSubtypeLocale="fa"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=farsi"
/> />
<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"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=nordic,AsciiCapable"
/> />
<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="fr" android:imeSubtypeLocale="fr"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=azerty,AsciiCapable"
/> />
<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="fr_CA" android:imeSubtypeLocale="fr_CA"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="fr_CH" android:imeSubtypeLocale="fr_CH"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable"
/> />
<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="hi" android:imeSubtypeLocale="hi"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=hindi"
/> />
<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="hr" android:imeSubtypeLocale="hr"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable"
/> />
<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="hu" android:imeSubtypeLocale="hu"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable"
/> />
<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="is" android:imeSubtypeLocale="is"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="it" android:imeSubtypeLocale="it"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<!-- Java uses the deprecated "iw" code instead of the standard "he" code for Hebrew. --> <!-- Java uses the deprecated "iw" code instead of the standard "he" code for Hebrew. -->
<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="iw" android:imeSubtypeLocale="iw"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=hebrew"
/> />
<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="ka" android:imeSubtypeLocale="ka"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=georgian"
/> />
<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="ky" android:imeSubtypeLocale="ky"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic"
/> />
<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="lt" android:imeSubtypeLocale="lt"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="lv" android:imeSubtypeLocale="lv"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="mk" android:imeSubtypeLocale="mk"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=south_slavic"
/> />
<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="nb" android:imeSubtypeLocale="nb"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=nordic,AsciiCapable"
/> />
<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="nl" android:imeSubtypeLocale="nl"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="pl" android:imeSubtypeLocale="pl"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="pt" android:imeSubtypeLocale="pt"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="ro" android:imeSubtypeLocale="ro"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="ru" android:imeSubtypeLocale="ru"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic"
/> />
<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="sk" android:imeSubtypeLocale="sk"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="sl" android:imeSubtypeLocale="sl"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="sr" android:imeSubtypeLocale="sr"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=south_slavic"
/> />
<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="sv" android:imeSubtypeLocale="sv"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=nordic,AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="tr"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable"
/> />
<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="th" android:imeSubtypeLocale="th"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="" android:imeSubtypeExtraValue="KeyboardLayoutSet=thai"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="tr"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<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="uk" android:imeSubtypeLocale="uk"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic"
/> />
<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="vi" android:imeSubtypeLocale="vi"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
/> />
<subtype android:icon="@drawable/ic_subtype_keyboard" <subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_no_language_qwerty" android:label="@string/subtype_no_language_qwerty"
android:imeSubtypeLocale="zz_QY" android:imeSubtypeLocale="zz_QY"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,EnabledWhenDefaultIsNotAsciiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EnabledWhenDefaultIsNotAsciiCapable"
/> />
</input-method> </input-method>

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<Key <Key
latin:keyLabel="Q" latin:keyLabel="Q"

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<Key <Key
latin:keyLabel="A" latin:keyLabel="A"

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+10EB: "ძ" GEORGIAN LETTER JIL --> <!-- U+10EB: "ძ" GEORGIAN LETTER JIL -->
<Key <Key

View File

@ -25,7 +25,7 @@
<!-- <!--
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
> >
U+0385: "΅" GREEK DIALYTIKA TONOS U+0385: "΅" GREEK DIALYTIKA TONOS
<Key <Key

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0914: "औ" DEVANAGARI LETTER AU <!-- U+0914: "औ" DEVANAGARI LETTER AU
U+0912/U+0902: "ऒं" DEVANAGARI LETTER SHORT O//DEVANAGARI SIGN ANUSVARA --> U+0912/U+0902: "ऒं" DEVANAGARI LETTER SHORT O//DEVANAGARI SIGN ANUSVARA -->

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0913: "ओ" DEVANAGARI LETTER O <!-- U+0913: "ओ" DEVANAGARI LETTER O
U+0913/U+0902: "ओं" DEVANAGARI LETTER O/DEVANAGARI SIGN ANUSVARA U+0913/U+0902: "ओं" DEVANAGARI LETTER O/DEVANAGARI SIGN ANUSVARA

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0911: "ऑ" DEVANAGARI LETTER CANDRA O --> <!-- U+0911: "ऑ" DEVANAGARI LETTER CANDRA O -->
<Key <Key

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0E0E: "ฎ" THAI CHARACTER DO CHADA --> <!-- U+0E0E: "ฎ" THAI CHARACTER DO CHADA -->
<Key <Key

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0E24: "ฤ" THAI CHARACTER RU --> <!-- U+0E24: "ฤ" THAI CHARACTER RU -->
<Key <Key

View File

@ -23,7 +23,7 @@
> >
<switch> <switch>
<case <case
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
> >
<!-- U+0E09: "ฉ" THAI CHARACTER CHO CHING --> <!-- U+0E09: "ฉ" THAI CHARACTER CHO CHING -->
<Key <Key

View File

@ -239,7 +239,7 @@ public class Keyboard {
public final ArrayList<Key> mAltCodeKeysWhileTyping = new ArrayList<Key>(); public final ArrayList<Key> mAltCodeKeysWhileTyping = new ArrayList<Key>();
public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet(); public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();
public KeyboardSet.KeysCache mKeysCache; public KeyboardLayoutSet.KeysCache mKeysCache;
public int mMostCommonKeyHeight = 0; public int mMostCommonKeyHeight = 0;
public int mMostCommonKeyWidth = 0; public int mMostCommonKeyWidth = 0;
@ -637,7 +637,7 @@ public class Keyboard {
params.GRID_HEIGHT = res.getInteger(R.integer.config_keyboard_grid_height); params.GRID_HEIGHT = res.getInteger(R.integer.config_keyboard_grid_height);
} }
public void setAutoGenerate(KeyboardSet.KeysCache keysCache) { public void setAutoGenerate(KeyboardLayoutSet.KeysCache keysCache) {
mParams.mKeysCache = keysCache; mParams.mKeysCache = keysCache;
} }
@ -1061,8 +1061,8 @@ public class Keyboard {
final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser), final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard_Case); R.styleable.Keyboard_Case);
try { try {
final boolean keyboardSetElementMatched = matchTypedValue(a, final boolean keyboardLayoutSetElementMatched = matchTypedValue(a,
R.styleable.Keyboard_Case_keyboardSetElement, id.mElementId, R.styleable.Keyboard_Case_keyboardLayoutSetElement, id.mElementId,
KeyboardId.elementIdToName(id.mElementId)); KeyboardId.elementIdToName(id.mElementId));
final boolean modeMatched = matchTypedValue(a, final boolean modeMatched = matchTypedValue(a,
R.styleable.Keyboard_Case_mode, id.mMode, KeyboardId.modeName(id.mMode)); R.styleable.Keyboard_Case_mode, id.mMode, KeyboardId.modeName(id.mMode));
@ -1091,7 +1091,7 @@ public class Keyboard {
R.styleable.Keyboard_Case_languageCode, id.mLocale.getLanguage()); R.styleable.Keyboard_Case_languageCode, id.mLocale.getLanguage());
final boolean countryCodeMatched = matchString(a, final boolean countryCodeMatched = matchString(a,
R.styleable.Keyboard_Case_countryCode, id.mLocale.getCountry()); R.styleable.Keyboard_Case_countryCode, id.mLocale.getCountry());
final boolean selected = keyboardSetElementMatched && modeMatched final boolean selected = keyboardLayoutSetElementMatched && modeMatched
&& navigateNextMatched && navigatePreviousMatched && passwordInputMatched && navigateNextMatched && navigatePreviousMatched && passwordInputMatched
&& clobberSettingsKeyMatched && shortcutKeyEnabledMatched && clobberSettingsKeyMatched && shortcutKeyEnabledMatched
&& hasShortcutKeyMatched && languageSwitchKeyEnabledMatched && hasShortcutKeyMatched && languageSwitchKeyEnabledMatched
@ -1100,8 +1100,9 @@ public class Keyboard {
if (DEBUG) { if (DEBUG) {
startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE, startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE,
textAttr(a.getString(R.styleable.Keyboard_Case_keyboardSetElement), textAttr(a.getString(
"keyboardSetElement"), R.styleable.Keyboard_Case_keyboardLayoutSetElement),
"keyboardLayoutSetElement"),
textAttr(a.getString(R.styleable.Keyboard_Case_mode), "mode"), textAttr(a.getString(R.styleable.Keyboard_Case_mode), "mode"),
textAttr(a.getString(R.styleable.Keyboard_Case_imeAction), textAttr(a.getString(R.styleable.Keyboard_Case_imeAction),
"imeAction"), "imeAction"),

View File

@ -28,14 +28,17 @@ import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.compat.EditorInfoCompatUtils; import com.android.inputmethod.compat.EditorInfoCompatUtils;
import com.android.inputmethod.keyboard.KeyboardSet.Params.ElementParams; import com.android.inputmethod.keyboard.KeyboardLayoutSet.Params.ElementParams;
import com.android.inputmethod.keyboard.internal.KeySpecParser;
import com.android.inputmethod.latin.InputTypeUtils; import com.android.inputmethod.latin.InputTypeUtils;
import com.android.inputmethod.latin.LatinIME; import com.android.inputmethod.latin.LatinIME;
import com.android.inputmethod.latin.LatinImeLogger; import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.LocaleUtils;
import com.android.inputmethod.latin.LocaleUtils.RunInLocale; import com.android.inputmethod.latin.LocaleUtils.RunInLocale;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.StringUtils; import com.android.inputmethod.latin.StringUtils;
import com.android.inputmethod.latin.SubtypeLocale; import com.android.inputmethod.latin.SubtypeLocale;
import com.android.inputmethod.latin.SubtypeSwitcher;
import com.android.inputmethod.latin.XmlParseUtils; import com.android.inputmethod.latin.XmlParseUtils;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
@ -47,18 +50,25 @@ import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
/** /**
* This class represents a set of keyboards. Each of them represents a different keyboard * This class represents a set of keyboard layouts. Each of them represents a different keyboard
* specific to a keyboard state, such as alphabet, symbols, and so on. Layouts in the same * specific to a keyboard state, such as alphabet, symbols, and so on. Layouts in the same
* {@link KeyboardSet} are related to each other. * {@link KeyboardLayoutSet} are related to each other.
* A {@link KeyboardSet} needs to be created for each {@link android.view.inputmethod.EditorInfo}. * A {@link KeyboardLayoutSet} needs to be created for each
* {@link android.view.inputmethod.EditorInfo}.
*/ */
public class KeyboardSet { public class KeyboardLayoutSet {
private static final String TAG = KeyboardSet.class.getSimpleName(); private static final String TAG = KeyboardLayoutSet.class.getSimpleName();
private static final boolean DEBUG_CACHE = LatinImeLogger.sDBG; private static final boolean DEBUG_CACHE = LatinImeLogger.sDBG;
private static final String TAG_KEYBOARD_SET = "KeyboardSet"; private static final String TAG_KEYBOARD_SET = "KeyboardLayoutSet";
private static final String TAG_ELEMENT = "Element"; private static final String TAG_ELEMENT = "Element";
private static final String DEFAULT_KEYBOARD_LAYOUT_SET = "qwerty";
private static final char KEYBOARD_LAYOUT_SET_LOCALE_DELIMITER = ':';
private static final String KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX = "xml/keyboard_layout_set_";
private static final int DEFAULT_KEYBOARD_LAYOUT_SET_RESOURCE_ID =
R.xml.keyboard_layout_set_qwerty;
private final Context mContext; private final Context mContext;
private final Params mParams; private final Params mParams;
@ -66,10 +76,10 @@ public class KeyboardSet {
new HashMap<KeyboardId, SoftReference<Keyboard>>(); new HashMap<KeyboardId, SoftReference<Keyboard>>();
private static final KeysCache sKeysCache = new KeysCache(); private static final KeysCache sKeysCache = new KeysCache();
public static class KeyboardSetException extends RuntimeException { public static class KeyboardLayoutSetException extends RuntimeException {
public final KeyboardId mKeyboardId; public final KeyboardId mKeyboardId;
public KeyboardSetException(Throwable cause, KeyboardId keyboardId) { public KeyboardLayoutSetException(Throwable cause, KeyboardId keyboardId) {
super(cause); super(cause);
mKeyboardId = keyboardId; mKeyboardId = keyboardId;
} }
@ -98,6 +108,7 @@ public class KeyboardSet {
} }
static class Params { static class Params {
String mKeyboardLayoutSetName;
int mMode; int mMode;
EditorInfo mEditorInfo; EditorInfo mEditorInfo;
boolean mTouchPositionCorrectionEnabled; boolean mTouchPositionCorrectionEnabled;
@ -108,8 +119,8 @@ public class KeyboardSet {
Locale mLocale; Locale mLocale;
int mOrientation; int mOrientation;
int mWidth; int mWidth;
// KeyboardSet element id to element's parameters map. // KeyboardLayoutSet element id to element's parameters map.
final HashMap<Integer, ElementParams> mKeyboardSetElementIdToParamsMap = final HashMap<Integer, ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
new HashMap<Integer, ElementParams>(); new HashMap<Integer, ElementParams>();
static class ElementParams { static class ElementParams {
@ -123,43 +134,43 @@ public class KeyboardSet {
sKeysCache.clear(); sKeysCache.clear();
} }
private KeyboardSet(Context context, Params params) { private KeyboardLayoutSet(Context context, Params params) {
mContext = context; mContext = context;
mParams = params; mParams = params;
} }
public Keyboard getKeyboard(int baseKeyboardSetElementId) { public Keyboard getKeyboard(int baseKeyboardLayoutSetElementId) {
final int keyboardSetElementId; final int keyboardLayoutSetElementId;
switch (mParams.mMode) { switch (mParams.mMode) {
case KeyboardId.MODE_PHONE: case KeyboardId.MODE_PHONE:
if (baseKeyboardSetElementId == KeyboardId.ELEMENT_SYMBOLS) { if (baseKeyboardLayoutSetElementId == KeyboardId.ELEMENT_SYMBOLS) {
keyboardSetElementId = KeyboardId.ELEMENT_PHONE_SYMBOLS; keyboardLayoutSetElementId = KeyboardId.ELEMENT_PHONE_SYMBOLS;
} else { } else {
keyboardSetElementId = KeyboardId.ELEMENT_PHONE; keyboardLayoutSetElementId = KeyboardId.ELEMENT_PHONE;
} }
break; break;
case KeyboardId.MODE_NUMBER: case KeyboardId.MODE_NUMBER:
case KeyboardId.MODE_DATE: case KeyboardId.MODE_DATE:
case KeyboardId.MODE_TIME: case KeyboardId.MODE_TIME:
case KeyboardId.MODE_DATETIME: case KeyboardId.MODE_DATETIME:
keyboardSetElementId = KeyboardId.ELEMENT_NUMBER; keyboardLayoutSetElementId = KeyboardId.ELEMENT_NUMBER;
break; break;
default: default:
keyboardSetElementId = baseKeyboardSetElementId; keyboardLayoutSetElementId = baseKeyboardLayoutSetElementId;
break; break;
} }
ElementParams elementParams = mParams.mKeyboardSetElementIdToParamsMap.get( ElementParams elementParams = mParams.mKeyboardLayoutSetElementIdToParamsMap.get(
keyboardSetElementId); keyboardLayoutSetElementId);
if (elementParams == null) { if (elementParams == null) {
elementParams = mParams.mKeyboardSetElementIdToParamsMap.get( elementParams = mParams.mKeyboardLayoutSetElementIdToParamsMap.get(
KeyboardId.ELEMENT_ALPHABET); KeyboardId.ELEMENT_ALPHABET);
} }
final KeyboardId id = getKeyboardId(keyboardSetElementId); final KeyboardId id = getKeyboardId(keyboardLayoutSetElementId);
try { try {
return getKeyboard(mContext, elementParams, id); return getKeyboard(mContext, elementParams, id);
} catch (RuntimeException e) { } catch (RuntimeException e) {
throw new KeyboardSetException(e, id); throw new KeyboardLayoutSetException(e, id);
} }
} }
@ -199,21 +210,46 @@ public class KeyboardSet {
return keyboard; return keyboard;
} }
// Note: The keyboard for each locale, shift state, and mode are represented as KeyboardSet // Note: The keyboard for each locale, shift state, and mode are represented as
// element id that is a key in keyboard_set.xml. Also that file specifies which XML layout // KeyboardLayoutSet element id that is a key in keyboard_set.xml. Also that file specifies
// should be used for each keyboard. The KeyboardId is an internal key for Keyboard object. // which XML layout should be used for each keyboard. The KeyboardId is an internal key for
private KeyboardId getKeyboardId(int keyboardSetElementId) { // Keyboard object.
private KeyboardId getKeyboardId(int keyboardLayoutSetElementId) {
final Params params = mParams; final Params params = mParams;
final boolean isSymbols = (keyboardSetElementId == KeyboardId.ELEMENT_SYMBOLS final boolean isSymbols = (keyboardLayoutSetElementId == KeyboardId.ELEMENT_SYMBOLS
|| keyboardSetElementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED); || keyboardLayoutSetElementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED);
final boolean noLanguage = params.mLocale.getLanguage().equals(SubtypeLocale.NO_LANGUAGE); final boolean noLanguage = params.mLocale.getLanguage().equals(SubtypeLocale.NO_LANGUAGE);
final boolean voiceKeyEnabled = params.mVoiceKeyEnabled && !noLanguage; final boolean voiceKeyEnabled = params.mVoiceKeyEnabled && !noLanguage;
final boolean hasShortcutKey = voiceKeyEnabled && (isSymbols != params.mVoiceKeyOnMain); final boolean hasShortcutKey = voiceKeyEnabled && (isSymbols != params.mVoiceKeyOnMain);
return new KeyboardId(keyboardSetElementId, params.mLocale, params.mOrientation, return new KeyboardId(keyboardLayoutSetElementId, params.mLocale, params.mOrientation,
params.mWidth, params.mMode, params.mEditorInfo, params.mNoSettingsKey, params.mWidth, params.mMode, params.mEditorInfo, params.mNoSettingsKey,
voiceKeyEnabled, hasShortcutKey, params.mLanguageSwitchKeyEnabled); voiceKeyEnabled, hasShortcutKey, params.mLanguageSwitchKeyEnabled);
} }
private static String getKeyboardLayoutSetName(InputMethodSubtype subtype) {
final String keyboardLayoutSet = subtype.getExtraValueOf(
LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LAYOUT_SET);
// TODO: Remove this null check when InputMethodManager.getCurrentInputMethodSubtype is
// fixed.
if (keyboardLayoutSet == null) return DEFAULT_KEYBOARD_LAYOUT_SET;
final int pos = keyboardLayoutSet.indexOf(KEYBOARD_LAYOUT_SET_LOCALE_DELIMITER);
return (pos > 0) ? keyboardLayoutSet.substring(0, pos) : keyboardLayoutSet;
}
public static String getKeyboardLayoutSetLocaleString(InputMethodSubtype subtype) {
final String keyboardLayoutSet = subtype.getExtraValueOf(
LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LAYOUT_SET);
// TODO: Remove this null check when InputMethodManager.getCurrentInputMethodSubtype is
// fixed.
if (keyboardLayoutSet == null) return subtype.getLocale();
final int pos = keyboardLayoutSet.indexOf(KEYBOARD_LAYOUT_SET_LOCALE_DELIMITER);
return (pos > 0) ? keyboardLayoutSet.substring(pos + 1) : subtype.getLocale();
}
public static Locale getKeyboardLayoutSetLocale(InputMethodSubtype subtype) {
return LocaleUtils.constructLocaleFromString(getKeyboardLayoutSetLocaleString(subtype));
}
public static class Builder { public static class Builder {
private final Context mContext; private final Context mContext;
private final String mPackageName; private final String mPackageName;
@ -244,7 +280,6 @@ public class KeyboardSet {
} }
public Builder setSubtype(InputMethodSubtype subtype) { public Builder setSubtype(InputMethodSubtype subtype) {
final Locale inputLocale = SubtypeLocale.getSubtypeLocale(subtype);
final boolean asciiCapable = subtype.containsExtraValueKey( final boolean asciiCapable = subtype.containsExtraValueKey(
LatinIME.SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE); LatinIME.SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE);
final boolean deprecatedForceAscii = StringUtils.inPrivateImeOptions( final boolean deprecatedForceAscii = StringUtils.inPrivateImeOptions(
@ -252,8 +287,12 @@ public class KeyboardSet {
final boolean forceAscii = EditorInfoCompatUtils.hasFlagForceAscii( final boolean forceAscii = EditorInfoCompatUtils.hasFlagForceAscii(
mParams.mEditorInfo.imeOptions) mParams.mEditorInfo.imeOptions)
|| deprecatedForceAscii; || deprecatedForceAscii;
mParams.mLocale = (forceAscii && !asciiCapable) final InputMethodSubtype keyboardSubtype = (forceAscii && !asciiCapable)
? SubtypeLocale.LOCALE_NO_LANGUAGE_QWERTY : inputLocale; ? SubtypeSwitcher.getInstance().getNoLanguageSubtype()
: subtype;
mParams.mLocale = getKeyboardLayoutSetLocale(keyboardSubtype);
mParams.mKeyboardLayoutSetName = KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX
+ getKeyboardLayoutSetName(keyboardSubtype);
return this; return this;
} }
@ -275,31 +314,31 @@ public class KeyboardSet {
mParams.mTouchPositionCorrectionEnabled = enabled; mParams.mTouchPositionCorrectionEnabled = enabled;
} }
public KeyboardSet build() { public KeyboardLayoutSet build() {
if (mParams.mOrientation == Configuration.ORIENTATION_UNDEFINED) if (mParams.mOrientation == Configuration.ORIENTATION_UNDEFINED)
throw new RuntimeException("Screen geometry is not specified"); throw new RuntimeException("Screen geometry is not specified");
if (mParams.mLocale == null) if (mParams.mLocale == null)
throw new RuntimeException("KeyboardSet subtype is not specified"); throw new RuntimeException("KeyboardLayoutSet subtype is not specified");
final String keyboardLayoutSetName = mParams.mKeyboardLayoutSetName;
final int xmlId = KeySpecParser.getResourceId(
mResources, keyboardLayoutSetName, DEFAULT_KEYBOARD_LAYOUT_SET_RESOURCE_ID);
final RunInLocale<Void> job = new RunInLocale<Void>() { final RunInLocale<Void> job = new RunInLocale<Void>() {
@Override @Override
protected Void job(Resources res) { protected Void job(Resources res) {
try { try {
parseKeyboardSet(res, R.xml.keyboard_set); parseKeyboardLayoutSet(res, xmlId);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e.getMessage() + " in " throw new RuntimeException(e.getMessage() + " in " + keyboardLayoutSetName);
+ res.getResourceName(R.xml.keyboard_set)
+ " of locale " + mParams.mLocale);
} }
return null; return null;
} }
}; };
job.runInLocale(mResources, mParams.mLocale); job.runInLocale(mResources, mParams.mLocale);
return new KeyboardSet(mContext, mParams); return new KeyboardLayoutSet(mContext, mParams);
} }
private void parseKeyboardSet(Resources res, int resId) throws XmlPullParserException, private void parseKeyboardLayoutSet(Resources res, int resId)
IOException { throws XmlPullParserException, IOException {
final XmlResourceParser parser = res.getXml(resId); final XmlResourceParser parser = res.getXml(resId);
try { try {
int event; int event;
@ -307,7 +346,7 @@ public class KeyboardSet {
if (event == XmlPullParser.START_TAG) { if (event == XmlPullParser.START_TAG) {
final String tag = parser.getName(); final String tag = parser.getName();
if (TAG_KEYBOARD_SET.equals(tag)) { if (TAG_KEYBOARD_SET.equals(tag)) {
parseKeyboardSetContent(parser); parseKeyboardLayoutSetContent(parser);
} else { } else {
throw new XmlParseUtils.IllegalStartTag(parser, TAG_KEYBOARD_SET); throw new XmlParseUtils.IllegalStartTag(parser, TAG_KEYBOARD_SET);
} }
@ -318,14 +357,14 @@ public class KeyboardSet {
} }
} }
private void parseKeyboardSetContent(XmlPullParser parser) throws XmlPullParserException, private void parseKeyboardLayoutSetContent(XmlPullParser parser)
IOException { throws XmlPullParserException, IOException {
int event; int event;
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) { while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
if (event == XmlPullParser.START_TAG) { if (event == XmlPullParser.START_TAG) {
final String tag = parser.getName(); final String tag = parser.getName();
if (TAG_ELEMENT.equals(tag)) { if (TAG_ELEMENT.equals(tag)) {
parseKeyboardSetElement(parser); parseKeyboardLayoutSetElement(parser);
} else { } else {
throw new XmlParseUtils.IllegalStartTag(parser, TAG_KEYBOARD_SET); throw new XmlParseUtils.IllegalStartTag(parser, TAG_KEYBOARD_SET);
} }
@ -340,27 +379,28 @@ public class KeyboardSet {
} }
} }
private void parseKeyboardSetElement(XmlPullParser parser) throws XmlPullParserException, private void parseKeyboardLayoutSetElement(XmlPullParser parser)
IOException { throws XmlPullParserException, IOException {
final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser), final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.KeyboardSet_Element); R.styleable.KeyboardLayoutSet_Element);
try { try {
XmlParseUtils.checkAttributeExists(a, XmlParseUtils.checkAttributeExists(a,
R.styleable.KeyboardSet_Element_elementName, "elementName", R.styleable.KeyboardLayoutSet_Element_elementName, "elementName",
TAG_ELEMENT, parser); TAG_ELEMENT, parser);
XmlParseUtils.checkAttributeExists(a, XmlParseUtils.checkAttributeExists(a,
R.styleable.KeyboardSet_Element_elementKeyboard, "elementKeyboard", R.styleable.KeyboardLayoutSet_Element_elementKeyboard, "elementKeyboard",
TAG_ELEMENT, parser); TAG_ELEMENT, parser);
XmlParseUtils.checkEndTag(TAG_ELEMENT, parser); XmlParseUtils.checkEndTag(TAG_ELEMENT, parser);
final ElementParams elementParams = new ElementParams(); final ElementParams elementParams = new ElementParams();
final int elementName = a.getInt( final int elementName = a.getInt(
R.styleable.KeyboardSet_Element_elementName, 0); R.styleable.KeyboardLayoutSet_Element_elementName, 0);
elementParams.mKeyboardXmlId = a.getResourceId( elementParams.mKeyboardXmlId = a.getResourceId(
R.styleable.KeyboardSet_Element_elementKeyboard, 0); R.styleable.KeyboardLayoutSet_Element_elementKeyboard, 0);
elementParams.mProximityCharsCorrectionEnabled = a.getBoolean( elementParams.mProximityCharsCorrectionEnabled = a.getBoolean(
R.styleable.KeyboardSet_Element_enableProximityCharsCorrection, false); R.styleable.KeyboardLayoutSet_Element_enableProximityCharsCorrection,
mParams.mKeyboardSetElementIdToParamsMap.put(elementName, elementParams); false);
mParams.mKeyboardLayoutSetElementIdToParamsMap.put(elementName, elementParams);
} finally { } finally {
a.recycle(); a.recycle();
} }

View File

@ -27,7 +27,7 @@ import android.view.View;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy; import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy;
import com.android.inputmethod.keyboard.KeyboardSet.KeyboardSetException; import com.android.inputmethod.keyboard.KeyboardLayoutSet.KeyboardLayoutSetException;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy; import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.keyboard.internal.KeyboardState; import com.android.inputmethod.keyboard.internal.KeyboardState;
import com.android.inputmethod.latin.DebugSettings; import com.android.inputmethod.latin.DebugSettings;
@ -76,7 +76,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
private KeyboardState mState; private KeyboardState mState;
private KeyboardSet mKeyboardSet; private KeyboardLayoutSet mKeyboardLayoutSet;
/** mIsAutoCorrectionActive indicates that auto corrected word will be input instead of /** mIsAutoCorrectionActive indicates that auto corrected word will be input instead of
* what user actually typed. */ * what user actually typed. */
@ -129,12 +129,13 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
if (mKeyboardTheme.mThemeId != keyboardTheme.mThemeId) { if (mKeyboardTheme.mThemeId != keyboardTheme.mThemeId) {
mKeyboardTheme = keyboardTheme; mKeyboardTheme = keyboardTheme;
mThemeContext = new ContextThemeWrapper(context, keyboardTheme.mStyleId); mThemeContext = new ContextThemeWrapper(context, keyboardTheme.mStyleId);
KeyboardSet.clearKeyboardCache(); KeyboardLayoutSet.clearKeyboardCache();
} }
} }
public void loadKeyboard(EditorInfo editorInfo, SettingsValues settingsValues) { public void loadKeyboard(EditorInfo editorInfo, SettingsValues settingsValues) {
final KeyboardSet.Builder builder = new KeyboardSet.Builder(mThemeContext, editorInfo); final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
mThemeContext, editorInfo);
builder.setScreenGeometry(mThemeContext.getResources().getConfiguration().orientation, builder.setScreenGeometry(mThemeContext.getResources().getConfiguration().orientation,
mThemeContext.getResources().getDisplayMetrics().widthPixels); mThemeContext.getResources().getDisplayMetrics().widthPixels);
builder.setSubtype(mSubtypeSwitcher.getCurrentSubtype()); builder.setSubtype(mSubtypeSwitcher.getCurrentSubtype());
@ -142,10 +143,10 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
settingsValues.isVoiceKeyEnabled(editorInfo), settingsValues.isVoiceKeyEnabled(editorInfo),
settingsValues.isVoiceKeyOnMain(), settingsValues.isVoiceKeyOnMain(),
settingsValues.isLanguageSwitchKeyEnabled(mThemeContext)); settingsValues.isLanguageSwitchKeyEnabled(mThemeContext));
mKeyboardSet = builder.build(); mKeyboardLayoutSet = builder.build();
try { try {
mState.onLoadKeyboard(mResources.getString(R.string.layout_switch_back_symbols)); mState.onLoadKeyboard(mResources.getString(R.string.layout_switch_back_symbols));
} catch (KeyboardSetException e) { } catch (KeyboardLayoutSetException e) {
Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause()); Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause());
LatinImeLogger.logOnException(e.mKeyboardId.toString(), e.getCause()); LatinImeLogger.logOnException(e.mKeyboardId.toString(), e.getCause());
return; return;
@ -214,43 +215,43 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
// Implements {@link KeyboardState.SwitchActions}. // Implements {@link KeyboardState.SwitchActions}.
@Override @Override
public void setAlphabetKeyboard() { public void setAlphabetKeyboard() {
setKeyboard(mKeyboardSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET)); setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET));
} }
// Implements {@link KeyboardState.SwitchActions}. // Implements {@link KeyboardState.SwitchActions}.
@Override @Override
public void setAlphabetManualShiftedKeyboard() { public void setAlphabetManualShiftedKeyboard() {
setKeyboard(mKeyboardSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED)); setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED));
} }
// Implements {@link KeyboardState.SwitchActions}. // Implements {@link KeyboardState.SwitchActions}.
@Override @Override
public void setAlphabetAutomaticShiftedKeyboard() { public void setAlphabetAutomaticShiftedKeyboard() {
setKeyboard(mKeyboardSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED)); setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED));
} }
// Implements {@link KeyboardState.SwitchActions}. // Implements {@link KeyboardState.SwitchActions}.
@Override @Override
public void setAlphabetShiftLockedKeyboard() { public void setAlphabetShiftLockedKeyboard() {
setKeyboard(mKeyboardSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED)); setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED));
} }
// Implements {@link KeyboardState.SwitchActions}. // Implements {@link KeyboardState.SwitchActions}.
@Override @Override
public void setAlphabetShiftLockShiftedKeyboard() { public void setAlphabetShiftLockShiftedKeyboard() {
setKeyboard(mKeyboardSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED)); setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED));
} }
// Implements {@link KeyboardState.SwitchActions}. // Implements {@link KeyboardState.SwitchActions}.
@Override @Override
public void setSymbolsKeyboard() { public void setSymbolsKeyboard() {
setKeyboard(mKeyboardSet.getKeyboard(KeyboardId.ELEMENT_SYMBOLS)); setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_SYMBOLS));
} }
// Implements {@link KeyboardState.SwitchActions}. // Implements {@link KeyboardState.SwitchActions}.
@Override @Override
public void setSymbolsShiftedKeyboard() { public void setSymbolsShiftedKeyboard() {
setKeyboard(mKeyboardSet.getKeyboard(KeyboardId.ELEMENT_SYMBOLS_SHIFTED)); setKeyboard(mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_SYMBOLS_SHIFTED));
} }
// Implements {@link KeyboardState.SwitchActions}. // Implements {@link KeyboardState.SwitchActions}.

View File

@ -318,7 +318,7 @@ public class KeySpecParser {
} }
} }
private static int getResourceId(Resources res, String name, int packageNameResId) { public static int getResourceId(Resources res, String name, int packageNameResId) {
String packageName = res.getResourcePackageName(packageNameResId); String packageName = res.getResourcePackageName(packageNameResId);
int resId = res.getIdentifier(name, null, packageName); int resId = res.getIdentifier(name, null, packageName);
if (resId == 0) { if (resId == 0) {

View File

@ -114,18 +114,17 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
@SuppressWarnings("dep-ann") @SuppressWarnings("dep-ann")
public static final String IME_OPTION_FORCE_ASCII = "forceAscii"; public static final String IME_OPTION_FORCE_ASCII = "forceAscii";
/**
* The subtype extra value used to indicate that the subtype keyboard layout set name.
*/
public static final String SUBTYPE_EXTRA_VALUE_KEYBOARD_LAYOUT_SET = "KeyboardLayoutSet";
/** /**
* The subtype extra value used to indicate that the subtype keyboard layout is capable for * The subtype extra value used to indicate that the subtype keyboard layout is capable for
* typing ASCII characters. * typing ASCII characters.
*/ */
public static final String SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE = "AsciiCapable"; public static final String SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE = "AsciiCapable";
/**
* The subtype extra value used to indicate that the subtype keyboard layout should be loaded
* from the specified locale.
*/
public static final String SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE = "KeyboardLocale";
private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100; private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100;
// How many continuous deletes at which to start deleting at a higher speed. // How many continuous deletes at which to start deleting at a higher speed.

View File

@ -22,6 +22,7 @@ import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.Keyboard;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale;
public class StringUtils { public class StringUtils {
private StringUtils() { private StringUtils() {
@ -149,4 +150,20 @@ public class StringUtils {
i++; i++;
} }
} }
public static String toTitleCase(String s, Locale locale) {
if (s.length() <= 1) {
// TODO: is this really correct? Shouldn't this be s.toUpperCase()?
return s;
}
// TODO: fix the bugs below
// - This does not work for Greek, because it returns upper case instead of title case.
// - It does not work for Serbian, because it fails to account for the "lj" character,
// which should be "Lj" in title case and "LJ" in upper case.
// - It does not work for Dutch, because it fails to account for the "ij" digraph, which
// are two different characters but both should be capitalized as "IJ" as if they were
// a single letter.
// - It also does not work with unicode surrogate code points.
return s.toUpperCase(locale).charAt(0) + s.substring(1);
}
} }

View File

@ -18,7 +18,7 @@ package com.android.inputmethod.latin;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.view.inputmethod.InputMethodSubtype;
import java.util.Locale; import java.util.Locale;
@ -69,10 +69,10 @@ public class SubtypeLocale {
} }
final String value = lookupExceptionalLocale(key); final String value = lookupExceptionalLocale(key);
if (value == null) { if (value == null) {
return toTitleCase(locale.getDisplayName(locale), locale); return StringUtils.toTitleCase(locale.getDisplayName(locale), locale);
} }
if (value.indexOf("%s") >= 0) { if (value.indexOf("%s") >= 0) {
final String languageName = toTitleCase(locale.getDisplayLanguage(locale), locale); final String languageName = StringUtils.toTitleCase(locale.getDisplayLanguage(locale), locale);
return String.format(value, languageName); return String.format(value, languageName);
} }
return value; return value;
@ -88,7 +88,7 @@ public class SubtypeLocale {
if (NO_LANGUAGE.equals(locale.getLanguage())) { if (NO_LANGUAGE.equals(locale.getLanguage())) {
return lookupExceptionalLocale(locale.getCountry()); return lookupExceptionalLocale(locale.getCountry());
} else { } else {
return toTitleCase(locale.getDisplayLanguage(locale), locale); return StringUtils.toTitleCase(locale.getDisplayLanguage(locale), locale);
} }
} }
@ -102,33 +102,7 @@ public class SubtypeLocale {
if (NO_LANGUAGE.equals(locale.getLanguage())) { if (NO_LANGUAGE.equals(locale.getLanguage())) {
return locale.getCountry(); return locale.getCountry();
} else { } else {
return toTitleCase(locale.getLanguage(), locale); return StringUtils.toTitleCase(locale.getLanguage(), locale);
} }
} }
public static String toTitleCase(String s, Locale locale) {
if (s.length() <= 1) {
// TODO: is this really correct? Shouldn't this be s.toUpperCase()?
return s;
}
// TODO: fix the bugs below
// - This does not work for Greek, because it returns upper case instead of title case.
// - It does not work for Serbian, because it fails to account for the "lj" character,
// which should be "Lj" in title case and "LJ" in upper case.
// - It does not work for Dutch, because it fails to account for the "ij" digraph, which
// are two different characters but both should be capitalized as "IJ" as if they were
// a single letter.
// - It also does not work with unicode surrogate code points.
return s.toUpperCase(locale).charAt(0) + s.substring(1);
}
public static String getSubtypeLocaleString(InputMethodSubtype subtype) {
final String keyboardLocale = subtype.getExtraValueOf(
LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE);
return keyboardLocale != null ? keyboardLocale : subtype.getLocale();
}
public static Locale getSubtypeLocale(InputMethodSubtype subtype) {
return LocaleUtils.constructLocaleFromString(getSubtypeLocaleString(subtype));
}
} }

View File

@ -33,6 +33,7 @@ import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper; import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
import com.android.inputmethod.keyboard.KeyboardSwitcher; import com.android.inputmethod.keyboard.KeyboardSwitcher;
import java.util.ArrayList; import java.util.ArrayList;
@ -68,6 +69,7 @@ public class SubtypeSwitcher {
private InputMethodInfo mShortcutInputMethodInfo; private InputMethodInfo mShortcutInputMethodInfo;
private InputMethodSubtype mShortcutSubtype; private InputMethodSubtype mShortcutSubtype;
private List<InputMethodSubtype> mAllEnabledSubtypesOfCurrentInputMethod; private List<InputMethodSubtype> mAllEnabledSubtypesOfCurrentInputMethod;
private InputMethodSubtype mNoLanguageSubtype;
// Note: This variable is always non-null after {@link #initialize(LatinIME)}. // Note: This variable is always non-null after {@link #initialize(LatinIME)}.
private InputMethodSubtype mCurrentSubtype; private InputMethodSubtype mCurrentSubtype;
private Locale mSystemLocale; private Locale mSystemLocale;
@ -104,6 +106,8 @@ public class SubtypeSwitcher {
mInputLocaleStr = null; mInputLocaleStr = null;
mCurrentSubtype = mImm.getCurrentInputMethodSubtype(); mCurrentSubtype = mImm.getCurrentInputMethodSubtype();
mAllEnabledSubtypesOfCurrentInputMethod = null; mAllEnabledSubtypesOfCurrentInputMethod = null;
mNoLanguageSubtype = SubtypeUtils.findSubtypeByKeyboardLayoutSetLocale(
service, SubtypeLocale.LOCALE_NO_LANGUAGE_QWERTY);
final NetworkInfo info = mConnectivityManager.getActiveNetworkInfo(); final NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
mIsNetworkConnected = (info != null && info.isConnected()); mIsNetworkConnected = (info != null && info.isConnected());
@ -133,7 +137,7 @@ public class SubtypeSwitcher {
mEnabledLanguagesOfCurrentInputMethod.clear(); mEnabledLanguagesOfCurrentInputMethod.clear();
mEnabledKeyboardSubtypesOfCurrentInputMethod.clear(); mEnabledKeyboardSubtypesOfCurrentInputMethod.clear();
for (InputMethodSubtype ims : mAllEnabledSubtypesOfCurrentInputMethod) { for (InputMethodSubtype ims : mAllEnabledSubtypesOfCurrentInputMethod) {
final String locale = getSubtypeLocale(ims); final String locale = KeyboardLayoutSet.getKeyboardLayoutSetLocaleString(ims);
final String mode = ims.getMode(); final String mode = ims.getMode();
mLocaleSplitter.setString(locale); mLocaleSplitter.setString(locale);
if (mLocaleSplitter.hasNext()) { if (mLocaleSplitter.hasNext()) {
@ -162,7 +166,8 @@ public class SubtypeSwitcher {
Log.d(TAG, "Update shortcut IME from : " Log.d(TAG, "Update shortcut IME from : "
+ (mShortcutInputMethodInfo == null + (mShortcutInputMethodInfo == null
? "<null>" : mShortcutInputMethodInfo.getId()) + ", " ? "<null>" : mShortcutInputMethodInfo.getId()) + ", "
+ (mShortcutSubtype == null ? "<null>" : (getSubtypeLocale(mShortcutSubtype) + (mShortcutSubtype == null ? "<null>" : (
KeyboardLayoutSet.getKeyboardLayoutSetLocaleString(mShortcutSubtype)
+ ", " + mShortcutSubtype.getMode()))); + ", " + mShortcutSubtype.getMode())));
} }
// TODO: Update an icon for shortcut IME // TODO: Update an icon for shortcut IME
@ -184,20 +189,15 @@ public class SubtypeSwitcher {
Log.d(TAG, "Update shortcut IME to : " Log.d(TAG, "Update shortcut IME to : "
+ (mShortcutInputMethodInfo == null + (mShortcutInputMethodInfo == null
? "<null>" : mShortcutInputMethodInfo.getId()) + ", " ? "<null>" : mShortcutInputMethodInfo.getId()) + ", "
+ (mShortcutSubtype == null ? "<null>" : (getSubtypeLocale(mShortcutSubtype) + (mShortcutSubtype == null ? "<null>" : (
KeyboardLayoutSet.getKeyboardLayoutSetLocaleString(mShortcutSubtype)
+ ", " + mShortcutSubtype.getMode()))); + ", " + mShortcutSubtype.getMode())));
} }
} }
private static String getSubtypeLocale(InputMethodSubtype subtype) {
final String keyboardLocale = subtype.getExtraValueOf(
LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE);
return keyboardLocale != null ? keyboardLocale : subtype.getLocale();
}
// Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function. // Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function.
public void updateSubtype(InputMethodSubtype newSubtype) { public void updateSubtype(InputMethodSubtype newSubtype) {
final String newLocale = getSubtypeLocale(newSubtype); final String newLocale = KeyboardLayoutSet.getKeyboardLayoutSetLocaleString(newSubtype);
final String newMode = newSubtype.getMode(); final String newMode = newSubtype.getMode();
final String oldMode = getCurrentSubtypeMode(); final String oldMode = getCurrentSubtypeMode();
if (DBG) { if (DBG) {
@ -301,7 +301,8 @@ public class SubtypeSwitcher {
final String imiPackageName = imi.getPackageName(); final String imiPackageName = imi.getPackageName();
if (DBG) { if (DBG) {
Log.d(TAG, "Update icons of IME: " + imiPackageName + "," Log.d(TAG, "Update icons of IME: " + imiPackageName + ","
+ getSubtypeLocale(subtype) + "," + subtype.getMode()); + KeyboardLayoutSet.getKeyboardLayoutSetLocaleString(subtype) + ","
+ subtype.getMode());
} }
if (subtype != null) { if (subtype != null) {
return pm.getDrawable(imiPackageName, subtype.getIconResId(), return pm.getDrawable(imiPackageName, subtype.getIconResId(),
@ -438,4 +439,8 @@ public class SubtypeSwitcher {
public InputMethodSubtype getCurrentSubtype() { public InputMethodSubtype getCurrentSubtype() {
return mCurrentSubtype; return mCurrentSubtype;
} }
public InputMethodSubtype getNoLanguageSubtype() {
return mNoLanguageSubtype;
}
} }

View File

@ -21,9 +21,11 @@ import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper; import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
public class SubtypeUtils { public class SubtypeUtils {
private SubtypeUtils() { private SubtypeUtils() {
@ -129,4 +131,18 @@ public class SubtypeUtils {
} }
throw new RuntimeException("Can not find input method id for " + packageName); throw new RuntimeException("Can not find input method id for " + packageName);
} }
public static InputMethodSubtype findSubtypeByKeyboardLayoutSetLocale(
Context context, Locale locale) {
final String localeString = locale.toString();
final InputMethodInfo imi = SubtypeUtils.getInputMethodInfo(context.getPackageName());
final int count = imi.getSubtypeCount();
for (int i = 0; i < count; i++) {
final InputMethodSubtype subtype = imi.getSubtypeAt(i);
if (localeString.equals(KeyboardLayoutSet.getKeyboardLayoutSetLocaleString(subtype))) {
return subtype;
}
}
throw new RuntimeException("Can not find subtype of locale " + localeString);
}
} }

View File

@ -37,7 +37,6 @@ import com.android.inputmethod.latin.Flag;
import com.android.inputmethod.latin.LocaleUtils; import com.android.inputmethod.latin.LocaleUtils;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.StringUtils; import com.android.inputmethod.latin.StringUtils;
import com.android.inputmethod.latin.SubtypeLocale;
import com.android.inputmethod.latin.SynchronouslyLoadedContactsDictionary; import com.android.inputmethod.latin.SynchronouslyLoadedContactsDictionary;
import com.android.inputmethod.latin.SynchronouslyLoadedUserDictionary; import com.android.inputmethod.latin.SynchronouslyLoadedUserDictionary;
import com.android.inputmethod.latin.WhitelistDictionary; import com.android.inputmethod.latin.WhitelistDictionary;
@ -326,7 +325,7 @@ public class AndroidSpellCheckerService extends SpellCheckerService
} else if (CAPITALIZE_FIRST == capitalizeType) { } else if (CAPITALIZE_FIRST == capitalizeType) {
for (int i = 0; i < mSuggestions.size(); ++i) { for (int i = 0; i < mSuggestions.size(); ++i) {
// Likewise // Likewise
mSuggestions.set(i, SubtypeLocale.toTitleCase( mSuggestions.set(i, StringUtils.toTitleCase(
mSuggestions.get(i).toString(), locale)); mSuggestions.get(i).toString(), locale));
} }
} }

View File

@ -22,6 +22,8 @@ import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
@ -58,29 +60,17 @@ public class SubtypeLocaleTests extends AndroidTestCase {
assertTrue("Can not find keyboard subtype", mSubtypesList.size() > 0); assertTrue("Can not find keyboard subtype", mSubtypesList.size() > 0);
} }
private static Locale getSubtypeLocale(InputMethodSubtype subtype) {
return LocaleUtils.constructLocaleFromString(subtype.getLocale());
}
private static Locale getKeyboardLocale(InputMethodSubtype subtype) {
final String subtypeLocaleString = subtype.containsExtraValueKey(
LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE)
? subtype.getExtraValueOf(LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE)
: subtype.getLocale();
return LocaleUtils.constructLocaleFromString(subtypeLocaleString);
}
public void testFullDisplayName() { public void testFullDisplayName() {
final StringBuilder messages = new StringBuilder(); final StringBuilder messages = new StringBuilder();
int failedCount = 0; int failedCount = 0;
for (final InputMethodSubtype subtype : mSubtypesList) { for (final InputMethodSubtype subtype : mSubtypesList) {
final Locale locale = getKeyboardLocale(subtype); final Locale locale = KeyboardLayoutSet.getKeyboardLayoutSetLocale(subtype);
if (locale.getLanguage().equals(SubtypeLocale.NO_LANGUAGE)) { if (locale.getLanguage().equals(SubtypeLocale.NO_LANGUAGE)) {
// This is special language name for language agnostic usage. // This is special language name for language agnostic usage.
continue; continue;
} }
final String keyboardName = SubtypeLocale.getFullDisplayName(locale); final String keyboardName = SubtypeLocale.getFullDisplayName(locale);
final String languageName = SubtypeLocale.toTitleCase( final String languageName = StringUtils.toTitleCase(
locale.getDisplayLanguage(locale), locale); locale.getDisplayLanguage(locale), locale);
if (!keyboardName.contains(languageName)) { if (!keyboardName.contains(languageName)) {
failedCount++; failedCount++;
@ -104,13 +94,13 @@ public class SubtypeLocaleTests extends AndroidTestCase {
final StringBuilder messages = new StringBuilder(); final StringBuilder messages = new StringBuilder();
int failedCount = 0; int failedCount = 0;
for (final InputMethodSubtype subtype : mSubtypesList) { for (final InputMethodSubtype subtype : mSubtypesList) {
final Locale locale = getKeyboardLocale(subtype); final Locale locale = KeyboardLayoutSet.getKeyboardLayoutSetLocale(subtype);
if (locale.getLanguage().equals(SubtypeLocale.NO_LANGUAGE)) { if (locale.getLanguage().equals(SubtypeLocale.NO_LANGUAGE)) {
// This is special language name for language agnostic usage. // This is special language name for language agnostic usage.
continue; continue;
} }
final String keyboardName = SubtypeLocale.getMiddleDisplayName(locale); final String keyboardName = SubtypeLocale.getMiddleDisplayName(locale);
final String languageName = SubtypeLocale.toTitleCase( final String languageName = StringUtils.toTitleCase(
locale.getDisplayLanguage(locale), locale); locale.getDisplayLanguage(locale), locale);
if (!keyboardName.equals(languageName)) { if (!keyboardName.equals(languageName)) {
failedCount++; failedCount++;
@ -131,13 +121,13 @@ public class SubtypeLocaleTests extends AndroidTestCase {
final StringBuilder messages = new StringBuilder(); final StringBuilder messages = new StringBuilder();
int failedCount = 0; int failedCount = 0;
for (final InputMethodSubtype subtype : mSubtypesList) { for (final InputMethodSubtype subtype : mSubtypesList) {
final Locale locale = getKeyboardLocale(subtype); final Locale locale = KeyboardLayoutSet.getKeyboardLayoutSetLocale(subtype);
if (locale.getCountry().equals(SubtypeLocale.QWERTY)) { if (locale.getCountry().equals(SubtypeLocale.QWERTY)) {
// This is special country code for QWERTY keyboard. // This is special country code for QWERTY keyboard.
continue; continue;
} }
final String keyboardName = SubtypeLocale.getShortDisplayName(locale); final String keyboardName = SubtypeLocale.getShortDisplayName(locale);
final String languageCode = SubtypeLocale.toTitleCase(locale.getLanguage(), locale); final String languageCode = StringUtils.toTitleCase(locale.getLanguage(), locale);
if (!keyboardName.equals(languageCode)) { if (!keyboardName.equals(languageCode)) {
failedCount++; failedCount++;
messages.append(String.format( messages.append(String.format(