Android TV keyboard initial import am: 7e131e7ebd am: 6e8e741e5d am: e61d19e1b6 Change-Id: I0f08412713831d05ad51937f87b32e37aad13533
diff --git a/Android.bp b/Android.bp new file mode 100644 index 0000000..e33d97e --- /dev/null +++ b/Android.bp
@@ -0,0 +1,29 @@ +version_name = "1.00-aosp" +version_code = "100" + +android_app { + name: "LeanbackIME", + + sdk_version: "system_current", + + srcs: [ + "src/**/*.java", + ], + + optimize: { + proguard_flags_files: ["proguard.cfg"], + enabled: false, + }, + + resource_dirs: ["res"], + + aaptflags: [ + "--auto-add-overlay", + + "--version-name", + version_name, + + "--version-code", + version_code, + ] +}
diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..c7267cd --- /dev/null +++ b/AndroidManifest.xml
@@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 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. +--> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.inputmethod.leanback" > + + <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> + <uses-permission android:name="android.permission.RECORD_AUDIO" /> + + <uses-sdk + android:minSdkVersion="16" + android:targetSdkVersion="23" /> + + <application + android:label="@string/ime_name" > + <service + android:name="com.android.inputmethod.leanback.service.LeanbackImeService" + android:label="@string/ime_service_name" + android:permission="android.permission.BIND_INPUT_METHOD" > + <intent-filter> + <action android:name="android.view.InputMethod" /> + </intent-filter> + + <meta-data + android:name="android.view.im" + android:resource="@xml/method" /> + </service> + </application> + +</manifest>
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..65899b3 --- /dev/null +++ b/CONTRIBUTING.md
@@ -0,0 +1 @@ +See https://source.android.com/setup/contribute
diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE
@@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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.
diff --git a/OWNERS b/OWNERS new file mode 100644 index 0000000..74e368a --- /dev/null +++ b/OWNERS
@@ -0,0 +1,2 @@ [email protected] [email protected]
diff --git a/README.md b/README.md new file mode 100644 index 0000000..49ab56b --- /dev/null +++ b/README.md
@@ -0,0 +1 @@ +# Default keyboard for Android TV
diff --git a/proguard.cfg b/proguard.cfg new file mode 100644 index 0000000..3920382 --- /dev/null +++ b/proguard.cfg
@@ -0,0 +1,14 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class BinaryDictionary +-keep public class Dictionary + +-dontwarn org.bouncycastle.jce.provider.BouncyCastleProvider +-dontwarn org.bouncycastle.x509.X509V3CertificateGenerator \ No newline at end of file
diff --git a/res/drawable-hdpi/ic_ime_accent_close.png b/res/drawable-hdpi/ic_ime_accent_close.png new file mode 100644 index 0000000..e96a5ee --- /dev/null +++ b/res/drawable-hdpi/ic_ime_accent_close.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_alphabet.png b/res/drawable-hdpi/ic_ime_alphabet.png new file mode 100644 index 0000000..06324bc --- /dev/null +++ b/res/drawable-hdpi/ic_ime_alphabet.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_delete.png b/res/drawable-hdpi/ic_ime_delete.png new file mode 100644 index 0000000..7eb3680 --- /dev/null +++ b/res/drawable-hdpi/ic_ime_delete.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_left_arrow.png b/res/drawable-hdpi/ic_ime_left_arrow.png new file mode 100644 index 0000000..1f92de6 --- /dev/null +++ b/res/drawable-hdpi/ic_ime_left_arrow.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_right_arrow.png b/res/drawable-hdpi/ic_ime_right_arrow.png new file mode 100644 index 0000000..f3f84bf --- /dev/null +++ b/res/drawable-hdpi/ic_ime_right_arrow.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_shift_lock_on.png b/res/drawable-hdpi/ic_ime_shift_lock_on.png new file mode 100644 index 0000000..fa8a4bd --- /dev/null +++ b/res/drawable-hdpi/ic_ime_shift_lock_on.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_shift_off.png b/res/drawable-hdpi/ic_ime_shift_off.png new file mode 100644 index 0000000..8b55067 --- /dev/null +++ b/res/drawable-hdpi/ic_ime_shift_off.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_shift_on.png b/res/drawable-hdpi/ic_ime_shift_on.png new file mode 100644 index 0000000..23b31e2 --- /dev/null +++ b/res/drawable-hdpi/ic_ime_shift_on.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_space.png b/res/drawable-hdpi/ic_ime_space.png new file mode 100644 index 0000000..e899709 --- /dev/null +++ b/res/drawable-hdpi/ic_ime_space.png Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_symbols.png b/res/drawable-hdpi/ic_ime_symbols.png new file mode 100644 index 0000000..4217907 --- /dev/null +++ b/res/drawable-hdpi/ic_ime_symbols.png Binary files differ
diff --git a/res/drawable-hdpi/ic_voice_available.png b/res/drawable-hdpi/ic_voice_available.png new file mode 100644 index 0000000..61bdd00 --- /dev/null +++ b/res/drawable-hdpi/ic_voice_available.png Binary files differ
diff --git a/res/drawable-hdpi/ic_voice_focus.png b/res/drawable-hdpi/ic_voice_focus.png new file mode 100644 index 0000000..8fce9a5 --- /dev/null +++ b/res/drawable-hdpi/ic_voice_focus.png Binary files differ
diff --git a/res/drawable-hdpi/ic_voice_off.png b/res/drawable-hdpi/ic_voice_off.png new file mode 100644 index 0000000..208f430 --- /dev/null +++ b/res/drawable-hdpi/ic_voice_off.png Binary files differ
diff --git a/res/drawable-hdpi/ic_voice_recording.png b/res/drawable-hdpi/ic_voice_recording.png new file mode 100644 index 0000000..a8da1b8 --- /dev/null +++ b/res/drawable-hdpi/ic_voice_recording.png Binary files differ
diff --git a/res/drawable-hdpi/key_selector.9.png b/res/drawable-hdpi/key_selector.9.png new file mode 100644 index 0000000..6eb8b88 --- /dev/null +++ b/res/drawable-hdpi/key_selector.9.png Binary files differ
diff --git a/res/drawable-hdpi/touch_selector.9.png b/res/drawable-hdpi/touch_selector.9.png new file mode 100644 index 0000000..ae4b270 --- /dev/null +++ b/res/drawable-hdpi/touch_selector.9.png Binary files differ
diff --git a/res/drawable-hdpi/vs_reactive_dark.png b/res/drawable-hdpi/vs_reactive_dark.png new file mode 100644 index 0000000..d2cee0d --- /dev/null +++ b/res/drawable-hdpi/vs_reactive_dark.png Binary files differ
diff --git a/res/drawable-hdpi/vs_reactive_light.png b/res/drawable-hdpi/vs_reactive_light.png new file mode 100644 index 0000000..3c37e71 --- /dev/null +++ b/res/drawable-hdpi/vs_reactive_light.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_accent_close.png b/res/drawable-mdpi/ic_ime_accent_close.png new file mode 100644 index 0000000..d72f653 --- /dev/null +++ b/res/drawable-mdpi/ic_ime_accent_close.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_alphabet.png b/res/drawable-mdpi/ic_ime_alphabet.png new file mode 100644 index 0000000..9325d48 --- /dev/null +++ b/res/drawable-mdpi/ic_ime_alphabet.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_delete.png b/res/drawable-mdpi/ic_ime_delete.png new file mode 100644 index 0000000..4ba17b1 --- /dev/null +++ b/res/drawable-mdpi/ic_ime_delete.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_left_arrow.png b/res/drawable-mdpi/ic_ime_left_arrow.png new file mode 100644 index 0000000..24de415 --- /dev/null +++ b/res/drawable-mdpi/ic_ime_left_arrow.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_right_arrow.png b/res/drawable-mdpi/ic_ime_right_arrow.png new file mode 100644 index 0000000..e2c9bb3 --- /dev/null +++ b/res/drawable-mdpi/ic_ime_right_arrow.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_shift_lock_on.png b/res/drawable-mdpi/ic_ime_shift_lock_on.png new file mode 100644 index 0000000..2574b28 --- /dev/null +++ b/res/drawable-mdpi/ic_ime_shift_lock_on.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_shift_off.png b/res/drawable-mdpi/ic_ime_shift_off.png new file mode 100644 index 0000000..7144a00 --- /dev/null +++ b/res/drawable-mdpi/ic_ime_shift_off.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_shift_on.png b/res/drawable-mdpi/ic_ime_shift_on.png new file mode 100644 index 0000000..1cb530b --- /dev/null +++ b/res/drawable-mdpi/ic_ime_shift_on.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_space.png b/res/drawable-mdpi/ic_ime_space.png new file mode 100644 index 0000000..7fea09f --- /dev/null +++ b/res/drawable-mdpi/ic_ime_space.png Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_symbols.png b/res/drawable-mdpi/ic_ime_symbols.png new file mode 100644 index 0000000..90933f0 --- /dev/null +++ b/res/drawable-mdpi/ic_ime_symbols.png Binary files differ
diff --git a/res/drawable-mdpi/ic_voice_available.png b/res/drawable-mdpi/ic_voice_available.png new file mode 100644 index 0000000..a3cb908 --- /dev/null +++ b/res/drawable-mdpi/ic_voice_available.png Binary files differ
diff --git a/res/drawable-mdpi/ic_voice_focus.png b/res/drawable-mdpi/ic_voice_focus.png new file mode 100644 index 0000000..7cfca18 --- /dev/null +++ b/res/drawable-mdpi/ic_voice_focus.png Binary files differ
diff --git a/res/drawable-mdpi/ic_voice_off.png b/res/drawable-mdpi/ic_voice_off.png new file mode 100644 index 0000000..f4fd35b --- /dev/null +++ b/res/drawable-mdpi/ic_voice_off.png Binary files differ
diff --git a/res/drawable-mdpi/ic_voice_recording.png b/res/drawable-mdpi/ic_voice_recording.png new file mode 100644 index 0000000..a8bde78 --- /dev/null +++ b/res/drawable-mdpi/ic_voice_recording.png Binary files differ
diff --git a/res/drawable-mdpi/key_selector.9.png b/res/drawable-mdpi/key_selector.9.png new file mode 100644 index 0000000..bf9c4b2 --- /dev/null +++ b/res/drawable-mdpi/key_selector.9.png Binary files differ
diff --git a/res/drawable-mdpi/touch_selector.9.png b/res/drawable-mdpi/touch_selector.9.png new file mode 100644 index 0000000..7a85041 --- /dev/null +++ b/res/drawable-mdpi/touch_selector.9.png Binary files differ
diff --git a/res/drawable-mdpi/vs_reactive_dark.png b/res/drawable-mdpi/vs_reactive_dark.png new file mode 100644 index 0000000..cf9983e --- /dev/null +++ b/res/drawable-mdpi/vs_reactive_dark.png Binary files differ
diff --git a/res/drawable-mdpi/vs_reactive_light.png b/res/drawable-mdpi/vs_reactive_light.png new file mode 100644 index 0000000..9c67426 --- /dev/null +++ b/res/drawable-mdpi/vs_reactive_light.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_accent_close.png b/res/drawable-xhdpi/ic_ime_accent_close.png new file mode 100644 index 0000000..392cfe6 --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_accent_close.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_alphabet.png b/res/drawable-xhdpi/ic_ime_alphabet.png new file mode 100644 index 0000000..717690b --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_alphabet.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_delete.png b/res/drawable-xhdpi/ic_ime_delete.png new file mode 100644 index 0000000..d2ee1e7 --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_delete.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_left_arrow.png b/res/drawable-xhdpi/ic_ime_left_arrow.png new file mode 100644 index 0000000..2f23dd1 --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_left_arrow.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_right_arrow.png b/res/drawable-xhdpi/ic_ime_right_arrow.png new file mode 100644 index 0000000..d004b5b --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_right_arrow.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_shift_lock_on.png b/res/drawable-xhdpi/ic_ime_shift_lock_on.png new file mode 100644 index 0000000..307093e --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_shift_lock_on.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_shift_off.png b/res/drawable-xhdpi/ic_ime_shift_off.png new file mode 100644 index 0000000..d5cd919 --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_shift_off.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_shift_on.png b/res/drawable-xhdpi/ic_ime_shift_on.png new file mode 100644 index 0000000..105ad86 --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_shift_on.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_space.png b/res/drawable-xhdpi/ic_ime_space.png new file mode 100644 index 0000000..0ce6584 --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_space.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_symbols.png b/res/drawable-xhdpi/ic_ime_symbols.png new file mode 100644 index 0000000..3b1e749 --- /dev/null +++ b/res/drawable-xhdpi/ic_ime_symbols.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_voice_available.png b/res/drawable-xhdpi/ic_voice_available.png new file mode 100644 index 0000000..60b3a0e --- /dev/null +++ b/res/drawable-xhdpi/ic_voice_available.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_voice_focus.png b/res/drawable-xhdpi/ic_voice_focus.png new file mode 100644 index 0000000..03a7049 --- /dev/null +++ b/res/drawable-xhdpi/ic_voice_focus.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_voice_off.png b/res/drawable-xhdpi/ic_voice_off.png new file mode 100644 index 0000000..17ea908 --- /dev/null +++ b/res/drawable-xhdpi/ic_voice_off.png Binary files differ
diff --git a/res/drawable-xhdpi/ic_voice_recording.png b/res/drawable-xhdpi/ic_voice_recording.png new file mode 100644 index 0000000..facca0c --- /dev/null +++ b/res/drawable-xhdpi/ic_voice_recording.png Binary files differ
diff --git a/res/drawable-xhdpi/key_selector.9.png b/res/drawable-xhdpi/key_selector.9.png new file mode 100644 index 0000000..d280717 --- /dev/null +++ b/res/drawable-xhdpi/key_selector.9.png Binary files differ
diff --git a/res/drawable-xhdpi/touch_selector.9.png b/res/drawable-xhdpi/touch_selector.9.png new file mode 100644 index 0000000..a392e29 --- /dev/null +++ b/res/drawable-xhdpi/touch_selector.9.png Binary files differ
diff --git a/res/drawable-xhdpi/vs_reactive_dark.png b/res/drawable-xhdpi/vs_reactive_dark.png new file mode 100644 index 0000000..19272af --- /dev/null +++ b/res/drawable-xhdpi/vs_reactive_dark.png Binary files differ
diff --git a/res/drawable-xhdpi/vs_reactive_light.png b/res/drawable-xhdpi/vs_reactive_light.png new file mode 100644 index 0000000..bfb1792 --- /dev/null +++ b/res/drawable-xhdpi/vs_reactive_light.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_accent_close.png b/res/drawable-xxhdpi/ic_ime_accent_close.png new file mode 100644 index 0000000..ef1c76d --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_accent_close.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_alphabet.png b/res/drawable-xxhdpi/ic_ime_alphabet.png new file mode 100644 index 0000000..d186fb4 --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_alphabet.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_delete.png b/res/drawable-xxhdpi/ic_ime_delete.png new file mode 100644 index 0000000..7fd42c1 --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_delete.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_left_arrow.png b/res/drawable-xxhdpi/ic_ime_left_arrow.png new file mode 100644 index 0000000..38b5b66 --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_left_arrow.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_right_arrow.png b/res/drawable-xxhdpi/ic_ime_right_arrow.png new file mode 100644 index 0000000..2ae24d2 --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_right_arrow.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_shift_lock_on.png b/res/drawable-xxhdpi/ic_ime_shift_lock_on.png new file mode 100644 index 0000000..9f1d155 --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_shift_lock_on.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_shift_off.png b/res/drawable-xxhdpi/ic_ime_shift_off.png new file mode 100644 index 0000000..50edf2b --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_shift_off.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_shift_on.png b/res/drawable-xxhdpi/ic_ime_shift_on.png new file mode 100644 index 0000000..217a48d --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_shift_on.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_space.png b/res/drawable-xxhdpi/ic_ime_space.png new file mode 100644 index 0000000..e4e8ef3 --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_space.png Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_symbols.png b/res/drawable-xxhdpi/ic_ime_symbols.png new file mode 100644 index 0000000..fc458b0 --- /dev/null +++ b/res/drawable-xxhdpi/ic_ime_symbols.png Binary files differ
diff --git a/res/drawable-xxhdpi/key_selector.9.png b/res/drawable-xxhdpi/key_selector.9.png new file mode 100644 index 0000000..eccc5cb --- /dev/null +++ b/res/drawable-xxhdpi/key_selector.9.png Binary files differ
diff --git a/res/drawable-xxhdpi/touch_selector.9.png b/res/drawable-xxhdpi/touch_selector.9.png new file mode 100644 index 0000000..ef4546a --- /dev/null +++ b/res/drawable-xxhdpi/touch_selector.9.png Binary files differ
diff --git a/res/drawable/selector_caps_shift.xml b/res/drawable/selector_caps_shift.xml new file mode 100644 index 0000000..78aa640 --- /dev/null +++ b/res/drawable/selector_caps_shift.xml
@@ -0,0 +1,22 @@ +<!-- + 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. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:drawable="@drawable/ic_ime_shift_on" android:state_selected="false"/> + <item android:drawable="@drawable/ic_ime_shift_lock_on"/> + +</selector> \ No newline at end of file
diff --git a/res/drawable/vs_micbtn_off_selector.xml b/res/drawable/vs_micbtn_off_selector.xml new file mode 100644 index 0000000..bb94ce2 --- /dev/null +++ b/res/drawable/vs_micbtn_off_selector.xml
@@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2012 Google Inc. + All Rights Reserved. +--> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:state_focused="true" + android:drawable="@drawable/ic_voice_focus" /> + + <item android:drawable="@drawable/ic_voice_available" /> +</selector>
diff --git a/res/drawable/vs_micbtn_on_selector.xml b/res/drawable/vs_micbtn_on_selector.xml new file mode 100644 index 0000000..9ffa836 --- /dev/null +++ b/res/drawable/vs_micbtn_on_selector.xml
@@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 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. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:state_focused="true" + android:drawable="@drawable/ic_voice_focus" /> + + <item android:drawable="@drawable/ic_voice_available" /> +</selector>
diff --git a/res/drawable/vs_micbtn_rec_selector.xml b/res/drawable/vs_micbtn_rec_selector.xml new file mode 100644 index 0000000..9a48c44 --- /dev/null +++ b/res/drawable/vs_micbtn_rec_selector.xml
@@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 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. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:state_focused="true" + android:drawable="@drawable/ic_voice_recording" /> + + <item android:state_pressed="true" + android:drawable="@drawable/ic_voice_recording" /> + + <item android:drawable="@drawable/ic_voice_available" /> +</selector>
diff --git a/res/layout/candidate.xml b/res/layout/candidate.xml new file mode 100644 index 0000000..ca5e484 --- /dev/null +++ b/res/layout/candidate.xml
@@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 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. +--> + +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginLeft="@dimen/candidate_margin_horizontal" + android:layout_marginRight="@dimen/candidate_margin_horizontal" + android:clipChildren="false" + android:focusable="true" + android:paddingLeft="@dimen/candidate_padding_horizontal" + android:paddingRight="@dimen/candidate_padding_horizontal" > + + <Button + android:id="@+id/text" + android:layout_width="wrap_content" + android:layout_height="@dimen/candidate_height" + android:background="@android:color/transparent" + android:clipChildren="false" + android:ellipsize="none" + android:fontFamily="sans-serif-condensed" + android:gravity="center" + android:singleLine="true" + android:textAllCaps="false" + android:textColor="@color/candidate_font_color" + android:textSize="@dimen/candidate_font_size" /> + +</RelativeLayout> \ No newline at end of file
diff --git a/res/layout/input_leanback.xml b/res/layout/input_leanback.xml new file mode 100644 index 0000000..cabe840 --- /dev/null +++ b/res/layout/input_leanback.xml
@@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 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. +--> + +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:leanbackime="http://schemas.android.com/apk/res/com.android.inputmethod.leanback" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:clipChildren="false" + android:focusable="false" + android:gravity="bottom" > + + <LinearLayout + android:id="@+id/keyboard" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:clipChildren="false" + android:orientation="horizontal" > + + <com.android.inputmethod.leanback.LeanbackKeyboardView + android:id="@+id/main_keyboard" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:clipChildren="false" + leanbackime:columnCount="11" + leanbackime:rowCount="5" /> + </LinearLayout> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignBottom="@id/keyboard" + android:layout_alignTop="@id/keyboard" + android:layout_centerHorizontal="true" > + + <com.android.inputmethod.leanback.voice.RecognizerView + android:id="@+id/voice" + android:layout_width="@dimen/recognizer_size" + android:layout_height="@dimen/recognizer_size" + android:layout_gravity="center" + android:visibility="invisible" /> + </FrameLayout> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignBottom="@id/keyboard" + android:layout_alignParentRight="true" + android:layout_alignTop="@id/keyboard" + android:layout_toRightOf="@id/keyboard" > + + <Button + android:id="@+id/enter" + android:layout_width="wrap_content" + android:layout_height="@dimen/enter_key_height" + android:layout_gravity="center" + android:background="@null" + android:fontFamily="sans-serif-regular" + android:paddingLeft="@dimen/enter_key_padding_horizontal" + android:paddingRight="@dimen/enter_key_padding_horizontal" + android:text="@string/label_next_key" + android:textColor="@color/enter_key_font_color" + android:textSize="@dimen/enter_key_font_size" /> + </FrameLayout> + +</RelativeLayout>
diff --git a/res/layout/recognizer_view.xml b/res/layout/recognizer_view.xml new file mode 100644 index 0000000..acf4a53 --- /dev/null +++ b/res/layout/recognizer_view.xml
@@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2012 Google Inc. All Rights Reserved. --> +<!-- Inline keyboard layout chrome, which includes the backspace and mode switcher buttons --> +<merge xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:recognizer="http://schemas.android.com/apk/res-auto" + android:layout_width="96dp" + android:layout_height="96dp" + android:gravity="center" + android:keepScreenOn="true" + android:orientation="vertical" > + + <com.android.inputmethod.leanback.voice.BitmapSoundLevelView + android:id="@+id/microphone" + android:layout_width="match_parent" + android:layout_height="match_parent" + recognizer:disabledBackgroundColor="@android:color/transparent" + recognizer:enabledBackgroundColor="@android:color/transparent" + recognizer:minLevelRadius="28dip" + recognizer:primaryLevels="?soundPrimaryLevel" + recognizer:trailLevels="?soundTrailLevel" /> + + <ImageView + android:id="@+id/recognizer_mic_button" + android:layout_width="@dimen/action_button_size" + android:layout_height="@dimen/action_button_size" + android:layout_gravity="center" + android:layout_marginLeft="16dp" + android:layout_marginTop="16dp" + android:scaleType="fitXY" + android:src="@drawable/ic_voice_available" > + + <requestFocus /> + </ImageView> + +</merge>
diff --git a/res/layout/root_leanback.xml b/res/layout/root_leanback.xml new file mode 100644 index 0000000..587977b --- /dev/null +++ b/res/layout/root_leanback.xml
@@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 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. +--> + +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/root_ime" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom|center_horizontal" + android:background="@color/keyboard_background" + android:clipChildren="false" + android:clipToPadding="false" + android:focusable="true" + android:gravity="bottom|center_horizontal" + android:orientation="vertical" + android:paddingBottom="@dimen/keyboard_bottom_spacing" > + + <View + android:id="@+id/candidate_background" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignBottom="@+id/suggestions_container" + android:layout_alignParentLeft="true" + android:layout_alignParentRight="true" + android:layout_alignParentTop="true" + android:background="@color/candidate_background" /> + + <HorizontalScrollView + android:id="@+id/suggestions_container" + android:layout_width="wrap_content" + android:layout_height="@dimen/key_height" + android:layout_alignParentTop="true" + android:layout_centerHorizontal="true" + android:layout_marginLeft="@dimen/candidate_scroll_view_horz_spacing" + android:layout_marginRight="@dimen/candidate_scroll_view_horz_spacing" + android:clipChildren="false" + android:fillViewport="false" + android:gravity="center" + android:scrollbars="none" > + + <LinearLayout + android:id="@+id/suggestions" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:clipChildren="false" + android:divider="@null" + android:gravity="center" + android:orientation="horizontal" + android:showDividers="middle" /> + </HorizontalScrollView> + + <LinearLayout + android:id="@+id/keyboard" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@+id/suggestions_container" + android:layout_centerHorizontal="true" + android:clipChildren="false" + android:gravity="center" + android:paddingTop="@dimen/keyboard_top_spacing" > + + <include layout="@layout/input_leanback" /> + </LinearLayout> + + <include layout="@layout/selector"/> +</RelativeLayout> \ No newline at end of file
diff --git a/res/layout/selector.xml b/res/layout/selector.xml new file mode 100644 index 0000000..6ca2449 --- /dev/null +++ b/res/layout/selector.xml
@@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 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. +--> + +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/selector" + android:layout_width="@dimen/selector_size" + android:layout_height="@dimen/selector_size" + android:clipChildren="false" > + + <ImageView + android:id="@+id/key_selector" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:clipChildren="false" + android:scaleType="centerInside" + android:background="@drawable/key_selector" /> + +</FrameLayout> \ No newline at end of file
diff --git a/res/raw/domain_en.dict b/res/raw/domain_en.dict new file mode 100644 index 0000000..a687dcc --- /dev/null +++ b/res/raw/domain_en.dict Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml new file mode 100644 index 0000000..1aec85e --- /dev/null +++ b/res/values-af/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g>-sleutelbord"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g>-sleutelbord"</string> + <string name="label_go_key" msgid="7845894543312353655">"Gaan"</string> + <string name="label_next_key" msgid="8149787729891612242">"Volgende"</string> + <string name="label_send_key" msgid="1803138506603147503">"Stuur"</string> + <string name="label_search_key" msgid="8540828292920277213">"Soek"</string> + <string name="label_done_key" msgid="4570417022685876778">"Klaar"</string> + <string name="settings_title" msgid="8361325634803696047">"Sleutelbordopsies"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Bewegingsensitiwiteit"</string> + <string name="btn_on" msgid="5962775761492765922">"Aan"</string> + <string name="btn_off" msgid="2029716012096104384">"Af"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Spasie"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Modus verander"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Hoofletterslot"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Links"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Regs"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Prop \'n oorfoonstel in om te hoor hoe wagwoordsleutels hardop gesê word."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punt."</string> +</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml new file mode 100644 index 0000000..f730d3b --- /dev/null +++ b/res/values-am/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"የ<xliff:g id="APP_NAME">Leanback</xliff:g> ቁልፍ ሰሌዳ"</string> + <string name="ime_service_name" msgid="3865311183421593944">"የ<xliff:g id="APP_NAME">Leanback</xliff:g> ቁልፍ ሰሌዳ"</string> + <string name="label_go_key" msgid="7845894543312353655">"ሂድ"</string> + <string name="label_next_key" msgid="8149787729891612242">"ቀጣይ"</string> + <string name="label_send_key" msgid="1803138506603147503">"ላክ"</string> + <string name="label_search_key" msgid="8540828292920277213">"ፍለጋ"</string> + <string name="label_done_key" msgid="4570417022685876778">"ተከናውኗል"</string> + <string name="settings_title" msgid="8361325634803696047">"የቁልፍ ሰሌዳ አማራጮች"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"የእንቅስቃሴ ትብነት"</string> + <string name="btn_on" msgid="5962775761492765922">"በርቷል"</string> + <string name="btn_off" msgid="2029716012096104384">"ጠፍቷል"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"ክፍተት"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"ሰርዝ"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"ሁነታ ቀይር"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"ግራ"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"ቀኝ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"የይለፍ ቃል ቁልፎች ሲነገሩ ለመስማት የጆሮ ማዳመጫ ይሰኩ።"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"ነጥብ።"</string> +</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml new file mode 100644 index 0000000..e7aaf08 --- /dev/null +++ b/res/values-ar/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"لوحة مفاتيح <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"لوحة مفاتيح <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"انتقال"</string> + <string name="label_next_key" msgid="8149787729891612242">"التالي"</string> + <string name="label_send_key" msgid="1803138506603147503">"إرسال"</string> + <string name="label_search_key" msgid="8540828292920277213">"بحث"</string> + <string name="label_done_key" msgid="4570417022685876778">"تم"</string> + <string name="settings_title" msgid="8361325634803696047">"خيارات لوحة المفاتيح"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"حساسية الحركة"</string> + <string name="btn_on" msgid="5962775761492765922">"تشغيل"</string> + <string name="btn_off" msgid="2029716012096104384">"إيقاف"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"مسافة"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"حذف"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"تغيير الوضع"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"لليسار"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"لليمين"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"يمكنك توصيل سماعة رأس لسماع مفاتيح كلمة المرور عندما يتم نطقها."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"نقطة"</string> +</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml new file mode 100644 index 0000000..ddb05a3 --- /dev/null +++ b/res/values-bg/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Клавиатура за <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Клавиатура за <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Старт"</string> + <string name="label_next_key" msgid="8149787729891612242">"Напред"</string> + <string name="label_send_key" msgid="1803138506603147503">"Изпращане"</string> + <string name="label_search_key" msgid="8540828292920277213">"Търсене"</string> + <string name="label_done_key" msgid="4570417022685876778">"Готово"</string> + <string name="settings_title" msgid="8361325634803696047">"Опции за клавиатурата"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Чувствителност на движението"</string> + <string name="btn_on" msgid="5962775761492765922">"Включено"</string> + <string name="btn_off" msgid="2029716012096104384">"Изключено"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Изтриване"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Промяна на режима"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Left"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Right"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Включете слушалки, за да чуете изговарянето на клавишите за паролата."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Точка."</string> +</resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml new file mode 100644 index 0000000..75029d1 --- /dev/null +++ b/res/values-bn-rBD/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> কীবোর্ড"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> কীবোর্ড"</string> + <string name="label_go_key" msgid="7845894543312353655">"যান"</string> + <string name="label_next_key" msgid="8149787729891612242">"পরবর্তী"</string> + <string name="label_send_key" msgid="1803138506603147503">"পাঠান"</string> + <string name="label_search_key" msgid="8540828292920277213">"অনুসন্ধান করুন"</string> + <string name="label_done_key" msgid="4570417022685876778">"সম্পন্ন হয়েছে"</string> + <string name="settings_title" msgid="8361325634803696047">"কীবোর্ড বিকল্পগুলি"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"নড়াচড়ার সংবেদনশীলতা"</string> + <string name="btn_on" msgid="5962775761492765922">"চালু করুন"</string> + <string name="btn_off" msgid="2029716012096104384">"বন্ধ করুন"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"ব্যবধান"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete বোতাম"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Mode change বোতাম"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift বোতাম"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"বাম"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"ডান"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"উচ্চারিত পাসওয়ার্ডের কীগুলি শোনার জন্য একটি হেডসেট সংযুক্ত করুন৷"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dot."</string> +</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml new file mode 100644 index 0000000..d6b2672 --- /dev/null +++ b/res/values-ca/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Teclat <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Teclat <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Vés-hi"</string> + <string name="label_next_key" msgid="8149787729891612242">"Següent"</string> + <string name="label_send_key" msgid="1803138506603147503">"Envia"</string> + <string name="label_search_key" msgid="8540828292920277213">"Cerca"</string> + <string name="label_done_key" msgid="4570417022685876778">"Fet"</string> + <string name="settings_title" msgid="8361325634803696047">"Opcions del teclat"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilitat del moviment"</string> + <string name="btn_on" msgid="5962775761492765922">"Activa"</string> + <string name="btn_off" msgid="2029716012096104384">"Desactiva"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Espai"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Suprimeix"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Canvi de mode"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Maj"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Bloq Maj"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Esquerra"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Dreta"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Connecta un auricular per escoltar les claus de la contrasenya en veu alta."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punt."</string> +</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml new file mode 100644 index 0000000..57a7930 --- /dev/null +++ b/res/values-cs/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Klávesnice <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Klávesnice <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Jít"</string> + <string name="label_next_key" msgid="8149787729891612242">"Další"</string> + <string name="label_send_key" msgid="1803138506603147503">"Odeslat"</string> + <string name="label_search_key" msgid="8540828292920277213">"Hledat"</string> + <string name="label_done_key" msgid="4570417022685876778">"Hotovo"</string> + <string name="settings_title" msgid="8361325634803696047">"Možnosti klávesnice"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Citlivost pohybu"</string> + <string name="btn_on" msgid="5962775761492765922">"Zapnout"</string> + <string name="btn_off" msgid="2029716012096104384">"Vypnout"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Mezerník"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Smazat"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Změna režimu"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Vlevo"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Vpravo"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Chcete-li slyšet zadávání hesla, připojte sluchátka."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Tečka."</string> +</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml new file mode 100644 index 0000000..68ab939 --- /dev/null +++ b/res/values-da/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g>-tastatur"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g>-tastatur"</string> + <string name="label_go_key" msgid="7845894543312353655">"Start"</string> + <string name="label_next_key" msgid="8149787729891612242">"Næste"</string> + <string name="label_send_key" msgid="1803138506603147503">"Send"</string> + <string name="label_search_key" msgid="8540828292920277213">"Søg"</string> + <string name="label_done_key" msgid="4570417022685876778">"Færdig"</string> + <string name="settings_title" msgid="8361325634803696047">"Valgmuligheder for tastatur"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Bevægelsesfølsomhed"</string> + <string name="btn_on" msgid="5962775761492765922">"Til"</string> + <string name="btn_off" msgid="2029716012096104384">"Fra"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Mellemrum"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Slet"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Ændring af tilstand"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Venstre"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Højre"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Tilslut et headset for at høre tasterne blive læst højt ved angivelse af adgangskode."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punktum."</string> +</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml new file mode 100644 index 0000000..939fe46 --- /dev/null +++ b/res/values-de/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g>-Tastatur"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g>-Tastatur"</string> + <string name="label_go_key" msgid="7845894543312353655">"Los"</string> + <string name="label_next_key" msgid="8149787729891612242">"Weiter"</string> + <string name="label_send_key" msgid="1803138506603147503">"Senden"</string> + <string name="label_search_key" msgid="8540828292920277213">"Suchen"</string> + <string name="label_done_key" msgid="4570417022685876778">"Fertig"</string> + <string name="settings_title" msgid="8361325634803696047">"Tastaturoptionen"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Bewegungsempfindlichkeit"</string> + <string name="btn_on" msgid="5962775761492765922">"An"</string> + <string name="btn_off" msgid="2029716012096104384">"Aus"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Leertaste"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Löschen"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Modusänderung"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Feststelltaste"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Nach links"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Nach rechts"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Schließen Sie ein Headset an, um das Passwort gesprochen zu hören."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punkt."</string> +</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml new file mode 100644 index 0000000..704cbb9 --- /dev/null +++ b/res/values-el/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Πληκτρολόγιο <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Πληκτρολόγιο <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Μετάβαση"</string> + <string name="label_next_key" msgid="8149787729891612242">"Επόμενο"</string> + <string name="label_send_key" msgid="1803138506603147503">"Αποστολή"</string> + <string name="label_search_key" msgid="8540828292920277213">"Αναζήτηση"</string> + <string name="label_done_key" msgid="4570417022685876778">"Τέλος"</string> + <string name="settings_title" msgid="8361325634803696047">"Επιλογές πληκτρολογίου"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Ευαισθησία κίνησης"</string> + <string name="btn_on" msgid="5962775761492765922">"Ενεργοποίηση"</string> + <string name="btn_off" msgid="2029716012096104384">"Απενεργοποίηση"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Πλήκτρο διαστήματος"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Διαγραφή"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Αλλαγή τρόπου"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Αριστερά"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Δεξιά"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Συνδέστε ακουστικά για να ακούσετε τα πλήκτρα του κωδικού πρόσβασης να εκφωνούνται."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Τελεία."</string> +</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..f5070e3 --- /dev/null +++ b/res/values-en-rAU/strings.xml
@@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> Keyboard"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> Keyboard"</string> + <string name="label_go_key" msgid="7845894543312353655">"Go"</string> + <string name="label_next_key" msgid="8149787729891612242">"Next"</string> + <string name="label_send_key" msgid="1803138506603147503">"Send"</string> + <string name="label_search_key" msgid="8540828292920277213">"Search"</string> + <string name="label_done_key" msgid="4570417022685876778">"Finished"</string> + <string name="settings_title" msgid="8361325634803696047">"Keyboard Options"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Movement sensitivity"</string> + <string name="btn_on" msgid="5962775761492765922">"On"</string> + <string name="btn_off" msgid="2029716012096104384">"Off"</string> + <!-- no translation found for keyboardview_keycode_space (5107808792477329036) --> + <skip /> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Mode change"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <!-- no translation found for keyboardview_keycode_caps (3870171746305993229) --> + <skip /> + <!-- no translation found for keyboardview_keycode_left (5982531325934405109) --> + <skip /> + <!-- no translation found for keyboardview_keycode_right (7152000779741202144) --> + <skip /> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Plug in a headset to hear password keys spoken."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dot"</string> +</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml new file mode 100644 index 0000000..ef28990 --- /dev/null +++ b/res/values-en-rGB/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> keyboard"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> keyboard"</string> + <string name="label_go_key" msgid="7845894543312353655">"Go"</string> + <string name="label_next_key" msgid="8149787729891612242">"Next"</string> + <string name="label_send_key" msgid="1803138506603147503">"Send"</string> + <string name="label_search_key" msgid="8540828292920277213">"Search"</string> + <string name="label_done_key" msgid="4570417022685876778">"Finished"</string> + <string name="settings_title" msgid="8361325634803696047">"Keyboard Options"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Movement sensitivity"</string> + <string name="btn_on" msgid="5962775761492765922">"On"</string> + <string name="btn_off" msgid="2029716012096104384">"Off"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Mode change"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Left"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Right"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Plug in a headset to hear password keys spoken."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dot"</string> +</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml new file mode 100644 index 0000000..ef28990 --- /dev/null +++ b/res/values-en-rIN/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> keyboard"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> keyboard"</string> + <string name="label_go_key" msgid="7845894543312353655">"Go"</string> + <string name="label_next_key" msgid="8149787729891612242">"Next"</string> + <string name="label_send_key" msgid="1803138506603147503">"Send"</string> + <string name="label_search_key" msgid="8540828292920277213">"Search"</string> + <string name="label_done_key" msgid="4570417022685876778">"Finished"</string> + <string name="settings_title" msgid="8361325634803696047">"Keyboard Options"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Movement sensitivity"</string> + <string name="btn_on" msgid="5962775761492765922">"On"</string> + <string name="btn_off" msgid="2029716012096104384">"Off"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Mode change"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Left"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Right"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Plug in a headset to hear password keys spoken."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dot"</string> +</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml new file mode 100644 index 0000000..7149986 --- /dev/null +++ b/res/values-es-rUS/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Teclado de <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Teclado de <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Ir"</string> + <string name="label_next_key" msgid="8149787729891612242">"Siguiente"</string> + <string name="label_send_key" msgid="1803138506603147503">"Enviar"</string> + <string name="label_search_key" msgid="8540828292920277213">"Buscar"</string> + <string name="label_done_key" msgid="4570417022685876778">"Listo"</string> + <string name="settings_title" msgid="8361325634803696047">"Opciones del teclado"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilidad de movimiento"</string> + <string name="btn_on" msgid="5962775761492765922">"Activar"</string> + <string name="btn_off" msgid="2029716012096104384">"Desactivar"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Barra espaciadora"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Eliminar"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Cambio de modo"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Mayúscula"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Bloqueo de mayúscula"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Izquierda"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Derecha"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Conecta los auriculares para escuchar las contraseñas."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punto"</string> +</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml new file mode 100644 index 0000000..81737ba --- /dev/null +++ b/res/values-es/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Teclado de <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Teclado de <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Ir"</string> + <string name="label_next_key" msgid="8149787729891612242">"Siguiente"</string> + <string name="label_send_key" msgid="1803138506603147503">"Enviar"</string> + <string name="label_search_key" msgid="8540828292920277213">"Buscar"</string> + <string name="label_done_key" msgid="4570417022685876778">"Listo"</string> + <string name="settings_title" msgid="8361325634803696047">"Opciones del teclado"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilidad al movimiento"</string> + <string name="btn_on" msgid="5962775761492765922">"Sí"</string> + <string name="btn_off" msgid="2029716012096104384">"No"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Espacio"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Eliminar"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Cambio de modo"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Mayús"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Bloq Mayús"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Flecha hacia la izquierda"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Flecha hacia la derecha"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Conecta un auricular para escuchar las contraseñas."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punto"</string> +</resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml new file mode 100644 index 0000000..3eb2e3d --- /dev/null +++ b/res/values-et-rEE/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Rakend. <xliff:g id="APP_NAME">Leanback</xliff:g> klaviatuur"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Rakend. <xliff:g id="APP_NAME">Leanback</xliff:g> klaviatuur"</string> + <string name="label_go_key" msgid="7845894543312353655">"Mine"</string> + <string name="label_next_key" msgid="8149787729891612242">"Järgmine"</string> + <string name="label_send_key" msgid="1803138506603147503">"Saada"</string> + <string name="label_search_key" msgid="8540828292920277213">"Otsi"</string> + <string name="label_done_key" msgid="4570417022685876778">"Valmis"</string> + <string name="settings_title" msgid="8361325634803696047">"Klaviatuuri valikud"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Liikumistundlikkus"</string> + <string name="btn_on" msgid="5962775761492765922">"Sees"</string> + <string name="btn_off" msgid="2029716012096104384">"Väljas"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Tühik"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Kustutamine"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Režiimi muutmine"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Tõstuklahv"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Suurklahvilukk"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Vasak"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Parem"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Paroolide kuulamiseks ühendage peakomplekt."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punkt."</string> +</resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml new file mode 100644 index 0000000..f87cc13 --- /dev/null +++ b/res/values-eu-rES/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> teklatua"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> teklatua"</string> + <string name="label_go_key" msgid="7845894543312353655">"Joan"</string> + <string name="label_next_key" msgid="8149787729891612242">"Hurrengoa"</string> + <string name="label_send_key" msgid="1803138506603147503">"Bidali"</string> + <string name="label_search_key" msgid="8540828292920277213">"Bilatu"</string> + <string name="label_done_key" msgid="4570417022685876778">"Eginda"</string> + <string name="settings_title" msgid="8361325634803696047">"Teklatu-aukerak"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Mugimendu-sentsibilitatea"</string> + <string name="btn_on" msgid="5962775761492765922">"Aktibatuta"</string> + <string name="btn_off" msgid="2029716012096104384">"Desaktibatuta"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Zuriunea"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Ezabatu"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Modu-aldaketa"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Maius"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Blok Maius"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Ezkerrera"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Eskuinera"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Konektatu entzungailua pasahitzaren teklak ozen entzuteko."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Puntu."</string> +</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml new file mode 100644 index 0000000..3d5a349 --- /dev/null +++ b/res/values-fa/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"صفحهکلید <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"صفحهکلید <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"برو"</string> + <string name="label_next_key" msgid="8149787729891612242">"بعدی"</string> + <string name="label_send_key" msgid="1803138506603147503">"ارسال"</string> + <string name="label_search_key" msgid="8540828292920277213">"جستجو"</string> + <string name="label_done_key" msgid="4570417022685876778">"انجام شد"</string> + <string name="settings_title" msgid="8361325634803696047">"گزینههای صفحهکلید"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"حساسیت حرکت"</string> + <string name="btn_on" msgid="5962775761492765922">"فعال"</string> + <string name="btn_off" msgid="2029716012096104384">"خاموش"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"فاصله"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"حذف"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"تغییر حالت"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"چپ"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"راست"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"هدست را برای شنیدن کلیدهای گذرواژه که خوانده میشوند، وصل کنید."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"نقطه."</string> +</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml new file mode 100644 index 0000000..53b2c28 --- /dev/null +++ b/res/values-fi/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Näppäimistö – <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Näppäimistö – <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Siirry"</string> + <string name="label_next_key" msgid="8149787729891612242">"Seuraava"</string> + <string name="label_send_key" msgid="1803138506603147503">"Lähetä"</string> + <string name="label_search_key" msgid="8540828292920277213">"Haku"</string> + <string name="label_done_key" msgid="4570417022685876778">"Valmis"</string> + <string name="settings_title" msgid="8361325634803696047">"Näppäimistöasetukset"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Liikeherkkyys"</string> + <string name="btn_on" msgid="5962775761492765922">"Ota käyttöön"</string> + <string name="btn_off" msgid="2029716012096104384">"Poista käytöstä"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Välilyönti"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Poista"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Tilan muutos"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Vasemmalle"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Oikealle"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Liitä kuulokkeet kuullaksesi, mitä näppäimiä painat kirjoittaessasi salasanaa."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Piste."</string> +</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000..823a4af --- /dev/null +++ b/res/values-fr-rCA/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Clavier <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Clavier <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Aller"</string> + <string name="label_next_key" msgid="8149787729891612242">"Suivant"</string> + <string name="label_send_key" msgid="1803138506603147503">"Envoyer"</string> + <string name="label_search_key" msgid="8540828292920277213">"Rechercher"</string> + <string name="label_done_key" msgid="4570417022685876778">"Terminé"</string> + <string name="settings_title" msgid="8361325634803696047">"Options de clavier"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilité du mouvement"</string> + <string name="btn_on" msgid="5962775761492765922">"Activer"</string> + <string name="btn_off" msgid="2029716012096104384">"Désactiver"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Espace"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Supprimer"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Changement de mode"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Majuscule"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Verrouillage des majuscules"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Gauche"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Droite"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Branchez des écouteurs pour entendre l\'énoncé des touches lors de l\'entrée du mot de passe."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Point."</string> +</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml new file mode 100644 index 0000000..9d32b37 --- /dev/null +++ b/res/values-fr/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Clavier <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Clavier <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"OK"</string> + <string name="label_next_key" msgid="8149787729891612242">"Suivant"</string> + <string name="label_send_key" msgid="1803138506603147503">"Envoyer"</string> + <string name="label_search_key" msgid="8540828292920277213">"Rechercher"</string> + <string name="label_done_key" msgid="4570417022685876778">"OK"</string> + <string name="settings_title" msgid="8361325634803696047">"Options de clavier"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilité du déplacement"</string> + <string name="btn_on" msgid="5962775761492765922">"Activer"</string> + <string name="btn_off" msgid="2029716012096104384">"Désactiver"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Espace"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Supprimer"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Changement de mode"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Maj"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Verrouillage des majuscules"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Gauche"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Droite"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Branchez un casque pour entendre l\'énoncé des touches lors de la saisie du mot de passe."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Point."</string> +</resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml new file mode 100644 index 0000000..3fe85bf --- /dev/null +++ b/res/values-gl-rES/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Teclado de <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Teclado de <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Ir"</string> + <string name="label_next_key" msgid="8149787729891612242">"Seguinte"</string> + <string name="label_send_key" msgid="1803138506603147503">"Enviar"</string> + <string name="label_search_key" msgid="8540828292920277213">"Buscar"</string> + <string name="label_done_key" msgid="4570417022685876778">"Feito"</string> + <string name="settings_title" msgid="8361325634803696047">"Opcións do teclado"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilidade do movemento"</string> + <string name="btn_on" msgid="5962775761492765922">"Activar"</string> + <string name="btn_off" msgid="2029716012096104384">"Desactivar"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Espazo"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Suprimir"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Cambio de modo"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Maiús"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Bloq maiús"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Esquerda"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Dereita"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Conecta uns auriculares para escoitar as teclas do contrasinal pronunciadas."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punto"</string> +</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml new file mode 100644 index 0000000..a6e662a --- /dev/null +++ b/res/values-hi/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> कीबोर्ड"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> कीबोर्ड"</string> + <string name="label_go_key" msgid="7845894543312353655">"जाएं"</string> + <string name="label_next_key" msgid="8149787729891612242">"अगला"</string> + <string name="label_send_key" msgid="1803138506603147503">"भेजें"</string> + <string name="label_search_key" msgid="8540828292920277213">"खोजें"</string> + <string name="label_done_key" msgid="4570417022685876778">"पूर्ण"</string> + <string name="settings_title" msgid="8361325634803696047">"कीबोर्ड विकल्प"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"गतिविधि की संवेदनशीलता"</string> + <string name="btn_on" msgid="5962775761492765922">"चालू"</string> + <string name="btn_off" msgid="2029716012096104384">"बंद"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Mode change"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Left"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Right"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"बोली गईं पासवर्ड कुंजियां सुनने के लिए हैडसेट प्लग इन करें."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dot."</string> +</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml new file mode 100644 index 0000000..bb3c7a6 --- /dev/null +++ b/res/values-hr/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> tipkovnica"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> tipkovnica"</string> + <string name="label_go_key" msgid="7845894543312353655">"Idi"</string> + <string name="label_next_key" msgid="8149787729891612242">"Dalje"</string> + <string name="label_send_key" msgid="1803138506603147503">"Pošalji"</string> + <string name="label_search_key" msgid="8540828292920277213">"Pretraži"</string> + <string name="label_done_key" msgid="4570417022685876778">"Gotovo"</string> + <string name="settings_title" msgid="8361325634803696047">"Opcije tipkovnice"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Osjetljivost pokreta"</string> + <string name="btn_on" msgid="5962775761492765922">"Uključi"</string> + <string name="btn_off" msgid="2029716012096104384">"Isključi"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Razmaknica"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Izbriši"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Promjena načina"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Velika slova"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Lijevo"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Desno"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Priključite slušalice kako biste čuli izgovaranje tipki zaporke."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Točka."</string> +</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml new file mode 100644 index 0000000..9bd6e0e --- /dev/null +++ b/res/values-hu/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g>-billentyűzet"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g>-billentyűzet"</string> + <string name="label_go_key" msgid="7845894543312353655">"Mehet"</string> + <string name="label_next_key" msgid="8149787729891612242">"Tovább"</string> + <string name="label_send_key" msgid="1803138506603147503">"Küldés"</string> + <string name="label_search_key" msgid="8540828292920277213">"Keresés"</string> + <string name="label_done_key" msgid="4570417022685876778">"Kész"</string> + <string name="settings_title" msgid="8361325634803696047">"Billentyűzetbeállítások"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Mozgásérzékenység"</string> + <string name="btn_on" msgid="5962775761492765922">"Bekapcsolva"</string> + <string name="btn_off" msgid="2029716012096104384">"Kikapcsolva"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Szóköz"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Törlés"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Mód váltása"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Bal"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Jobb"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Csatlakoztasson egy fülhallgatót, ha hallani szeretné a jelszó betűit felolvasva."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Pont."</string> +</resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml new file mode 100644 index 0000000..5506ca5 --- /dev/null +++ b/res/values-hy-rAM/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> ստեղնաշար"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> ստեղնաշար"</string> + <string name="label_go_key" msgid="7845894543312353655">"Առաջ"</string> + <string name="label_next_key" msgid="8149787729891612242">"Հաջորդը"</string> + <string name="label_send_key" msgid="1803138506603147503">"Ուղարկել"</string> + <string name="label_search_key" msgid="8540828292920277213">"Որոնում"</string> + <string name="label_done_key" msgid="4570417022685876778">"Պատրաստ է"</string> + <string name="settings_title" msgid="8361325634803696047">"Ստեղնաշարի ընտրանքներ"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Շարժման զգայունությունը"</string> + <string name="btn_on" msgid="5962775761492765922">"Միացնել"</string> + <string name="btn_off" msgid="2029716012096104384">"Անջատել"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Բացատ"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Ջնջել"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Ռեժիմի փոփոխում"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Ձախ"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Աջ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Միացրեք ականջակալները` արտասանվող գաղտնաբառը լսելու համար:"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Կետ:"</string> +</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml new file mode 100644 index 0000000..2c97330 --- /dev/null +++ b/res/values-in/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Keyboard <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Keyboard <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Buka"</string> + <string name="label_next_key" msgid="8149787729891612242">"Berikutnya"</string> + <string name="label_send_key" msgid="1803138506603147503">"Kirim"</string> + <string name="label_search_key" msgid="8540828292920277213">"Penelusuran"</string> + <string name="label_done_key" msgid="4570417022685876778">"Selesai"</string> + <string name="settings_title" msgid="8361325634803696047">"Opsi Keyboard"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensitivitas gerakan"</string> + <string name="btn_on" msgid="5962775761492765922">"Aktif"</string> + <string name="btn_off" msgid="2029716012096104384">"Nonaktif"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Spasi"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Pengubahan mode"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Kiri"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Kanan"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Pasang headset untuk mendengar tombol sandi yang diucapkan."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Titik."</string> +</resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml new file mode 100644 index 0000000..6b5e0fb --- /dev/null +++ b/res/values-is-rIS/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> lyklaborð"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> lyklaborð"</string> + <string name="label_go_key" msgid="7845894543312353655">"Áfram"</string> + <string name="label_next_key" msgid="8149787729891612242">"Næsta"</string> + <string name="label_send_key" msgid="1803138506603147503">"Senda"</string> + <string name="label_search_key" msgid="8540828292920277213">"Leita"</string> + <string name="label_done_key" msgid="4570417022685876778">"Lokið"</string> + <string name="settings_title" msgid="8361325634803696047">"Valkostir lyklaborðs"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Hreyfinæmi"</string> + <string name="btn_on" msgid="5962775761492765922">"Kveikt"</string> + <string name="btn_off" msgid="2029716012096104384">"Slökkt"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Bil"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Eyða"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Breyta stillingu"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Hástafalás"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Vinstri"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Hægri"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Tengdu heyrnartól til að heyra stafi aðgangsorðsins lesna upphátt."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punktur."</string> +</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml new file mode 100644 index 0000000..671db4c --- /dev/null +++ b/res/values-it/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Tastiera <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Tastiera <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Vai"</string> + <string name="label_next_key" msgid="8149787729891612242">"Avanti"</string> + <string name="label_send_key" msgid="1803138506603147503">"Invia"</string> + <string name="label_search_key" msgid="8540828292920277213">"Cerca"</string> + <string name="label_done_key" msgid="4570417022685876778">"Fine"</string> + <string name="settings_title" msgid="8361325634803696047">"Opzioni tastiera"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilità movimento"</string> + <string name="btn_on" msgid="5962775761492765922">"Attiva"</string> + <string name="btn_off" msgid="2029716012096104384">"Disattiva"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Spazio"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Elimina"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Cambio modalità"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Maiusc"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Bloc Maiusc"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Sinistra"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Destra"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Collega gli auricolari per ascoltare la pronuncia dei tasti premuti per la password."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punto."</string> +</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml new file mode 100644 index 0000000..f426214 --- /dev/null +++ b/res/values-iw/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"מקלדת <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"מקלדת <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"המשך"</string> + <string name="label_next_key" msgid="8149787729891612242">"הבא"</string> + <string name="label_send_key" msgid="1803138506603147503">"שלח"</string> + <string name="label_search_key" msgid="8540828292920277213">"חפש"</string> + <string name="label_done_key" msgid="4570417022685876778">"בוצע"</string> + <string name="settings_title" msgid="8361325634803696047">"אפשרויות מקלדת"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"רגישות תנועה"</string> + <string name="btn_on" msgid="5962775761492765922">"פועל"</string> + <string name="btn_off" msgid="2029716012096104384">"כבוי"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"רווח"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"מחיקה"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"שינוי מצב"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"נעילת מקש CAPS"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"שמאלה"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"ימינה"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"חבר אוזניות כדי לשמוע הקראה של מפתחות סיסמה."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"נקודה."</string> +</resources>
diff --git a/res/values-ja/bools.xml b/res/values-ja/bools.xml new file mode 100644 index 0000000..0d082bb --- /dev/null +++ b/res/values-ja/bools.xml
@@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2013, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <!-- Whether this input method should be used as the default for a locale. Override it + for supported languages. --> + <bool name="im_is_default">false</bool> +</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml new file mode 100644 index 0000000..412337b --- /dev/null +++ b/res/values-ja/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g>キーボード"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g>キーボード"</string> + <string name="label_go_key" msgid="7845894543312353655">"検索"</string> + <string name="label_next_key" msgid="8149787729891612242">"次へ"</string> + <string name="label_send_key" msgid="1803138506603147503">"送信"</string> + <string name="label_search_key" msgid="8540828292920277213">"検索"</string> + <string name="label_done_key" msgid="4570417022685876778">"完了"</string> + <string name="settings_title" msgid="8361325634803696047">"キーボードオプション"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"動作感度"</string> + <string name="btn_on" msgid="5962775761492765922">"ON"</string> + <string name="btn_off" msgid="2029716012096104384">"OFF"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"削除"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"モードを変更"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"CapsLock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"←"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"→"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"パスワードのキーが音声出力されるのでヘッドセットを接続してください。"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"ドット。"</string> +</resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml new file mode 100644 index 0000000..23b4c75 --- /dev/null +++ b/res/values-ka-rGE/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g>-ის კლავიატურა"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g>-ის კლავიატურა"</string> + <string name="label_go_key" msgid="7845894543312353655">"გადასვლა"</string> + <string name="label_next_key" msgid="8149787729891612242">"შემდეგი"</string> + <string name="label_send_key" msgid="1803138506603147503">"გაგზავნა"</string> + <string name="label_search_key" msgid="8540828292920277213">"ძიება"</string> + <string name="label_done_key" msgid="4570417022685876778">"დასრულება"</string> + <string name="settings_title" msgid="8361325634803696047">"კლავიატურის პარამეტრები"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"მოძრაობის მგრძობიარობა"</string> + <string name="btn_on" msgid="5962775761492765922">"ჩართული"</string> + <string name="btn_off" msgid="2029716012096104384">"გამორთული"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"შორისი"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"წაშლა"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"რეჟიმის შეცვლა"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"მარცხენა"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"მარჯვენა"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"შეაერთეთ ყურსაცვამი, რათა მოისმინოთ აკრეფილი პაროლის კლავიშების სახელები."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"წერტილი."</string> +</resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml new file mode 100644 index 0000000..5aea1b8 --- /dev/null +++ b/res/values-kk-rKZ/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> пернетақтасы"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> пернетақтасы"</string> + <string name="label_go_key" msgid="7845894543312353655">"Өту"</string> + <string name="label_next_key" msgid="8149787729891612242">"Келесі"</string> + <string name="label_send_key" msgid="1803138506603147503">"Жіберу"</string> + <string name="label_search_key" msgid="8540828292920277213">"Іздеу"</string> + <string name="label_done_key" msgid="4570417022685876778">"Дайын"</string> + <string name="settings_title" msgid="8361325634803696047">"Пернетақта опциялары"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Қозғалысқа сезімталдық"</string> + <string name="btn_on" msgid="5962775761492765922">"Қосулы"</string> + <string name="btn_off" msgid="2029716012096104384">"Өшірулі"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Бос орын"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Жою"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Режимді өзгерту"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Солға"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Оңға"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Құпия сөз пернелерін есту үшін құлақаспап жинағын қосыңыз."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Нүкте."</string> +</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml new file mode 100644 index 0000000..253bda2 --- /dev/null +++ b/res/values-km-rKH/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"ក្ដារចុច <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"ក្ដារចុច <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"ទៅ"</string> + <string name="label_next_key" msgid="8149787729891612242">"បន្ទាប់"</string> + <string name="label_send_key" msgid="1803138506603147503">"ផ្ញើ"</string> + <string name="label_search_key" msgid="8540828292920277213">"ស្វែងរក"</string> + <string name="label_done_key" msgid="4570417022685876778">"ធ្វើរួច"</string> + <string name="settings_title" msgid="8361325634803696047">"ជម្រើសក្ដារចុច"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"ភាពប្រែប្រួលដោយចលនា"</string> + <string name="btn_on" msgid="5962775761492765922">"បើក"</string> + <string name="btn_off" msgid="2029716012096104384">"បិទ"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"ដកឃ្លា"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"លុប"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"ផ្លាស់ប្ដូររបៀប"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"ឆ្វេង"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"ស្ដាំ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"ដោតកាសដើម្បីស្ដាប់ពាក្យសម្ងាត់បាននិយាយ។"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"ចុច."</string> +</resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml new file mode 100644 index 0000000..7e1818d --- /dev/null +++ b/res/values-kn-rIN/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> ಕೀಬೋರ್ಡ್"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> ಕೀಬೋರ್ಡ್"</string> + <string name="label_go_key" msgid="7845894543312353655">"ಹೋಗು"</string> + <string name="label_next_key" msgid="8149787729891612242">"ಮುಂದೆ"</string> + <string name="label_send_key" msgid="1803138506603147503">"ಕಳುಹಿಸು"</string> + <string name="label_search_key" msgid="8540828292920277213">"ಹುಡುಕಾಟ"</string> + <string name="label_done_key" msgid="4570417022685876778">"ಮುಗಿದಿದೆ"</string> + <string name="settings_title" msgid="8361325634803696047">"ಕೀಬೋರ್ಡ್ ಆಯ್ಕೆಗಳು"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"ಚಲನೆ ಸೂಕ್ಷ್ಮತೆ"</string> + <string name="btn_on" msgid="5962775761492765922">"ಆನ್"</string> + <string name="btn_off" msgid="2029716012096104384">"ಆಫ್"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"ಸ್ಪೇಸ್"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"ಅಳಿಸು"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"ಮೋಡ್ ಬದಲಾವಣೆ"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"ತೊರೆಯಲಾಗಿದೆ"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"ಸರಿಯಾಗಿದೆ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"ಪಾಸ್ವರ್ಡ್ ಕೀಗಳನ್ನು ಆಲಿಸಲು ಹೆಡ್ಸೆಟ್ ಪ್ಲಗ್ ಇನ್ ಮಾಡಿ."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"ಡಾಟ್."</string> +</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml new file mode 100644 index 0000000..66eab17 --- /dev/null +++ b/res/values-ko/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> 키보드"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> 키보드"</string> + <string name="label_go_key" msgid="7845894543312353655">"이동"</string> + <string name="label_next_key" msgid="8149787729891612242">"다음"</string> + <string name="label_send_key" msgid="1803138506603147503">"보내기"</string> + <string name="label_search_key" msgid="8540828292920277213">"검색"</string> + <string name="label_done_key" msgid="4570417022685876778">"완료"</string> + <string name="settings_title" msgid="8361325634803696047">"키보드 옵션"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"움직임 민감도"</string> + <string name="btn_on" msgid="5962775761492765922">"사용"</string> + <string name="btn_off" msgid="2029716012096104384">"사용 안함"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"스페이스바"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"삭제"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"모드 변경"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"왼쪽"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"오른쪽"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"비밀번호 키를 음성으로 들으려면 헤드셋을 연결하세요."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"점"</string> +</resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml new file mode 100644 index 0000000..5642834 --- /dev/null +++ b/res/values-ky-rKG/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> Баскычтоп"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> Баскычтоп"</string> + <string name="label_go_key" msgid="7845894543312353655">"Өтүү"</string> + <string name="label_next_key" msgid="8149787729891612242">"Кийинки"</string> + <string name="label_send_key" msgid="1803138506603147503">"Жөнөтүү"</string> + <string name="label_search_key" msgid="8540828292920277213">"Издөө"</string> + <string name="label_done_key" msgid="4570417022685876778">"Бүттү"</string> + <string name="settings_title" msgid="8361325634803696047">"Баскычтоп параметрлери"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Кыймылды сезгичтик"</string> + <string name="btn_on" msgid="5962775761492765922">"Күйүк"</string> + <string name="btn_off" msgid="2029716012096104384">"Өчүк"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Боштук"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Жок кылуу"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Режимди өзгөртүү"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Солго"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Оңго"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Айтылган сырсөз ачкычтарын угуу үчүн, гарнитураны туташтырыңыз."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Чекит."</string> +</resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml new file mode 100644 index 0000000..4247506 --- /dev/null +++ b/res/values-lo-rLA/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"ແປ້ນພິມ <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"ແປ້ນພິມ <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"ໄປ"</string> + <string name="label_next_key" msgid="8149787729891612242">"ຕໍ່ໄປ"</string> + <string name="label_send_key" msgid="1803138506603147503">"ສົ່ງ"</string> + <string name="label_search_key" msgid="8540828292920277213">"ຊອກຫາ"</string> + <string name="label_done_key" msgid="4570417022685876778">"ແລ້ວໆ"</string> + <string name="settings_title" msgid="8361325634803696047">"ໂຕເລືອກແປ້ນພິມ"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"ຄວາມລະອຽດການເຄື່ອນໄຫວ"</string> + <string name="btn_on" msgid="5962775761492765922">"ເປີດ"</string> + <string name="btn_off" msgid="2029716012096104384">"ປິດ"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"ຍະຫວ່າງ"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"ລຶບ"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"ປ່ຽນຮູບແບບ"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"ຊ້າຍ"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"ຂວາ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"ສຽບຫູຟັງເພື່ອຟັງລະຫັດຜ່ານ."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"ຈໍ້າເມັດ."</string> +</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml new file mode 100644 index 0000000..29b43d2 --- /dev/null +++ b/res/values-lt/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"„<xliff:g id="APP_NAME">Leanback</xliff:g>“ klaviatūra"</string> + <string name="ime_service_name" msgid="3865311183421593944">"„<xliff:g id="APP_NAME">Leanback</xliff:g>“ klaviatūra"</string> + <string name="label_go_key" msgid="7845894543312353655">"Eiti"</string> + <string name="label_next_key" msgid="8149787729891612242">"Kitas"</string> + <string name="label_send_key" msgid="1803138506603147503">"Siųsti"</string> + <string name="label_search_key" msgid="8540828292920277213">"Ieškoti"</string> + <string name="label_done_key" msgid="4570417022685876778">"Atlikta"</string> + <string name="settings_title" msgid="8361325634803696047">"Klaviatūros parinktys"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Judesio jautrumas"</string> + <string name="btn_on" msgid="5962775761492765922">"Įjungti"</string> + <string name="btn_off" msgid="2029716012096104384">"Išjungti"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Tarpo klavišas"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Mode change"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Didžiųjų raidžių klavišas"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Kairėn"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Dešinėn"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Prijunkite ausines, kad galėtumėte girdėti sakomus slaptažodžio klavišus."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Taškas."</string> +</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml new file mode 100644 index 0000000..4921b72 --- /dev/null +++ b/res/values-lv/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> tastatūra"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> tastatūra"</string> + <string name="label_go_key" msgid="7845894543312353655">"Sākt"</string> + <string name="label_next_key" msgid="8149787729891612242">"Tālāk"</string> + <string name="label_send_key" msgid="1803138506603147503">"Sūtīt"</string> + <string name="label_search_key" msgid="8540828292920277213">"Meklēt"</string> + <string name="label_done_key" msgid="4570417022685876778">"Gatavs"</string> + <string name="settings_title" msgid="8361325634803696047">"Tastatūras iespējas"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Kustības sensitivitāte"</string> + <string name="btn_on" msgid="5962775761492765922">"Ieslēgts"</string> + <string name="btn_off" msgid="2029716012096104384">"Izslēgts"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Atstarpēšanas taustiņš"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Dzēšanas taustiņš"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Režīma maiņas taustiņš"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Pārslēgšanas taustiņš"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Burtslēga taustiņš"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Pa kreisi"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Pa labi"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Pievienojiet austiņas, lai dzirdētu paroles taustiņu nosaukumus."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punkta taustiņš"</string> +</resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml new file mode 100644 index 0000000..d3bc81f --- /dev/null +++ b/res/values-mk-rMK/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> тастатура"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> тастатура"</string> + <string name="label_go_key" msgid="7845894543312353655">"Оди"</string> + <string name="label_next_key" msgid="8149787729891612242">"Следно"</string> + <string name="label_send_key" msgid="1803138506603147503">"Прати"</string> + <string name="label_search_key" msgid="8540828292920277213">"Пребарување"</string> + <string name="label_done_key" msgid="4570417022685876778">"Готово"</string> + <string name="settings_title" msgid="8361325634803696047">"Опции за тастатура"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Чувствителност на движење"</string> + <string name="btn_on" msgid="5962775761492765922">"Вклучи"</string> + <string name="btn_off" msgid="2029716012096104384">"Исклучи"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Празно место"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Бришење"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Копче „Промени режим“"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Копче „Shift“"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Лево"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Десно"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Приклучи слушалки да ги слушнеш изговорените лозинки."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Точка."</string> +</resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml new file mode 100644 index 0000000..72b7668 --- /dev/null +++ b/res/values-ml-rIN/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> കീബോർഡ്"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> കീബോർഡ്"</string> + <string name="label_go_key" msgid="7845894543312353655">"പോകുക"</string> + <string name="label_next_key" msgid="8149787729891612242">"അടുത്തത്"</string> + <string name="label_send_key" msgid="1803138506603147503">"അയയ്ക്കുക"</string> + <string name="label_search_key" msgid="8540828292920277213">"തിരയുക"</string> + <string name="label_done_key" msgid="4570417022685876778">"പൂർത്തിയാക്കി"</string> + <string name="settings_title" msgid="8361325634803696047">"കീബോർഡ് ഓപ്ഷനുകൾ"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"ചലന സംവേദനക്ഷമത"</string> + <string name="btn_on" msgid="5962775761492765922">"ഓണാക്കുക"</string> + <string name="btn_off" msgid="2029716012096104384">"ഓഫാക്കുക"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"സ്പെയ്സ്"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"ഇല്ലാതാക്കുക"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"മോഡ് മാറ്റം"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"ക്യാപ്സ് ലോക്ക്"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"ഇടതുഭാഗത്തേക്ക്"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"വലതുഭാഗത്തേക്ക്"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"പറയുന്ന പാസ്വേഡ് കീകൾ കേൾക്കുന്നതിന് ഒരു ഹെഡ്സെറ്റ് പ്ലഗ്ഗുചെയ്യുക."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"ഡോട്ട്."</string> +</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml new file mode 100644 index 0000000..1117c70 --- /dev/null +++ b/res/values-mn-rMN/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> Гар"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> Гар"</string> + <string name="label_go_key" msgid="7845894543312353655">"Цааш"</string> + <string name="label_next_key" msgid="8149787729891612242">"Дараах"</string> + <string name="label_send_key" msgid="1803138506603147503">"Илгээх"</string> + <string name="label_search_key" msgid="8540828292920277213">"Хайх"</string> + <string name="label_done_key" msgid="4570417022685876778">"Дууссан"</string> + <string name="settings_title" msgid="8361325634803696047">"Гарын сонголтууд"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Хөдөлгөөн мэдрэлт"</string> + <string name="btn_on" msgid="5962775761492765922">"Идэвхтэй"</string> + <string name="btn_off" msgid="2029716012096104384">"Идэвхгүй"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Хоосон зай"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Устгах"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Горим өөрчлөх"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Шифт"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Зүүн"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Баруун"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Нууц үгний дуудлагыг сонсох бол чихэвчийг залгана уу."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Цэг."</string> +</resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml new file mode 100644 index 0000000..26cb220 --- /dev/null +++ b/res/values-mr-rIN/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> कीबोर्ड"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> कीबोर्ड"</string> + <string name="label_go_key" msgid="7845894543312353655">"जा"</string> + <string name="label_next_key" msgid="8149787729891612242">"पुढील"</string> + <string name="label_send_key" msgid="1803138506603147503">"पाठवा"</string> + <string name="label_search_key" msgid="8540828292920277213">"शोधा"</string> + <string name="label_done_key" msgid="4570417022685876778">"पूर्ण झाले"</string> + <string name="settings_title" msgid="8361325634803696047">"कीबोर्ड पर्याय"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"हालचाल संवेदनशीलता"</string> + <string name="btn_on" msgid="5962775761492765922">"चालू"</string> + <string name="btn_off" msgid="2029716012096104384">"बंद"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"हटवा"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"मोड बदल"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"डावे"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"उजवे"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"बोलणाऱ्या संकेतशब्द की ऐकण्यासाठी हेडसेट लावा."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"बिंदू."</string> +</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml new file mode 100644 index 0000000..bcfc566 --- /dev/null +++ b/res/values-ms-rMY/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Papan Kekunci <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Papan Kekunci <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Pergi"</string> + <string name="label_next_key" msgid="8149787729891612242">"Seterusnya"</string> + <string name="label_send_key" msgid="1803138506603147503">"Hantar"</string> + <string name="label_search_key" msgid="8540828292920277213">"Carian"</string> + <string name="label_done_key" msgid="4570417022685876778">"Selesai"</string> + <string name="settings_title" msgid="8361325634803696047">"Pilihan Papan Kekunci"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Kepekaan pergerakan"</string> + <string name="btn_on" msgid="5962775761492765922">"Hidup"</string> + <string name="btn_off" msgid="2029716012096104384">"Mati"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Ruang"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Padam"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Pertukaran mod"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Kiri"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Kanan"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Pasangkan set kepala untuk mendengar kekunci kata laluan disebutkan."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Titik."</string> +</resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml new file mode 100644 index 0000000..9774e40 --- /dev/null +++ b/res/values-my-rMM/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> ကီးဘုတ်"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> ကီးဘုတ်"</string> + <string name="label_go_key" msgid="7845894543312353655">"သွားပါ"</string> + <string name="label_next_key" msgid="8149787729891612242">"ရှေ့သို့"</string> + <string name="label_send_key" msgid="1803138506603147503">"ပို့ရန်"</string> + <string name="label_search_key" msgid="8540828292920277213">"ရှာဖွေရန်"</string> + <string name="label_done_key" msgid="4570417022685876778">"လုပ်ပြီး"</string> + <string name="settings_title" msgid="8361325634803696047">"ကီးဘုတ် ရွေးစရာများ"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"လှုပ်ရှားမှု အာရုံခံနိုင်စွမ်း"</string> + <string name="btn_on" msgid="5962775761492765922">"ဖွင့်ရန်"</string> + <string name="btn_off" msgid="2029716012096104384">"ပိတ်ထား"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"စပေ့စ်ကီး"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"ဖျက်ရန်"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"မုဒ် ခလုတ်"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"စာလုံးကြီး သော့ပိတ်"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"ဘယ်"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"ညာ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"စကားဝှက်ကို နှုတ်ထွက် ပြောဆိုမှုကို ကြားနိုင်ရန် ဟက်ဆက်ကို ပလပ်ထိုး နားထောင်ပါ။"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dot."</string> +</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml new file mode 100644 index 0000000..1c21187 --- /dev/null +++ b/res/values-nb/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Tastatur for <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Tastatur for <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Utfør"</string> + <string name="label_next_key" msgid="8149787729891612242">"Neste"</string> + <string name="label_send_key" msgid="1803138506603147503">"Send"</string> + <string name="label_search_key" msgid="8540828292920277213">"Søk"</string> + <string name="label_done_key" msgid="4570417022685876778">"Ferdig"</string> + <string name="settings_title" msgid="8361325634803696047">"Tastaturalternativer"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Bevegelsesfølsomhet"</string> + <string name="btn_on" msgid="5962775761492765922">"På"</string> + <string name="btn_off" msgid="2029716012096104384">"Av"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Mellomrom"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Slett"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Modusendring"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Skift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Venstre"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Høyre"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Koble til hodetelefoner for å høre opplesing av bokstavene i passordet."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punktum."</string> +</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml new file mode 100644 index 0000000..81b6ff7 --- /dev/null +++ b/res/values-ne-rNP/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> कीबोर्ड"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> कीबोर्ड"</string> + <string name="label_go_key" msgid="7845894543312353655">"जानु"</string> + <string name="label_next_key" msgid="8149787729891612242">"अर्को"</string> + <string name="label_send_key" msgid="1803138506603147503">"पठाउनुहोस्"</string> + <string name="label_search_key" msgid="8540828292920277213">"खोजी गर्नुहोस्"</string> + <string name="label_done_key" msgid="4570417022685876778">"भयो"</string> + <string name="settings_title" msgid="8361325634803696047">"कीबोर्ड विकल्पहरू"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"गतिविधि संवेदनशीलता"</string> + <string name="btn_on" msgid="5962775761492765922">"खुल्ला गर्नुहोस्"</string> + <string name="btn_off" msgid="2029716012096104384">"बन्द गर्नुहोस्"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"स्पेस"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"मेटाउनुहोस्"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"मोड परिवर्तन गर्नुहोस्"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"सिफ्ट"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"क्याप्स लक"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"बायाँ"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"दायाँ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"बोलिएको पासवर्ड कुञ्जीहरू सुन्नको लागि हेडसेट प्लग इन गर्नुहोस्।"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dot."</string> +</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml new file mode 100644 index 0000000..7d284f0 --- /dev/null +++ b/res/values-nl/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Toetsenbord voor <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Toetsenbord voor <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Gaan"</string> + <string name="label_next_key" msgid="8149787729891612242">"Volgende"</string> + <string name="label_send_key" msgid="1803138506603147503">"Verzenden"</string> + <string name="label_search_key" msgid="8540828292920277213">"Zoeken"</string> + <string name="label_done_key" msgid="4570417022685876778">"Gereed"</string> + <string name="settings_title" msgid="8361325634803696047">"Toetsenbordopties"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Gevoeligheid beweging"</string> + <string name="btn_on" msgid="5962775761492765922">"Aan"</string> + <string name="btn_off" msgid="2029716012096104384">"Uit"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Spatiebalk"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Verwijderen"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Modus wijzigen"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Links"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Rechts"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Sluit een headset aan om wachtwoordtoetsen te laten voorlezen."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Stip."</string> +</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml new file mode 100644 index 0000000..5d2b3ba --- /dev/null +++ b/res/values-pl/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Klawiatura <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Klawiatura <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"OK"</string> + <string name="label_next_key" msgid="8149787729891612242">"Dalej"</string> + <string name="label_send_key" msgid="1803138506603147503">"Wyślij"</string> + <string name="label_search_key" msgid="8540828292920277213">"Szukaj"</string> + <string name="label_done_key" msgid="4570417022685876778">"Gotowe"</string> + <string name="settings_title" msgid="8361325634803696047">"Opcje klawiatury"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Czułość ruchu"</string> + <string name="btn_on" msgid="5962775761492765922">"Wł."</string> + <string name="btn_off" msgid="2029716012096104384">"Wył."</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Spacja"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Delete"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Zmiana trybu"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"W lewo"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"W prawo"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Podłącz zestaw słuchawkowy, by wysłuchać znaków hasła wypowiadanych na głos."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Kropka"</string> +</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000..4b12c7a --- /dev/null +++ b/res/values-pt-rPT/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Teclado <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Teclado <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"OK"</string> + <string name="label_next_key" msgid="8149787729891612242">"Seguinte"</string> + <string name="label_send_key" msgid="1803138506603147503">"Enviar"</string> + <string name="label_search_key" msgid="8540828292920277213">"Pesquisar"</string> + <string name="label_done_key" msgid="4570417022685876778">"Concluído"</string> + <string name="settings_title" msgid="8361325634803696047">"Opções do teclado"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilidade do movimento"</string> + <string name="btn_on" msgid="5962775761492765922">"Ativado"</string> + <string name="btn_off" msgid="2029716012096104384">"Desativado"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Espaço"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Eliminar"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Alteração do modo"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Esquerdo"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Direito"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Ligue os auscultadores com microfone integrado para ouvir as teclas da palavra-passe."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Ponto."</string> +</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml new file mode 100644 index 0000000..0b89d25 --- /dev/null +++ b/res/values-pt/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Teclado do <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Teclado do <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Ir"</string> + <string name="label_next_key" msgid="8149787729891612242">"Próximo"</string> + <string name="label_send_key" msgid="1803138506603147503">"Enviar"</string> + <string name="label_search_key" msgid="8540828292920277213">"Pesquisar"</string> + <string name="label_done_key" msgid="4570417022685876778">"Concluído"</string> + <string name="settings_title" msgid="8361325634803696047">"Opções de teclado"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilidade de movimento"</string> + <string name="btn_on" msgid="5962775761492765922">"Ativar"</string> + <string name="btn_off" msgid="2029716012096104384">"Desativar"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Espaço"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Excluir"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Alteração do modo"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Esquerdo"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Direito"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Conecte um fone de ouvido para ouvir as teclas da senha."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Ponto."</string> +</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml new file mode 100644 index 0000000..d71f6a2 --- /dev/null +++ b/res/values-ro/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Tastatură <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Tastatură <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Accesați"</string> + <string name="label_next_key" msgid="8149787729891612242">"Înainte"</string> + <string name="label_send_key" msgid="1803138506603147503">"Trimiteți"</string> + <string name="label_search_key" msgid="8540828292920277213">"Căutați"</string> + <string name="label_done_key" msgid="4570417022685876778">"Terminat"</string> + <string name="settings_title" msgid="8361325634803696047">"Opțiuni pentru tastatură"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Sensibilitatea la mișcare"</string> + <string name="btn_on" msgid="5962775761492765922">"Activați"</string> + <string name="btn_off" msgid="2029716012096104384">"Dezactivați"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Spațiu"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Ștergeți"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Schimbare mod"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Scriere cu majuscule"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Stânga"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Dreapta"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Conectați un set căști-microfon pentru a auzi tastele apăsate când introduceți parola."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punct."</string> +</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml new file mode 100644 index 0000000..1663b1d --- /dev/null +++ b/res/values-ru/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Клавиатура <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Клавиатура <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"ОК"</string> + <string name="label_next_key" msgid="8149787729891612242">"Далее"</string> + <string name="label_send_key" msgid="1803138506603147503">"Отправить"</string> + <string name="label_search_key" msgid="8540828292920277213">"Поиск"</string> + <string name="label_done_key" msgid="4570417022685876778">"Готово"</string> + <string name="settings_title" msgid="8361325634803696047">"Настройки клавиатуры"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Обработка движений"</string> + <string name="btn_on" msgid="5962775761492765922">"ВКЛ"</string> + <string name="btn_off" msgid="2029716012096104384">"ВЫКЛ"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Пробел."</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Удалить"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Смена режима"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Стрелка влево"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Стрелка вправо"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Подключите гарнитуру, чтобы услышать пароль."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Точка"</string> +</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml new file mode 100644 index 0000000..cea8300 --- /dev/null +++ b/res/values-si-rLK/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> යතුරු පුවරුව"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> යතුරු පුවරුව"</string> + <string name="label_go_key" msgid="7845894543312353655">"යන්න"</string> + <string name="label_next_key" msgid="8149787729891612242">"මීළඟ"</string> + <string name="label_send_key" msgid="1803138506603147503">"යවන්න"</string> + <string name="label_search_key" msgid="8540828292920277213">"සොයන්න"</string> + <string name="label_done_key" msgid="4570417022685876778">"අවසන්"</string> + <string name="settings_title" msgid="8361325634803696047">"යතුරුපුවරු විකල්ප"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"සංචලන සංවේදීතාවය"</string> + <string name="btn_on" msgid="5962775761492765922">"සක්රිය කරන්න"</string> + <string name="btn_off" msgid="2029716012096104384">"අක්රිය කරන්න"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"මකන්න"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"ආකාරය වෙනස් කරන්න"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"ෂිෆ්ට්"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"කැප්ස් ලොක්"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"වම"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"දකුණ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"මුරපද යතුරු කියවනු ඇසීමට හෙඩ්සෙටයක් සම්බන්ධ කරන්න."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"නැවතුම."</string> +</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml new file mode 100644 index 0000000..7b1e7b7 --- /dev/null +++ b/res/values-sk/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Klávesnica <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Klávesnica <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Spustiť"</string> + <string name="label_next_key" msgid="8149787729891612242">"Ďalej"</string> + <string name="label_send_key" msgid="1803138506603147503">"Odoslať"</string> + <string name="label_search_key" msgid="8540828292920277213">"Hľadať"</string> + <string name="label_done_key" msgid="4570417022685876778">"Hotovo"</string> + <string name="settings_title" msgid="8361325634803696047">"Možnosti klávesnice"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Citlivosť pohybu"</string> + <string name="btn_on" msgid="5962775761492765922">"Zapnúť"</string> + <string name="btn_off" msgid="2029716012096104384">"Vypnúť"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Medzerník"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Odstrániť"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Zmena režimu"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Doľava"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Doprava"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Ak si chcete vypočuť vyslovené klávesy hesla, pripojte náhlavnú súpravu."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Bodka."</string> +</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml new file mode 100644 index 0000000..5c1b4d5 --- /dev/null +++ b/res/values-sl/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Tipkovnica <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Tipkovnica <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Pojdi"</string> + <string name="label_next_key" msgid="8149787729891612242">"Naprej"</string> + <string name="label_send_key" msgid="1803138506603147503">"Pošlji"</string> + <string name="label_search_key" msgid="8540828292920277213">"Iskanje"</string> + <string name="label_done_key" msgid="4570417022685876778">"Končano"</string> + <string name="settings_title" msgid="8361325634803696047">"Možnosti tipkovnice"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Občutljivost premikanja"</string> + <string name="btn_on" msgid="5962775761492765922">"Vklop"</string> + <string name="btn_off" msgid="2029716012096104384">"Izklop"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Preslednica"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Izbriši"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Sprememba načina"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Levo"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Desno"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Priključite slušalke, da boste slišali izgovorjene tipke gesla."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Pika."</string> +</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml new file mode 100644 index 0000000..4e0fb34 --- /dev/null +++ b/res/values-sr/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> тастатура"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> тастатура"</string> + <string name="label_go_key" msgid="7845894543312353655">"Иди"</string> + <string name="label_next_key" msgid="8149787729891612242">"Даље"</string> + <string name="label_send_key" msgid="1803138506603147503">"Пошаљи"</string> + <string name="label_search_key" msgid="8540828292920277213">"Претрага"</string> + <string name="label_done_key" msgid="4570417022685876778">"Готово"</string> + <string name="settings_title" msgid="8361325634803696047">"Опције тастатуре"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Осетљивост покрета"</string> + <string name="btn_on" msgid="5962775761492765922">"Укључи"</string> + <string name="btn_off" msgid="2029716012096104384">"Искључи"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Размак"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Избришите"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Промена режима"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Лево"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Десно"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Прикључите слушалице да бисте чули изговорене тастере за лозинку."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Тачка."</string> +</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml new file mode 100644 index 0000000..84b8c74 --- /dev/null +++ b/res/values-sv/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Tangentbord för <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Tangentbord för <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"OK"</string> + <string name="label_next_key" msgid="8149787729891612242">"Nästa"</string> + <string name="label_send_key" msgid="1803138506603147503">"Skicka"</string> + <string name="label_search_key" msgid="8540828292920277213">"Sök"</string> + <string name="label_done_key" msgid="4570417022685876778">"Klar"</string> + <string name="settings_title" msgid="8361325634803696047">"Tangentbordsalternativ"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Rörelsekänslighet"</string> + <string name="btn_on" msgid="5962775761492765922">"På"</string> + <string name="btn_off" msgid="2029716012096104384">"Av"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Blanksteg"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Ta bort"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Funktionsändring"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Skift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Vänster"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Höger"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Anslut hörlurar om du vill höra lösenordet tecken för tecken."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Punkt."</string> +</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml new file mode 100644 index 0000000..7fb5a3f --- /dev/null +++ b/res/values-sw/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Kibodi ya <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Kibodi ya <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Nenda"</string> + <string name="label_next_key" msgid="8149787729891612242">"Inayofuata"</string> + <string name="label_send_key" msgid="1803138506603147503">"Tuma"</string> + <string name="label_search_key" msgid="8540828292920277213">"Tafuta"</string> + <string name="label_done_key" msgid="4570417022685876778">"Imekamilisha"</string> + <string name="settings_title" msgid="8361325634803696047">"Chaguo za Kibodi"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Kiwango cha hisi cha matembezi"</string> + <string name="btn_on" msgid="5962775761492765922">"Washwa"</string> + <string name="btn_off" msgid="2029716012096104384">"Zima"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Nafasi"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Futa"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Hali ya mabadiliko"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Kushoto"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Kulia"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Chomeka kifaa cha sauti ili kusikiliza herufi za nenosiri zikitamkwa."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Nukta."</string> +</resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000..b3de77e --- /dev/null +++ b/res/values-ta-rIN/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> விசைப்பலகை"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> விசைப்பலகை"</string> + <string name="label_go_key" msgid="7845894543312353655">"செல்"</string> + <string name="label_next_key" msgid="8149787729891612242">"அடுத்து"</string> + <string name="label_send_key" msgid="1803138506603147503">"அனுப்பு"</string> + <string name="label_search_key" msgid="8540828292920277213">"தேடு"</string> + <string name="label_done_key" msgid="4570417022685876778">"முடிந்தது"</string> + <string name="settings_title" msgid="8361325634803696047">"விசைப்பலகை விருப்பங்கள்"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"அசைவை உணரும் திறன்"</string> + <string name="btn_on" msgid="5962775761492765922">"இயக்கு"</string> + <string name="btn_off" msgid="2029716012096104384">"முடக்கு"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"இடைவெளி"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"நீக்கு"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"முறையை மாற்று"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"ஷிஃப்டு"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"கேப்ஸ் லாக்"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"இடது"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"வலது"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"கூறப்படும் கடவுச்சொல் விசைகளைக் கேட்பதற்கு ஹெட்செட்டைச் செருகவும்."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"புள்ளி."</string> +</resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml new file mode 100644 index 0000000..f8d3d45 --- /dev/null +++ b/res/values-te-rIN/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> కీబోర్డ్"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> కీబోర్డ్"</string> + <string name="label_go_key" msgid="7845894543312353655">"వెళ్లు"</string> + <string name="label_next_key" msgid="8149787729891612242">"తదుపరి"</string> + <string name="label_send_key" msgid="1803138506603147503">"పంపు"</string> + <string name="label_search_key" msgid="8540828292920277213">"శోధించు"</string> + <string name="label_done_key" msgid="4570417022685876778">"పూర్తయింది"</string> + <string name="settings_title" msgid="8361325634803696047">"కీబోర్డ్ ఎంపికలు"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"చలన సున్నితత్వం"</string> + <string name="btn_on" msgid="5962775761492765922">"ఆన్ చేయి"</string> + <string name="btn_off" msgid="2029716012096104384">"ఆఫ్ చేయి"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"తొలగించు"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"మోడ్ని మార్చు"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"ఎడమ"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"కుడి"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"చదివి వినిపించే పాస్వర్డ్ కీలను వినడానికి హెడ్సెట్ను ప్లగిన్ చేయండి."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"చుక్క."</string> +</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml new file mode 100644 index 0000000..a1f3d54 --- /dev/null +++ b/res/values-th/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"แป้นพิมพ์ <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"แป้นพิมพ์ <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"ไป"</string> + <string name="label_next_key" msgid="8149787729891612242">"ถัดไป"</string> + <string name="label_send_key" msgid="1803138506603147503">"ส่ง"</string> + <string name="label_search_key" msgid="8540828292920277213">"ค้นหา"</string> + <string name="label_done_key" msgid="4570417022685876778">"เสร็จสิ้น"</string> + <string name="settings_title" msgid="8361325634803696047">"ตัวเลือกแป้นพิมพ์"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"ความไวในการเคลื่อนที่"</string> + <string name="btn_on" msgid="5962775761492765922">"เปิด"</string> + <string name="btn_off" msgid="2029716012096104384">"ปิด"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"วรรค"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"ลบ"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"เปลี่ยนโหมด"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"ซ้าย"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"ขวา"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"เสียบชุดหูฟังเพื่อฟังเสียงรหัสผ่าน"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"เครื่องหมายจุด"</string> +</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml new file mode 100644 index 0000000..3629649 --- /dev/null +++ b/res/values-tl/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> Keyboard"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> Keyboard"</string> + <string name="label_go_key" msgid="7845894543312353655">"Magpatuloy"</string> + <string name="label_next_key" msgid="8149787729891612242">"Susunod"</string> + <string name="label_send_key" msgid="1803138506603147503">"Ipadala"</string> + <string name="label_search_key" msgid="8540828292920277213">"Maghanap"</string> + <string name="label_done_key" msgid="4570417022685876778">"Tapos na"</string> + <string name="settings_title" msgid="8361325634803696047">"Mga Opsyon ng Keyboard"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Pagkasensitibo sa galaw"</string> + <string name="btn_on" msgid="5962775761492765922">"I-on"</string> + <string name="btn_off" msgid="2029716012096104384">"I-off"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Space"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Tanggalin"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Pagbabago ng Mode"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Kaliwa"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Kanan"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Mag-plug in ng isang headset upang marinig ang mga binabanggit na password key."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dot."</string> +</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml new file mode 100644 index 0000000..aedb238 --- /dev/null +++ b/res/values-tr/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> Klavyesi"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> Klavyesi"</string> + <string name="label_go_key" msgid="7845894543312353655">"Git"</string> + <string name="label_next_key" msgid="8149787729891612242">"İleri"</string> + <string name="label_send_key" msgid="1803138506603147503">"Gönder"</string> + <string name="label_search_key" msgid="8540828292920277213">"Ara"</string> + <string name="label_done_key" msgid="4570417022685876778">"Bitti"</string> + <string name="settings_title" msgid="8361325634803696047">"Klavye Seçenekleri"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Hareket duyarlılığı"</string> + <string name="btn_on" msgid="5962775761492765922">"Aç"</string> + <string name="btn_off" msgid="2029716012096104384">"Kapat"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Boşluk"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Sil"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Mod değiştir"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"ÜstKrktr"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Sol"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Sağ"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Şifre tuşlarının sesli okunmasını dinlemek için mikrofonlu kulaklık takın."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Nokta."</string> +</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml new file mode 100644 index 0000000..4c7cbae --- /dev/null +++ b/res/values-uk/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Клавіатура додатка <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Клавіатура додатка <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Виконати"</string> + <string name="label_next_key" msgid="8149787729891612242">"Далі"</string> + <string name="label_send_key" msgid="1803138506603147503">"Надіслати"</string> + <string name="label_search_key" msgid="8540828292920277213">"Пошук"</string> + <string name="label_done_key" msgid="4570417022685876778">"Готово"</string> + <string name="settings_title" msgid="8361325634803696047">"Параметри клавіатури"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Чутливість руху"</string> + <string name="btn_on" msgid="5962775761492765922">"Увімкнути"</string> + <string name="btn_off" msgid="2029716012096104384">"Вимкнути"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Пробіл"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Видалити"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Зміна режиму"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Клавіша Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Ліворуч"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Праворуч"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Підключіть гарнітуру, щоб почути символи пароля."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Крапка."</string> +</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml new file mode 100644 index 0000000..f1ec9cb --- /dev/null +++ b/res/values-vi/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Bàn phím <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Bàn phím <xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Tìm"</string> + <string name="label_next_key" msgid="8149787729891612242">"Tiếp theo"</string> + <string name="label_send_key" msgid="1803138506603147503">"Gửi"</string> + <string name="label_search_key" msgid="8540828292920277213">"Tìm kiếm"</string> + <string name="label_done_key" msgid="4570417022685876778">"Xong"</string> + <string name="settings_title" msgid="8361325634803696047">"Tùy chọn bàn phím"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Độ nhạy của chuyển động"</string> + <string name="btn_on" msgid="5962775761492765922">"Bật"</string> + <string name="btn_off" msgid="2029716012096104384">"Tắt"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Dấu cách"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Xóa"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Thay đổi chế độ"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Bên trái"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Bên phải"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Cắm tai nghe để nghe các phím mật khẩu được đọc."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Dấu chấm."</string> +</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000..60acbd2 --- /dev/null +++ b/res/values-zh-rCN/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g>键盘"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g>键盘"</string> + <string name="label_go_key" msgid="7845894543312353655">"前往"</string> + <string name="label_next_key" msgid="8149787729891612242">"下个"</string> + <string name="label_send_key" msgid="1803138506603147503">"发送"</string> + <string name="label_search_key" msgid="8540828292920277213">"搜索"</string> + <string name="label_done_key" msgid="4570417022685876778">"完成"</string> + <string name="settings_title" msgid="8361325634803696047">"键盘选项"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"移动灵敏度"</string> + <string name="btn_on" msgid="5962775761492765922">"开启"</string> + <string name="btn_off" msgid="2029716012096104384">"关闭"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"空格键"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"删除"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"模式更改"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift 键"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"大写锁定"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"向左键"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"向右键"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"需要插入耳机才能听到密码的按键声。"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"点。"</string> +</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000..0082566 --- /dev/null +++ b/res/values-zh-rHK/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> 鍵盤"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> 鍵盤"</string> + <string name="label_go_key" msgid="7845894543312353655">"前往"</string> + <string name="label_next_key" msgid="8149787729891612242">"下一頁"</string> + <string name="label_send_key" msgid="1803138506603147503">"傳送"</string> + <string name="label_search_key" msgid="8540828292920277213">"搜尋"</string> + <string name="label_done_key" msgid="4570417022685876778">"完成"</string> + <string name="settings_title" msgid="8361325634803696047">"鍵盤選項"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"移動敏感度"</string> + <string name="btn_on" msgid="5962775761492765922">"開啟"</string> + <string name="btn_off" msgid="2029716012096104384">"關閉"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"空格鍵"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"刪除"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"模式變更"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift 鍵"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock 鍵"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"向左鍵"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"向右鍵"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"插上耳機即可聽到系統讀出密碼鍵。"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"點。"</string> +</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000..c29fe72 --- /dev/null +++ b/res/values-zh-rTW/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"<xliff:g id="APP_NAME">Leanback</xliff:g> 鍵盤"</string> + <string name="ime_service_name" msgid="3865311183421593944">"<xliff:g id="APP_NAME">Leanback</xliff:g> 鍵盤"</string> + <string name="label_go_key" msgid="7845894543312353655">"執行"</string> + <string name="label_next_key" msgid="8149787729891612242">"下一個"</string> + <string name="label_send_key" msgid="1803138506603147503">"傳送"</string> + <string name="label_search_key" msgid="8540828292920277213">"搜尋"</string> + <string name="label_done_key" msgid="4570417022685876778">"完成"</string> + <string name="settings_title" msgid="8361325634803696047">"鍵盤選項"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"移動敏感度"</string> + <string name="btn_on" msgid="5962775761492765922">"開啟"</string> + <string name="btn_off" msgid="2029716012096104384">"關閉"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"空格鍵"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"刪除"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"模式變更"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"Shift 鍵"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"Caps Lock 鍵"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"向左鍵"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"向右鍵"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"連接耳機方能聽到密碼按鍵語音。"</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"點。"</string> +</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml new file mode 100644 index 0000000..a678b71 --- /dev/null +++ b/res/values-zu/strings.xml
@@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="ime_name" msgid="5170587665791476108">"Ikhibhodi ye-<xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="ime_service_name" msgid="3865311183421593944">"Ikhibhodi ye-<xliff:g id="APP_NAME">Leanback</xliff:g>"</string> + <string name="label_go_key" msgid="7845894543312353655">"Hamba"</string> + <string name="label_next_key" msgid="8149787729891612242">"Okulandelayo"</string> + <string name="label_send_key" msgid="1803138506603147503">"Thumela"</string> + <string name="label_search_key" msgid="8540828292920277213">"Sesha"</string> + <string name="label_done_key" msgid="4570417022685876778">"Kwenziwe"</string> + <string name="settings_title" msgid="8361325634803696047">"Izinketho zekhibhodi"</string> + <string name="title_movement_sensitivity" msgid="4289584473719351587">"Ukuzwela kokuhamba"</string> + <string name="btn_on" msgid="5962775761492765922">"Vuliwe"</string> + <string name="btn_off" msgid="2029716012096104384">"Valiwe"</string> + <string name="keyboardview_keycode_space" msgid="5107808792477329036">"Isikhala"</string> + <string name="keyboardview_keycode_delete" msgid="8234736233323594641">"Susa"</string> + <string name="keyboardview_keycode_mode_change" msgid="1942413151586211565">"Ukushintsha kwemodi"</string> + <string name="keyboardview_keycode_shift" msgid="1088869515399768583">"U-Shift"</string> + <string name="keyboardview_keycode_caps" msgid="3870171746305993229">"U-Caps Lock"</string> + <string name="keyboardview_keycode_left" msgid="5982531325934405109">"Kwesobunxele"</string> + <string name="keyboardview_keycode_right" msgid="7152000779741202144">"Kwesokudla"</string> + <string name="keyboard_headset_required_to_hear_password" msgid="2529485509348781553">"Xhuma kokwasekhanda ukuze uzwe kukhulunywa okhiye bephasiwedi."</string> + <string name="keyboard_password_character_no_headset" msgid="7230328211341305612">"Icashazi."</string> +</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml new file mode 100644 index 0000000..0553689 --- /dev/null +++ b/res/values/attrs.xml
@@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2013, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + + <declare-styleable name="LeanbackKeyboardView"> + <attr name="rowCount" format="integer" /> + <attr name="columnCount" format="integer" /> + </declare-styleable> + + <!-- voice recognition indicator --> + <attr name="enabledBackgroundColor" format="color|reference" /> + <attr name="disabledBackgroundColor" format="color|reference" /> + <attr name="primaryLevels" format="reference" /> + <attr name="trailLevels" format="reference" /> + <attr name="minLevelRadius" format="dimension|reference" /> + <attr name="levelsCenterX" format="dimension|reference" /> + <attr name="levelsCenterY" format="dimension|reference" /> + <attr name="headerAlpha" format="dimension" /> + <attr name="soundTrailLevel" format="reference" /> + <attr name="soundPrimaryLevel" format="reference" /> + + <declare-styleable name="BitmapSoundLevelView"> + <attr name="enabledBackgroundColor" /> + <attr name="disabledBackgroundColor" /> + <attr name="primaryLevels" /> + <attr name="trailLevels" /> + <attr name="minLevelRadius" /> + <attr name="levelsCenterX" /> + <attr name="levelsCenterY" /> + </declare-styleable> + +</resources> \ No newline at end of file
diff --git a/res/values/bools.xml b/res/values/bools.xml new file mode 100644 index 0000000..a882710 --- /dev/null +++ b/res/values/bools.xml
@@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2013, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <!-- Whether this input method should be used as the default for a locale. Override it + for supported languages. --> + <bool name="im_is_default">true</bool> +</resources>
diff --git a/res/values/color.xml b/res/values/color.xml new file mode 100644 index 0000000..836bc5d --- /dev/null +++ b/res/values/color.xml
@@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources> + + <!-- voice recognition indicator --> + <color name="search_mic_levels_guideline">#FFCCCCCC</color> + <color name="search_mic_background">#FFFFFFFF</color> + + <color name="keyboard_background">#FF384248</color> + <color name="key_text_default">#FFEEEEEE</color> + <color name="ime_selector_focus_color">#66EEEEEE</color> + <color name="ime_selector_color">#26EEEEEE</color> + + <color name="candidate_background">#FF263238</color> + <color name="candidate_font_color">#FF30C6B4</color> + + <color name="enter_key_font_color">#FF30C6B4</color> +</resources> \ No newline at end of file
diff --git a/res/values/config.xml b/res/values/config.xml new file mode 100644 index 0000000..991f086 --- /dev/null +++ b/res/values/config.xml
@@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources> + <!-- scale of clicked selector --> + <item name="clicked_scale" type="fraction">88%</item> + <!-- amount to overestimate selector scaling by --> + <item name="focused_scale" type="fraction">120%</item> + <!-- alpha value for active keyboards and dictation/voice mode --> + <item name="alpha_in" type="fraction">100%</item> + <!-- alpha value for inactive keyboards and dictation/voice mode --> + <item name="alpha_out" type="fraction">0%</item> +</resources> \ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml new file mode 100644 index 0000000..a3f393b --- /dev/null +++ b/res/values/dimens.xml
@@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources> + + <!-- height of keyboard keys --> + <dimen name="key_height">28dp</dimen> + <!-- width of keyboard keys --> + <dimen name="key_width">28dp</dimen> + <!-- width of space key (7x regular key + 6*horz_margin) --> + <dimen name="space_key_width">268dp</dimen> + <!-- horizontal gap of the keyboard --> + <dimen name="keyboard_horizontal_gap">12dp</dimen> + <!-- vertical gap of the keyboard --> + <dimen name="keyboard_vertical_gap">8dp</dimen> + <!-- size of the recognizer view --> + <dimen name="recognizer_size">96dp</dimen> + <!-- size of key selector --> + <dimen name="selector_size">24dp</dimen> + <!-- top gap when the suggestion is enabled --> + <dimen name="keyboard_top_spacing">6dp</dimen> + <!-- gap below keyboard --> + <dimen name="keyboard_bottom_spacing">28dp</dimen> + <!-- action button size --> + <dimen name="action_button_size">64dp</dimen> + + <dimen name="enter_key_height">32dp</dimen> + <dimen name="enter_key_font_size">18sp</dimen> + <dimen name="enter_key_padding_horizontal">16dp</dimen> + <dimen name="mode_change_key_font_size">7sp</dimen> + <!-- candidate layout --> + <dimen name="candidate_font_size">18sp</dimen> + <dimen name="candidate_padding_horizontal">16dp</dimen> + <dimen name="candidate_margin_horizontal">4dp</dimen> + <dimen name="candidate_height">28dp</dimen> + <dimen name="candidate_scroll_view_horz_spacing">56dip</dimen> + + <!-- keyboard key font size --> + <dimen name="key_font_size">18sp</dimen> + <!-- font size of mode changing function keys --> + <dimen name="function_key_mode_change_font_size">16sp</dimen> + <!-- min movement distance to change cursor size --> + <dimen name="resize_move_distance">12dp</dimen> + +</resources> \ No newline at end of file
diff --git a/res/values/integers.xml b/res/values/integers.xml new file mode 100644 index 0000000..5c2dc15 --- /dev/null +++ b/res/values/integers.xml
@@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources> + <!-- duration of animation for a key click --> + <integer name="clicked_anim_duration">100</integer> + <!-- delay before reversing clicked key animation --> + <integer name="unfocused_anim_delay">30</integer> + <!-- duration of dication/voice ui coming up and going away --> + <integer name="voice_anim_duration">300</integer> + <!-- alpha value for inactive keys when mini kb is up --> + <integer name="inactive_mini_kb_alpha">40</integer> +</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100644 index 0000000..b69cf4a --- /dev/null +++ b/res/values/strings.xml
@@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Name of this ime [CHAR LIMIT=20] --> + <string name="ime_name"><xliff:g id="app_name">Leanback</xliff:g> Keyboard</string> + <!-- Name of this ime's input service [CHAR LIMIT=20] --> + <string name="ime_service_name"><xliff:g id="app_name">Leanback</xliff:g> Keyboard</string> + + <!-- Symbols that are commonly considered word separators in this language [DO NOT TRANSLATE] --> + <string name="word_separators">\u0020.,;:!?\n()[]*&@{}/<>_+=|"</string> + + <!-- Labels for the action key in different mode--> + <!-- Label go for IME action key [CHAR LIMIT=20] --> + <string name="label_go_key">Go</string> + <!-- Label next for IME action key [CHAR LIMIT=20] --> + <string name="label_next_key">Next</string> + <!-- Label send for IME action key [CHAR LIMIT=20] --> + <string name="label_send_key">Send</string> + <!-- Label search for IME action key [CHAR LIMIT=20] --> + <string name="label_search_key">Search</string> + <!-- Label done for IME action key [CHAR LIMIT=20] --> + <string name="label_done_key">Done</string> + + <!-- DO NOT TRANSLATE autocomplete email address of commong domains --> + <string-array name="common_domains" translatable="false"> + <item>"@gmail.com"</item> + <item>"@yahoo.com"</item> + <item>"@hotmail.com"</item> + </string-array> + + <!-- Label for LeanbackIme Settings [CHAR LIMIT=50] --> + <string name="settings_title">Keyboard Options</string> + <!-- Name of a setting that controls LeanbackIme's movement sensitivity [CHAR LIMIT=50] --> + <string name="title_movement_sensitivity">Movement sensitivity</string> + <!-- Values for movement sensitivity settings [DO NOT TRANSLATE] --> + <string-array name="movement_sensitivity_values" translatable="false" > + <item>0.6</item> + <item>0.8</item> + <item>1.0</item> + <item>1.2</item> + <item>1.4</item> + </string-array> + <!-- Description / label for a button that turns a setting on [CHAR LIMIT=50]--> + <string name="btn_on">On</string> + <!-- Description / label for a button that turns a setting off [CHAR LIMIT=50]--> + <string name="btn_off">Off</string> + <!-- Description for English (United States) keyboard subtype [DO NOT TRANSLATE] --> + <string name="subtype_generic" translatable="false">%s</string> + + <!-- KeyboardView - accessibility support --> + <!-- Description of the Space button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_space">Space</string> + <!-- Description of the Delete button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_delete">Delete</string> + <!-- Description of the Mode change button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_mode_change">Mode change</string> + <!-- Description of the Shift button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_shift">Shift</string> + <!-- Description of the Caps lock in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_caps">Caps Lock</string> + <!-- Description of the left cursor button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_left">Left</string> + <!-- Description of the right cursor button in a KeyboardView. [CHAR LIMIT=NONE] --> + <string name="keyboardview_keycode_right">Right</string> + + <!-- Announce that a headset is required to hear keyboard keys while typing a password. [CHAR LIMIT=NONE] --> + <string name="keyboard_headset_required_to_hear_password">Plug in a headset to hear password keys spoken.</string> + <!-- The value of a keyboard key announced when accessibility is enabled and no headsed is used. [CHAR LIMIT=NONE] --> + <string name="keyboard_password_character_no_headset">Dot.</string> +</resources>
diff --git a/res/xml/accent_a.xml b/res/xml/accent_a.xml new file mode 100644 index 0000000..90534e1 --- /dev/null +++ b/res/xml/accent_a.xml
@@ -0,0 +1,58 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="97" + android:keyLabel="a" /> + <Key + android:codes="224" + android:keyLabel="à" /> + <Key + android:codes="225" + android:keyLabel="á" /> + <Key + android:codes="226" + android:keyLabel="â" /> + <Key + android:codes="227" + android:keyLabel="ã" /> + <Key + android:codes="228" + android:keyLabel="ä" /> + <Key + android:codes="229" + android:keyLabel="å" /> + <Key + android:codes="230" + android:keyLabel="æ" /> + <Key + android:codes="257" + android:keyLabel="ā" /> + <Key + android:codes="259" + android:keyLabel="ă" /> + <Key + android:codes="261" + android:keyLabel="ą" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_c.xml b/res/xml/accent_c.xml new file mode 100644 index 0000000..34309be --- /dev/null +++ b/res/xml/accent_c.xml
@@ -0,0 +1,37 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="99" + android:keyLabel="c" /> + <Key + android:codes="231" + android:keyLabel="Ç" /> + <Key + android:codes="263" + android:keyLabel="ć" /> + <Key + android:codes="269" + android:keyLabel="č" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_d.xml b/res/xml/accent_d.xml new file mode 100644 index 0000000..7835c10 --- /dev/null +++ b/res/xml/accent_d.xml
@@ -0,0 +1,31 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="100" + android:keyLabel="d" /> + <Key + android:codes="273" + android:keyLabel="đ" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_e.xml b/res/xml/accent_e.xml new file mode 100644 index 0000000..5aa6549 --- /dev/null +++ b/res/xml/accent_e.xml
@@ -0,0 +1,49 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="101" + android:keyLabel="e" /> + <Key + android:codes="232" + android:keyLabel="è" /> + <Key + android:codes="233" + android:keyLabel="é" /> + <Key + android:codes="234" + android:keyLabel="ê" /> + <Key + android:codes="235" + android:keyLabel="ë" /> + <Key + android:codes="275" + android:keyLabel="ē" /> + <Key + android:codes="279" + android:keyLabel="ė" /> + <Key + android:codes="281" + android:keyLabel="ę" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_g.xml b/res/xml/accent_g.xml new file mode 100644 index 0000000..db7535d --- /dev/null +++ b/res/xml/accent_g.xml
@@ -0,0 +1,34 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="103" + android:keyLabel="g" /> + <Key + android:codes="287" + android:keyLabel="ğ" /> + <Key + android:codes="291" + android:keyLabel="ģ" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_i.xml b/res/xml/accent_i.xml new file mode 100644 index 0000000..a164b52 --- /dev/null +++ b/res/xml/accent_i.xml
@@ -0,0 +1,46 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="105" + android:keyLabel="i" /> + <Key + android:codes="236" + android:keyLabel="ì" /> + <Key + android:codes="237" + android:keyLabel="í" /> + <Key + android:codes="238" + android:keyLabel="î" /> + <Key + android:codes="239" + android:keyLabel="ï" /> + <Key + android:codes="299" + android:keyLabel="ī" /> + <Key + android:codes="303" + android:keyLabel="į" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_k.xml b/res/xml/accent_k.xml new file mode 100644 index 0000000..72c1151 --- /dev/null +++ b/res/xml/accent_k.xml
@@ -0,0 +1,31 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="107" + android:keyLabel="k" /> + <Key + android:codes="311" + android:keyLabel="ķ" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_l.xml b/res/xml/accent_l.xml new file mode 100644 index 0000000..5386f5f --- /dev/null +++ b/res/xml/accent_l.xml
@@ -0,0 +1,34 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="108" + android:keyLabel="l" /> + <Key + android:codes="316" + android:keyLabel="ļ" /> + <Key + android:codes="322" + android:keyLabel="ł" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_n.xml b/res/xml/accent_n.xml new file mode 100644 index 0000000..b09d6ef --- /dev/null +++ b/res/xml/accent_n.xml
@@ -0,0 +1,37 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="110" + android:keyLabel="n" /> + <Key + android:codes="241" + android:keyLabel="ñ" /> + <Key + android:codes="324" + android:keyLabel="ń" /> + <Key + android:codes="326" + android:keyLabel="ņ" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_o.xml b/res/xml/accent_o.xml new file mode 100644 index 0000000..5f84f54 --- /dev/null +++ b/res/xml/accent_o.xml
@@ -0,0 +1,55 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="111" + android:keyLabel="o" /> + <Key + android:codes="242" + android:keyLabel="ò" /> + <Key + android:codes="243" + android:keyLabel="ó" /> + <Key + android:codes="244" + android:keyLabel="ô" /> + <Key + android:codes="245" + android:keyLabel="õ" /> + <Key + android:codes="246" + android:keyLabel="ö" /> + <Key + android:codes="248" + android:keyLabel="ø" /> + <Key + android:codes="333" + android:keyLabel="ō" /> + <Key + android:codes="339" + android:keyLabel="œ" /> + <Key + android:codes="417" + android:keyLabel="ơ" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_s.xml b/res/xml/accent_s.xml new file mode 100644 index 0000000..3518afe --- /dev/null +++ b/res/xml/accent_s.xml
@@ -0,0 +1,40 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="115" + android:keyLabel="s" /> + <Key + android:codes="223" + android:keyLabel="ß" /> + <Key + android:codes="347" + android:keyLabel="ś" /> + <Key + android:codes="351" + android:keyLabel="ş" /> + <Key + android:codes="353" + android:keyLabel="š" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_t.xml b/res/xml/accent_t.xml new file mode 100644 index 0000000..bba1898 --- /dev/null +++ b/res/xml/accent_t.xml
@@ -0,0 +1,31 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="116" + android:keyLabel="t" /> + <Key + android:codes="355" + android:keyLabel="ț" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_u.xml b/res/xml/accent_u.xml new file mode 100644 index 0000000..93a50d7 --- /dev/null +++ b/res/xml/accent_u.xml
@@ -0,0 +1,49 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="117" + android:keyLabel="u" /> + <Key + android:codes="249" + android:keyLabel="ù" /> + <Key + android:codes="250" + android:keyLabel="ú" /> + <Key + android:codes="251" + android:keyLabel="û" /> + <Key + android:codes="252" + android:keyLabel="ü" /> + <Key + android:codes="363" + android:keyLabel="ū" /> + <Key + android:codes="371" + android:keyLabel="ų" /> + <Key + android:codes="432" + android:keyLabel="ư" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_y.xml b/res/xml/accent_y.xml new file mode 100644 index 0000000..ce9dc3f --- /dev/null +++ b/res/xml/accent_y.xml
@@ -0,0 +1,31 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="121" + android:keyLabel="y" /> + <Key + android:codes="255" + android:keyLabel="ÿ" /> + </Row> +</Keyboard>
diff --git a/res/xml/accent_z.xml b/res/xml/accent_z.xml new file mode 100644 index 0000000..6c43d21 --- /dev/null +++ b/res/xml/accent_z.xml
@@ -0,0 +1,37 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="122" + android:keyLabel="z" /> + <Key + android:codes="378" + android:keyLabel="ź" /> + <Key + android:codes="380" + android:keyLabel="ż" /> + <Key + android:codes="382" + android:keyLabel="ž" /> + </Row> +</Keyboard>
diff --git a/res/xml/azerty.xml b/res/xml/azerty.xml new file mode 100644 index 0000000..2bad112 --- /dev/null +++ b/res/xml/azerty.xml
@@ -0,0 +1,233 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="122" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="119" + android:keyEdgeFlags="left" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="39" + android:keyLabel="\'" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/method.xml b/res/xml/method.xml new file mode 100644 index 0000000..0c41826 --- /dev/null +++ b/res/xml/method.xml
@@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 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. +--> + +<!-- The attributes in this XML file provide configuration information --> +<!-- for the Search Manager. --> + +<input-method xmlns:android="http://schemas.android.com/apk/res/android" + android:isDefault="@bool/im_is_default"> + <subtype android:label="@string/subtype_generic" + android:imeSubtypeLocale="en_US" + android:imeSubtypeMode="keyboard" + /> +</input-method>
diff --git a/res/xml/number.xml b/res/xml/number.xml new file mode 100644 index 0000000..83defd7 --- /dev/null +++ b/res/xml/number.xml
@@ -0,0 +1,89 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" /> + <Key + android:codes="50" + android:keyLabel="2" /> + <Key + android:codes="51" + android:keyLabel="3" /> + <Key + android:codes="95" + android:keyEdgeFlags="right" + android:keyLabel="_" /> + </Row> + <Row> + <Key + android:codes="52" + android:keyEdgeFlags="left" + android:keyLabel="4" /> + <Key + android:codes="53" + android:keyLabel="5" /> + <Key + android:codes="54" + android:keyLabel="6" /> + <Key + android:codes="46" + android:keyEdgeFlags="right" + android:keyLabel="." /> + </Row> + <Row> + <Key + android:codes="55" + android:keyEdgeFlags="left" + android:keyLabel="7" /> + <Key + android:codes="56" + android:keyLabel="8" /> + <Key + android:codes="57" + android:keyLabel="9" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="42" + android:keyEdgeFlags="left" + android:keyLabel="*" /> + <Key + android:codes="48" + android:keyLabel="0" /> + <Key + android:codes="35" + android:keyLabel="\#" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + +</Keyboard>
diff --git a/res/xml/qwerty_az.xml b/res/xml/qwerty_az.xml new file mode 100644 index 0000000..9f5af14 --- /dev/null +++ b/res/xml/qwerty_az.xml
@@ -0,0 +1,233 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_ca.xml b/res/xml/qwerty_ca.xml new file mode 100644 index 0000000..a177af6 --- /dev/null +++ b/res/xml/qwerty_ca.xml
@@ -0,0 +1,234 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="231" + android:keyLabel="ç" + android:popupKeyboard="@xml/shift_cc" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_da.xml b/res/xml/qwerty_da.xml new file mode 100644 index 0000000..9e793ac --- /dev/null +++ b/res/xml/qwerty_da.xml
@@ -0,0 +1,236 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="229" + android:keyEdgeFlags="right" + android:keyLabel="å" + android:popupKeyboard="@xml/shift_ao" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="230" + android:keyLabel="æ" + android:popupKeyboard="@xml/shift_ae" /> + <Key + android:codes="248" + android:keyEdgeFlags="right" + android:keyLabel="ø" + android:popupKeyboard="@xml/shift_ox" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_en_gb.xml b/res/xml/qwerty_en_gb.xml new file mode 100644 index 0000000..deac584 --- /dev/null +++ b/res/xml/qwerty_en_gb.xml
@@ -0,0 +1,233 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_en_gb" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_en_in.xml b/res/xml/qwerty_en_in.xml new file mode 100644 index 0000000..f6ecf9f --- /dev/null +++ b/res/xml/qwerty_en_in.xml
@@ -0,0 +1,233 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_en_in" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_es_eu.xml b/res/xml/qwerty_es_eu.xml new file mode 100644 index 0000000..60551b0 --- /dev/null +++ b/res/xml/qwerty_es_eu.xml
@@ -0,0 +1,234 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="241" + android:keyLabel="ñ" + android:popupKeyboard="@xml/shift_nn_es" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/shift_n_es" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_es_us.xml b/res/xml/qwerty_es_us.xml new file mode 100644 index 0000000..8749292 --- /dev/null +++ b/res/xml/qwerty_es_us.xml
@@ -0,0 +1,234 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="241" + android:keyLabel="ñ" + android:popupKeyboard="@xml/shift_nn_es" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/shift_n_es" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_et.xml b/res/xml/qwerty_et.xml new file mode 100644 index 0000000..d26c191 --- /dev/null +++ b/res/xml/qwerty_et.xml
@@ -0,0 +1,236 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="252" + android:keyEdgeFlags="right" + android:keyLabel="ü" + android:popupKeyboard="@xml/shift_uu" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="246" + android:keyLabel="ö" + android:popupKeyboard="@xml/shift_oo" /> + <Key + android:codes="228" + android:keyEdgeFlags="right" + android:keyLabel="ä" + android:popupKeyboard="@xml/shift_aa" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_eu.xml b/res/xml/qwerty_eu.xml new file mode 100644 index 0000000..9f5af14 --- /dev/null +++ b/res/xml/qwerty_eu.xml
@@ -0,0 +1,233 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_fi.xml b/res/xml/qwerty_fi.xml new file mode 100644 index 0000000..b2f29de --- /dev/null +++ b/res/xml/qwerty_fi.xml
@@ -0,0 +1,236 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="229" + android:keyEdgeFlags="right" + android:keyLabel="å" + android:popupKeyboard="@xml/shift_ao" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="246" + android:keyLabel="ö" + android:popupKeyboard="@xml/shift_oo" /> + <Key + android:codes="228" + android:keyEdgeFlags="right" + android:keyLabel="ä" + android:popupKeyboard="@xml/shift_aa" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_nb.xml b/res/xml/qwerty_nb.xml new file mode 100644 index 0000000..1a67732 --- /dev/null +++ b/res/xml/qwerty_nb.xml
@@ -0,0 +1,236 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="229" + android:keyEdgeFlags="right" + android:keyLabel="å" + android:popupKeyboard="@xml/shift_ao" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="248" + android:keyLabel="ø" + android:popupKeyboard="@xml/shift_ox" /> + <Key + android:codes="230" + android:keyEdgeFlags="right" + android:keyLabel="æ" + android:popupKeyboard="@xml/shift_ae" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_sv.xml b/res/xml/qwerty_sv.xml new file mode 100644 index 0000000..b2f29de --- /dev/null +++ b/res/xml/qwerty_sv.xml
@@ -0,0 +1,236 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="229" + android:keyEdgeFlags="right" + android:keyLabel="å" + android:popupKeyboard="@xml/shift_ao" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="246" + android:keyLabel="ö" + android:popupKeyboard="@xml/shift_oo" /> + <Key + android:codes="228" + android:keyEdgeFlags="right" + android:keyLabel="ä" + android:popupKeyboard="@xml/shift_aa" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwerty_us.xml b/res/xml/qwerty_us.xml new file mode 100644 index 0000000..c51dfdb --- /dev/null +++ b/res/xml/qwerty_us.xml
@@ -0,0 +1,233 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="121" + android:keyLabel="y" + android:popupKeyboard="@xml/accent_y" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="122" + android:keyEdgeFlags="left" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwertz.xml b/res/xml/qwertz.xml new file mode 100644 index 0000000..b5e5e55 --- /dev/null +++ b/res/xml/qwertz.xml
@@ -0,0 +1,233 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="122" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="64" + android:keyEdgeFlags="right" + android:keyLabel="\@" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row> + <Key + android:codes="121" + android:keyEdgeFlags="left" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/qwertz_ch.xml b/res/xml/qwertz_ch.xml new file mode 100644 index 0000000..759fc5d --- /dev/null +++ b/res/xml/qwertz_ch.xml
@@ -0,0 +1,236 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row android:rowEdgeFlags="top"> + <Key + android:codes="49" + android:keyEdgeFlags="left" + android:keyLabel="1" + android:popupKeyboard="@xml/shift_1" /> + <Key + android:codes="50" + android:keyLabel="2" + android:popupKeyboard="@xml/shift_2" /> + <Key + android:codes="51" + android:keyLabel="3" + android:popupKeyboard="@xml/shift_3" /> + <Key + android:codes="52" + android:keyLabel="4" + android:popupKeyboard="@xml/shift_4_eu" /> + <Key + android:codes="53" + android:keyLabel="5" + android:popupKeyboard="@xml/shift_5" /> + <Key + android:codes="54" + android:keyLabel="6" + android:popupKeyboard="@xml/shift_6" /> + <Key + android:codes="55" + android:keyLabel="7" + android:popupKeyboard="@xml/shift_7" /> + <Key + android:codes="56" + android:keyLabel="8" + android:popupKeyboard="@xml/shift_8" /> + <Key + android:codes="57" + android:keyLabel="9" + android:popupKeyboard="@xml/shift_9" /> + <Key + android:codes="48" + android:keyLabel="0" + android:popupKeyboard="@xml/shift_0" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="113" + android:keyEdgeFlags="left" + android:keyLabel="q" + android:popupKeyboard="@xml/shift_q" /> + <Key + android:codes="119" + android:keyLabel="w" + android:popupKeyboard="@xml/shift_w" /> + <Key + android:codes="101" + android:keyLabel="e" + android:popupKeyboard="@xml/accent_e" /> + <Key + android:codes="114" + android:keyLabel="r" + android:popupKeyboard="@xml/shift_r" /> + <Key + android:codes="116" + android:keyLabel="t" + android:popupKeyboard="@xml/accent_t" /> + <Key + android:codes="122" + android:keyLabel="z" + android:popupKeyboard="@xml/accent_z" /> + <Key + android:codes="117" + android:keyLabel="u" + android:popupKeyboard="@xml/accent_u" /> + <Key + android:codes="105" + android:keyLabel="i" + android:popupKeyboard="@xml/accent_i" /> + <Key + android:codes="111" + android:keyLabel="o" + android:popupKeyboard="@xml/accent_o" /> + <Key + android:codes="112" + android:keyLabel="p" + android:popupKeyboard="@xml/shift_p" /> + <Key + android:codes="252" + android:keyEdgeFlags="right" + android:keyLabel="ü" + android:popupKeyboard="@xml/shift_uu" /> + </Row> + <Row> + <Key + android:codes="97" + android:keyEdgeFlags="left" + android:keyLabel="a" + android:popupKeyboard="@xml/accent_a" /> + <Key + android:codes="115" + android:keyLabel="s" + android:popupKeyboard="@xml/accent_s" /> + <Key + android:codes="100" + android:keyLabel="d" + android:popupKeyboard="@xml/accent_d" /> + <Key + android:codes="102" + android:keyLabel="f" + android:popupKeyboard="@xml/shift_f" /> + <Key + android:codes="103" + android:keyLabel="g" + android:popupKeyboard="@xml/accent_g" /> + <Key + android:codes="104" + android:keyLabel="h" + android:popupKeyboard="@xml/shift_h" /> + <Key + android:codes="106" + android:keyLabel="j" + android:popupKeyboard="@xml/shift_j" /> + <Key + android:codes="107" + android:keyLabel="k" + android:popupKeyboard="@xml/accent_k" /> + <Key + android:codes="108" + android:keyLabel="l" + android:popupKeyboard="@xml/accent_l" /> + <Key + android:codes="246" + android:keyLabel="ö" + android:popupKeyboard="@xml/shift_oo" /> + <Key + android:codes="228" + android:keyEdgeFlags="right" + android:keyLabel="ä" + android:popupKeyboard="@xml/shift_aa" /> + </Row> + <Row> + <Key + android:codes="121" + android:keyEdgeFlags="left" + android:keyLabel="y" + android:popupKeyboard="@xml/shift_y" /> + <Key + android:codes="120" + android:keyLabel="x" + android:popupKeyboard="@xml/shift_x" /> + <Key + android:codes="99" + android:keyLabel="c" + android:popupKeyboard="@xml/accent_c" /> + <Key + android:codes="118" + android:keyLabel="v" + android:popupKeyboard="@xml/shift_v" /> + <Key + android:codes="98" + android:keyLabel="b" + android:popupKeyboard="@xml/shift_b" /> + <Key + android:codes="110" + android:keyLabel="n" + android:popupKeyboard="@xml/accent_n" /> + <Key + android:codes="109" + android:keyLabel="m" + android:popupKeyboard="@xml/shift_m" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_symbols" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_0.xml b/res/xml/shift_0.xml new file mode 100644 index 0000000..bcff0eb --- /dev/null +++ b/res/xml/shift_0.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="41" + android:keyLabel=")" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_1.xml b/res/xml/shift_1.xml new file mode 100644 index 0000000..f324a40 --- /dev/null +++ b/res/xml/shift_1.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="33" + android:keyLabel="!" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_2.xml b/res/xml/shift_2.xml new file mode 100644 index 0000000..ed5e19e --- /dev/null +++ b/res/xml/shift_2.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="64" + android:keyLabel="\@" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_3.xml b/res/xml/shift_3.xml new file mode 100644 index 0000000..ebc8a0e --- /dev/null +++ b/res/xml/shift_3.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="35" + android:keyLabel="\#" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_4.xml b/res/xml/shift_4.xml new file mode 100644 index 0000000..90c0ddb --- /dev/null +++ b/res/xml/shift_4.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="36" + android:keyLabel="$" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_4_en_gb.xml b/res/xml/shift_4_en_gb.xml new file mode 100644 index 0000000..f7803cc --- /dev/null +++ b/res/xml/shift_4_en_gb.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="163" + android:keyLabel="£" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_4_en_in.xml b/res/xml/shift_4_en_in.xml new file mode 100644 index 0000000..ff6476b --- /dev/null +++ b/res/xml/shift_4_en_in.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="8377" + android:keyLabel="₹" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_4_eu.xml b/res/xml/shift_4_eu.xml new file mode 100644 index 0000000..719eb7a --- /dev/null +++ b/res/xml/shift_4_eu.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="8364" + android:keyLabel="€" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_5.xml b/res/xml/shift_5.xml new file mode 100644 index 0000000..40ea608 --- /dev/null +++ b/res/xml/shift_5.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="37" + android:keyLabel="%" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_6.xml b/res/xml/shift_6.xml new file mode 100644 index 0000000..2532351 --- /dev/null +++ b/res/xml/shift_6.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="94" + android:keyLabel="^" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_7.xml b/res/xml/shift_7.xml new file mode 100644 index 0000000..0995c31 --- /dev/null +++ b/res/xml/shift_7.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="38" + android:keyLabel="&" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_8.xml b/res/xml/shift_8.xml new file mode 100644 index 0000000..f4e7e19 --- /dev/null +++ b/res/xml/shift_8.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="42" + android:keyLabel="*" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_9.xml b/res/xml/shift_9.xml new file mode 100644 index 0000000..b22951b --- /dev/null +++ b/res/xml/shift_9.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="40" + android:keyLabel="(" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_aa.xml b/res/xml/shift_aa.xml new file mode 100644 index 0000000..e0d6d0e --- /dev/null +++ b/res/xml/shift_aa.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="228" + android:keyLabel="ä" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_ae.xml b/res/xml/shift_ae.xml new file mode 100644 index 0000000..01d8fbb --- /dev/null +++ b/res/xml/shift_ae.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="230" + android:keyLabel="æ" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_ao.xml b/res/xml/shift_ao.xml new file mode 100644 index 0000000..064dbe0 --- /dev/null +++ b/res/xml/shift_ao.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="229" + android:keyLabel="å" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_b.xml b/res/xml/shift_b.xml new file mode 100644 index 0000000..d371206 --- /dev/null +++ b/res/xml/shift_b.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="98" + android:keyLabel="b" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_cc.xml b/res/xml/shift_cc.xml new file mode 100644 index 0000000..0e3929f --- /dev/null +++ b/res/xml/shift_cc.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="231" + android:keyLabel="ç" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_f.xml b/res/xml/shift_f.xml new file mode 100644 index 0000000..1cdb194 --- /dev/null +++ b/res/xml/shift_f.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="102" + android:keyLabel="f" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_h.xml b/res/xml/shift_h.xml new file mode 100644 index 0000000..bce3549 --- /dev/null +++ b/res/xml/shift_h.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="104" + android:keyLabel="h" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_j.xml b/res/xml/shift_j.xml new file mode 100644 index 0000000..d84444d --- /dev/null +++ b/res/xml/shift_j.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="106" + android:keyLabel="j" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_m.xml b/res/xml/shift_m.xml new file mode 100644 index 0000000..e89d95f --- /dev/null +++ b/res/xml/shift_m.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="109" + android:keyLabel="m" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_n_es.xml b/res/xml/shift_n_es.xml new file mode 100644 index 0000000..379c2a5 --- /dev/null +++ b/res/xml/shift_n_es.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="110" + android:keyLabel="n" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_nn_es.xml b/res/xml/shift_nn_es.xml new file mode 100644 index 0000000..39e5c84 --- /dev/null +++ b/res/xml/shift_nn_es.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="241" + android:keyLabel="ñ" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_oo.xml b/res/xml/shift_oo.xml new file mode 100644 index 0000000..afe30b2 --- /dev/null +++ b/res/xml/shift_oo.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="246" + android:keyLabel="ö" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_ox.xml b/res/xml/shift_ox.xml new file mode 100644 index 0000000..4c22c78 --- /dev/null +++ b/res/xml/shift_ox.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="248" + android:keyLabel="ø" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_p.xml b/res/xml/shift_p.xml new file mode 100644 index 0000000..e4ebcbc --- /dev/null +++ b/res/xml/shift_p.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="112" + android:keyLabel="p" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_q.xml b/res/xml/shift_q.xml new file mode 100644 index 0000000..b3282f5 --- /dev/null +++ b/res/xml/shift_q.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="113" + android:keyLabel="q" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_r.xml b/res/xml/shift_r.xml new file mode 100644 index 0000000..906e1bb --- /dev/null +++ b/res/xml/shift_r.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="114" + android:keyLabel="r" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_uu.xml b/res/xml/shift_uu.xml new file mode 100644 index 0000000..bb56653 --- /dev/null +++ b/res/xml/shift_uu.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="252" + android:keyLabel="ü" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_v.xml b/res/xml/shift_v.xml new file mode 100644 index 0000000..4ce770a --- /dev/null +++ b/res/xml/shift_v.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="118" + android:keyLabel="v" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_w.xml b/res/xml/shift_w.xml new file mode 100644 index 0000000..d8ab4f9 --- /dev/null +++ b/res/xml/shift_w.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="119" + android:keyLabel="w" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_x.xml b/res/xml/shift_x.xml new file mode 100644 index 0000000..743e91b --- /dev/null +++ b/res/xml/shift_x.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="120" + android:keyLabel="x" /> + </Row> +</Keyboard>
diff --git a/res/xml/shift_y.xml b/res/xml/shift_y.xml new file mode 100644 index 0000000..63bbcc2 --- /dev/null +++ b/res/xml/shift_y.xml
@@ -0,0 +1,28 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="121" + android:keyLabel="y" /> + </Row> +</Keyboard>
diff --git a/res/xml/sym_azerty.xml b/res/xml/sym_azerty.xml new file mode 100644 index 0000000..b175ddb --- /dev/null +++ b/res/xml/sym_azerty.xml
@@ -0,0 +1,197 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="33" + android:keyEdgeFlags="left" + android:keyLabel="!" /> + <Key + android:codes="64" + android:keyLabel="\@" /> + <Key + android:codes="35" + android:keyLabel="\#" /> + <Key + android:codes="8364" + android:keyLabel="€" /> + <Key + android:codes="37" + android:keyLabel="%" /> + <Key + android:codes="94" + android:keyLabel="^" /> + <Key + android:codes="38" + android:keyLabel="&" /> + <Key + android:codes="42" + android:keyLabel="*" /> + <Key + android:codes="40" + android:keyLabel="(" /> + <Key + android:codes="41" + android:keyLabel=")" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="126" + android:keyEdgeFlags="left" + android:keyLabel="~" /> + <Key + android:codes="96" + android:keyLabel="`" /> + <Key + android:codes="91" + android:keyLabel="[" /> + <Key + android:codes="93" + android:keyLabel="]" /> + <Key + android:codes="123" + android:keyLabel="{" /> + <Key + android:codes="125" + android:keyLabel="}" /> + <Key + android:codes="124" + android:keyLabel="|" /> + <Key + android:codes="43" + android:keyLabel="+" /> + <Key + android:codes="61" + android:keyLabel="=" /> + <Key + android:codes="47" + android:keyLabel="/" /> + <Key + android:codes="92" + android:keyEdgeFlags="right" + android:keyLabel="\\" /> + </Row> + <Row> + <Key + android:codes="176" + android:keyEdgeFlags="left" + android:keyLabel="°" /> + <Key + android:codes="191" + android:keyLabel="¿" /> + <Key + android:codes="161" + android:keyLabel="¡" /> + <Key + android:codes="247" + android:keyLabel="÷" /> + <Key + android:codes="215" + android:keyLabel="×" /> + <Key + android:codes="59" + android:keyLabel=";" /> + <Key + android:codes="58" + android:keyLabel=":" /> + <Key + android:codes="34" + android:keyLabel=""" /> + <Key + android:codes="8226" + android:keyLabel="•" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="36" + android:keyEdgeFlags="left" + android:keyLabel="$" /> + <Key + android:codes="165" + android:keyLabel="¥" /> + <Key + android:codes="162" + android:keyLabel="¢" /> + <Key + android:codes="163" + android:keyLabel="£" /> + <Key + android:codes="60" + android:keyLabel="<" /> + <Key + android:codes="62" + android:keyLabel=">" /> + <Key + android:codes="39" + android:keyLabel="\'" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_alphabet" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/sym_en_gb.xml b/res/xml/sym_en_gb.xml new file mode 100644 index 0000000..0f7fa9b --- /dev/null +++ b/res/xml/sym_en_gb.xml
@@ -0,0 +1,197 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="33" + android:keyEdgeFlags="left" + android:keyLabel="!" /> + <Key + android:codes="64" + android:keyLabel="\@" /> + <Key + android:codes="35" + android:keyLabel="\#" /> + <Key + android:codes="163" + android:keyLabel="£" /> + <Key + android:codes="37" + android:keyLabel="%" /> + <Key + android:codes="94" + android:keyLabel="^" /> + <Key + android:codes="38" + android:keyLabel="&" /> + <Key + android:codes="42" + android:keyLabel="*" /> + <Key + android:codes="40" + android:keyLabel="(" /> + <Key + android:codes="41" + android:keyLabel=")" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="126" + android:keyEdgeFlags="left" + android:keyLabel="~" /> + <Key + android:codes="96" + android:keyLabel="`" /> + <Key + android:codes="91" + android:keyLabel="[" /> + <Key + android:codes="93" + android:keyLabel="]" /> + <Key + android:codes="123" + android:keyLabel="{" /> + <Key + android:codes="125" + android:keyLabel="}" /> + <Key + android:codes="124" + android:keyLabel="|" /> + <Key + android:codes="43" + android:keyLabel="+" /> + <Key + android:codes="61" + android:keyLabel="=" /> + <Key + android:codes="47" + android:keyLabel="/" /> + <Key + android:codes="92" + android:keyEdgeFlags="right" + android:keyLabel="\\" /> + </Row> + <Row> + <Key + android:codes="176" + android:keyEdgeFlags="left" + android:keyLabel="°" /> + <Key + android:codes="191" + android:keyLabel="¿" /> + <Key + android:codes="161" + android:keyLabel="¡" /> + <Key + android:codes="247" + android:keyLabel="÷" /> + <Key + android:codes="215" + android:keyLabel="×" /> + <Key + android:codes="59" + android:keyLabel=";" /> + <Key + android:codes="58" + android:keyLabel=":" /> + <Key + android:codes="34" + android:keyLabel=""" /> + <Key + android:codes="39" + android:keyLabel="\'" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="8364" + android:keyEdgeFlags="left" + android:keyLabel="€" /> + <Key + android:codes="165" + android:keyLabel="¥" /> + <Key + android:codes="162" + android:keyLabel="¢" /> + <Key + android:codes="36" + android:keyLabel="$" /> + <Key + android:codes="60" + android:keyLabel="<" /> + <Key + android:codes="62" + android:keyLabel=">" /> + <Key + android:codes="8226" + android:keyLabel="•" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_alphabet" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/sym_en_in.xml b/res/xml/sym_en_in.xml new file mode 100644 index 0000000..cebae23 --- /dev/null +++ b/res/xml/sym_en_in.xml
@@ -0,0 +1,197 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="33" + android:keyEdgeFlags="left" + android:keyLabel="!" /> + <Key + android:codes="64" + android:keyLabel="\@" /> + <Key + android:codes="35" + android:keyLabel="\#" /> + <Key + android:codes="8377" + android:keyLabel="₹" /> + <Key + android:codes="37" + android:keyLabel="%" /> + <Key + android:codes="94" + android:keyLabel="^" /> + <Key + android:codes="38" + android:keyLabel="&" /> + <Key + android:codes="42" + android:keyLabel="*" /> + <Key + android:codes="40" + android:keyLabel="(" /> + <Key + android:codes="41" + android:keyLabel=")" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="126" + android:keyEdgeFlags="left" + android:keyLabel="~" /> + <Key + android:codes="96" + android:keyLabel="`" /> + <Key + android:codes="91" + android:keyLabel="[" /> + <Key + android:codes="93" + android:keyLabel="]" /> + <Key + android:codes="123" + android:keyLabel="{" /> + <Key + android:codes="125" + android:keyLabel="}" /> + <Key + android:codes="124" + android:keyLabel="|" /> + <Key + android:codes="43" + android:keyLabel="+" /> + <Key + android:codes="61" + android:keyLabel="=" /> + <Key + android:codes="47" + android:keyLabel="/" /> + <Key + android:codes="92" + android:keyEdgeFlags="right" + android:keyLabel="\\" /> + </Row> + <Row> + <Key + android:codes="176" + android:keyEdgeFlags="left" + android:keyLabel="°" /> + <Key + android:codes="191" + android:keyLabel="¿" /> + <Key + android:codes="161" + android:keyLabel="¡" /> + <Key + android:codes="247" + android:keyLabel="÷" /> + <Key + android:codes="215" + android:keyLabel="×" /> + <Key + android:codes="59" + android:keyLabel=";" /> + <Key + android:codes="58" + android:keyLabel=":" /> + <Key + android:codes="34" + android:keyLabel=""" /> + <Key + android:codes="39" + android:keyLabel="\'" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="8364" + android:keyEdgeFlags="left" + android:keyLabel="€" /> + <Key + android:codes="36" + android:keyLabel="$" /> + <Key + android:codes="162" + android:keyLabel="¢" /> + <Key + android:codes="163" + android:keyLabel="£" /> + <Key + android:codes="60" + android:keyLabel="<" /> + <Key + android:codes="62" + android:keyLabel=">" /> + <Key + android:codes="8226" + android:keyLabel="•" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_alphabet" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/sym_eu.xml b/res/xml/sym_eu.xml new file mode 100644 index 0000000..48c60c9 --- /dev/null +++ b/res/xml/sym_eu.xml
@@ -0,0 +1,197 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="33" + android:keyEdgeFlags="left" + android:keyLabel="!" /> + <Key + android:codes="64" + android:keyLabel="\@" /> + <Key + android:codes="35" + android:keyLabel="\#" /> + <Key + android:codes="8364" + android:keyLabel="€" /> + <Key + android:codes="37" + android:keyLabel="%" /> + <Key + android:codes="94" + android:keyLabel="^" /> + <Key + android:codes="38" + android:keyLabel="&" /> + <Key + android:codes="42" + android:keyLabel="*" /> + <Key + android:codes="40" + android:keyLabel="(" /> + <Key + android:codes="41" + android:keyLabel=")" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="126" + android:keyEdgeFlags="left" + android:keyLabel="~" /> + <Key + android:codes="96" + android:keyLabel="`" /> + <Key + android:codes="91" + android:keyLabel="[" /> + <Key + android:codes="93" + android:keyLabel="]" /> + <Key + android:codes="123" + android:keyLabel="{" /> + <Key + android:codes="125" + android:keyLabel="}" /> + <Key + android:codes="124" + android:keyLabel="|" /> + <Key + android:codes="43" + android:keyLabel="+" /> + <Key + android:codes="61" + android:keyLabel="=" /> + <Key + android:codes="47" + android:keyLabel="/" /> + <Key + android:codes="92" + android:keyEdgeFlags="right" + android:keyLabel="\\" /> + </Row> + <Row> + <Key + android:codes="176" + android:keyEdgeFlags="left" + android:keyLabel="°" /> + <Key + android:codes="191" + android:keyLabel="¿" /> + <Key + android:codes="161" + android:keyLabel="¡" /> + <Key + android:codes="247" + android:keyLabel="÷" /> + <Key + android:codes="215" + android:keyLabel="×" /> + <Key + android:codes="59" + android:keyLabel=";" /> + <Key + android:codes="58" + android:keyLabel=":" /> + <Key + android:codes="34" + android:keyLabel=""" /> + <Key + android:codes="39" + android:keyLabel="\'" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="36" + android:keyEdgeFlags="left" + android:keyLabel="$" /> + <Key + android:codes="165" + android:keyLabel="¥" /> + <Key + android:codes="162" + android:keyLabel="¢" /> + <Key + android:codes="163" + android:keyLabel="£" /> + <Key + android:codes="60" + android:keyLabel="<" /> + <Key + android:codes="62" + android:keyLabel=">" /> + <Key + android:codes="8226" + android:keyLabel="•" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_alphabet" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/sym_fr.xml b/res/xml/sym_fr.xml new file mode 100644 index 0000000..b175ddb --- /dev/null +++ b/res/xml/sym_fr.xml
@@ -0,0 +1,197 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="33" + android:keyEdgeFlags="left" + android:keyLabel="!" /> + <Key + android:codes="64" + android:keyLabel="\@" /> + <Key + android:codes="35" + android:keyLabel="\#" /> + <Key + android:codes="8364" + android:keyLabel="€" /> + <Key + android:codes="37" + android:keyLabel="%" /> + <Key + android:codes="94" + android:keyLabel="^" /> + <Key + android:codes="38" + android:keyLabel="&" /> + <Key + android:codes="42" + android:keyLabel="*" /> + <Key + android:codes="40" + android:keyLabel="(" /> + <Key + android:codes="41" + android:keyLabel=")" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="126" + android:keyEdgeFlags="left" + android:keyLabel="~" /> + <Key + android:codes="96" + android:keyLabel="`" /> + <Key + android:codes="91" + android:keyLabel="[" /> + <Key + android:codes="93" + android:keyLabel="]" /> + <Key + android:codes="123" + android:keyLabel="{" /> + <Key + android:codes="125" + android:keyLabel="}" /> + <Key + android:codes="124" + android:keyLabel="|" /> + <Key + android:codes="43" + android:keyLabel="+" /> + <Key + android:codes="61" + android:keyLabel="=" /> + <Key + android:codes="47" + android:keyLabel="/" /> + <Key + android:codes="92" + android:keyEdgeFlags="right" + android:keyLabel="\\" /> + </Row> + <Row> + <Key + android:codes="176" + android:keyEdgeFlags="left" + android:keyLabel="°" /> + <Key + android:codes="191" + android:keyLabel="¿" /> + <Key + android:codes="161" + android:keyLabel="¡" /> + <Key + android:codes="247" + android:keyLabel="÷" /> + <Key + android:codes="215" + android:keyLabel="×" /> + <Key + android:codes="59" + android:keyLabel=";" /> + <Key + android:codes="58" + android:keyLabel=":" /> + <Key + android:codes="34" + android:keyLabel=""" /> + <Key + android:codes="8226" + android:keyLabel="•" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="36" + android:keyEdgeFlags="left" + android:keyLabel="$" /> + <Key + android:codes="165" + android:keyLabel="¥" /> + <Key + android:codes="162" + android:keyLabel="¢" /> + <Key + android:codes="163" + android:keyLabel="£" /> + <Key + android:codes="60" + android:keyLabel="<" /> + <Key + android:codes="62" + android:keyLabel=">" /> + <Key + android:codes="39" + android:keyLabel="\'" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_alphabet" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/res/xml/sym_us.xml b/res/xml/sym_us.xml new file mode 100644 index 0000000..2091e24 --- /dev/null +++ b/res/xml/sym_us.xml
@@ -0,0 +1,197 @@ +<!-- + Copyright 2019 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" + android:keyHeight="@dimen/key_height" + android:keyWidth="@dimen/key_width" + android:verticalGap="@dimen/keyboard_vertical_gap" + android:horizontalGap="@dimen/keyboard_horizontal_gap" > + + <Row> + <Key + android:codes="33" + android:keyEdgeFlags="left" + android:keyLabel="!" /> + <Key + android:codes="64" + android:keyLabel="\@" /> + <Key + android:codes="35" + android:keyLabel="\#" /> + <Key + android:codes="36" + android:keyLabel="$" /> + <Key + android:codes="37" + android:keyLabel="%" /> + <Key + android:codes="94" + android:keyLabel="^" /> + <Key + android:codes="38" + android:keyLabel="&" /> + <Key + android:codes="42" + android:keyLabel="*" /> + <Key + android:codes="40" + android:keyLabel="(" /> + <Key + android:codes="41" + android:keyLabel=")" /> + <Key + android:codes="-5" + android:keyEdgeFlags="right" + android:keyIcon="@drawable/ic_ime_delete" + android:keyLabel="@string/keyboardview_keycode_delete" /> + </Row> + <Row> + <Key + android:codes="126" + android:keyEdgeFlags="left" + android:keyLabel="~" /> + <Key + android:codes="96" + android:keyLabel="`" /> + <Key + android:codes="91" + android:keyLabel="[" /> + <Key + android:codes="93" + android:keyLabel="]" /> + <Key + android:codes="123" + android:keyLabel="{" /> + <Key + android:codes="125" + android:keyLabel="}" /> + <Key + android:codes="124" + android:keyLabel="|" /> + <Key + android:codes="43" + android:keyLabel="+" /> + <Key + android:codes="61" + android:keyLabel="=" /> + <Key + android:codes="47" + android:keyLabel="/" /> + <Key + android:codes="92" + android:keyEdgeFlags="right" + android:keyLabel="\\" /> + </Row> + <Row> + <Key + android:codes="176" + android:keyEdgeFlags="left" + android:keyLabel="°" /> + <Key + android:codes="191" + android:keyLabel="¿" /> + <Key + android:codes="161" + android:keyLabel="¡" /> + <Key + android:codes="247" + android:keyLabel="÷" /> + <Key + android:codes="215" + android:keyLabel="×" /> + <Key + android:codes="59" + android:keyLabel=";" /> + <Key + android:codes="58" + android:keyLabel=":" /> + <Key + android:codes="34" + android:keyLabel=""" /> + <Key + android:codes="39" + android:keyLabel="\'" /> + <Key + android:codes="95" + android:keyLabel="_" /> + <Key + android:codes="38" + android:keyEdgeFlags="right" + android:keyLabel="&" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="8364" + android:keyEdgeFlags="left" + android:keyLabel="€" /> + <Key + android:codes="165" + android:keyLabel="¥" /> + <Key + android:codes="162" + android:keyLabel="¢" /> + <Key + android:codes="163" + android:keyLabel="£" /> + <Key + android:codes="60" + android:keyLabel="<" /> + <Key + android:codes="62" + android:keyLabel=">" /> + <Key + android:codes="8226" + android:keyLabel="•" /> + <Key + android:codes="44" + android:keyLabel="," /> + <Key + android:codes="46" + android:keyLabel="." /> + <Key + android:codes="45" + android:keyLabel="-" /> + <Key + android:codes="63" + android:keyEdgeFlags="right" + android:keyLabel="\?" /> + </Row> + <Row android:rowEdgeFlags="bottom" > + <Key + android:codes="-2" + android:keyEdgeFlags="left" + android:keyLabel="@string/keyboardview_keycode_mode_change" + android:keyIcon="@drawable/ic_ime_alphabet" /> + <Key + android:codes="-1" + android:keyLabel="@string/keyboardview_keycode_shift" + android:keyIcon="@drawable/ic_ime_shift_off" /> + <Key + android:codes="32" + android:keyIcon="@drawable/ic_ime_space" + android:keyLabel="@string/keyboardview_keycode_space" + android:keyWidth="@dimen/space_key_width" /> + <Key + android:codes="-3" + android:keyLabel="@string/keyboardview_keycode_left" + android:keyIcon="@drawable/ic_ime_left_arrow" /> + <Key + android:codes="-4" + android:keyEdgeFlags="right" + android:keyLabel="@string/keyboardview_keycode_right" + android:keyIcon="@drawable/ic_ime_right_arrow" /> + </Row> +</Keyboard>
diff --git a/src/com/android/inputmethod/leanback/LeanbackKeyboardContainer.java b/src/com/android/inputmethod/leanback/LeanbackKeyboardContainer.java new file mode 100644 index 0000000..124fdf3 --- /dev/null +++ b/src/com/android/inputmethod/leanback/LeanbackKeyboardContainer.java
@@ -0,0 +1,1570 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback; + +import android.animation.Animator; +import android.animation.ValueAnimator; +import android.speech.RecognitionListener; +import android.os.Bundle; + +import com.android.inputmethod.leanback.LeanbackKeyboardController.InputListener; +import com.android.inputmethod.leanback.voice.RecognizerView; +import com.android.inputmethod.leanback.voice.SpeechLevelSource; +import com.android.inputmethod.leanback.service.LeanbackImeService; + +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewGroup.MarginLayoutParams; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; +import android.view.animation.AccelerateInterpolator; +import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.animation.Animator.AnimatorListener; +import android.view.animation.Animation; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.view.animation.Transformation; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.view.inputmethod.InputMethodSubtype; +import android.graphics.PointF; +import android.graphics.Rect; +import android.speech.RecognizerIntent; +import android.speech.SpeechRecognizer; +import android.text.TextUtils; +import android.text.method.QwertyKeyListener; +import android.text.style.LocaleSpan; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.HorizontalScrollView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.util.Log; +import android.inputmethodservice.Keyboard; +import android.inputmethodservice.Keyboard.Key; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +/** + * This is the keyboard container for GridIme that contains the following views: + * <ul> + * <li>voice button</li> + * <li>main keyboard</li> + * <li>action button</li> + * <li>focus bubble</li> + * <li>touch indicator</li> + * <li>candidate view</li> + * </ul> + * Keyboard grid layout: + * + * <pre> + * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |OTH| | + * |<- | - | - | - | - | - | - | - | - | ->|ER |ACT| + * |<- | - | - | M | A | I | N | - | - | ->| | | + * |<- | K | E | Y | B | O | A | R | D | ->|KEY|ION| + * |<- | - | - | - | - | - | - | - | - | ->|S | | + * </pre> + */ +public class LeanbackKeyboardContainer { + + private static final String TAG = "LbKbContainer"; + private static final boolean DEBUG = false; + private static final boolean VOICE_SUPPORTED = true; + private static final String IME_PRIVATE_OPTIONS_ESCAPE_NORTH_LEGACY = "EscapeNorth=1"; + private static final String IME_PRIVATE_OPTIONS_ESCAPE_NORTH = "escapeNorth"; + private static final String IME_PRIVATE_OPTIONS_VOICE_DISMISS_LEGACY = "VoiceDismiss=1"; + private static final String IME_PRIVATE_OPTIONS_VOICE_DISMISS = "voiceDismiss"; + + /** + * This is the length of animations that move an indicator across the keys. Snaps and flicks + * will use this duration for the movement. + */ + private static final long MOVEMENT_ANIMATION_DURATION = 150; + + /** + * This interpolator is used for movement animations. + */ + public static final Interpolator sMovementInterpolator = new DecelerateInterpolator(1.5f); + + /** + * These are the states that the view can be in and affect the icon appearance. NO_TOUCH is when + * there are no fingers down on the input device. + */ + public static final int TOUCH_STATE_NO_TOUCH = 0; + + /** + * TOUCH_SNAP indicates that a finger is down but the indicator is still considered snapped to a + * letter. Once the user moves a given distance from the snapped position it will change to + * TOUCH_MOVE. + */ + public static final int TOUCH_STATE_TOUCH_SNAP = 1; + + /** + * TOUCH_MOVE indicates the user is moving freely around the space and is not snapped to any + * letter. + */ + public static final int TOUCH_STATE_TOUCH_MOVE = 2; + + /** + * CLICK indicates the selection button is currently pressed. When the button is released we + * will transition back to snap or no touch depending on whether there is still a finger down on + * the input device or not. + */ + public static final int TOUCH_STATE_CLICK = 3; + + // The minimum distance the user must move their finger to transition from + // the SNAP to the MOVE state + public static final double TOUCH_MOVE_MIN_DISTANCE = .1; + + /** + * When processing a flick or dpad event it is easier to move a key width + a fudge factor than + * to directly compute what the next key position should be. This is the fudge factor. + */ + public static final double DIRECTION_STEP_MULTIPLIER = 1.25; + + /** + * Directions sent to event listeners. + */ + public static final int DIRECTION_LEFT = 1 << 0; + public static final int DIRECTION_DOWN = 1 << 1; + public static final int DIRECTION_RIGHT = 1 << 2; + public static final int DIRECTION_UP = 1 << 3; + public static final int DIRECTION_DOWN_LEFT = DIRECTION_DOWN | DIRECTION_LEFT; + public static final int DIRECTION_DOWN_RIGHT = DIRECTION_DOWN | DIRECTION_RIGHT; + public static final int DIRECTION_UP_RIGHT = DIRECTION_UP | DIRECTION_RIGHT; + public static final int DIRECTION_UP_LEFT = DIRECTION_UP | DIRECTION_LEFT; + + /** + * handler messages + */ + // align selector in onStartInputView + private static final int MSG_START_INPUT_VIEW = 0; + + // If this were a physical keyboard the width in cm. This will be mapped + // to the width in pixels but is representative of the mapping from the + // remote input to the screen. Higher values will require larger moves to + // get across the keyboard + protected static final float PHYSICAL_WIDTH_CM = 12; + // If this were a physical keyboard the height in cm. This will be mapped + // to the height in pixels but is representative of the mapping from the + // remote input to the screen. Higher values will require larger moves to + // get across the keyboard + protected static final float PHYSICAL_HEIGHT_CM = 5; + + /** + * Listener for publishing voice input result to {@link LeanbackKeyboardController} + */ + public static interface VoiceListener { + public void onVoiceResult(String result); + } + + public static interface DismissListener { + public void onDismiss(boolean fromVoice); + } + + /** + * Class for holding information about the currently focused key. + */ + public static class KeyFocus { + public static final int TYPE_INVALID = -1; + public static final int TYPE_MAIN = 0; + public static final int TYPE_VOICE = 1; + public static final int TYPE_ACTION = 2; + public static final int TYPE_SUGGESTION = 3; + + /** + * The bounding box for the current focused key/view + */ + final Rect rect; + + /** + * The index of the focused key or suggestion. This is invalid for views that don't have + * indexed items. + */ + int index; + + /** + * The type of key which indicates which view/keyboard the focus is in. + */ + int type; + + /** + * The key code for the focused key. This is invalid for views that don't use key codes. + */ + int code; + + /** + * The text label for the focused key. This is invalid for views that don't use labels. + */ + CharSequence label; + + public KeyFocus() { + type = TYPE_INVALID; + rect = new Rect(); + } + + @Override + public String toString() { + StringBuilder bob = new StringBuilder(); + bob.append("[type: ").append(type) + .append(", index: ").append(index) + .append(", code: ").append(code) + .append(", label: ").append(label) + .append(", rect: ").append(rect) + .append("]"); + return bob.toString(); + } + + public void set(KeyFocus focus) { + index = focus.index; + type = focus.type; + code = focus.code; + label = focus.label; + rect.set(focus.rect); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + KeyFocus keyFocus = (KeyFocus) o; + + if (code != keyFocus.code) { + return false; + } + if (index != keyFocus.index) { + return false; + } + if (type != keyFocus.type) { + return false; + } + if (label != null ? !label.equals(keyFocus.label) : keyFocus.label != null) { + return false; + } + if (!rect.equals(keyFocus.rect)) { + return false; + } + + return true; + } + + @Override + public int hashCode() { + int result = rect.hashCode(); + result = 31 * result + index; + result = 31 * result + type; + result = 31 * result + code; + result = 31 * result + (label != null ? label.hashCode() : 0); + return result; + } + } + + private class VoiceIntroAnimator { + private AnimatorListener mEnterListener; + private AnimatorListener mExitListener; + private ValueAnimator mValueAnimator; + + public VoiceIntroAnimator(AnimatorListener enterListener, AnimatorListener exitListener) { + mEnterListener = enterListener; + mExitListener = exitListener; + + mValueAnimator = ValueAnimator.ofFloat(mAlphaOut, mAlphaIn); + mValueAnimator.setDuration(mVoiceAnimDur); + mValueAnimator.setInterpolator(new AccelerateInterpolator()); + } + + void startEnterAnimation() { + if (!isVoiceVisible() && !mValueAnimator.isRunning()) { + start(true); + } + } + + void startExitAnimation() { + if (isVoiceVisible() && !mValueAnimator.isRunning()) { + start(false); + } + } + + private void start(final boolean enterVoice) { + // TODO make animation continous + mValueAnimator.cancel(); + + mValueAnimator.removeAllListeners(); + mValueAnimator.addListener(enterVoice ? mEnterListener : mExitListener); + mValueAnimator.removeAllUpdateListeners(); + mValueAnimator.addUpdateListener(new AnimatorUpdateListener() { + + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float progress = (Float) mValueAnimator.getAnimatedValue(); + float antiProgress = mAlphaIn + mAlphaOut - progress; + + float kbAlpha = enterVoice ? antiProgress : progress; + float voiceAlpha = enterVoice ? progress : antiProgress; + + mMainKeyboardView.setAlpha(kbAlpha); + mActionButtonView.setAlpha(kbAlpha); + mVoiceButtonView.setAlpha(voiceAlpha); + + if (progress == mAlphaOut) { + // first pass + if (enterVoice) { + mVoiceButtonView.setVisibility(View.VISIBLE); + } else { + mMainKeyboardView.setVisibility(View.VISIBLE); + mActionButtonView.setVisibility(View.VISIBLE); + } + } else if (progress == mAlphaIn) { + // done + if (enterVoice) { + mMainKeyboardView.setVisibility(View.INVISIBLE); + mActionButtonView.setVisibility(View.INVISIBLE); + } else { + mVoiceButtonView.setVisibility(View.INVISIBLE); + } + } + } + }); + + mValueAnimator.start(); + } + } + + /** + * keyboard flags based on the edittext types + */ + // if suggestions are enabled and suggestion view is visible + private boolean mSuggestionsEnabled; + // if auto entering space after period or suggestions is enabled + private boolean mAutoEnterSpaceEnabled; + // if voice button is enabled + private boolean mVoiceEnabled; + // initial main keyboard to show for the specific edittext + private Keyboard mInitialMainKeyboard; + // text resource id of the enter key. If set to 0, show enter key image + private int mEnterKeyTextResId; + private CharSequence mEnterKeyText; + + /** + * This animator controls the way the touch indicator grows and shrinks when changing states. + */ + private ValueAnimator mSelectorAnimator; + + /** + * The current state of touch. + */ + private int mTouchState = TOUCH_STATE_NO_TOUCH; + + private VoiceListener mVoiceListener; + + private DismissListener mDismissListener; + + private LeanbackImeService mContext; + private RelativeLayout mRootView; + + private View mKeyboardsContainer; + private View mSuggestionsBg; + private HorizontalScrollView mSuggestionsContainer; + private LinearLayout mSuggestions; + private LeanbackKeyboardView mMainKeyboardView; + private Button mActionButtonView; + private ScaleAnimation mSelectorAnimation; + private View mSelector; + private float mOverestimate; + + // The modeled physical position of the current selection in cm + private PointF mPhysicalSelectPos = new PointF(2, .5f); + // The position of the touch indicator in cm + private PointF mPhysicalTouchPos = new PointF(2, .5f); + // A point for doing temporary calculations + private PointF mTempPoint = new PointF(); + + private KeyFocus mCurrKeyInfo = new KeyFocus(); + private KeyFocus mDownKeyInfo = new KeyFocus(); + private KeyFocus mTempKeyInfo = new KeyFocus(); + + private LeanbackKeyboardView mPrevView; + private Rect mRect = new Rect(); + private Float mX; + private Float mY; + private int mMiniKbKeyIndex; + + private final int mClickAnimDur; + private final int mVoiceAnimDur; + private final float mAlphaIn; + private final float mAlphaOut; + + private Keyboard mAbcKeyboard; + private Keyboard mSymKeyboard; + private Keyboard mNumKeyboard; + + // if we should capitalize the first letter in each sentence + private boolean mCapSentences; + + // if we should capitalize the first letter in each word + private boolean mCapWords; + + // if we should capitalize every character + private boolean mCapCharacters; + + // if voice is on + private boolean mVoiceOn; + + // Whether to allow escaping north or not + private boolean mEscapeNorthEnabled; + + // Whether to dismiss when voice button is pressed + private boolean mVoiceKeyDismissesEnabled; + + /** + * Voice + */ + private Intent mRecognizerIntent; + private SpeechRecognizer mSpeechRecognizer; + private SpeechLevelSource mSpeechLevelSource; + private RecognizerView mVoiceButtonView; + + private class ScaleAnimation extends Animation { + private final ViewGroup.LayoutParams mParams; + private final View mView; + private float mStartX; + private float mStartY; + private float mStartWidth; + private float mStartHeight; + private float mEndX; + private float mEndY; + private float mEndWidth; + private float mEndHeight; + + public ScaleAnimation(FrameLayout view) { + mView = view; + mParams = view.getLayoutParams(); + setDuration(MOVEMENT_ANIMATION_DURATION); + setInterpolator(sMovementInterpolator); + } + + public void setAnimationBounds(float x, float y, float width, float height) { + mEndX = x; + mEndY = y; + mEndWidth = width; + mEndHeight = height; + } + + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + if (interpolatedTime == 0) { + mStartX = mView.getX(); + mStartY = mView.getY(); + mStartWidth = mParams.width; + mStartHeight = mParams.height; + } else { + setValues(((mEndX - mStartX) * interpolatedTime + mStartX), + ((mEndY - mStartY) * interpolatedTime + mStartY), + ((int)((mEndWidth - mStartWidth) * interpolatedTime + mStartWidth)), + ((int)((mEndHeight - mStartHeight) * interpolatedTime + mStartHeight))); + } + } + + public void setValues(float x, float y, float width, float height) { + mView.setX(x); + mView.setY(y); + mParams.width = (int)(width); + mParams.height = (int)(height); + mView.setLayoutParams(mParams); + mView.requestLayout(); + } + }; + + private AnimatorListener mVoiceEnterListener = new AnimatorListener() { + + @Override + public void onAnimationStart(Animator animation) { + mSelector.setVisibility(View.INVISIBLE); + startRecognition(mContext); + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + + @Override + public void onAnimationEnd(Animator animation) { + } + + @Override + public void onAnimationCancel(Animator animation) { + } + }; + + private AnimatorListener mVoiceExitListener = new AnimatorListener() { + + @Override + public void onAnimationStart(Animator animation) { + mVoiceButtonView.showNotListening(); + mSpeechRecognizer.cancel(); + mSpeechRecognizer.setRecognitionListener(null); + mVoiceOn = false; + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + + @Override + public void onAnimationEnd(Animator animation) { + mSelector.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationCancel(Animator animation) { + } + }; + + private final VoiceIntroAnimator mVoiceAnimator; + + // Tracks whether or not a touch event is in progress. This is true while + // a finger is down on the pad. + private boolean mTouchDown = false; + + public LeanbackKeyboardContainer(Context context) { + mContext = (LeanbackImeService) context; + + final Resources res = mContext.getResources(); + mVoiceAnimDur = res.getInteger(R.integer.voice_anim_duration); + mAlphaIn = res.getFraction(R.fraction.alpha_in, 1, 1); + mAlphaOut = res.getFraction(R.fraction.alpha_out, 1, 1); + + mVoiceAnimator = new VoiceIntroAnimator(mVoiceEnterListener, mVoiceExitListener); + + initKeyboards(); + + mRootView = (RelativeLayout) mContext.getLayoutInflater() + .inflate(R.layout.root_leanback, null); + mKeyboardsContainer = mRootView.findViewById(R.id.keyboard); + mSuggestionsBg = mRootView.findViewById(R.id.candidate_background); + mSuggestionsContainer = + (HorizontalScrollView) mRootView.findViewById(R.id.suggestions_container); + mSuggestions = (LinearLayout) mSuggestionsContainer.findViewById(R.id.suggestions); + + mMainKeyboardView = (LeanbackKeyboardView) mRootView.findViewById(R.id.main_keyboard); + mVoiceButtonView = (RecognizerView) mRootView.findViewById(R.id.voice); + + mActionButtonView = (Button) mRootView.findViewById(R.id.enter); + + mSelector = mRootView.findViewById(R.id.selector); + mSelectorAnimation = new ScaleAnimation((FrameLayout) mSelector); + + mOverestimate = mContext.getResources().getFraction(R.fraction.focused_scale, 1, 1); + float scale = context.getResources().getFraction(R.fraction.clicked_scale, 1, 1); + mClickAnimDur = context.getResources().getInteger(R.integer.clicked_anim_duration); + mSelectorAnimator = ValueAnimator.ofFloat(1.0f, scale); + mSelectorAnimator.setDuration(mClickAnimDur); + mSelectorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float scale = (Float) animation.getAnimatedValue(); + mSelector.setScaleX(scale); + mSelector.setScaleY(scale); + } + }); + + mSpeechLevelSource = new SpeechLevelSource(); + mVoiceButtonView.setSpeechLevelSource(mSpeechLevelSource); + mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(mContext); + mVoiceButtonView.setCallback(new RecognizerView.Callback() { + @Override + public void onStartRecordingClicked() { + startVoiceRecording(); + } + + @Override + public void onStopRecordingClicked() { + cancelVoiceRecording(); + } + + @Override + public void onCancelRecordingClicked() { + cancelVoiceRecording(); + } + }); + + } + + public void startVoiceRecording() { + if (mVoiceEnabled) { + if (mVoiceKeyDismissesEnabled) { + if (DEBUG) Log.v(TAG, "Voice Dismiss"); + mDismissListener.onDismiss(true); + } else { + mVoiceAnimator.startEnterAnimation(); + } + } + } + + public void cancelVoiceRecording() { + mVoiceAnimator.startExitAnimation(); + } + + public void resetVoice() { + mMainKeyboardView.setAlpha(mAlphaIn); + mActionButtonView.setAlpha(mAlphaIn); + mVoiceButtonView.setAlpha(mAlphaOut); + + mMainKeyboardView.setVisibility(View.VISIBLE); + mActionButtonView.setVisibility(View.VISIBLE); + mVoiceButtonView.setVisibility(View.INVISIBLE); + } + + public boolean isVoiceVisible() { + return mVoiceButtonView.getVisibility() == View.VISIBLE; + } + + private void initKeyboards() { + Locale locale = Locale.getDefault(); + + if (isMatch(locale, LeanbackLocales.QWERTY_GB)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_en_gb); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_en_gb); + } else if (isMatch(locale, LeanbackLocales.QWERTY_IN)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_en_in); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_en_in); + } else if (isMatch(locale, LeanbackLocales.QWERTY_ES_EU)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_es_eu); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.QWERTY_ES_US)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_es_us); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_us); + } else if (isMatch(locale, LeanbackLocales.QWERTY_AZ)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_az); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.QWERTY_CA)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_ca); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.QWERTY_DA)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_da); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.QWERTY_ET)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_et); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.QWERTY_FI)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_fi); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.QWERTY_NB)) { + // in the LatinIME nb uses the US symbols (usd instead of euro) + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_nb); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_us); + } else if (isMatch(locale, LeanbackLocales.QWERTY_SV)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_sv); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.QWERTY_US)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_us); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_us); + } else if (isMatch(locale, LeanbackLocales.QWERTZ_CH)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwertz_ch); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.QWERTZ)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwertz); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } else if (isMatch(locale, LeanbackLocales.AZERTY)) { + mAbcKeyboard = new Keyboard(mContext, R.xml.azerty); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_azerty); + } else { + mAbcKeyboard = new Keyboard(mContext, R.xml.qwerty_eu); + mSymKeyboard = new Keyboard(mContext, R.xml.sym_eu); + } + + mNumKeyboard = new Keyboard(mContext, R.xml.number); + } + + private boolean isMatch(Locale locale, Locale[] list) { + for (Locale compare : list) { + // comparison language is either blank or they match + if (TextUtils.isEmpty(compare.getLanguage()) || + TextUtils.equals(locale.getLanguage(), compare.getLanguage())) { + // comparison country is either blank or they match + if (TextUtils.isEmpty(compare.getCountry()) || + TextUtils.equals(locale.getCountry(), compare.getCountry())) { + return true; + } + } + } + + return false; + } + + /** + * This method is called when we start the input at a NEW input field to set up the IME options, + * such as suggestions, voice, and action + */ + public void onStartInput(EditorInfo attribute) { + setImeOptions(mContext.getResources(), attribute); + mVoiceOn = false; + } + + /** + * This method is called whenever we bring up the IME at an input field. + */ + public void onStartInputView() { + // This must be done here because modifying the views before it is + // shown can cause selection handles to be shown if using a USB + // keyboard in a WebView. + clearSuggestions(); + + RelativeLayout.LayoutParams lp = + (RelativeLayout.LayoutParams) mKeyboardsContainer.getLayoutParams(); + if (mSuggestionsEnabled) { + lp.removeRule(RelativeLayout.ALIGN_PARENT_TOP); + mSuggestionsContainer.setVisibility(View.VISIBLE); + mSuggestionsBg.setVisibility(View.VISIBLE); + } else { + lp.addRule(RelativeLayout.ALIGN_PARENT_TOP); + mSuggestionsContainer.setVisibility(View.GONE); + mSuggestionsBg.setVisibility(View.GONE); + } + mKeyboardsContainer.setLayoutParams(lp); + + mMainKeyboardView.setKeyboard(mInitialMainKeyboard); + // TODO fix this for number keyboard + mVoiceButtonView.setMicEnabled(mVoiceEnabled); + resetVoice(); + dismissMiniKeyboard(); + + // setImeOptions will be called before this, setting the text resource value + if (!TextUtils.isEmpty(mEnterKeyText)) { + mActionButtonView.setText(mEnterKeyText); + mActionButtonView.setContentDescription(mEnterKeyText); + } else { + mActionButtonView.setText(mEnterKeyTextResId); + mActionButtonView.setContentDescription(mContext.getString(mEnterKeyTextResId)); + } + + if (mCapCharacters) { + setShiftState(LeanbackKeyboardView.SHIFT_LOCKED); + } else if (mCapSentences || mCapWords) { + setShiftState(LeanbackKeyboardView.SHIFT_ON); + } else { + setShiftState(LeanbackKeyboardView.SHIFT_OFF); + } + } + + /** + * This method is called when the keyboard layout is complete, to set up the initial focus and + * visibility. This method gets called later than {@link onStartInput} and + * {@link onStartInputView}. + */ + public void onInitInputView() { + resetFocusCursor(); + mSelector.setVisibility(View.VISIBLE); + } + + public RelativeLayout getView() { + return mRootView; + } + + public void setVoiceListener(VoiceListener listener) { + mVoiceListener = listener; + } + + public void setDismissListener(DismissListener listener) { + mDismissListener = listener; + } + + private void setImeOptions(Resources resources, EditorInfo attribute) { + mSuggestionsEnabled = true; + mAutoEnterSpaceEnabled = true; + mVoiceEnabled = true; + mInitialMainKeyboard = mAbcKeyboard; + mEscapeNorthEnabled = false; + mVoiceKeyDismissesEnabled = false; + + // set keyboard properties + switch (LeanbackUtils.getInputTypeClass(attribute)) { + case EditorInfo.TYPE_CLASS_NUMBER: + case EditorInfo.TYPE_CLASS_DATETIME: + case EditorInfo.TYPE_CLASS_PHONE: + mSuggestionsEnabled = false; + mVoiceEnabled = false; + // TODO use number keyboard for these input types + mInitialMainKeyboard = mAbcKeyboard; + break; + case EditorInfo.TYPE_CLASS_TEXT: + switch (LeanbackUtils.getInputTypeVariation(attribute)) { + case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD: + case EditorInfo.TYPE_TEXT_VARIATION_WEB_PASSWORD: + case EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD: + case EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME: + mSuggestionsEnabled = false; + mVoiceEnabled = false; + mInitialMainKeyboard = mAbcKeyboard; + break; + case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS: + case EditorInfo.TYPE_TEXT_VARIATION_URI: + case EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT: + case EditorInfo.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS: + mSuggestionsEnabled = true; + mAutoEnterSpaceEnabled = false; + mVoiceEnabled = false; + mInitialMainKeyboard = mAbcKeyboard; + break; + } + break; + } + + if (mSuggestionsEnabled) { + mSuggestionsEnabled = (attribute.inputType + & EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS) == 0; + } + if (mAutoEnterSpaceEnabled) { + mAutoEnterSpaceEnabled = mSuggestionsEnabled && mAutoEnterSpaceEnabled; + } + mCapSentences = (attribute.inputType + & EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES) != 0; + mCapWords = ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS) != 0) || + (LeanbackUtils.getInputTypeVariation(attribute) + == EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME); + mCapCharacters = (attribute.inputType + & EditorInfo.TYPE_TEXT_FLAG_CAP_CHARACTERS) != 0; + + if (attribute.privateImeOptions != null) { + if (attribute.privateImeOptions.contains(IME_PRIVATE_OPTIONS_ESCAPE_NORTH) || + attribute.privateImeOptions.contains( + IME_PRIVATE_OPTIONS_ESCAPE_NORTH_LEGACY)) { + mEscapeNorthEnabled = true; + } + if (attribute.privateImeOptions.contains(IME_PRIVATE_OPTIONS_VOICE_DISMISS) || + attribute.privateImeOptions.contains( + IME_PRIVATE_OPTIONS_VOICE_DISMISS_LEGACY)) { + mVoiceKeyDismissesEnabled = true; + } + } + + if (DEBUG) { + Log.d(TAG, "sugg: " + mSuggestionsEnabled + " | capSentences: " + mCapSentences + + " | capWords: " + mCapWords + " | capChar: " + mCapCharacters + + " | escapeNorth: " + mEscapeNorthEnabled + + " | voiceDismiss : " + mVoiceKeyDismissesEnabled + ); + } + + // set enter key + mEnterKeyText = attribute.actionLabel; + if (TextUtils.isEmpty(mEnterKeyText)) { + switch (LeanbackUtils.getImeAction(attribute)) { + case EditorInfo.IME_ACTION_GO: + mEnterKeyTextResId = R.string.label_go_key; + break; + case EditorInfo.IME_ACTION_NEXT: + mEnterKeyTextResId = R.string.label_next_key; + break; + case EditorInfo.IME_ACTION_SEARCH: + mEnterKeyTextResId = R.string.label_search_key; + break; + case EditorInfo.IME_ACTION_SEND: + mEnterKeyTextResId = R.string.label_send_key; + break; + default: + mEnterKeyTextResId = R.string.label_done_key; + break; + } + } + + if (!VOICE_SUPPORTED) { + mVoiceEnabled = false; + } + } + + public boolean isVoiceEnabled() { + return mVoiceEnabled; + } + + public boolean areSuggestionsEnabled() { + return mSuggestionsEnabled; + } + + public boolean enableAutoEnterSpace() { + return mAutoEnterSpaceEnabled; + } + + private PointF getAlignmentPosition(float posXCm, float posYCm, PointF result) { + float width = mRootView.getWidth() - mRootView.getPaddingRight() + - mRootView.getPaddingLeft() + - mContext.getResources().getDimension(R.dimen.selector_size); + float height = mRootView.getHeight() - mRootView.getPaddingTop() + - mRootView.getPaddingBottom() + - mContext.getResources().getDimension(R.dimen.selector_size); + result.x = posXCm / PHYSICAL_WIDTH_CM * width + mRootView.getPaddingLeft(); + result.y = posYCm / PHYSICAL_HEIGHT_CM * height + mRootView.getPaddingTop(); + return result; + } + + private void getPhysicalPosition(float x, float y, PointF result) { + x -= mSelector.getWidth() / 2; + y -= mSelector.getHeight() / 2; + float width = mRootView.getWidth() - mRootView.getPaddingRight() + - mRootView.getPaddingLeft() + - mContext.getResources().getDimension(R.dimen.selector_size); + float height = mRootView.getHeight() - mRootView.getPaddingTop() + - mRootView.getPaddingBottom() + - mContext.getResources().getDimension(R.dimen.selector_size); + float posXCm = (x - mRootView.getPaddingLeft()) * PHYSICAL_WIDTH_CM / width; + float posYCm = (y - mRootView.getPaddingTop()) * PHYSICAL_HEIGHT_CM / height; + result.x = posXCm; + result.y = posYCm; + } + + private void offsetRect(Rect rect, View view) { + rect.left = 0; + rect.top = 0; + rect.right = view.getWidth(); + rect.bottom = view.getHeight(); + ((ViewGroup) mRootView).offsetDescendantRectToMyCoords(view, rect); + } + + /** + * Finds the {@link KeyFocus} on screen that best matches the given pixel positions + * + * @param x position in pixels, if null, use the last valid x value + * @param y position in pixels, if null, use the last valid y value + * @param focus the focus object to update with the result + * @return true if focus was successfully found, false otherwise. + */ + public boolean getBestFocus(Float x, Float y, KeyFocus focus) { + boolean validFocus = true; + + offsetRect(mRect, mActionButtonView); + int actionLeft = mRect.left; + + offsetRect(mRect, mMainKeyboardView); + int keyboardTop = mRect.top; + + // use last if invalid + x = (x == null) ? mX : x; + y = (y == null) ? mY : y; + + final int count = mSuggestions.getChildCount(); + if (y < keyboardTop && count > 0 && mSuggestionsEnabled) { + for (int i = 0; i < count; i++) { + View suggestView = mSuggestions.getChildAt(i); + offsetRect(mRect, suggestView); + if (x < mRect.right || i+1 == count) { + suggestView.requestFocus(); + LeanbackUtils.sendAccessibilityEvent(suggestView.findViewById(R.id.text), true); + configureFocus(focus, mRect, i, KeyFocus.TYPE_SUGGESTION); + break; + } + } + } else if (y < keyboardTop && mEscapeNorthEnabled) { + validFocus = false; + escapeNorth(); + } else if (x > actionLeft) { + // closest is the action button + offsetRect(mRect, mActionButtonView); + configureFocus(focus, mRect, 0, KeyFocus.TYPE_ACTION); + } else { + mX = x; + mY = y; + + // In the main view + offsetRect(mRect, mMainKeyboardView); + x = (x - mRect.left); + y = (y - mRect.top); + + int index = mMainKeyboardView.getNearestIndex(x, y); + Key key = mMainKeyboardView.getKey(index); + configureFocus(focus, mRect, index, key, KeyFocus.TYPE_MAIN); + } + + return validFocus; + } + + private void escapeNorth() { + if (DEBUG) Log.v(TAG, "Escaping north"); + mDismissListener.onDismiss(false); + } + + private void configureFocus(KeyFocus focus, Rect rect, int index, int type) { + focus.type = type; + focus.index = index; + focus.rect.set(rect); + } + + private void configureFocus(KeyFocus focus, Rect rect, int index, Key key, int type) { + focus.type = type; + if (key == null) { + return; + } + if (key.codes != null) { + focus.code = key.codes[0]; + } else { + focus.code = KeyEvent.KEYCODE_UNKNOWN; + } + focus.index = index; + focus.label = key.label; + focus.rect.left = key.x + rect.left; + focus.rect.top = key.y + rect.top; + focus.rect.right = focus.rect.left + key.width; + focus.rect.bottom = focus.rect.top + key.height; + } + + private void setKbFocus(KeyFocus focus, boolean forceFocusChange, boolean animate) { + if (focus.equals(mCurrKeyInfo) && !forceFocusChange) { + // Nothing changed + return; + } + LeanbackKeyboardView prevView = mPrevView; + mPrevView = null; + boolean overestimateWidth = false; + boolean overestimateHeight = false; + + switch (focus.type) { + case KeyFocus.TYPE_VOICE: + mVoiceButtonView.setMicFocused(true); + dismissMiniKeyboard(); + break; + case KeyFocus.TYPE_ACTION: + LeanbackUtils.sendAccessibilityEvent(mActionButtonView, true); + dismissMiniKeyboard(); + break; + case KeyFocus.TYPE_SUGGESTION: + dismissMiniKeyboard(); + break; + case KeyFocus.TYPE_MAIN: + overestimateHeight = true; + overestimateWidth = (focus.code != LeanbackKeyboardView.ASCII_SPACE); + mMainKeyboardView.setFocus(focus.index, mTouchState == TOUCH_STATE_CLICK, overestimateWidth); + mPrevView = mMainKeyboardView; + break; + } + + if (prevView != null && prevView != mPrevView) { + prevView.setFocus(-1, mTouchState == TOUCH_STATE_CLICK); + } + + setSelectorToFocus(focus.rect, overestimateWidth, overestimateHeight, animate); + mCurrKeyInfo.set(focus); + } + + public void setSelectorToFocus(Rect rect, boolean overestimateWidth, boolean overestimateHeight, + boolean animate) { + if (mSelector.getWidth() == 0 || mSelector.getHeight() == 0 + || rect.width() == 0 || rect.height() == 0) { + return; + } + + float width = rect.width(); + float height = rect.height(); + + if (overestimateHeight) { + height *= mOverestimate; + } + if (overestimateWidth) { + width *= mOverestimate; + } + + float major = Math.max(width, height); + float minor = Math.min(width, height); + // if the difference between the width and height is less than 10%, + // keep the width and height the same. + if (major / minor < 1.1) { + width = height = Math.max(width, height); + } + + float x = rect.exactCenterX() - width/2; + float y = rect.exactCenterY() - height/2; + mSelectorAnimation.cancel(); + if (animate) { + mSelectorAnimation.reset(); + mSelectorAnimation.setAnimationBounds(x, y, width, height); + mSelector.startAnimation(mSelectorAnimation); + } else { + mSelectorAnimation.setValues(x, y, width, height); + } + } + + public Keyboard.Key getKey(int type, int index) { + return (type == KeyFocus.TYPE_MAIN) ? mMainKeyboardView.getKey(index) : null; + } + + public int getCurrKeyCode() { + Key key = getKey(mCurrKeyInfo.type, mCurrKeyInfo.index); + if (key != null) { + return key.codes[0]; + } + return 0; + } + + public int getTouchState() { + return mTouchState; + } + + /** + * Set the view state which affects how the touch indicator is drawn. This code currently + * assumes the state changes below for simplicity. If the state machine is updated this code + * should probably be checked to ensure it still works. NO_TOUCH -> on touch start -> SNAP SNAP + * -> on enough movement -> MOVE MOVE -> on hover long enough -> SNAP SNAP -> on a click down -> + * CLICK CLICK -> on click released -> SNAP ANY STATE -> on touch end -> NO_TOUCH + * + * @param state The new state to transition to + */ + public void setTouchState(int state) { + switch (state) { + case TOUCH_STATE_NO_TOUCH: + if (mTouchState == TOUCH_STATE_TOUCH_MOVE || mTouchState == TOUCH_STATE_CLICK) { + // If the touch indicator was small make it big again + mSelectorAnimator.reverse(); + } + break; + case TOUCH_STATE_TOUCH_SNAP: + if (mTouchState == TOUCH_STATE_CLICK) { + // And make the touch indicator big again + mSelectorAnimator.reverse(); + } else if (mTouchState == TOUCH_STATE_TOUCH_MOVE) { + // Just make the touch indicator big + mSelectorAnimator.reverse(); + } + break; + case TOUCH_STATE_TOUCH_MOVE: + if (mTouchState == TOUCH_STATE_NO_TOUCH || mTouchState == TOUCH_STATE_TOUCH_SNAP) { + // Shrink the touch indicator + mSelectorAnimator.start(); + } + break; + case TOUCH_STATE_CLICK: + if (mTouchState == TOUCH_STATE_NO_TOUCH || mTouchState == TOUCH_STATE_TOUCH_SNAP) { + // Shrink the touch indicator + mSelectorAnimator.start(); + } + break; + } + setTouchStateInternal(state); + setKbFocus(mCurrKeyInfo, true, true); + } + + public KeyFocus getCurrFocus() { + return mCurrKeyInfo; + } + + public void onVoiceClick() { + if (mVoiceButtonView != null) { + mVoiceButtonView.onClick(); + } + } + + public void onModeChangeClick() { + dismissMiniKeyboard(); + if (mMainKeyboardView.getKeyboard().equals(mSymKeyboard)) { + mMainKeyboardView.setKeyboard(mAbcKeyboard); + } else { + mMainKeyboardView.setKeyboard(mSymKeyboard); + } + } + + public void onShiftClick() { + setShiftState(mMainKeyboardView.isShifted() ? LeanbackKeyboardView.SHIFT_OFF + : LeanbackKeyboardView.SHIFT_ON); + } + + public void onTextEntry() { + // reset shift if caps is not on + if (mMainKeyboardView.isShifted()) { + if (!isCapsLockOn() && !mCapCharacters) { + setShiftState(LeanbackKeyboardView.SHIFT_OFF); + } + } else { + if (isCapsLockOn() || mCapCharacters) { + setShiftState(LeanbackKeyboardView.SHIFT_LOCKED); + } + } + + if (dismissMiniKeyboard()) { + moveFocusToIndex(mMiniKbKeyIndex, KeyFocus.TYPE_MAIN); + } + } + + public void onSpaceEntry() { + if (mMainKeyboardView.isShifted()) { + if (!isCapsLockOn() && !mCapCharacters && !mCapWords) { + setShiftState(LeanbackKeyboardView.SHIFT_OFF); + } + } else { + if (isCapsLockOn() || mCapCharacters || mCapWords) { + setShiftState(LeanbackKeyboardView.SHIFT_ON); + } + } + } + + public void onPeriodEntry() { + if (mMainKeyboardView.isShifted()) { + if (!isCapsLockOn() && !mCapCharacters && !mCapWords && !mCapSentences) { + setShiftState(LeanbackKeyboardView.SHIFT_OFF); + } + } else { + if (isCapsLockOn() || mCapCharacters || mCapWords || mCapSentences) { + setShiftState(LeanbackKeyboardView.SHIFT_ON); + } + } + } + + public boolean dismissMiniKeyboard() { + return mMainKeyboardView.dismissMiniKeyboard(); + } + + public boolean isCurrKeyShifted() { + return mMainKeyboardView.isShifted(); + } + + public CharSequence getSuggestionText(int index) { + CharSequence text = null; + + if(index >= 0 && index < mSuggestions.getChildCount()){ + Button suggestion = + (Button) mSuggestions.getChildAt(index).findViewById(R.id.text); + if (suggestion != null) { + text = suggestion.getText(); + } + } + + return text; + } + + /** + * This method sets the keyboard focus and update the layout of the new focus + * + * @param focus the new focus of the keyboard + */ + public void setFocus(KeyFocus focus) { + setKbFocus(focus, false, true); + } + + public boolean getNextFocusInDirection(int direction, KeyFocus startFocus, KeyFocus nextFocus) { + boolean validNextFocus = true; + + switch (startFocus.type) { + case KeyFocus.TYPE_VOICE: + // TODO move between voice button and kb button + break; + case KeyFocus.TYPE_ACTION: + offsetRect(mRect, mMainKeyboardView); + if ((direction & DIRECTION_LEFT) != 0) { + // y is null, so we use the last y. This way a user can hold left and wrap + // around the keyboard while staying in the same row + validNextFocus = getBestFocus((float) mRect.right, null, nextFocus); + } else if ((direction & DIRECTION_UP) != 0) { + offsetRect(mRect, mSuggestions); + validNextFocus = getBestFocus( + (float) startFocus.rect.centerX(), (float) mRect.centerY(), nextFocus); + } + break; + case KeyFocus.TYPE_SUGGESTION: + if ((direction & DIRECTION_DOWN) != 0) { + offsetRect(mRect, mMainKeyboardView); + validNextFocus = getBestFocus( + (float) startFocus.rect.centerX(), (float) mRect.top, nextFocus); + } else if ((direction & DIRECTION_UP) != 0) { + if (mEscapeNorthEnabled) { + escapeNorth(); + } + } else { + boolean left = (direction & DIRECTION_LEFT) != 0; + boolean right = (direction & DIRECTION_RIGHT) != 0; + + if (left || right) { + // Cannot offset on the suggestion container because as it scrolls those + // values change + offsetRect(mRect, mRootView); + MarginLayoutParams lp = + (MarginLayoutParams) mSuggestionsContainer.getLayoutParams(); + int leftSide = mRect.left + lp.leftMargin; + int rightSide = mRect.right - lp.rightMargin; + int index = startFocus.index + (left ? -1 : 1); + + View suggestView = mSuggestions.getChildAt(index); + if (suggestView != null) { + offsetRect(mRect, suggestView); + + if (mRect.left < leftSide && mRect.right > rightSide) { + mRect.left = leftSide; + mRect.right = rightSide; + } else if (mRect.left < leftSide) { + mRect.right = leftSide + mRect.width(); + mRect.left = leftSide; + } else if (mRect.right > rightSide) { + mRect.left = rightSide - mRect.width(); + mRect.right = rightSide; + } + + suggestView.requestFocus(); + LeanbackUtils.sendAccessibilityEvent( + suggestView.findViewById(R.id.text), true); + configureFocus(nextFocus, mRect, index, KeyFocus.TYPE_SUGGESTION); + } + } + } + break; + case KeyFocus.TYPE_MAIN: + Key key = getKey(startFocus.type, startFocus.index); + // Step within the view. Using height because all keys are the same height + // and widths vary. Half the height is to ensure the next key is reached + float extraSlide = startFocus.rect.height()/2.0f; + float x = startFocus.rect.centerX(); + float y = startFocus.rect.centerY(); + if (startFocus.code == LeanbackKeyboardView.ASCII_SPACE) { + // if we're moving off of space, use the old x position for memory + x = mX; + } + if ((direction & DIRECTION_LEFT) != 0) { + if ((key.edgeFlags & Keyboard.EDGE_LEFT) == 0) { + // not on the left edge of the kb + x = startFocus.rect.left - extraSlide; + } + } else if ((direction & DIRECTION_RIGHT) != 0) { + if ((key.edgeFlags & Keyboard.EDGE_RIGHT) != 0) { + // jump to the action button + offsetRect(mRect, mActionButtonView); + x = mRect.centerX(); + } else { + x = startFocus.rect.right + extraSlide; + } + } + // Don't need any special handling for up/down due to + // layout positioning. If the layout changes this should be + // reconsidered. + if ((direction & DIRECTION_UP) != 0) { + y -= startFocus.rect.height() * DIRECTION_STEP_MULTIPLIER; + } else if ((direction & DIRECTION_DOWN) != 0) { + y += startFocus.rect.height() * DIRECTION_STEP_MULTIPLIER; + } + getPhysicalPosition(x, y, mTempPoint); + validNextFocus = getBestFocus(x, y, nextFocus); + break; + } + + return validNextFocus; + } + + private PointF getTouchSnapPosition() { + PointF snapPos = new PointF(); + getPhysicalPosition(mCurrKeyInfo.rect.centerX(), mCurrKeyInfo.rect.centerY(), snapPos); + return snapPos; + } + + public void clearSuggestions() { + mSuggestions.removeAllViews(); + + if (getCurrFocus().type == KeyFocus.TYPE_SUGGESTION) { + resetFocusCursor(); + } + } + + public void updateSuggestions(ArrayList<String> suggestions) { + final int oldCount = mSuggestions.getChildCount(); + final int newCount = suggestions.size(); + + if (newCount < oldCount) { + // remove excess views + mSuggestions.removeViews(newCount, oldCount-newCount); + } else if (newCount > oldCount) { + // add more + for (int i = oldCount; i < newCount; i++) { + View suggestion = mContext.getLayoutInflater() + .inflate(R.layout.candidate, null); + mSuggestions.addView(suggestion); + } + } + + for (int i = 0; i < newCount; i++) { + Button suggestion = + (Button) mSuggestions.getChildAt(i).findViewById(R.id.text); + suggestion.setText(suggestions.get(i)); + suggestion.setContentDescription(suggestions.get(i)); + } + + if (getCurrFocus().type == KeyFocus.TYPE_SUGGESTION) { + resetFocusCursor(); + } + } + + /** + * Moves the selector back to the entry point key (T in general) + */ + public void resetFocusCursor() { + // T is the best starting letter, it's in the 5th column and 2nd row, + // this approximates that location + double x = 0.45; + double y = 0.375; + offsetRect(mRect, mMainKeyboardView); + mX = (float)(mRect.left + x*mRect.width()); + mY = (float)(mRect.top + y*mRect.height()); + getBestFocus(mX, mY, mTempKeyInfo); + setKbFocus(mTempKeyInfo, true, false); + + setTouchStateInternal(TOUCH_STATE_NO_TOUCH); + mSelectorAnimator.reverse(); + mSelectorAnimator.end(); + } + + private void setTouchStateInternal(int state) { + mTouchState = state; + } + + private void setShiftState(int state) { + mMainKeyboardView.setShiftState(state); + } + + private void startRecognition(Context context) { + mRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); + mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, + RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); + mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); + mSpeechRecognizer.setRecognitionListener(new RecognitionListener() { + float peakRmsLevel = 0; + int rmsCounter = 0; + + @Override + public void onBeginningOfSpeech() { + mVoiceButtonView.showRecording(); + } + + @Override + public void onEndOfSpeech() { + mVoiceButtonView.showRecognizing(); + mVoiceOn = false; + } + + @Override + public void onError(int error) { + cancelVoiceRecording(); + switch (error) { + case SpeechRecognizer.ERROR_NO_MATCH: + Log.d(TAG, "recognizer error no match"); + break; + case SpeechRecognizer.ERROR_SERVER: + Log.d(TAG, "recognizer error server error"); + break; + case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: + Log.d(TAG, "recognizer error speech timeout"); + break; + case SpeechRecognizer.ERROR_CLIENT: + Log.d(TAG, "recognizer error client error"); + break; + default: + Log.d(TAG, "recognizer other error " + error); + break; + } + } + + @Override + public synchronized void onPartialResults(Bundle partialResults) { + } + + @Override + public void onReadyForSpeech(Bundle params) { + mVoiceButtonView.showListening(); + } + + @Override + public void onEvent(int eventType, Bundle params) { + } + + @Override + public void onBufferReceived(byte[] buffer) { + } + + @Override + public synchronized void onRmsChanged(float rmsdB) { + + mVoiceOn = true; + mSpeechLevelSource.setSpeechLevel((rmsdB < 0) ? 0 : (int) (10 * rmsdB)); + peakRmsLevel = Math.max(rmsdB, peakRmsLevel); + rmsCounter++; + + if (rmsCounter > 100 && peakRmsLevel == 0) { + mVoiceButtonView.showNotListening(); + } + } + + @Override + public void onResults(Bundle results) { + final ArrayList<String> matches = + results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); + if (matches != null) { + if (mVoiceListener != null) { + mVoiceListener.onVoiceResult(matches.get(0)); + } + } + + cancelVoiceRecording(); + } + }); + mSpeechRecognizer.startListening(mRecognizerIntent); + } + + public boolean isMiniKeyboardOnScreen() { + return mMainKeyboardView.isMiniKeyboardOnScreen(); + } + + public boolean onKeyLongPress() { + if (mCurrKeyInfo.code == Keyboard.KEYCODE_SHIFT) { + onToggleCapsLock(); + setTouchState(TOUCH_STATE_NO_TOUCH); + return true; + } else if (mCurrKeyInfo.type == KeyFocus.TYPE_MAIN) { + mMainKeyboardView.onKeyLongPress(); + if (mMainKeyboardView.isMiniKeyboardOnScreen()) { + mMiniKbKeyIndex = mCurrKeyInfo.index; + moveFocusToIndex(mMainKeyboardView.getBaseMiniKbIndex(), KeyFocus.TYPE_MAIN); + return true; + } + } + + return false; + } + + private void moveFocusToIndex(int index, int type) { + Key key = mMainKeyboardView.getKey(index); + configureFocus(mTempKeyInfo, mRect, index, key, type); + setTouchState(TOUCH_STATE_NO_TOUCH); + setKbFocus(mTempKeyInfo, true, true); + } + + private void onToggleCapsLock() { + onShiftDoubleClick(isCapsLockOn()); + } + + public void onShiftDoubleClick(boolean wasCapsLockOn) { + setShiftState( + wasCapsLockOn ? LeanbackKeyboardView.SHIFT_OFF : LeanbackKeyboardView.SHIFT_LOCKED); + } + + public boolean isCapsLockOn() { + return mMainKeyboardView.getShiftState() == LeanbackKeyboardView.SHIFT_LOCKED; + } +}
diff --git a/src/com/android/inputmethod/leanback/LeanbackKeyboardController.java b/src/com/android/inputmethod/leanback/LeanbackKeyboardController.java new file mode 100644 index 0000000..93fc80d --- /dev/null +++ b/src/com/android/inputmethod/leanback/LeanbackKeyboardController.java
@@ -0,0 +1,600 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback; + +import android.graphics.PointF; +import android.inputmethodservice.InputMethodService; +import android.inputmethodservice.Keyboard; +import android.inputmethodservice.Keyboard.Key; +import android.util.Log; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.inputmethod.EditorInfo; + +import com.android.inputmethod.leanback.LeanbackKeyboardContainer.KeyFocus; + +import java.util.ArrayList; +/** + * Holds logic for the keyboard views. This includes things like when to + * snap, when to switch keyboards, etc. It provides callbacks for when actions + * that need to be handled at the IME level occur (when text is entered, when + * the action should be performed). + */ +public class LeanbackKeyboardController implements LeanbackKeyboardContainer.VoiceListener, + LeanbackKeyboardContainer.DismissListener { + private static final String TAG = "LbKbController"; + private static final boolean DEBUG = false; + + /** + * The amount of time to block movement after a button down was detected. + */ + public static final int CLICK_MOVEMENT_BLOCK_DURATION_MS = 500; + + /** + * The minimum distance in pixels before the view will transition to the + * move state. + */ + public float mResizeSquareDistance; + + // keep track of the most recent key changes and their times so we can + // revert motion caused by clicking + private static final int KEY_CHANGE_HISTORY_SIZE = 10; + private static final long KEY_CHANGE_REVERT_TIME_MS = 100; + + /** + * This listener reports high level actions that have occurred, such as + * text entry (from keys or voice) or the action button being pressed. + */ + public interface InputListener { + public static final int ENTRY_TYPE_STRING = 0; + public static final int ENTRY_TYPE_BACKSPACE = 1; + public static final int ENTRY_TYPE_SUGGESTION = 2; + public static final int ENTRY_TYPE_LEFT = 3; + public static final int ENTRY_TYPE_RIGHT = 4; + public static final int ENTRY_TYPE_ACTION = 5; + public static final int ENTRY_TYPE_VOICE = 6; + public static final int ENTRY_TYPE_DISMISS = 7; + public static final int ENTRY_TYPE_VOICE_DISMISS = 8; + + /** + * Sent when the user has selected something that should affect the text + * field, such as entering a character, selecting the action, or + * finishing a voice action. + * + * @param type The type of key selected + * @param keyCode the key code of the key if applicable + * @param result The text entered if applicable + */ + public void onEntry(int type, int keyCode, CharSequence result); + } + + private static final class KeyChange { + public long time; + public PointF position; + + public KeyChange(long time, PointF position) { + this.time = time; + this.position = position; + } + } + + private class DoubleClickDetector { + final long DOUBLE_CLICK_TIMEOUT_MS = 200; + long mFirstClickTime = 0; + boolean mFirstClickShiftLocked; + + public void reset() { + mFirstClickTime = 0; + } + + public void addEvent(long currTime) { + if (currTime - mFirstClickTime > DOUBLE_CLICK_TIMEOUT_MS) { + mFirstClickTime = currTime; + mFirstClickShiftLocked = mContainer.isCapsLockOn(); + commitKey(); + } else { + mContainer.onShiftDoubleClick(mFirstClickShiftLocked); + reset(); + } + } + } + + private DoubleClickDetector mDoubleClickDetector = new DoubleClickDetector(); + + private View.OnLayoutChangeListener mOnLayoutChangeListener + = new View.OnLayoutChangeListener() { + + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, + int oldLeft, int oldTop, int oldRight, int oldBottom) { + int w = right - left; + int h = bottom - top; + int oldW = oldRight - oldLeft; + int oldH = oldBottom - oldTop; + if (w > 0 && h > 0) { + if (w != oldW || h != oldH) { + initInputView(); + } + } + } + }; + + private InputMethodService mContext; + private InputListener mInputListener; + private LeanbackKeyboardContainer mContainer; + + private LeanbackKeyboardContainer.KeyFocus mDownFocus = + new LeanbackKeyboardContainer.KeyFocus(); + private LeanbackKeyboardContainer.KeyFocus mTempFocus = + new LeanbackKeyboardContainer.KeyFocus(); + + ArrayList<KeyChange> mKeyChangeHistory = new ArrayList<KeyChange>(KEY_CHANGE_HISTORY_SIZE + 1); + private PointF mTempPoint = new PointF(); + + private boolean mKeyDownReceived = false; + private boolean mLongPressHandled = false; + private KeyFocus mKeyDownKeyFocus; + private int mMoveCount; + + public LeanbackKeyboardController(InputMethodService context, InputListener listener) { + this(context, listener, new LeanbackKeyboardContainer(context)); + } + + LeanbackKeyboardController(InputMethodService context, InputListener listener, + LeanbackKeyboardContainer container) { + mContext = context; + mResizeSquareDistance = context.getResources().getDimension(R.dimen.resize_move_distance); + mResizeSquareDistance *= mResizeSquareDistance; + mInputListener = listener; + setKeyboardContainer(container); + mContainer.setVoiceListener(this); + mContainer.setDismissListener(this); + } + + /** + * This method is called when we start the input at a NEW input field. + */ + public void onStartInput(EditorInfo attribute) { + if (mContainer != null) { + mContainer.onStartInput(attribute); + initInputView(); + } + } + + /** + * This method is called by whenever we bring up the IME at an input field. + */ + public void onStartInputView() { + mKeyDownReceived = false; + if (mContainer != null) { + mContainer.onStartInputView(); + } + mDoubleClickDetector.reset(); + } + + /** + * This method sets the pixel positions in mSpaceTracker to match the + * current KeyFocus in {@link LeanbackKeyboardContainer} This method is called + * when the keyboard layout is complete, after + * {@link LeanbackKeyboardContainer.onInitInputView}, to initialize the starting + * position of mSpaceTracker; and in onUp to reset the pixel position in + * mSpaceTracker. + */ + private void updatePositionToCurrentFocus() { + PointF currPosition = getCurrentKeyPosition(); + if (currPosition != null) { + } + } + + private void initInputView() { + mContainer.onInitInputView(); + updatePositionToCurrentFocus(); + } + + private PointF getCurrentKeyPosition() { + if (mContainer != null) { + LeanbackKeyboardContainer.KeyFocus initialKeyInfo = mContainer.getCurrFocus(); + return new PointF(initialKeyInfo.rect.centerX(), initialKeyInfo.rect.centerY()); + } + return null; + } + + private void performBestSnap(long time) { + KeyFocus focus = mContainer.getCurrFocus(); + mTempPoint.x = focus.rect.centerX(); + mTempPoint.y = focus.rect.centerY(); + PointF bestSnap = getBestSnapPosition(mTempPoint, time); + mContainer.getBestFocus(bestSnap.x, bestSnap.y, mTempFocus); + mContainer.setFocus(mTempFocus); + updatePositionToCurrentFocus(); + } + + private PointF getBestSnapPosition(PointF currPoint, long currTime) { + if (mKeyChangeHistory.size() <= 1) { + return currPoint; + } + for (int i = 0; i < mKeyChangeHistory.size() - 1; i++) { + KeyChange change = mKeyChangeHistory.get(i); + KeyChange nextChange = mKeyChangeHistory.get(i + 1); + if (currTime - nextChange.time < KEY_CHANGE_REVERT_TIME_MS) { + if (DEBUG) { + Log.d(TAG, "Reverting keychange to " + change.position.toString()); + } + // Return the oldest key change within the revert window and + // clear all key changes + currPoint = change.position; + // on a revert, clear the history and add the reverting point. + // This way the reverted point will be preferred if there's + // another fast change before the next call. + mKeyChangeHistory.clear(); + mKeyChangeHistory.add(new KeyChange(currTime, currPoint)); + break; + } + } + return currPoint; + } + + public void setKeyboardContainer(LeanbackKeyboardContainer container) { + mContainer = container; + container.getView().addOnLayoutChangeListener(mOnLayoutChangeListener); + } + + public View getView() { + if (mContainer != null) { + return mContainer.getView(); + } + return null; + } + + public boolean areSuggestionsEnabled() { + if (mContainer != null) { + return mContainer.areSuggestionsEnabled(); + } + return false; + } + + public boolean enableAutoEnterSpace() { + if (mContainer != null) { + return mContainer.enableAutoEnterSpace(); + } + return false; + } + + public boolean onKeyDown(int keyCode, KeyEvent event) { + mDownFocus.set(mContainer.getCurrFocus()); + // this will handle other events, e.g. hardware keyboard + if (isEnterKey(keyCode)) { + mKeyDownReceived = true; + // first keyDown + if (event.getRepeatCount() == 0) { + mContainer.setTouchState(LeanbackKeyboardContainer.TOUCH_STATE_CLICK); + } + } + + return handleKeyDownEvent(keyCode, event.getRepeatCount()); + } + + public boolean onKeyUp(int keyCode, KeyEvent event) { + // this only handles InputDevice.SOURCE_TOUCH_NAVIGATION events + if (isEnterKey(keyCode)) { + if (!mKeyDownReceived || mLongPressHandled) { + mLongPressHandled = false; + return true; + } + mKeyDownReceived = false; + if (mContainer.getTouchState() == LeanbackKeyboardContainer.TOUCH_STATE_CLICK) { + mContainer.setTouchState(LeanbackKeyboardContainer.TOUCH_STATE_TOUCH_SNAP); + } + } + return handleKeyUpEvent(keyCode, event.getEventTime()); + } + + public boolean onGenericMotionEvent(MotionEvent event) { + return false; + } + + private boolean onDirectionalMove(int dir) { + if (mContainer.getNextFocusInDirection(dir, mDownFocus, mTempFocus)) { + mContainer.setFocus(mTempFocus); + mDownFocus.set(mTempFocus); + + clearKeyIfNecessary(); + } + + return true; + } + + private void clearKeyIfNecessary() { + mMoveCount++; + if (mMoveCount >= 3) { + mMoveCount = 0; + mKeyDownKeyFocus = null; + } + } + + private void commitKey() { + commitKey(mContainer.getCurrFocus()); + } + + private void commitKey(LeanbackKeyboardContainer.KeyFocus keyFocus) { + if (mContainer == null || keyFocus == null) { + return; + } + + switch (keyFocus.type) { + case KeyFocus.TYPE_VOICE: + // voice doesn't have to go through the IME + mContainer.onVoiceClick(); + break; + case KeyFocus.TYPE_ACTION: + mInputListener.onEntry(InputListener.ENTRY_TYPE_ACTION, 0, null); + break; + case KeyFocus.TYPE_SUGGESTION: + mInputListener.onEntry(InputListener.ENTRY_TYPE_SUGGESTION, 0, + mContainer.getSuggestionText(keyFocus.index)); + break; + default: + Key key = mContainer.getKey(keyFocus.type, keyFocus.index); + if (key != null) { + int code = key.codes[0]; + CharSequence label = key.label; + handleCommitKeyboardKey(code, label); + } + break; + + } + } + + private void handleCommitKeyboardKey(int code, CharSequence label) { + switch (code) { + case Keyboard.KEYCODE_MODE_CHANGE: + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.d(TAG, "mode change"); + } + mContainer.onModeChangeClick(); + break; + case LeanbackKeyboardView.KEYCODE_CAPS_LOCK: + mContainer.onShiftDoubleClick(mContainer.isCapsLockOn()); + break; + case Keyboard.KEYCODE_SHIFT: + // TODO invalidate and draw a different shift + // key in the function keyboard + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.d(TAG, "shift"); + } + mContainer.onShiftClick(); + break; + case LeanbackKeyboardView.KEYCODE_DISMISS_MINI_KEYBOARD: + mContainer.dismissMiniKeyboard(); + break; + case LeanbackKeyboardView.KEYCODE_LEFT: + mInputListener.onEntry(InputListener.ENTRY_TYPE_LEFT, 0, null); + break; + case LeanbackKeyboardView.KEYCODE_RIGHT: + mInputListener.onEntry(InputListener.ENTRY_TYPE_RIGHT, 0, null); + break; + case Keyboard.KEYCODE_DELETE: + mInputListener.onEntry(InputListener.ENTRY_TYPE_BACKSPACE, 0, null); + break; + case LeanbackKeyboardView.ASCII_SPACE: + mInputListener.onEntry(InputListener.ENTRY_TYPE_STRING, code, " "); + mContainer.onSpaceEntry(); + break; + case LeanbackKeyboardView.ASCII_PERIOD: + mInputListener.onEntry(InputListener.ENTRY_TYPE_STRING, code, label); + mContainer.onPeriodEntry(); + break; + case LeanbackKeyboardView.KEYCODE_VOICE: + mContainer.startVoiceRecording(); + break; + // fall through to default with this label + default: + mInputListener.onEntry(InputListener.ENTRY_TYPE_STRING, code, label); + mContainer.onTextEntry(); + + if (mContainer.isMiniKeyboardOnScreen()) { + mContainer.dismissMiniKeyboard(); + } + break; + } + } + + private boolean handleKeyDownEvent(int keyCode, int eventRepeatCount) { + keyCode = getSimplifiedKey(keyCode); + + // never trap back + if (keyCode == KeyEvent.KEYCODE_BACK) { + mContainer.cancelVoiceRecording(); + return false; + } + + // capture all key downs when voice is visible + if (mContainer.isVoiceVisible()) { + if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { + mContainer.cancelVoiceRecording(); + } + return true; + } + + boolean handled = true; + switch(keyCode) { + // Direction keys are handled on down to allow repeated movement + case KeyEvent.KEYCODE_DPAD_LEFT: + handled = onDirectionalMove(LeanbackKeyboardContainer.DIRECTION_LEFT); + break; + case KeyEvent.KEYCODE_DPAD_RIGHT: + handled = onDirectionalMove(LeanbackKeyboardContainer.DIRECTION_RIGHT); + break; + case KeyEvent.KEYCODE_DPAD_UP: + handled = onDirectionalMove(LeanbackKeyboardContainer.DIRECTION_UP); + break; + case KeyEvent.KEYCODE_DPAD_DOWN: + handled = onDirectionalMove(LeanbackKeyboardContainer.DIRECTION_DOWN); + break; + case KeyEvent.KEYCODE_BUTTON_X: + handleCommitKeyboardKey(Keyboard.KEYCODE_DELETE, null); + break; + case KeyEvent.KEYCODE_BUTTON_Y: + handleCommitKeyboardKey(LeanbackKeyboardView.ASCII_SPACE, null); + break; + case KeyEvent.KEYCODE_BUTTON_L1: + handleCommitKeyboardKey(LeanbackKeyboardView.KEYCODE_LEFT, null); + break; + case KeyEvent.KEYCODE_BUTTON_R1: + handleCommitKeyboardKey(LeanbackKeyboardView.KEYCODE_RIGHT, null); + break; + // these are handled on up + case KeyEvent.KEYCODE_DPAD_CENTER: + if (eventRepeatCount == 0) { + mMoveCount = 0; + mKeyDownKeyFocus = new KeyFocus(); + mKeyDownKeyFocus.set(mContainer.getCurrFocus()); + } else if (eventRepeatCount == 1) { + if (handleKeyLongPress(keyCode)) { + mKeyDownKeyFocus = null; + } + } + + if (isKeyHandledOnKeyDown(mContainer.getCurrKeyCode())) { + commitKey(); + } + break; + // also handled on up + case KeyEvent.KEYCODE_BUTTON_THUMBL: + case KeyEvent.KEYCODE_BUTTON_THUMBR: + case KeyEvent.KEYCODE_ENTER: + break; + default: + handled = false; + break; + } + return handled; + } + + private boolean handleKeyLongPress(int keyCode) { + mLongPressHandled = isEnterKey(keyCode) && mContainer.onKeyLongPress(); + if (mContainer.isMiniKeyboardOnScreen()) { + Log.d(TAG, "mini keyboard shown after long press"); + } + return mLongPressHandled; + } + + private boolean isKeyHandledOnKeyDown(int currKeyCode) { + return currKeyCode == Keyboard.KEYCODE_DELETE + || currKeyCode == LeanbackKeyboardView.KEYCODE_LEFT + || currKeyCode == LeanbackKeyboardView.KEYCODE_RIGHT; + } + + /** + * This handles all key events from an input device + * @param keyCode + * @return true if the key was handled, false otherwise + */ + private boolean handleKeyUpEvent(int keyCode, long currTime) { + keyCode = getSimplifiedKey(keyCode); + + // never trap back + if (keyCode == KeyEvent.KEYCODE_BACK) { + return false; + } + + // capture all key ups when voice is visible + if (mContainer.isVoiceVisible()) { + return true; + } + + boolean handled = true; + switch(keyCode) { + // Some keys are handled on down to allow repeats + case KeyEvent.KEYCODE_DPAD_LEFT: + case KeyEvent.KEYCODE_DPAD_RIGHT: + case KeyEvent.KEYCODE_DPAD_UP: + case KeyEvent.KEYCODE_DPAD_DOWN: + clearKeyIfNecessary(); + break; + case KeyEvent.KEYCODE_BUTTON_X: + case KeyEvent.KEYCODE_BUTTON_Y: + case KeyEvent.KEYCODE_BUTTON_L1: + case KeyEvent.KEYCODE_BUTTON_R1: + break; + case KeyEvent.KEYCODE_DPAD_CENTER: + if (mContainer.getCurrKeyCode() == Keyboard.KEYCODE_SHIFT) { + mDoubleClickDetector.addEvent(currTime); + } else if (!isKeyHandledOnKeyDown(mContainer.getCurrKeyCode())) { + commitKey(mKeyDownKeyFocus); + } + break; + case KeyEvent.KEYCODE_BUTTON_THUMBL: + handleCommitKeyboardKey(Keyboard.KEYCODE_MODE_CHANGE, null); + break; + case KeyEvent.KEYCODE_BUTTON_THUMBR: + handleCommitKeyboardKey(LeanbackKeyboardView.KEYCODE_CAPS_LOCK, null); + break; + case KeyEvent.KEYCODE_ENTER: + if (mContainer != null) { + KeyFocus keyFocus = mContainer.getCurrFocus(); + if (keyFocus != null && keyFocus.type == KeyFocus.TYPE_SUGGESTION) { + mInputListener.onEntry(InputListener.ENTRY_TYPE_SUGGESTION, 0, + mContainer.getSuggestionText(keyFocus.index)); + } + } + mInputListener.onEntry(InputListener.ENTRY_TYPE_DISMISS, 0, null); + break; + default: + handled = false; + break; + } + return handled; + } + + public void updateSuggestions(ArrayList<String> suggestions) { + if (mContainer != null) { + mContainer.updateSuggestions(suggestions); + } + } + + @Override + public void onVoiceResult(String result) { + mInputListener.onEntry(InputListener.ENTRY_TYPE_VOICE, 0, result); + } + + @Override + public void onDismiss(boolean fromVoice) { + if (fromVoice) { + mInputListener.onEntry(InputListener.ENTRY_TYPE_VOICE_DISMISS, 0, null); + } else { + mInputListener.onEntry(InputListener.ENTRY_TYPE_DISMISS, 0, null); + } + } + + private boolean isEnterKey(int keyCode) { + return getSimplifiedKey(keyCode) == KeyEvent.KEYCODE_DPAD_CENTER; + } + + private int getSimplifiedKey(int keyCode) { + // simplify for dpad center + keyCode = (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || + keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER || + keyCode == KeyEvent.KEYCODE_BUTTON_A) ? KeyEvent.KEYCODE_DPAD_CENTER : keyCode; + + // simply for back + keyCode = (keyCode == KeyEvent.KEYCODE_BUTTON_B ? KeyEvent.KEYCODE_BACK : keyCode); + + return keyCode; + } +}
diff --git a/src/com/android/inputmethod/leanback/LeanbackKeyboardView.java b/src/com/android/inputmethod/leanback/LeanbackKeyboardView.java new file mode 100644 index 0000000..45d52e8 --- /dev/null +++ b/src/com/android/inputmethod/leanback/LeanbackKeyboardView.java
@@ -0,0 +1,570 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback; + +import android.content.Context; + +import java.util.ArrayList; + +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Paint.Align; +import android.graphics.Rect; +import android.graphics.Typeface; +import android.inputmethodservice.Keyboard; +import android.inputmethodservice.Keyboard.Key; +import android.inputmethodservice.Keyboard.Row; +import android.media.AudioManager; +import android.provider.Settings; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class LeanbackKeyboardView extends FrameLayout { + + private static final String TAG = "LbKbView"; + private static final boolean DEBUG = false; + + private static final int NOT_A_KEY = -1; + + public static final int SHIFT_OFF = 0; + public static final int SHIFT_ON = 1; + public static final int SHIFT_LOCKED = 2; + private int mShiftState; + + private final float mFocusedScale; + private final float mClickedScale; + private final int mClickAnimDur; + private final int mUnfocusStartDelay; + private final int mInactiveMiniKbAlpha; + + private Keyboard mKeyboard; + private KeyHolder[] mKeys; + private ImageView[] mKeyImageViews; + + private int mFocusIndex; + private boolean mFocusClicked; + private View mCurrentFocusView; + private boolean mMiniKeyboardOnScreen; + + /** + * Special keycodes + */ + public static final int ASCII_SPACE = 32; + public static final int ASCII_PERIOD = 46; + public static final int KEYCODE_SHIFT = -1; + public static final int KEYCODE_SYM_TOGGLE = -2; + public static final int KEYCODE_LEFT = -3; + public static final int KEYCODE_RIGHT = -4; + public static final int KEYCODE_DELETE = -5; + public static final int KEYCODE_CAPS_LOCK = -6; + public static final int KEYCODE_VOICE = -7; + public static final int KEYCODE_DISMISS_MINI_KEYBOARD = -8; + + private int mBaseMiniKbIndex = -1; + + private Paint mPaint; + private Rect mPadding; + private int mModeChangeTextSize; + private int mKeyTextSize; + private int mKeyTextColor; + private int mRowCount; + private int mColCount; + + private class KeyHolder { + public boolean isInMiniKb = false; + public boolean isInvertible = false; + public Key key; + + public KeyHolder(Key key) { + this.key = key; + } + } + + public LeanbackKeyboardView(Context context, AttributeSet attrs) { + super(context, attrs); + + final Resources res = context.getResources(); + TypedArray a = context.getTheme() + .obtainStyledAttributes(attrs, R.styleable.LeanbackKeyboardView, 0, 0); + mRowCount = a.getInteger(R.styleable.LeanbackKeyboardView_rowCount, -1); + mColCount = a.getInteger(R.styleable.LeanbackKeyboardView_columnCount, -1); + + mKeyTextSize = (int) res.getDimension(R.dimen.key_font_size); + + mPaint = new Paint(); + mPaint.setAntiAlias(true); + mPaint.setTextSize(mKeyTextSize); + mPaint.setTextAlign(Align.CENTER); + mPaint.setAlpha(255); + + mPadding = new Rect(0, 0, 0, 0); + + mModeChangeTextSize = (int) res.getDimension(R.dimen.function_key_mode_change_font_size); + + mKeyTextColor = res.getColor(R.color.key_text_default); + + mFocusIndex = -1; + + mShiftState = SHIFT_OFF; + + mFocusedScale = res.getFraction(R.fraction.focused_scale, 1, 1); + mClickedScale = res.getFraction(R.fraction.clicked_scale, 1, 1); + mClickAnimDur = res.getInteger(R.integer.clicked_anim_duration); + mUnfocusStartDelay = res.getInteger(R.integer.unfocused_anim_delay); + + mInactiveMiniKbAlpha = res.getInteger(R.integer.inactive_mini_kb_alpha); + } + + /** + * Get the total rows of the keyboard + */ + public int getRowCount() { + return mRowCount; + } + + /** + * Get the total columns of the keyboard + */ + public int getColCount() { + return mColCount; + } + + /** + * Get the key at the specified index + * + * @param index + * @return null if the keyboardView has not been assigned a keyboard + */ + public Key getKey(int index) { + if (mKeys == null || mKeys.length == 0 || index < 0 || index > mKeys.length) { + return null; + } + return mKeys[index].key; + } + + /** + * Get the current focused key + */ + public Key getFocusedKey() { + return mFocusIndex == -1 ? null : mKeys[mFocusIndex].key; + } + + /** + * Get the keyboard that's attached to the keyboardView + */ + public Keyboard getKeyboard() { + return mKeyboard; + } + + /** + * Get the key that's the nearest to the given position + * + * @param x position in pixels + * @param y position in pixels + */ + public int getNearestIndex(float x, float y) { + if (mKeys == null || mKeys.length == 0) { + return 0; + } + x -= getPaddingLeft(); + y -= getPaddingTop(); + float height = getMeasuredHeight() - getPaddingTop() - getPaddingBottom(); + float width = getMeasuredWidth() - getPaddingLeft() - getPaddingRight(); + int rows = getRowCount(); + int cols = getColCount(); + int row = (int) (y / height * rows); + if (row < 0) { + row = 0; + } else if (row >= rows) { + row = rows - 1; + } + int col = (int) (x / width * cols); + if (col < 0) { + col = 0; + } else if (col >= cols) { + col = cols - 1; + } + int index = mColCount * row + col; + + // at space key (space key is 7 keys wide) + if (index > 46 && index < 53) { + index = 46; + } + + // beyond space, remove 6 extra slots for space + if (index >= 53) { + index -= 6; + } + + if (index < 0) { + index = 0; + } else if (index >= mKeys.length) { + index = mKeys.length - 1; + } + + return index; + } + + /** + * Attaches a keyboard to this view. The keyboard can be switched at any + * time and the view will re-layout itself to accommodate the keyboard. + * + * @see Keyboard + * @see #getKeyboard() + * @param keyboard the keyboard to display in this view + */ + public void setKeyboard(Keyboard keyboard) { + // Remove any pending messages + removeMessages(); + mKeyboard = keyboard; + setKeys(mKeyboard.getKeys()); + + // reset shift state + int shiftState = mShiftState; + mShiftState = -1; + setShiftState(shiftState); + + requestLayout(); + invalidateAllKeys(); + // computeProximityThreshold(keyboard); // TODO + } + + private ImageView createKeyImageView(int keyIndex) { + + final Rect padding = mPadding; + final int kbdPaddingLeft = getPaddingLeft(); + final int kbdPaddingTop = getPaddingTop(); + final KeyHolder keyHolder = mKeys[keyIndex]; + final Key key = keyHolder.key; + + // Switch the character to uppercase if shift is pressed + adjustCase(keyHolder); + String label = key.label == null ? null : key.label.toString(); + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.d(TAG, "LABEL: " + key.label + "->" + label); + } + + Bitmap bitmap = Bitmap.createBitmap(key.width, key.height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + final Paint paint = mPaint; + paint.setColor(mKeyTextColor); + + canvas.drawARGB(0, 0, 0, 0); + + if (key.icon != null) { + if (key.codes[0] == Keyboard.KEYCODE_SHIFT) { + switch (mShiftState) { + case SHIFT_OFF: + key.icon = getContext().getResources().getDrawable(R.drawable.ic_ime_shift_off); + break; + case SHIFT_ON: + key.icon = getContext().getResources().getDrawable(R.drawable.ic_ime_shift_on); + break; + case SHIFT_LOCKED: + key.icon = getContext().getResources() + .getDrawable(R.drawable.ic_ime_shift_lock_on); + break; + } + } + final int drawableX = (key.width - padding.left - padding.right + - key.icon.getIntrinsicWidth()) / 2 + padding.left; + final int drawableY = (key.height - padding.top - padding.bottom + - key.icon.getIntrinsicHeight()) / 2 + padding.top; + canvas.translate(drawableX, drawableY); + key.icon.setBounds(0, 0, + key.icon.getIntrinsicWidth(), key.icon.getIntrinsicHeight()); + key.icon.draw(canvas); + canvas.translate(-drawableX, -drawableY); + } else if (label != null) { + // For characters, use large font. For labels like "Done", use + // small font. + if (label.length() > 1) { + paint.setTextSize(mModeChangeTextSize); + paint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL)); + } else { + paint.setTextSize(mKeyTextSize); + paint.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL)); + } + // Draw the text + canvas.drawText(label, + (key.width - padding.left - padding.right) / 2 + + padding.left, + (key.height - padding.top - padding.bottom) / 2 + + (paint.getTextSize() - paint.descent()) / 2 + padding.top, + paint); + // Turn off drop shadow + paint.setShadowLayer(0, 0, 0, 0); + } + + ImageView view = new ImageView(getContext()); + view.setImageBitmap(bitmap); + view.setContentDescription(label); + addView(view, new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT)); + + view.setX(key.x + kbdPaddingLeft); + view.setY(key.y + kbdPaddingTop); + view.setImageAlpha(mMiniKeyboardOnScreen && !keyHolder.isInMiniKb ? + mInactiveMiniKbAlpha : 255); + view.setVisibility(View.VISIBLE); + + return view; + } + + private void createKeyImageViews(KeyHolder[] keys) { + int totalKeys = keys.length; + if (mKeyImageViews != null) { + for (ImageView view : mKeyImageViews) { + this.removeView(view); + } + mKeyImageViews = null; + } + + for (int keyIndex = 0; keyIndex < totalKeys; keyIndex++) { + if (mKeyImageViews == null) { + mKeyImageViews = new ImageView[totalKeys]; + } else if (mKeyImageViews[keyIndex] != null) { + removeView(mKeyImageViews[keyIndex]); + } + mKeyImageViews[keyIndex] = createKeyImageView(keyIndex); + } + } + + private void removeMessages() { + // TODO create mHandler and remove all messages here + } + + /** + * Requests a redraw of the entire keyboard. Calling {@link #invalidate} is + * not sufficient because the keyboard renders the keys to an off-screen + * buffer and an invalidate() only draws the cached buffer. + * + * @see #invalidateKey(int) + */ + public void invalidateAllKeys() { + createKeyImageViews(mKeys); + } + + public void invalidateKey(int keyIndex) { + if (mKeys == null) + return; + if (keyIndex < 0 || keyIndex >= mKeys.length) { + return; + } + if (mKeyImageViews[keyIndex] != null) { + removeView(mKeyImageViews[keyIndex]); + } + mKeyImageViews[keyIndex] = createKeyImageView(keyIndex); + } + + @Override + public void onDraw(Canvas canvas) { + super.onDraw(canvas); + } + + private CharSequence adjustCase(KeyHolder keyHolder) { + CharSequence label = keyHolder.key.label; + + if (label != null && label.length() < 3) { + // if we're adjusting the case of a basic letter in the mini keyboard, + // we want the opposite case + boolean invert = keyHolder.isInMiniKb && keyHolder.isInvertible; + if (mKeyboard.isShifted() ^ invert) { + label = label.toString().toUpperCase(); + } else { + label = label.toString().toLowerCase(); + } + + keyHolder.key.label = label; + } + + return label; + } + + public void setShiftState(int state) { + if (mShiftState == state) { + return; + } + switch (state) { + case SHIFT_OFF: + mKeyboard.setShifted(false); + break; + case SHIFT_ON: + case SHIFT_LOCKED: + mKeyboard.setShifted(true); + break; + } + mShiftState = state; + invalidateAllKeys(); + } + + public int getShiftState() { + return mShiftState; + } + + public boolean isShifted() { + return mShiftState == SHIFT_ON || mShiftState == SHIFT_LOCKED; + } + + public void setFocus(int index, boolean clicked) { + setFocus(index, clicked, true); + } + + public void setFocus(int index, boolean clicked, boolean showFocusScale) { + if (mKeyImageViews == null || mKeyImageViews.length == 0) { + return; + } + if (index < 0 || index >= mKeyImageViews.length) { + index = NOT_A_KEY; + } + + if (index != mFocusIndex || clicked != mFocusClicked) { + if (index != mFocusIndex) { + if (mFocusIndex != NOT_A_KEY) { + LeanbackUtils.sendAccessibilityEvent(mKeyImageViews[mFocusIndex], false); + } + if (index != NOT_A_KEY) { + LeanbackUtils.sendAccessibilityEvent(mKeyImageViews[index], true); + } + } + + if (mCurrentFocusView != null) { + mCurrentFocusView.animate().scaleX(1f).scaleY(1f) + .setInterpolator(LeanbackKeyboardContainer.sMovementInterpolator) + .setStartDelay(mUnfocusStartDelay); + mCurrentFocusView.animate().setDuration(mClickAnimDur) + .setInterpolator(LeanbackKeyboardContainer.sMovementInterpolator) + .setStartDelay(mUnfocusStartDelay); + } + if (index != NOT_A_KEY) { + float scale = clicked ? mClickedScale : (showFocusScale ? mFocusedScale : 1.0f); + mCurrentFocusView = mKeyImageViews[index]; + mCurrentFocusView.animate().scaleX(scale).scaleY(scale) + .setInterpolator(LeanbackKeyboardContainer.sMovementInterpolator) + .setDuration(mClickAnimDur).start(); + } + mFocusIndex = index; + mFocusClicked = clicked; + + // if focusing on a non-mini kb key, dismiss minikb + if (NOT_A_KEY != index && !mKeys[index].isInMiniKb) { + dismissMiniKeyboard(); + } + } + } + + public boolean isMiniKeyboardOnScreen() { + return mMiniKeyboardOnScreen; + } + + public void onKeyLongPress() { + int popupResId = mKeys[mFocusIndex].key.popupResId; + if (popupResId != 0) { + dismissMiniKeyboard(); + mMiniKeyboardOnScreen = true; + Keyboard miniKeyboard = new Keyboard(getContext(), popupResId); + List<Key> accentKeys = miniKeyboard.getKeys(); + int totalAccentKeys = accentKeys.size(); + int baseIndex = mFocusIndex; + int currentRow = mFocusIndex / mColCount; + int nextRow = (mFocusIndex + totalAccentKeys) / mColCount; + // if all accent keys don't fit in a row when aligned with the popup + // key, align the accent keys to the right boundary of that row + if (currentRow != nextRow) { + baseIndex = nextRow * mColCount - totalAccentKeys; + } + mBaseMiniKbIndex = baseIndex; + for (int i = 0; i < totalAccentKeys; i++) { + Key accentKey = accentKeys.get(i); + // inherit the key position and edge flags. this way the xml files for the each + // miniKb don't have to take into account the configuration of the keyboard + // they're being inserted into. + accentKey.x = mKeys[baseIndex + i].key.x; + accentKey.y = mKeys[baseIndex + i].key.y; + accentKey.edgeFlags = mKeys[baseIndex + i].key.edgeFlags; + mKeys[baseIndex + i].key = accentKey; + mKeys[baseIndex + i].isInMiniKb = true; + mKeys[baseIndex + i].isInvertible = (i == 0); + } + + invalidateAllKeys(); + } + } + + public int getBaseMiniKbIndex() { + return mBaseMiniKbIndex; + } + + /** + * @return true if the minikeyboard was on-screen and is now dismissed, false otherwise. + */ + public boolean dismissMiniKeyboard() { + if (mMiniKeyboardOnScreen) { + mMiniKeyboardOnScreen = false; + setKeys(mKeyboard.getKeys()); + invalidateAllKeys(); + return true; + } + + return false; + } + + public void setFocus(int row, int col, boolean clicked) { + setFocus(mColCount * row + col, clicked); + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // For the kids, ya know? + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + // Round up a little + if (mKeyboard == null) { + setMeasuredDimension(getPaddingLeft() + getPaddingRight(), + getPaddingTop() + getPaddingBottom()); + } else { + int width = mKeyboard.getMinWidth() + getPaddingLeft() + getPaddingRight(); + if (MeasureSpec.getSize(widthMeasureSpec) < width + 10) { + width = MeasureSpec.getSize(widthMeasureSpec); + } + setMeasuredDimension(width, mKeyboard.getHeight() + getPaddingTop() + getPaddingBottom()); + } + } + + private void setKeys(List<Key> keys) { + mKeys = new KeyHolder[keys.size()]; + Iterator<Key> itt = keys.iterator(); + for (int i = 0; i < mKeys.length && itt.hasNext(); i++) { + Key k = itt.next(); + mKeys[i] = new KeyHolder(k); + } + } +}
diff --git a/src/com/android/inputmethod/leanback/LeanbackLocales.java b/src/com/android/inputmethod/leanback/LeanbackLocales.java new file mode 100644 index 0000000..4dd785d --- /dev/null +++ b/src/com/android/inputmethod/leanback/LeanbackLocales.java
@@ -0,0 +1,117 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback; + +import java.util.Locale; + +public class LeanbackLocales { + + /* + * -Locales are organized into groups based on keyboard layout (e.g. qwerty, qwertz, azerty) + * -In each group, the most specific layouts (those that specify language AND country) + * are listed first + * -The list of locales are named as such: <keyboard layout>_<country|language>_zone + * (Note: the naming of the list is made as generic as possible, for example if there is only + * one list for a given keyboard layout then the country, language and zone is omitted) + * (Note: country is preferred over language because it is more specific, if no country is + * specified, use language) + * (Note: zone refers to US vs EU, which specifies which type of currency to use + * dollar, euro, or pound) + */ + + /**************************** QWERTY ****************************/ + // QWERTY (EN GB) + public static final Locale BRITISH_ENGLISH = new Locale("en", "GB"); + public static final Locale[] QWERTY_GB = new Locale[] {BRITISH_ENGLISH}; + + // QWERTY (EN IN) + public static final Locale INDIAN_ENGLISH = new Locale("en", "IN"); + public static final Locale[] QWERTY_IN = new Locale[] {INDIAN_ENGLISH}; + + // QWERTY (ES EU) + public static final Locale SPAIN_SPANISH = new Locale("es", "ES"); + public static final Locale GALIC_SPANISH = new Locale("gl", "ES"); + public static final Locale BASQUE_SPANISH = new Locale("eu", "ES"); + public static final Locale[] QWERTY_ES_EU = new Locale[] { + SPAIN_SPANISH, GALIC_SPANISH, BASQUE_SPANISH}; + + // QWERTY (ES US) + public static final Locale OTHER_SPANISH = new Locale("es", ""); + public static final Locale[] QWERTY_ES_US = new Locale[] {OTHER_SPANISH}; + + // QWERTY (AZ) + public static final Locale AZERBAIJANI = new Locale("az", ""); + public static final Locale[] QWERTY_AZ = new Locale[] {AZERBAIJANI}; + + // QWERTY (CA) + public static final Locale CATALAN = new Locale("ca", ""); + public static final Locale[] QWERTY_CA = new Locale[] {CATALAN}; + + // QWERTY (DA) + public static final Locale DANISH = new Locale("da", ""); + public static final Locale[] QWERTY_DA = new Locale[] {DANISH}; + + // QWERTY (ET) + public static final Locale ESTONIAN = new Locale("et", ""); + public static final Locale[] QWERTY_ET = new Locale[] {ESTONIAN}; + + // QWERTY (FI) + public static final Locale FINNISH = new Locale("fi", ""); + public static final Locale[] QWERTY_FI = new Locale[] {FINNISH}; + + // QWERTY (NB) + public static final Locale NORWEGIAN = new Locale("nb", ""); + public static final Locale[] QWERTY_NB = new Locale[] {NORWEGIAN}; + + // QWERTY (SV) + public static final Locale SWEDISH = new Locale("sv", ""); + public static final Locale[] QWERTY_SV = new Locale[] {SWEDISH}; + + // QWERTY (US) + public static final Locale ENGLISH = Locale.ENGLISH; + public static final Locale CANADIAN_FRENCH = Locale.CANADA_FRENCH; + public static final Locale[] QWERTY_US = new Locale[] {ENGLISH, CANADIAN_FRENCH}; + + + /**************************** QWERTZ ****************************/ + + // QWERTZ (CH) + public static final Locale SWISS_GERMAN = new Locale("de", "CH"); + public static final Locale SWISS_ITALIAN = new Locale("it", "CH"); + public static final Locale[] QWERTZ_CH = new Locale[] { SWISS_GERMAN, SWISS_ITALIAN}; + + // QWERTZ + public static final Locale GERMAN = new Locale("de", ""); + public static final Locale CROATIAN = new Locale("hr", ""); + public static final Locale CZECH = new Locale("cs", ""); + public static final Locale SWISS_FRENCH = new Locale("fr", "CH"); + public static final Locale HUNGARIAN = new Locale("hu", ""); + public static final Locale SERBIAN = new Locale("sr", ""); + public static final Locale SLOVENIAN = new Locale("sl", ""); + public static final Locale ALBANIANIAN = new Locale("sq", ""); + public static final Locale[] QWERTZ = new Locale[] { GERMAN, CROATIAN, CZECH, SWISS_FRENCH, + SWISS_ITALIAN, HUNGARIAN,SERBIAN, SLOVENIAN, ALBANIANIAN}; + + + /**************************** AZERTY ****************************/ + + // AZERTY + public static final Locale FRENCH = Locale.FRENCH; + public static final Locale BELGIAN_DUTCH = new Locale("nl", "BE"); + public static final Locale[] AZERTY = new Locale[] {FRENCH, BELGIAN_DUTCH}; + +}
diff --git a/src/com/android/inputmethod/leanback/LeanbackSuggestionsFactory.java b/src/com/android/inputmethod/leanback/LeanbackSuggestionsFactory.java new file mode 100644 index 0000000..9423132 --- /dev/null +++ b/src/com/android/inputmethod/leanback/LeanbackSuggestionsFactory.java
@@ -0,0 +1,120 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback; + +import android.inputmethodservice.InputMethodService; +import android.text.TextUtils; +import android.util.Log; +import android.view.inputmethod.CompletionInfo; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; + +import java.util.ArrayList; + +/** + * This class is used to get suggestions from LatinIme's suggestion engine based + * on the current composing word + */ +public class LeanbackSuggestionsFactory { + + private static final String TAG = "LbSuggestionsFactory"; + private static final boolean DEBUG = Log.isLoggable(TAG, Log.VERBOSE); + + // mode for suggestions + private static final int MODE_DEFAULT = 0; + private static final int MODE_DOMAIN = 1; + private static final int MODE_AUTO_COMPLETE = 2; + + private InputMethodService mContext; + private int mNumSuggestions; + private int mMode; + + // current active suggestions + private final ArrayList<String> mSuggestions = new ArrayList<String>(); + + public LeanbackSuggestionsFactory(InputMethodService context, int maxSuggestions) { + mContext = context; + mNumSuggestions = maxSuggestions; + } + + public void onStartInput(EditorInfo attribute) { + mMode = MODE_DEFAULT; + + if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE) != 0) { + mMode = MODE_AUTO_COMPLETE; + } + + switch (LeanbackUtils.getInputTypeClass(attribute)) { + case EditorInfo.TYPE_CLASS_TEXT: + switch (LeanbackUtils.getInputTypeVariation(attribute)) { + case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS: + case EditorInfo.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS: + mMode = MODE_DOMAIN; + break; + } + break; + } + } + + /** + * call this method in {@link InputMethodService#onDisplayCompletions} to + * insert completions provided by the app in front of the dictionary + * suggestions + */ + public void onDisplayCompletions(CompletionInfo[] completions) { + createSuggestions(); + + // insert completions to the front of suggestions + final int totalCompletions = completions == null ? 0 : completions.length; + for (int i = 0; i < totalCompletions && mSuggestions.size() < mNumSuggestions; i++) { + if (TextUtils.isEmpty(completions[i].getText())) { + break; + } + mSuggestions.add(i, completions[i].getText().toString()); + } + + if (Log.isLoggable(TAG, Log.VERBOSE)) { + for (int i = 0; i < mSuggestions.size(); i++) { + Log.d(TAG, "completion " + i + ": " + mSuggestions.get(i)); + } + } + } + + public boolean shouldSuggestionsAmend() { + return (mMode == MODE_DOMAIN); + } + + public ArrayList<String> getSuggestions() { + return mSuggestions; + } + + public void clearSuggestions() { + mSuggestions.clear(); + } + + public void createSuggestions() { + clearSuggestions(); + + if (mMode == MODE_DOMAIN) { + String[] commonDomains = + mContext.getResources().getStringArray(R.array.common_domains); + for (String domain : commonDomains) { + mSuggestions.add(domain); + } + } + } +}
diff --git a/src/com/android/inputmethod/leanback/LeanbackUtils.java b/src/com/android/inputmethod/leanback/LeanbackUtils.java new file mode 100644 index 0000000..530e851 --- /dev/null +++ b/src/com/android/inputmethod/leanback/LeanbackUtils.java
@@ -0,0 +1,77 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback; + +import android.os.Handler; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.view.inputmethod.EditorInfo; + +/** + * This class contains common methods used by LeanbackImeService classes + */ +public class LeanbackUtils { + + private static final int ACCESSIBILITY_DELAY_MS = 250; + private static final Handler sAccessibilityHandler = new Handler(); + + /** + * checks if the keyCode represents an alphabet char + * + * @return true if the keyCode represents an alphabet char + */ + public static boolean isAlphabet(int keyCode) { + if (Character.isLetter(keyCode)) { + return true; + } else { + return false; + } + } + + /** + * get the IME action of the current {@link EditText} + */ + public static int getImeAction(EditorInfo attribute) { + return attribute.imeOptions + & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION); + } + + /** + * get the input type class of the current {@link EditText} + */ + public static int getInputTypeClass(EditorInfo attribute) { + return attribute.inputType & EditorInfo.TYPE_MASK_CLASS; + } + + /** + * get the input type variation of the current {@link EditText} + */ + public static int getInputTypeVariation(EditorInfo attribute) { + return attribute.inputType & EditorInfo.TYPE_MASK_VARIATION; + } + + public static void sendAccessibilityEvent(final View view, boolean focusGained) { + if (view != null && focusGained) { + sAccessibilityHandler.removeCallbacksAndMessages(null); + sAccessibilityHandler.postDelayed(new Runnable() { + public void run() { + view.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT); + } + }, ACCESSIBILITY_DELAY_MS); + } + } +}
diff --git a/src/com/android/inputmethod/leanback/service/LeanbackImeService.java b/src/com/android/inputmethod/leanback/service/LeanbackImeService.java new file mode 100644 index 0000000..ab286b2 --- /dev/null +++ b/src/com/android/inputmethod/leanback/service/LeanbackImeService.java
@@ -0,0 +1,344 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback.service; + +import android.content.Intent; +import android.inputmethodservice.InputMethodService; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.view.InputDevice; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.inputmethod.CompletionInfo; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; +import android.util.Log; + +import com.android.inputmethod.leanback.LeanbackKeyboardContainer; +import com.android.inputmethod.leanback.LeanbackKeyboardController; +import com.android.inputmethod.leanback.LeanbackKeyboardView; +import com.android.inputmethod.leanback.LeanbackLocales; +import com.android.inputmethod.leanback.LeanbackSuggestionsFactory; +import com.android.inputmethod.leanback.LeanbackUtils; + +/** + * This is a simplified version of GridIme + */ +public class LeanbackImeService extends InputMethodService { + + private static final String TAG = "LbImeService"; + private static final boolean DEBUG = false; + + // use dpad events, with lock axis + static final int MODE_TRACKPAD_NAVIGATION = 0; + // track motion directly. + static final int MODE_FREE_MOVEMENT = 1; + + public static final int MAX_SUGGESTIONS = 10; + + private static final int MSG_SUGGESTIONS_CLEAR = 123; + private static final int SUGGESTIONS_CLEAR_DELAY = 1000; + + public static final String IME_OPEN = "com.android.inputmethod.leanback.action.IME_OPEN"; + public static final String IME_CLOSE = "com.android.inputmethod.leanback.action.IME_CLOSE"; + + private LeanbackKeyboardController.InputListener mInputListener + = new LeanbackKeyboardController.InputListener() { + @Override + public void onEntry(int type, int keyCode, CharSequence result) { + handleTextEntry(type, keyCode, result); + } + }; + + private View mInputView; + private LeanbackKeyboardController mKeyboardController; + private LeanbackSuggestionsFactory mSuggestionsFactory; + + // IME will auto insert space after clicking on the candidates if next + // character is alphabet + private boolean mEnterSpaceBeforeCommitting; + + private boolean mShouldClearSuggestions = true; + private final Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what == MSG_SUGGESTIONS_CLEAR) { + if (mShouldClearSuggestions) { + mSuggestionsFactory.clearSuggestions(); + mKeyboardController.updateSuggestions(mSuggestionsFactory.getSuggestions()); + mShouldClearSuggestions = false; + } + } + } + }; + + public LeanbackImeService() { + if (!enableHardwareAcceleration()) { + Log.w(TAG, "Could not enable hardware acceleration"); + } + } + + private void clearSuggestionsDelayed() { + // if suggestions amend, we should keep clearing them + if (!mSuggestionsFactory.shouldSuggestionsAmend()) { + mHandler.removeMessages(MSG_SUGGESTIONS_CLEAR); + mShouldClearSuggestions = true; + mHandler.sendEmptyMessageDelayed(MSG_SUGGESTIONS_CLEAR, SUGGESTIONS_CLEAR_DELAY); + } + } + + @Override + public void onInitializeInterface() { + mKeyboardController = new LeanbackKeyboardController(this, mInputListener); + mEnterSpaceBeforeCommitting = false; + mSuggestionsFactory = new LeanbackSuggestionsFactory(this, MAX_SUGGESTIONS); + } + + @Override + public View onCreateInputView() { + mInputView = mKeyboardController.getView(); + mInputView.requestFocus(); + return mInputView; + } + + /** + * {@inheritDoc} This function gets called whenever we start the input + * window + */ + @Override + public void onStartInputView(EditorInfo info, boolean restarting) { + super.onStartInputView(info, restarting); + mKeyboardController.onStartInputView(); + sendBroadcast(new Intent(IME_OPEN)); + + if (mKeyboardController.areSuggestionsEnabled()) { + mSuggestionsFactory.createSuggestions(); + mKeyboardController.updateSuggestions(mSuggestionsFactory.getSuggestions()); + + // repost text to get completions + InputConnection ic = getCurrentInputConnection(); + if (ic != null) { + String c = getEditorText(ic); + ic.deleteSurroundingText(getCharLengthBeforeCursor(ic), + getCharLengthAfterCursor(ic)); + ic.commitText(c, 1); + } + } + } + + + @Override + public void onFinishInputView(boolean finishingInput) { + super.onFinishInputView(finishingInput); + sendBroadcast(new Intent(IME_CLOSE)); + mSuggestionsFactory.clearSuggestions(); + } + + /** + * {@inheritDoc} This function doesn't get called when we dismiss the + * keyboard, and reopen it on the same input field + */ + @Override + public void onStartInput(EditorInfo attribute, boolean restarting) { + super.onStartInput(attribute, restarting); + mEnterSpaceBeforeCommitting = false; + mSuggestionsFactory.onStartInput(attribute); + mKeyboardController.onStartInput(attribute); + } + + /** + * {@inheritDoc} Always return true to show GridIme when editText calls + * requestFocus + */ + @Override + public boolean onShowInputRequested(int flags, boolean configChange) { + return true; + } + + /** + * {@inheritDoc} Always enable soft keyboard. If we return the super method, + * the IME will not be shown if there is a hardware keyboard connected + */ + @Override + public boolean onEvaluateInputViewShown() { + return true; + } + + @Override + public boolean onEvaluateFullscreenMode() { + // Superclass always returns true in landscape mode. + // Assume we're on TV with lots of display area. + return false; + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (isInputViewShown() + && mKeyboardController.onKeyUp(keyCode, event)) { + return true; + } + return super.onKeyUp(keyCode, event); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (isInputViewShown() + && mKeyboardController.onKeyDown(keyCode, event)) { + return true; + } + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onGenericMotionEvent(MotionEvent event) { + if (isInputViewShown() && (event.getSource() & InputDevice.SOURCE_TOUCH_NAVIGATION) + == InputDevice.SOURCE_TOUCH_NAVIGATION) { + if (mKeyboardController.onGenericMotionEvent(event)) { + return true; + } + } + return super.onGenericMotionEvent(event); + } + + @Override + public void onDisplayCompletions(CompletionInfo[] completions) { + if (mKeyboardController.areSuggestionsEnabled()) { + mShouldClearSuggestions = false; + mHandler.removeMessages(MSG_SUGGESTIONS_CLEAR); + mSuggestionsFactory.onDisplayCompletions(completions); + mKeyboardController.updateSuggestions(mSuggestionsFactory.getSuggestions()); + } + } + + private String getEditorText(InputConnection ic) { + StringBuilder editorText = new StringBuilder(); + CharSequence textBeforeCursor = ic.getTextBeforeCursor(1000, 0); + CharSequence textAfterCursor = ic.getTextAfterCursor(1000, 0); + if (textBeforeCursor != null) { + editorText.append(textBeforeCursor); + } + if (textAfterCursor != null) { + editorText.append(textAfterCursor); + } + return editorText.toString(); + } + + private int getAmpersandLocation(InputConnection ic) { + String editorText = getEditorText(ic); + int indexOf = editorText.indexOf('@'); + if (indexOf < 0) { + indexOf = editorText.length(); + } + + return indexOf; + } + + private int getCharLengthBeforeCursor(InputConnection ic) { + final CharSequence textLeft = ic.getTextBeforeCursor(1000, 0); + return textLeft != null ? textLeft.length() : 0; + } + + private int getCharLengthAfterCursor(InputConnection ic ) { + final CharSequence textRight = ic.getTextAfterCursor(1000, 0); + return textRight != null ? textRight.length() : 0; + } + + private void handleTextEntry(int type, int keyCode, CharSequence c) { + InputConnection ic = getCurrentInputConnection(); + boolean updateSuggestions = true; + + if (ic == null) { + return; + } + + switch (type) { + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_BACKSPACE: + clearSuggestionsDelayed(); + ic.deleteSurroundingText(1, 0); + mEnterSpaceBeforeCommitting = false; + break; + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_LEFT: + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_RIGHT: + CharSequence textBeforeCursor = ic.getTextBeforeCursor(1000, 0); + int newCursorPosition = textBeforeCursor == null ? 0 : textBeforeCursor.length(); + + if (type == LeanbackKeyboardController.InputListener.ENTRY_TYPE_LEFT) { + if (newCursorPosition > 0) { + newCursorPosition--; + } + } else { + CharSequence textAfterCursor = ic.getTextAfterCursor(1000, 0); + if (textAfterCursor != null && textAfterCursor.length() > 0) { + newCursorPosition++; + } + } + + ic.setSelection(newCursorPosition, newCursorPosition); + break; + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_STRING: + clearSuggestionsDelayed(); + if (mEnterSpaceBeforeCommitting + && mKeyboardController.enableAutoEnterSpace()) { + if (LeanbackUtils.isAlphabet(keyCode)) { + ic.commitText(" ", 1); + } + mEnterSpaceBeforeCommitting = false; + } + ic.commitText(c, 1); + if (keyCode == LeanbackKeyboardView.ASCII_PERIOD) { + mEnterSpaceBeforeCommitting = true; + } + break; + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_SUGGESTION: + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_VOICE: + clearSuggestionsDelayed(); + if (!mSuggestionsFactory.shouldSuggestionsAmend()) { + ic.deleteSurroundingText(getCharLengthBeforeCursor(ic), + getCharLengthAfterCursor(ic)); + } else { + int location = getAmpersandLocation(ic); + ic.setSelection(location, location); + ic.deleteSurroundingText(0, getCharLengthAfterCursor(ic)); + } + ic.commitText(c, 1); + mEnterSpaceBeforeCommitting = true; + // go straight into action (skip updating suggestions) + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_ACTION: + sendDefaultEditorAction(false); + updateSuggestions = false; + break; + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_DISMISS: + ic.performEditorAction(EditorInfo.IME_ACTION_NONE); + updateSuggestions = false; + break; + case LeanbackKeyboardController.InputListener.ENTRY_TYPE_VOICE_DISMISS: + ic.performEditorAction(EditorInfo.IME_ACTION_GO); + updateSuggestions = false; + break; + } + + if (mKeyboardController.areSuggestionsEnabled() && updateSuggestions) { + mKeyboardController.updateSuggestions(mSuggestionsFactory.getSuggestions()); + } + } + + public void onHideIme() { + requestHideSelf(0); + } +}
diff --git a/src/com/android/inputmethod/leanback/voice/BitmapSoundLevelView.java b/src/com/android/inputmethod/leanback/voice/BitmapSoundLevelView.java new file mode 100644 index 0000000..e74500e --- /dev/null +++ b/src/com/android/inputmethod/leanback/voice/BitmapSoundLevelView.java
@@ -0,0 +1,282 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback.voice; + +import com.android.inputmethod.leanback.R; + +import android.animation.ObjectAnimator; +import android.animation.TimeAnimator; +import android.animation.TimeAnimator.TimeListener; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.accessibility.AccessibilityNodeInfo; + +/** + * Displays the recording value of the microphone. + */ +public class BitmapSoundLevelView extends View { + private static final boolean DEBUG = false; + private static final String TAG = "BitmapSoundLevelsView"; + + private static final int MIC_PRIMARY_LEVEL_IMAGE_OFFSET = 3; + private static final int MIC_LEVEL_GUIDELINE_OFFSET = 13; + + private final Paint mEmptyPaint = new Paint(); + private Rect mDestRect; + + private final int mEnableBackgroundColor; + private final int mDisableBackgroundColor; + + // Generates clock ticks for the animation using the global animation loop. + private TimeAnimator mAnimator; + + private int mCurrentVolume; + + // Bitmap for the main level meter, most closely follows the mic. + private final Bitmap mPrimaryLevel; + + // Bitmap for trailing level meter, shows a peak level. + private final Bitmap mTrailLevel; + + // The minimum size of the levels, that is the size when volume is 0. + private final int mMinimumLevelSize; + + // A translation to apply to the center of the levels, allows the levels to be offset from + // the center of the mView without having to translate the whole mView. + private final int mCenterTranslationX; + private final int mCenterTranslationY; + + // Peak level observed, and how many frames left before it starts decaying. + private int mPeakLevel; + private int mPeakLevelCountDown; + + // Input level is pulled from here. + private SpeechLevelSource mLevelSource; + + private Paint mPaint; + + public BitmapSoundLevelView(Context context) { + this(context, null); + } + + public BitmapSoundLevelView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public BitmapSoundLevelView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BitmapSoundLevelView, + defStyleAttr, 0); + mEnableBackgroundColor = a.getColor(R.styleable.BitmapSoundLevelView_enabledBackgroundColor, + Color.parseColor("#66FFFFFF")); + + mDisableBackgroundColor = a.getColor( + R.styleable.BitmapSoundLevelView_disabledBackgroundColor, + Color.WHITE); + + boolean primaryLevelEnabled = false; + boolean peakLevelEnabled = false; + int primaryLevelId = 0; + if (a.hasValue(R.styleable.BitmapSoundLevelView_primaryLevels)) { + primaryLevelId = a.getResourceId( + R.styleable.BitmapSoundLevelView_primaryLevels, R.drawable.vs_reactive_dark); + primaryLevelEnabled = true; + } + + int trailLevelId = 0; + if (a.hasValue(R.styleable.BitmapSoundLevelView_trailLevels)) { + trailLevelId = a.getResourceId( + R.styleable.BitmapSoundLevelView_trailLevels, R.drawable.vs_reactive_light); + peakLevelEnabled = true; + } + + mCenterTranslationX = a.getDimensionPixelOffset( + R.styleable.BitmapSoundLevelView_levelsCenterX, 0); + + mCenterTranslationY = a.getDimensionPixelOffset( + R.styleable.BitmapSoundLevelView_levelsCenterY, 0); + + mMinimumLevelSize = a.getDimensionPixelOffset( + R.styleable.BitmapSoundLevelView_minLevelRadius, 0); + + a.recycle(); + + if (primaryLevelEnabled) { + mPrimaryLevel = BitmapFactory.decodeResource(getResources(), primaryLevelId); + } else { + mPrimaryLevel = null; + } + + if (peakLevelEnabled) { + mTrailLevel = BitmapFactory.decodeResource(getResources(), trailLevelId); + } else { + mTrailLevel = null; + } + + mPaint = new Paint(); + + mDestRect = new Rect(); + + mEmptyPaint.setFilterBitmap(true); + + // Safe source, replaced with system one when attached. + mLevelSource = new SpeechLevelSource(); + mLevelSource.setSpeechLevel(0); + + // This animator generates ticks that invalidate the + // mView so that the animation is synced with the global animation loop. + mAnimator = new TimeAnimator(); + mAnimator.setRepeatCount(ObjectAnimator.INFINITE); + mAnimator.setTimeListener(new TimeListener() { + @Override + public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) { + invalidate(); + } + }); + } + + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + updateAnimatorState(); + } + + private void updateAnimatorState() { + if (isEnabled()) { + startAnimator(); + } else { + stopAnimator(); + } + } + + private void startAnimator() { + if (DEBUG) Log.d(TAG, "startAnimator()"); + if (!mAnimator.isStarted()) { + mAnimator.start(); + } + } + + private void stopAnimator() { + if (DEBUG) Log.d(TAG, "stopAnimator()"); + mAnimator.cancel(); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + updateAnimatorState(); + } + + @Override + protected void onDetachedFromWindow() { + stopAnimator(); + super.onDetachedFromWindow(); + } + + @Override + public void onWindowFocusChanged(boolean hasWindowFocus) { + super.onWindowFocusChanged(hasWindowFocus); + if (hasWindowFocus) { + updateAnimatorState(); + } else { + stopAnimator(); + } + } + + public void setLevelSource(SpeechLevelSource source) { + if (DEBUG) { + Log.d(TAG, "Speech source set"); + } + mLevelSource = source; + } + + @Override + public void onDraw(Canvas canvas) { + if (isEnabled()) { + canvas.drawColor(mEnableBackgroundColor); + + int level = mLevelSource.getSpeechLevel(); + + // Set the peak level for the trailing circle, goes to a peak, waits there for + // some frames, then starts to decay. + if (level > mPeakLevel) { + mPeakLevel = level; + mPeakLevelCountDown = 25; + } else { + if (mPeakLevelCountDown == 0) { + mPeakLevel = Math.max(0, mPeakLevel - 2); + } else { + mPeakLevelCountDown--; + } + } + + // Either ease towards the target level, or decay away from it depending on whether + // its higher or lower than the current. + if (level > mCurrentVolume) { + mCurrentVolume = mCurrentVolume + ((level - mCurrentVolume) / 4); + } else { + mCurrentVolume = (int) (mCurrentVolume * 0.95f); + } + + int centerX = mCenterTranslationX + (getWidth() / 2); + int centerY = mCenterTranslationY + (getWidth() / 2); + if (mTrailLevel != null) { + int size = ((centerX - mMinimumLevelSize) * mPeakLevel) / 100 + mMinimumLevelSize; + + mDestRect.set( + centerX - size, + centerY - size, + centerX + size, + centerY + size); + canvas.drawBitmap(mTrailLevel, null, mDestRect, mEmptyPaint); + } + + if (mPrimaryLevel != null) { + int size = + ((centerX - mMinimumLevelSize) * mCurrentVolume) / 100 + mMinimumLevelSize; + + mDestRect.set( + centerX - size, + centerY - size, + centerX + size, + centerY + size); + canvas.drawBitmap(mPrimaryLevel, null, mDestRect, mEmptyPaint); + mPaint.setColor(getResources().getColor(R.color.search_mic_background)); + mPaint.setStyle(Paint.Style.FILL); + canvas.drawCircle(centerX, centerY, mMinimumLevelSize - + MIC_PRIMARY_LEVEL_IMAGE_OFFSET, mPaint); + } + if(mTrailLevel != null && mPrimaryLevel != null) { + mPaint.setColor(getResources().getColor(R.color.search_mic_levels_guideline)); + mPaint.setStyle(Paint.Style.STROKE); + canvas.drawCircle(centerX, centerY, centerX - MIC_LEVEL_GUIDELINE_OFFSET, mPaint); + } + } else { + canvas.drawColor(mDisableBackgroundColor); + } + } +}
diff --git a/src/com/android/inputmethod/leanback/voice/RecognizerView.java b/src/com/android/inputmethod/leanback/voice/RecognizerView.java new file mode 100644 index 0000000..ac162a2 --- /dev/null +++ b/src/com/android/inputmethod/leanback/voice/RecognizerView.java
@@ -0,0 +1,271 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback.voice; + +import com.android.inputmethod.leanback.LeanbackUtils; +import com.android.inputmethod.leanback.R; + +import android.content.Context; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.accessibility.AccessibilityNodeInfo; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +/** + * Displays the recognizer status. + * This mView includes a {@link BitmapSoundLevelsView} to display the recording value. + */ +public class RecognizerView extends RelativeLayout { + private static final boolean DEBUG = false; + private static final String TAG = "RecognizerView"; + + private BitmapSoundLevelView mSoundLevels; + protected ImageView mMicButton; + + private Callback mCallback; + + private State mState; + + private boolean mEnabled; + + private enum State { + NOT_LISTENING, + MIC_INITIALIZING, + LISTENING, + RECORDING, + RECOGNIZING, + } + + public RecognizerView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public RecognizerView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public RecognizerView(Context context) { + super(context); + } + + @Override + public void onFinishInflate() { + LayoutInflater inflater = LayoutInflater.from(getContext()); + inflater.inflate(R.layout.recognizer_view, this, true); + + mSoundLevels = (BitmapSoundLevelView) findViewById(R.id.microphone); + mMicButton = (ImageView) findViewById(R.id.recognizer_mic_button); + + mState = State.NOT_LISTENING; + } + + public View getMicButton() { + return mMicButton; + } + + public void onClick() { + if (DEBUG) Log.v(TAG, "onClick " + mState); + switch (mState) { + case MIC_INITIALIZING: + if (DEBUG) + Log.d(TAG, "Ignore #onClick as mic is initializing"); + return; + case LISTENING: + mCallback.onCancelRecordingClicked(); + break; + case RECORDING: + mCallback.onStopRecordingClicked(); + break; + case RECOGNIZING: + mCallback.onCancelRecordingClicked(); + break; + case NOT_LISTENING: + mCallback.onStartRecordingClicked(); + break; + default: + return; + } + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + + // When the mView is attached to a window, a callback has to be already set. + // + // This isn't true when this mView is used in the intent API layout. When the user hits + // retry, we reattach the layout to the window, which is being shown. onAttachedToWindow( ) + // will be called from inside setContentView( ) and before we can attach a callback to it. + // We ensure that the callback is not used when not set. + // + // Preconditions.checkNotNull(mCallback); + + // The callbacks from the microphone happen before the mView is attached to the window. + // I need to investigate how to change the code to avoid it. + refreshUi(); + } + + public void showRecording() { + updateState(State.RECORDING); + } + + public void showListening() { + updateState(State.LISTENING); + } + + public void showNotListening() { + updateState(State.NOT_LISTENING); + } + + public void showRecognizing() { + updateState(State.RECOGNIZING); + } + + public void setCallback(final Callback callback) { + mCallback = callback; + } + + private void updateState(State newState) { + if (DEBUG) Log.d(TAG, mState + " -> " + newState); + mState = newState; + refreshUi(); + } + + public void setSpeechLevelSource(SpeechLevelSource source) { + mSoundLevels.setLevelSource(source); + } + + @Override + public Parcelable onSaveInstanceState() { + SavedState ss = new SavedState(super.onSaveInstanceState()); + ss.mState = mState; + return ss; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + if (!(state instanceof SavedState)) { + super.onRestoreInstanceState(state); + return; + } + + SavedState ss = (SavedState) state; + super.onRestoreInstanceState(ss.getSuperState()); + + mState = ss.mState; + } + + protected void refreshUi() { + if (!mEnabled) { + return; + } + switch (mState) { + case MIC_INITIALIZING: + mMicButton.setImageResource(R.drawable.vs_micbtn_on_selector); + mSoundLevels.setEnabled(false); + break; + case LISTENING: + mMicButton.setImageResource(R.drawable.vs_micbtn_on_selector); + mSoundLevels.setEnabled(true); + break; + case RECORDING: + mMicButton.setImageResource(R.drawable.vs_micbtn_rec_selector); + mSoundLevels.setEnabled(true); + break; + case NOT_LISTENING: + mMicButton.setImageResource(R.drawable.vs_micbtn_off_selector); + mSoundLevels.setEnabled(false); + break; + case RECOGNIZING: + mMicButton.setImageResource(R.drawable.vs_micbtn_off_selector); + mSoundLevels.setEnabled(false); + break; + } + } + + public void setMicFocused(boolean hasFocus) { + if (mEnabled) { + if (hasFocus) { + mMicButton.setImageResource(R.drawable.ic_voice_focus); + } else { + mMicButton.setImageResource(R.drawable.ic_voice_available); + } + + LeanbackUtils.sendAccessibilityEvent(mMicButton, hasFocus); + } + } + + public void setMicEnabled(boolean enabled) { + mEnabled = enabled; + if (enabled) { + mMicButton.setAlpha(1.0f); + mMicButton.setImageResource(R.drawable.ic_voice_available); + } else { + mMicButton.setAlpha(0.1f); + mMicButton.setImageResource(R.drawable.ic_voice_off); + } + } + + public void showInitializingMic() { + updateState(State.MIC_INITIALIZING); + } + + public interface Callback { + void onStartRecordingClicked(); + void onStopRecordingClicked(); + void onCancelRecordingClicked(); + } + + public static class SavedState extends View.BaseSavedState { + State mState; + + public SavedState(Parcelable superState) { + super(superState); + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeString(mState.toString()); + } + + @SuppressWarnings("hiding") + public static final Parcelable.Creator<SavedState> CREATOR + = new Parcelable.Creator<SavedState>() { + + @Override + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + + private SavedState(Parcel in) { + super(in); + mState = State.valueOf(in.readString()); + } + } +}
diff --git a/src/com/android/inputmethod/leanback/voice/SpeechLevelSource.java b/src/com/android/inputmethod/leanback/voice/SpeechLevelSource.java new file mode 100644 index 0000000..2c94589 --- /dev/null +++ b/src/com/android/inputmethod/leanback/voice/SpeechLevelSource.java
@@ -0,0 +1,46 @@ +/* + * Copyright (C) 2019 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 + */ + +package com.android.inputmethod.leanback.voice; + +/** + * Keeps track of the speech level as last observed by the recognition + * engine as microphone data flows through it. Can be polled by the UI to + * animate its views. + */ +public class SpeechLevelSource { + private volatile int mSpeechLevel; + + public void setSpeechLevel(int speechLevel) { + if (speechLevel < 0 || speechLevel > 100) { + throw new IllegalArgumentException(); + } + mSpeechLevel = speechLevel; + } + + public int getSpeechLevel() { + return mSpeechLevel; + } + + public void reset() { + mSpeechLevel = -1; + } + + public boolean isValid() { + return mSpeechLevel > 0; + } +} +