[
  {
    "path": ".github/workflows/greetings.yml",
    "content": "name: Greetings\n\non: [pull_request, issues]\n\njobs:\n  greeting:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/first-interaction@v1\n      with:\n        repo-token: ${{ secrets.GITHUB_TOKEN }}\n        issue-message: 'Hi there and thanks for reporting the issue! I''ll analize it as soon as I can and try to fix it. This is an automated message, I always read all of the issues, though I may not respond all the times. Thanks for using my app!'\n        pr-message: 'Hi there! Thanks for your fisrt contribution on my project. If everything''s alright, I''ll merge it as soon as I can.'\n"
  },
  {
    "path": ".github/workflows/label.yml",
    "content": "name: \"Pull Request Labeler\"\non:\n- pull_request\n\njobs:\n  triage:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/labeler@v2\n      with:\n        repo-token: \"${{ secrets.GITHUB_TOKEN }}\"\n"
  },
  {
    "path": ".github/workflows/labeler.yaml",
    "content": "translation:\n  - app/src/main/res/values/strings.xml\n\n\n"
  },
  {
    "path": ".gitignore",
    "content": "*.iml\r\n.gradle\r\n/local.properties\r\n/.idea/workspace.xml\r\n/.idea/libraries\r\n.DS_Store\r\n/build\r\n/captures\r\n.externalNativeBuild\r\n"
  },
  {
    "path": ".idea/codeStyleSettings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectCodeStyleSettingsManager\">\n    <option name=\"PER_PROJECT_SETTINGS\">\n      <value>\n        <option name=\"CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND\" value=\"99\" />\n        <option name=\"NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND\" value=\"99\" />\n        <option name=\"PACKAGES_TO_USE_IMPORT_ON_DEMAND\">\n          <value />\n        </option>\n        <option name=\"IMPORT_LAYOUT_TABLE\">\n          <value>\n            <package name=\"android\" withSubpackages=\"true\" static=\"false\" />\n            <emptyLine />\n            <package name=\"com\" withSubpackages=\"true\" static=\"false\" />\n            <emptyLine />\n            <package name=\"junit\" withSubpackages=\"true\" static=\"false\" />\n            <emptyLine />\n            <package name=\"net\" withSubpackages=\"true\" static=\"false\" />\n            <emptyLine />\n            <package name=\"org\" withSubpackages=\"true\" static=\"false\" />\n            <emptyLine />\n            <package name=\"java\" withSubpackages=\"true\" static=\"false\" />\n            <emptyLine />\n            <package name=\"javax\" withSubpackages=\"true\" static=\"false\" />\n            <emptyLine />\n            <package name=\"\" withSubpackages=\"true\" static=\"false\" />\n            <emptyLine />\n            <package name=\"\" withSubpackages=\"true\" static=\"true\" />\n            <emptyLine />\n          </value>\n        </option>\n        <option name=\"RIGHT_MARGIN\" value=\"100\" />\n        <AndroidXmlCodeStyleSettings>\n          <option name=\"USE_CUSTOM_SETTINGS\" value=\"true\" />\n        </AndroidXmlCodeStyleSettings>\n        <Objective-C-extensions>\n          <file>\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Import\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Macro\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Typedef\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Enum\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Constant\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Global\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Struct\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"FunctionPredecl\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Function\" />\n          </file>\n          <class>\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Property\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Synthesize\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"InitMethod\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"StaticMethod\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"InstanceMethod\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"DeallocMethod\" />\n          </class>\n          <extensions>\n            <pair source=\"cpp\" header=\"h\" />\n            <pair source=\"c\" header=\"h\" />\n          </extensions>\n        </Objective-C-extensions>\n        <XML>\n          <option name=\"XML_KEEP_LINE_BREAKS\" value=\"false\" />\n          <option name=\"XML_ALIGN_ATTRIBUTES\" value=\"false\" />\n          <option name=\"XML_SPACE_INSIDE_EMPTY_TAG\" value=\"true\" />\n        </XML>\n        <codeStyleSettings language=\"XML\">\n          <option name=\"FORCE_REARRANGE_MODE\" value=\"1\" />\n          <indentOptions>\n            <option name=\"CONTINUATION_INDENT_SIZE\" value=\"4\" />\n          </indentOptions>\n          <arrangement>\n            <rules>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>xmlns:android</NAME>\n                      <XML_NAMESPACE>^$</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>xmlns:.*</NAME>\n                      <XML_NAMESPACE>^$</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                  <order>BY_NAME</order>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*:id</NAME>\n                      <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*:name</NAME>\n                      <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>name</NAME>\n                      <XML_NAMESPACE>^$</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>style</NAME>\n                      <XML_NAMESPACE>^$</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*</NAME>\n                      <XML_NAMESPACE>^$</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                  <order>BY_NAME</order>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*:layout_width</NAME>\n                      <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*:layout_height</NAME>\n                      <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*:layout_.*</NAME>\n                      <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                  <order>BY_NAME</order>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*:width</NAME>\n                      <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                  <order>BY_NAME</order>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*:height</NAME>\n                      <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                  <order>BY_NAME</order>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*</NAME>\n                      <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                  <order>BY_NAME</order>\n                </rule>\n              </section>\n              <section>\n                <rule>\n                  <match>\n                    <AND>\n                      <NAME>.*</NAME>\n                      <XML_NAMESPACE>.*</XML_NAMESPACE>\n                    </AND>\n                  </match>\n                  <order>BY_NAME</order>\n                </rule>\n              </section>\n            </rules>\n          </arrangement>\n        </codeStyleSettings>\n      </value>\n    </option>\n    <option name=\"PREFERRED_PROJECT_CODE_STYLE\" value=\"Default (1)\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <resourceExtensions />\n    <wildcardResourcePatterns>\n      <entry name=\"!?*.java\" />\n      <entry name=\"!?*.form\" />\n      <entry name=\"!?*.class\" />\n      <entry name=\"!?*.groovy\" />\n      <entry name=\"!?*.scala\" />\n      <entry name=\"!?*.flex\" />\n      <entry name=\"!?*.kt\" />\n      <entry name=\"!?*.clj\" />\n      <entry name=\"!?*.aj\" />\n    </wildcardResourcePatterns>\n    <annotationProcessing>\n      <profile default=\"true\" name=\"Default\" enabled=\"false\">\n        <processorPath useClasspath=\"true\" />\n      </profile>\n    </annotationProcessing>\n  </component>\n</project>"
  },
  {
    "path": ".idea/copyright/profiles_settings.xml",
    "content": "<component name=\"CopyrightManager\">\r\n  <settings default=\"\" />\r\n</component>"
  },
  {
    "path": ".idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"distributionType\" value=\"DEFAULT_WRAPPED\" />\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n        <option name=\"resolveModulePerSourceSet\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"NullableNotNullManager\">\n    <option name=\"myDefaultNullable\" value=\"android.support.annotation.Nullable\" />\n    <option name=\"myDefaultNotNull\" value=\"android.support.annotation.NonNull\" />\n    <option name=\"myNullables\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.Nullable\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nullable\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.Nullable\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.Nullable\" />\n        </list>\n      </value>\n    </option>\n    <option name=\"myNotNulls\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.NotNull\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nonnull\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.NonNull\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.NonNull\" />\n        </list>\n      </value>\n    </option>\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_8\" default=\"true\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/app/app.iml\" filepath=\"$PROJECT_DIR$/app/app.iml\" />\n      <module fileurl=\"file://$PROJECT_DIR$/keyboard.iml\" filepath=\"$PROJECT_DIR$/keyboard.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/runConfigurations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <option name=\"ignoredProducers\">\n      <set>\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": ".scrutinizer.yml",
    "content": "checks:\n    java: true\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: android\nsudo: required\ndist: trusty\ngroup: deprecated-2017Q4\n\nandroid:\n  components:\n    - tools\n\n    - build-tools-26.0.0\n    - android-26\n    - extra-android-support\n    - extra-android-m2repository\n  licenses:\n    - 'android-sdk-license-.+'\n    - '.*intel.+'\naddons:\n  apt:\n    packages:\n      - oracle-java8-installer\nbefore_install:\n  - chmod +x gradlew\n  - git submodule update --init --recursive\nscript:\n  \n- ./gradlew build check\n\nbranches:\n  only:\n  - master\n  - dev\n\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "[![Travis](https://img.shields.io/travis/VladThodo/behe-keyboard/master?label=master&style=flat-square)]()\n[![Travis](https://img.shields.io/travis/VladThodo/behe-keyboard/dev?label=dev&style=flat-square)]()\n[![Quality Score](https://img.shields.io/scrutinizer/g/VladThodo/behe-keyboard.svg?style=flat-square)]()\n[![license](https://img.shields.io/github/license/VladThodo/behe-keyboard.svg?style=flat-square)]()\n[![GitHub release](https://img.shields.io/github/release/VladThodo/behe-keyboard.svg?style=flat-square)]()\n[![GitHub issues](https://img.shields.io/github/issues/VladThodo/behe-keyboard.svg?style=flat-square)]()\n\n<hr>\n\n\n# BeHe Keyboard\n\nA lightweight hacking &amp; programming keyboard with material design.\n\nBeHe Keyboard aims to provide a smooth and simple keyboard experience, while also providing special keys and interfaces, all with material design.\n\nAlso, BeHe Keyboard does not spy on you and is easy to use. Check it out!\n\n\n<a href=\"https://f-droid.org/packages/com.vlath.keyboard/\" target=\"_blank\">\n<img src=\"https://f-droid.org/badge/get-it-on.png\" alt=\"Get it on F-Droid\" height=\"90\"/></a>\n<a href=\"https://play.google.com/store/apps/details?id=com.vlath.keyboard\" target=\"_blank\">\n<img src=\"https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png\" alt=\"Get it on Google Play\" height=\"90\"/></a>\n\n## License\n \n Copyright 2017 - 2019 Vlad Todosin\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\r\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\r\n\r\nandroid {\r\n     lintOptions {\r\n          abortOnError false\r\n    }\r\n    compileSdkVersion 26\r\n    buildToolsVersion \"26.0.0\"\r\n    defaultConfig {\r\n        applicationId \"com.vlath.keyboard\"\r\n        minSdkVersion 18\r\n        targetSdkVersion 26\r\n        versionCode 112\r\n        versionName \"1.1.2\"\r\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\r\n    }\r\n    buildTypes {\r\n        release {\r\n            minifyEnabled true\r\n            shrinkResources true\r\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\r\n        }\r\n    }\r\n}\r\n\r\ndependencies {\r\n    compile fileTree(dir: 'libs', include: ['*.jar'])\r\n    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {\r\n        exclude group: 'com.android.support', module: 'support-annotations'\r\n    })\r\n    compile 'com.android.support:appcompat-v7:25.3.1'\r\n    testCompile 'junit:junit:4.12'\r\n}\r\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\r\n# By default, the flags in this file are appended to flags specified\r\n# in C:\\Users\\Vlad\\Desktop\\SDK/tools/proguard/proguard-android.txt\r\n# You can edit the include path and order by changing the proguardFiles\r\n# directive in build.gradle.\r\n#\r\n# For more details, see\r\n#   http://developer.android.com/guide/developing/tools/proguard.html\r\n\r\n# Add any project specific keep options here:\r\n\r\n# If your project uses WebView with JS, uncomment the following\r\n# and specify the fully qualified class name to the JavaScript interface\r\n# class:\r\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\r\n#   public *;\r\n#}\r\n\r\n# Uncomment this to preserve the line number information for\r\n# debugging stack traces.\r\n#-keepattributes SourceFile,LineNumberTable\r\n\r\n# If you keep the line number information, uncomment this to\r\n# hide the original source file name.\r\n#-renamesourcefileattribute SourceFile\r\n"
  },
  {
    "path": "app/src/androidTest/java/com/vlath/keyboard/ExampleInstrumentedTest.java",
    "content": "package com.vlath.keyboard;\r\n\r\nimport android.content.Context;\r\nimport android.support.test.InstrumentationRegistry;\r\nimport android.support.test.runner.AndroidJUnit4;\r\n\r\nimport org.junit.Test;\r\nimport org.junit.runner.RunWith;\r\n\r\nimport static org.junit.Assert.*;\r\n\r\n/**\r\n * Instrumentation test, which will execute on an Android device.\r\n *\r\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\r\n */\r\n@RunWith(AndroidJUnit4.class)\r\npublic class ExampleInstrumentedTest {\r\n    @Test\r\n    public void useAppContext() throws Exception {\r\n        // Context of the app under test.\r\n        Context appContext = InstrumentationRegistry.getTargetContext();\r\n\r\n        assertEquals(\"com.vlath.keyboard\", appContext.getPackageName());\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    package=\"com.vlath.keyboard\">\r\n\r\n    <uses-permission android:name=\"android.permission.VIBRATE\"/>\r\n\r\n    <application\r\n        android:allowBackup=\"true\"\r\n        android:icon=\"@mipmap/ic_launcher\"\r\n        android:label=\"@string/app_name\"\r\n        android:roundIcon=\"@mipmap/ic_launcher\"\r\n        android:supportsRtl=\"true\"\r\n        android:theme=\"@style/AppTheme\">\r\n        <activity android:name=\".Main\"\r\n            android:label=\"@string/app_name\">\r\n            <intent-filter >\r\n                <action android:name=\"android.intent.action.MAIN\" />\r\n                <category android:name=\"android.intent.category.LAUNCHER\" />\r\n            </intent-filter>\r\n        </activity>\r\n       <activity android:name=\".Preference\"/>\r\n\r\n        <service android:name=\"com.vlath.keyboard.PCKeyboard\"\r\n                 android:label=\"@string/app_name\"\r\n                 android:permission=\"android.permission.BIND_INPUT_METHOD\">\r\n            <meta-data android:name=\"android.view.im\" android:resource=\"@xml/method\"/>\r\n            <intent-filter>\r\n                <action android:name=\"android.view.InputMethod\" />\r\n            </intent-filter>\r\n        </service>\r\n\r\n    </application>\r\n\r\n</manifest>\r\n"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/CandidateView.java",
    "content": "package com.vlath.keyboard;\n\n/**\n * Created by todo on 02.08.2017.\n */\n\n/*\n * Copyright (C) 2008-2009 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport android.view.MotionEvent;\nimport android.view.View;\n\n        import android.content.Context;\n        import android.content.res.Resources;\n        import android.graphics.Canvas;\n        import android.graphics.Paint;\n        import android.graphics.Rect;\n        import android.graphics.drawable.Drawable;\n        import android.view.GestureDetector;\n        import android.view.MotionEvent;\n        import android.view.View;\n\n        import java.util.ArrayList;\n        import java.util.List;\n\npublic class CandidateView extends View {\n\n    private static final int OUT_OF_BOUNDS = -1;\n\n    private PCKeyboard mService;\n    private List<String> mSuggestions;\n    private int mSelectedIndex;\n    private int mTouchX = OUT_OF_BOUNDS;\n    private Drawable mSelectionHighlight;\n    private boolean mTypedWordValid;\n\n    private Rect mBgPadding;\n\n    private static final int MAX_SUGGESTIONS = 32;\n    private static final int SCROLL_PIXELS = 20;\n\n    private int[] mWordWidth = new int[MAX_SUGGESTIONS];\n    private int[] mWordX = new int[MAX_SUGGESTIONS];\n\n    private static final int X_GAP = 60;\n\n    private static final List<String> EMPTY_LIST = new ArrayList<String>();\n\n    private int mColorNormal;\n    private int mColorRecommended;\n    private int mColorOther;\n    private int mVerticalPadding;\n    private Paint mPaint;\n    private boolean mScrolled;\n    private int mTargetScrollX;\n\n    private int mTotalWidth;\n\n    private GestureDetector mGestureDetector;\n\n\n    public CandidateView(Context context) {\n        super(context);\n        mSelectionHighlight = context.getResources().getDrawable(\n                android.R.drawable.list_selector_background);\n        mSelectionHighlight.setState(new int[] {\n                android.R.attr.state_enabled,\n                android.R.attr.state_focused,\n                android.R.attr.state_window_focused,\n                android.R.attr.state_pressed\n        });\n\n        Resources r = context.getResources();\n\n        setBackgroundColor(r.getColor(R.color.gray));\n\n        mColorNormal = r.getColor(R.color.candidate_normal);\n        mColorRecommended = r.getColor(R.color.candidate_recommended);\n        mColorOther = r.getColor(R.color.candidate_other);\n        mVerticalPadding = r.getDimensionPixelSize(R.dimen.candidate_vertical_padding);\n\n        mPaint = new Paint();\n        mPaint.setColor(mColorNormal);\n        mPaint.setAntiAlias(true);\n        mPaint.setTextSize(r.getDimensionPixelSize(R.dimen.candidate_font_height));\n        mPaint.setStrokeWidth(5);\n\n\n        mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {\n            @Override\n            public boolean onScroll(MotionEvent e1, MotionEvent e2,\n                                    float distanceX, float distanceY) {\n                mScrolled = true;\n                int sx = getScrollX();\n                sx += distanceX;\n                if (sx < 0) {\n                    sx = 0;\n                }\n                if (sx + getWidth() > mTotalWidth) {\n                    sx -= distanceX;\n                }\n                mTargetScrollX = sx;\n                scrollTo(sx, getScrollY());\n                invalidate();\n                return true;\n            }\n        });\n        setHorizontalFadingEdgeEnabled(true);\n        setWillNotDraw(false);\n        setHorizontalScrollBarEnabled(false);\n        setVerticalScrollBarEnabled(false);\n    }\n\n    /**\n     * A connection back to the service to communicate with the text field\n     * @param listener\n     */\n    public void setService(PCKeyboard listener) {\n        mService = listener;\n    }\n\n    @Override\n    public int computeHorizontalScrollRange() {\n        return mTotalWidth;\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        int measuredWidth = resolveSize(50, widthMeasureSpec);\n\n        // Get the desired height of the icon menu view (last row of items does\n        // not have a divider below)\n        Rect padding = new Rect();\n        mSelectionHighlight.getPadding(padding);\n        final int desiredHeight = ((int)mPaint.getTextSize()) + mVerticalPadding\n                + padding.top + padding.bottom;\n\n        // Maximum possible width and desired height\n        setMeasuredDimension(measuredWidth,\n                resolveSize(desiredHeight, heightMeasureSpec));\n    }\n\n    /**\n     * If the canvas is null, then only touch calculations are performed to pick the target\n     * candidate.\n     */\n    @Override\n    protected void onDraw(Canvas canvas) {\n        if (canvas != null) {\n            super.onDraw(canvas);\n        }\n        mTotalWidth = 0;\n        if (mSuggestions == null) return;\n\n        if (mBgPadding == null) {\n            mBgPadding = new Rect(0, 0, 0, 0);\n            if (getBackground() != null) {\n                getBackground().getPadding(mBgPadding);\n            }\n        }\n        int x = 0;\n        final int count = mSuggestions.size();\n        final int height = getHeight();\n        final Rect bgPadding = mBgPadding;\n        final Paint paint = mPaint;\n        final int touchX = mTouchX;\n        final int scrollX = getScrollX();\n        final boolean scrolled = mScrolled;\n        final boolean typedWordValid = mTypedWordValid;\n        final int y = (int) (((height - mPaint.getTextSize()) / 2) - mPaint.ascent());\n\n        for (int i = 0; i < count; i++) {\n            String suggestion = mSuggestions.get(i);\n            float textWidth = paint.measureText(suggestion);\n            final int wordWidth = (int) textWidth + X_GAP * 2;\n\n            mWordX[i] = x;\n            mWordWidth[i] = wordWidth;\n            paint.setColor(mColorNormal);\n            if (touchX + scrollX >= x && touchX + scrollX < x + wordWidth && !scrolled) {\n                if (canvas != null) {\n                    canvas.translate(x, 0);\n                    mSelectionHighlight.setBounds(0, bgPadding.top, wordWidth, height);\n                    mSelectionHighlight.draw(canvas);\n                    canvas.translate(-x, 0);\n                }\n                mSelectedIndex = i;\n            }\n\n            if (canvas != null) {\n                if ((i == 1 && !typedWordValid) || (i == 0 && typedWordValid)) {\n                    paint.setFakeBoldText(true);\n                    paint.setColor(mColorRecommended);\n                } else if (i != 0) {\n                    paint.setColor(mColorOther);\n                }\n                canvas.drawText(suggestion, x + X_GAP, y, paint);\n                paint.setColor(mColorOther);\n                canvas.drawLine(x + wordWidth + 0.5f, bgPadding.top,\n                        x + wordWidth + 0.5f, height + 1, paint);\n                paint.setFakeBoldText(false);\n            }\n            x += wordWidth;\n        }\n        mTotalWidth = x;\n        if (mTargetScrollX != getScrollX()) {\n            scrollToTarget();\n        }\n    }\n\n    private void scrollToTarget() {\n        int sx = getScrollX();\n        if (mTargetScrollX > sx) {\n            sx += SCROLL_PIXELS;\n            if (sx >= mTargetScrollX) {\n                sx = mTargetScrollX;\n                requestLayout();\n            }\n        } else {\n            sx -= SCROLL_PIXELS;\n            if (sx <= mTargetScrollX) {\n                sx = mTargetScrollX;\n                requestLayout();\n            }\n        }\n        scrollTo(sx, getScrollY());\n        invalidate();\n    }\n\n    public void setSuggestions(List<String> suggestions, boolean completions,\n                               boolean typedWordValid) {\n        clear();\n        if (suggestions != null) {\n            mSuggestions = new ArrayList<String>(suggestions);\n        }\n        mTypedWordValid = typedWordValid;\n        scrollTo(0, 0);\n        mTargetScrollX = 0;\n        // Compute the total width\n        draw(new Canvas());\n        invalidate();\n        requestLayout();\n    }\n\n    public void clear() {\n        mSuggestions = EMPTY_LIST;\n        mTouchX = OUT_OF_BOUNDS;\n        mSelectedIndex = -1;\n        invalidate();\n    }\n\n    @Override\n    public boolean onTouchEvent(MotionEvent me) {\n\n        if (mGestureDetector.onTouchEvent(me)) {\n            return true;\n        }\n\n        int action = me.getAction();\n        int x = (int) me.getX();\n        int y = (int) me.getY();\n        mTouchX = x;\n\n        switch (action) {\n            case MotionEvent.ACTION_DOWN:\n                mScrolled = false;\n                invalidate();\n                break;\n            case MotionEvent.ACTION_MOVE:\n                if (y <= 0) {\n                    // Fling up!?\n                    if (mSelectedIndex >= 0) {\n                        mService.pickSuggestionManually(mSelectedIndex);\n                        mSelectedIndex = -1;\n                    }\n                }\n                invalidate();\n                break;\n            case MotionEvent.ACTION_UP:\n                if (!mScrolled) {\n                    if (mSelectedIndex >= 0) {\n                        mService.pickSuggestionManually(mSelectedIndex);\n                    }\n                }\n                mSelectedIndex = -1;\n                removeHighlight();\n                requestLayout();\n                break;\n        }\n        return true;\n    }\n\n    /**\n     * For flick through from keyboard, call this method with the x coordinate of the flick\n     * gesture.\n     * @param x\n     */\n    public void takeSuggestionAt(float x) {\n        mTouchX = (int) x;\n        // To detect candidate\n        draw(null);\n        if (mSelectedIndex >= 0) {\n            mService.pickSuggestionManually(mSelectedIndex);\n        }\n        invalidate();\n    }\n\n    private void removeHighlight() {\n        mTouchX = OUT_OF_BOUNDS;\n        invalidate();\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/CustomKeyboard.java",
    "content": "package com.vlath.keyboard;\r\n\r\n/**\r\n * Created by Vlad on 6/14/2017.\r\n */\r\n\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.ColorMatrixColorFilter;\r\nimport android.graphics.drawable.ColorDrawable;\r\nimport android.graphics.drawable.Drawable;\r\nimport android.graphics.drawable.NinePatchDrawable;\r\nimport android.inputmethodservice.KeyboardView;\r\n\r\nimport android.content.Context;\r\nimport android.graphics.Canvas;\r\nimport android.graphics.Color;\r\nimport android.graphics.Paint;\r\nimport android.inputmethodservice.Keyboard;\r\nimport android.inputmethodservice.Keyboard.Key;\r\nimport android.inputmethodservice.KeyboardView;\r\nimport android.os.Vibrator;\r\nimport android.util.AttributeSet;\r\nimport android.util.Log;\r\nimport android.view.KeyEvent;\r\nimport android.view.View;\r\nimport android.view.inputmethod.InputMethodSubtype;\r\nimport android.widget.PopupWindow;\r\n\r\nimport java.lang.reflect.Field;\r\nimport java.util.List;\r\n\r\npublic class CustomKeyboard extends KeyboardView {\r\n\r\n    Drawable mTransparent = new ColorDrawable(Color.TRANSPARENT);\r\n    NinePatchDrawable mSpaceBackground = (NinePatchDrawable) getContext().getResources().getDrawable(R.drawable.space);\r\n    NinePatchDrawable mPressedBackground = (NinePatchDrawable) getContext().getResources().getDrawable(R.drawable.press);\r\n    Paint mPaint = new Paint();\r\n\r\n    public CustomKeyboard(Context context, AttributeSet attrs) {\r\n        super(context, attrs);\r\n    }\r\n\r\n\r\n    public CustomKeyboard(Context context, AttributeSet attrs, int defStyle) {\r\n        super(context, attrs, defStyle);\r\n    }\r\n\r\n    public LatinKeyboard getLatinKeyboard(){\r\n        return (LatinKeyboard)getKeyboard();\r\n    }\r\n\r\n    @Override\r\n    protected boolean onLongPress(Key key) {\r\n        if (key.codes[0] == Keyboard.KEYCODE_CANCEL) {\r\n            getOnKeyboardActionListener().onKey(LatinKeyboard.KEYCODE_OPTIONS, null);\r\n            return true;\r\n        }\r\n        return super.onLongPress(key);\r\n    }\r\n\r\n    @Override\r\n    public void onDraw(Canvas canvas) {\r\n        super.onDraw(canvas);\r\n        mPaint.setTextAlign(Paint.Align.CENTER);\r\n        mPaint.setTextSize(28);\r\n        mPaint.setColor(Color.parseColor(\"#a5a7aa\"));\r\n\r\n        List<Key> keys = getKeyboard().getKeys();\r\n\r\n        for(Key key: keys) {\r\n\r\n            if(key.label != null) {\r\n                if (key.codes[0] == 32) {\r\n                    mSpaceBackground.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);\r\n                    mSpaceBackground.draw(canvas);\r\n                }\r\n                if (Variables.isAnyOn()) {\r\n                    if (Variables.isCtrl()) {\r\n                        if (key.codes[0] == -113) {\r\n                            mPressedBackground.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);\r\n                            mPressedBackground.draw(canvas);\r\n                        }\r\n                    }\r\n                    if (Variables.isAlt()){\r\n                        if (key.codes[0] == -114) {\r\n                            mPressedBackground.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);\r\n                            mPressedBackground.draw(canvas);\r\n                        }\r\n                    }\r\n\r\n                }\r\n                else{\r\n                    if(key.codes[0] == -113) {\r\n                        mTransparent.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);\r\n                        mTransparent.draw(canvas);\r\n                    }\r\n                    if(key.codes[0] == -114) {\r\n                        mTransparent.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);\r\n                        mTransparent.draw(canvas);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/LatinKeyboard.java",
    "content": "package com.vlath.keyboard;\r\n\r\n/**\r\n * Created by Vlad on 6/14/2017.\r\n */\r\n\r\nimport android.content.Context;\r\nimport android.content.res.Resources;\r\nimport android.content.res.XmlResourceParser;\r\nimport android.graphics.drawable.Drawable;\r\nimport android.inputmethodservice.Keyboard;\r\nimport android.view.inputmethod.EditorInfo;\r\nimport android.view.inputmethod.InputMethodManager;\r\n\r\npublic class LatinKeyboard extends Keyboard {\r\n\r\n    static final int KEYCODE_OPTIONS = -100;\r\n\r\n    static final int KEYCODE_LAYUOUT_SWITCH = -101;\r\n\r\n    static final int KEYCODE_DPAD_R = -111;\r\n\r\n    static final int KEYCODE_DPAD_L = -108;\r\n\r\n    static final int KEYCODE_DPAD_U = -107;\r\n\r\n    static final int KEYCODE_DPAD_DO = -109;\r\n\r\n    static final int KEYCODE_ESCAPE = -112;\r\n\r\n    static final int KEYCODE_CTRL = -113;\r\n\r\n    static final int KEYCODE_ALT  = -114;\r\n\r\n    static final int KEYCODE_STANDARD_SWITCH = -117;\r\n\r\n    static final int KEYCODE_DELL_PROCESS = -121;\r\n\r\n    static final int KEYCODE_I_DONT_KNOW_WHY_I_PUT_THAT_HERE = -122;\r\n\r\n\r\n    private Key mEnterKey;\r\n    private Key mSpaceKey;\r\n    private static short rowNumber = 4;\r\n\r\n    /**\r\n     * Stores the current state of the mode change key. Its width will be dynamically updated to\r\n     * match the region of {@link #mModeChangeKey} when {@link #mModeChangeKey} becomes invisible.\r\n     */\r\n    private Key mModeChangeKey;\r\n    /**\r\n     * Stores the current state of the language switch key (a.k.a. globe key). This should be\r\n\r\n     * returns true. When this key becomes invisible, its width will be shrunk to zero.\r\n     */\r\n    private Key mLanguageSwitchKey;\r\n    /**\r\n     * Stores the size and other information of {@link #mModeChangeKey} when\r\n     * {@link #mLanguageSwitchKey} is visible. This should be immutable and will be used only as a\r\n     * reference size when the visibility of {@link #mLanguageSwitchKey} is changed.\r\n     */\r\n    private Key mSavedModeChangeKey;\r\n    /**\r\n     * Stores the size and other information of {@link #mLanguageSwitchKey} when it is visible.\r\n     * This should be immutable and will be used only as a reference size when the visibility of\r\n     * {@link #mLanguageSwitchKey} is changed.\r\n     */\r\n    private Key mSavedLanguageSwitchKey;\r\n\r\n    public LatinKeyboard(Context context, int xmlLayoutResId) {\r\n        super(context, xmlLayoutResId);\r\n    }\r\n\r\n    public LatinKeyboard(Context context, int layoutTemplateResId,\r\n                         CharSequence characters, int columns, int horizontalPadding) {\r\n        super(context, layoutTemplateResId, characters, columns, horizontalPadding);\r\n    }\r\n\r\n    @Override\r\n    protected Key createKeyFromXml(Resources res, Row parent, int x, int y,\r\n                                   XmlResourceParser parser) {\r\n        Key key = new LatinKey(res, parent, x, y, parser);\r\n        if (key.codes[0] == 10) {\r\n            mEnterKey = key;\r\n        } else if (key.codes[0] == ' ') {\r\n            mSpaceKey = key;\r\n        } else if (key.codes[0] == Keyboard.KEYCODE_MODE_CHANGE) {\r\n            mModeChangeKey = key;\r\n            mSavedModeChangeKey = new LatinKey(res, parent, x, y, parser);\r\n        } else if (key.codes[0] == LatinKeyboard.KEYCODE_LAYUOUT_SWITCH) {\r\n            mLanguageSwitchKey = key;\r\n            mSavedLanguageSwitchKey = new LatinKey(res, parent, x, y, parser);\r\n        }\r\n        return key;\r\n    }\r\n\r\n    /**\r\n     * Dynamically change the visibility of the language switch key (a.k.a. globe key).\r\n     * @param visible True if the language switch key should be visible.\r\n     */\r\n    void setLanguageSwitchKeyVisibility(boolean visible) {\r\n        if (visible) {\r\n            // The language switch key should be visible. Restore the size of the mode change key\r\n            // and language switch key using the saved layout.\r\n            mModeChangeKey.width = mSavedModeChangeKey.width;\r\n            mModeChangeKey.x = mSavedModeChangeKey.x;\r\n            mLanguageSwitchKey.width = mSavedLanguageSwitchKey.width;\r\n            mLanguageSwitchKey.icon = mSavedLanguageSwitchKey.icon;\r\n            mLanguageSwitchKey.iconPreview = mSavedLanguageSwitchKey.iconPreview;\r\n        } else {\r\n            // The language switch key should be hidden. Change the width of the mode change key\r\n            // to fill the space of the language key so that the user will not see any strange gap.\r\n            mModeChangeKey.width = mSavedModeChangeKey.width + mSavedLanguageSwitchKey.width;\r\n            mLanguageSwitchKey.width = 0;\r\n            mLanguageSwitchKey.icon = null;\r\n            mLanguageSwitchKey.iconPreview = null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * This looks at the ime options given by the current editor, to set the\r\n     * appropriate label on the keyboard's enter key (if it has one).\r\n     */\r\n    void setImeOptions(Resources res, int options) {\r\n        if (mEnterKey == null) {\r\n            return;\r\n        }\r\n\r\n        switch (options&(EditorInfo.IME_MASK_ACTION|EditorInfo.IME_FLAG_NO_ENTER_ACTION)) {\r\n            case EditorInfo.IME_ACTION_GO:\r\n                mEnterKey.iconPreview = null;\r\n                mEnterKey.icon = null;\r\n                mEnterKey.label = \"ENT\";\r\n                break;\r\n            case EditorInfo.IME_ACTION_NEXT:\r\n                mEnterKey.iconPreview = null;\r\n                mEnterKey.icon = null;\r\n                mEnterKey.label = \"N\";\r\n                break;\r\n            case EditorInfo.IME_ACTION_SEARCH:\r\n              //  mEnterKey.icon = \"K\";\r\n                mEnterKey.label = null;\r\n                break;\r\n            case EditorInfo.IME_ACTION_SEND:\r\n                mEnterKey.iconPreview = null;\r\n                mEnterKey.icon = null;\r\n                mEnterKey.label = \"HH\";\r\n                break;\r\n            default:\r\n             //   mEnterKey.icon = \"U\";\r\n                mEnterKey.label = null;\r\n                break;\r\n        }\r\n    }\r\n\r\n    public void setRowNumber(short number){\r\n\r\n        rowNumber = number;\r\n\r\n    }\r\n\r\n\r\n\r\n    void setSpaceIcon(final Drawable icon) {\r\n        if (mSpaceKey != null) {\r\n            mSpaceKey.icon = icon;\r\n        }\r\n    }\r\n    public void changeKeyHeight(double height_modifier){\r\n        int height = 0;\r\n        for(Keyboard.Key key : getKeys()) {\r\n            key.height *= height_modifier;\r\n            key.y *= height_modifier;\r\n            height = key.height;\r\n        }\r\n        setKeyHeight(height);\r\n        getNearestKeys(0, 0); //somehow adding this fixed a weird bug where bottom row keys could not be pressed if keyboard height is too tall.. from the Keyboard source code seems like calling this will recalculate some values used in keypress detection calculation\r\n    }\r\n\r\n\r\n    /** This piece of code is intended to help us to resize the keyboard at runtime,\r\n     *  thus giving us the opportunity to customize its height. It's a bit tricky though.\r\n     *  And StackOverflow inspired me to be honest.\r\n     * **/\r\n\r\n    @Override\r\n    public int getHeight(){\r\n\r\n        return getKeyHeight() * rowNumber;\r\n    }\r\n\r\n    public void setKeyHeight(int height) {\r\n        super.setKeyHeight(height);\r\n    }\r\n\r\n\r\n    static class LatinKey extends Keyboard.Key {\r\n\r\n        public LatinKey(Resources res, Keyboard.Row parent, int x, int y,\r\n                        XmlResourceParser parser) {\r\n            super(res, parent, x, y, parser);\r\n        }\r\n\r\n        /**\r\n         * Overriding this method so that we can reduce the target area for the key that\r\n         * closes the keyboard.\r\n         */\r\n        @Override\r\n        public boolean isInside(int x, int y) {\r\n            return super.isInside(x, codes[0] == KEYCODE_CANCEL ? y - 10 : y);\r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/Main.java",
    "content": "package com.vlath.keyboard;\n\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.graphics.Color;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.preference.PreferenceManager;\nimport android.provider.Settings;\nimport android.support.v4.view.PagerAdapter;\nimport android.support.v4.view.ViewPager;\nimport android.support.v7.app.AlertDialog;\nimport android.support.v7.app.AppCompatActivity;\nimport android.support.v7.widget.Toolbar;\nimport android.text.Html;\nimport android.text.method.LinkMovementMethod;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.Window;\nimport android.view.WindowManager;\nimport android.view.animation.AnimationUtils;\nimport android.view.inputmethod.InputMethodManager;\nimport android.widget.Button;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\npublic class Main extends AppCompatActivity {\n\n    private ViewPager viewPager;\n    private MyViewPagerAdapter myViewPagerAdapter;\n    private LinearLayout dotsLayout;\n    private TextView[] dots;\n    private int[] layouts;\n    private Button btnSkip, btnNext;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        if(!getPresentationShown()) {\n\n            // Checking for first time launch - before calling setContentView()\n\n\n            // Making notification bar transparent\n            if (Build.VERSION.SDK_INT >= 21) {\n                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);\n            }\n\n\n            setContentView(R.layout.main);\n            getSupportActionBar().hide();\n\n            viewPager = (ViewPager) findViewById(R.id.view_pager);\n            dotsLayout = (LinearLayout) findViewById(R.id.layoutDots);\n            btnSkip = (Button) findViewById(R.id.btn_skip);\n            btnNext = (Button) findViewById(R.id.btn_next);\n\n\n            // layouts of all welcome sliders\n            // add few more layouts if you want\n            layouts = new int[]{\n                    R.layout.slide1,\n                    R.layout.slide2,\n                    R.layout.slide3,\n                    R.layout.slide4\n            };\n\n\n            // adding bottom dots\n            addBottomDots(0);\n\n            // making notification bar transparent\n            changeStatusBarColor();\n\n            myViewPagerAdapter = new MyViewPagerAdapter();\n            viewPager.setAdapter(myViewPagerAdapter);\n            viewPager.addOnPageChangeListener(viewPagerPageChangeListener);\n\n            btnSkip.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    setPresentationShown();\n                    launchHomeScreen();\n                }\n            });\n\n            btnNext.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    // checking for last page\n                    // if last page home screen will be launched\n                    int current = getItem(+1);\n                    if (current < layouts.length) {\n                        // move to next screen\n                        viewPager.setCurrentItem(current);\n                    } else {\n                        setPresentationShown();\n                        launchHomeScreen();\n                    }\n                }\n            });\n        }\n\n        else{\n\n            setContentView(R.layout.activate);\n            TextView t2 = (TextView) findViewById(R.id.textView2);\n            t2.setMovementMethod(LinkMovementMethod.getInstance());\n\n            showTwitterDialog();\n\n        }\n\n\n    }\n\n\n    private void addBottomDots(int currentPage) {\n        dots = new TextView[layouts.length];\n\n        int[] colorsActive = getResources().getIntArray(R.array.array_dot_active);\n        int[] colorsInactive = getResources().getIntArray(R.array.array_dot_inactive);\n\n        dotsLayout.removeAllViews();\n        for (int i = 0; i < dots.length; i++) {\n            dots[i] = new TextView(this);\n            dots[i].setText(Html.fromHtml(\"&#8226;\"));\n            dots[i].setTextSize(35);\n            dots[i].setTextColor(colorsInactive[currentPage]);\n            dotsLayout.addView(dots[i]);\n        }\n\n        if (dots.length > 0)\n            dots[currentPage].setTextColor(colorsActive[currentPage]);\n    }\n\n    private int getItem(int i) {\n        return viewPager.getCurrentItem() + i;\n    }\n\n    private void launchHomeScreen() {\n        Intent intent = getIntent();\n        finish();\n        startActivity(intent);\n        overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);\n    }\n\n    //  viewpager change listener\n    ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager.OnPageChangeListener() {\n\n        @Override\n        public void onPageSelected(int position) {\n            addBottomDots(position);\n\n            // changing the next button text 'NEXT' / 'GOT IT'\n            if (position == layouts.length - 1) {\n                // last page. make button text to GOT IT\n                btnNext.setText(\"GOT IT\");\n                btnSkip.setVisibility(View.GONE);\n            } else {\n                // still pages are left\n                btnNext.setText(\"NEXT\");\n                btnSkip.setVisibility(View.VISIBLE);\n            }\n        }\n\n        @Override\n        public void onPageScrolled(int arg0, float arg1, int arg2) {\n\n        }\n\n        @Override\n        public void onPageScrollStateChanged(int arg0) {\n\n        }\n    };\n\n    /**\n     * Making notification bar transparent\n     */\n    private void changeStatusBarColor() {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            Window window = getWindow();\n            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);\n            window.setStatusBarColor(Color.TRANSPARENT);\n        }\n    }\n\n    private void normalStatusBar(){\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            Window window = getWindow();\n            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);\n            window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));\n        }\n\n    }\n\n    /**\n     * View pager adapter\n     */\n    public class MyViewPagerAdapter extends PagerAdapter {\n        private LayoutInflater layoutInflater;\n\n        public MyViewPagerAdapter() {\n        }\n\n        @Override\n        public Object instantiateItem(ViewGroup container, int position) {\n            layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);\n\n            View view = layoutInflater.inflate(layouts[position], container, false);\n            container.addView(view);\n\n            return view;\n        }\n\n        @Override\n        public int getCount() {\n            return layouts.length;\n        }\n\n        @Override\n        public boolean isViewFromObject(View view, Object obj) {\n            return view == obj;\n        }\n\n\n        @Override\n        public void destroyItem(ViewGroup container, int position, Object object) {\n            View view = (View) object;\n            container.removeView(view);\n        }\n    }\n\n    public boolean getPresentationShown(){\n\n        try {\n            return PreferenceManager.getDefaultSharedPreferences(this).getBoolean(\"presentation\", false);\n        }\n        catch (Exception e){\n\n            return false;\n        }\n\n    }\n\n    public void setPresentationShown(){\n\n        PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean(\"presentation\", true).commit();\n\n    }\n\n    public void showTwitterDialog(){\n        if(PreferenceManager.getDefaultSharedPreferences(this).getBoolean(\"shown\",false)) {}\n        else {\n            AlertDialog alertDialog = new AlertDialog.Builder(this)\n                    .setTitle(getString(R.string.up))\n                    .setMessage(getString(R.string.follow))\n                    .setPositiveButton(\"Follow\", new DialogInterface.OnClickListener() {\n                        @Override\n                        public void onClick(DialogInterface dialogInterface, int i) {\n                            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(\"https://twitter.com/VlathXDA\"));\n                            startActivity(intent);\n                        }\n                    })\n                    .setNegativeButton(\"No thanks\", new DialogInterface.OnClickListener() {\n                        @Override\n                        public void onClick(DialogInterface dialogInterface, int i) {\n                            dialogInterface.dismiss();\n                        }\n                    })\n                    .show();\n            PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean(\"shown\",true).apply();\n        }\n    }\n\n\n\n    public void settings(View v){\n        Intent intent = new Intent(this, Preference.class);\n        startActivity(intent);\n    }\n\n    public void enable(View v){\n        this.startActivity(new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS));\n    }\n\n    public void select(View v){\n        InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);\n        if (imeManager != null) {\n            imeManager.showInputMethodPicker();\n        } else {\n            Toast.makeText(this, \"Not possible\" , Toast.LENGTH_LONG).show();\n        }\n    }\n\n\n\n\n\n\n}"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/PCKeyboard.java",
    "content": "package com.vlath.keyboard;\r\n\r\n/*\r\n * Copyright (C) 2008-2009 The Android Open Source Project\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n\r\n\r\nimport android.app.Dialog;\r\nimport android.content.Context;\r\nimport android.graphics.Canvas;\r\nimport android.graphics.ColorMatrixColorFilter;\r\nimport android.graphics.Paint;\r\nimport android.inputmethodservice.InputMethodService;\r\nimport android.inputmethodservice.Keyboard;\r\nimport android.inputmethodservice.KeyboardView;\r\nimport android.os.IBinder;\r\nimport android.os.Vibrator;\r\nimport android.preference.*;\r\nimport android.text.InputType;\r\nimport android.text.method.MetaKeyKeyListener;\r\nimport android.util.Log;\r\nimport android.view.KeyCharacterMap;\r\nimport android.view.KeyEvent;\r\nimport android.view.View;\r\nimport android.view.Window;\r\nimport android.view.inputmethod.CompletionInfo;\r\nimport android.view.inputmethod.EditorInfo;\r\nimport android.view.inputmethod.InputConnection;\r\nimport android.view.inputmethod.InputMethodManager;\r\nimport android.view.inputmethod.InputMethodSubtype;\r\nimport android.view.textservice.SentenceSuggestionsInfo;\r\nimport android.view.textservice.SpellCheckerSession;\r\nimport android.view.textservice.SuggestionsInfo;\r\nimport android.view.textservice.TextInfo;\r\nimport android.view.textservice.TextServicesManager;\r\nimport android.widget.PopupWindow;\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\n/** Main class  of the keyboard, extending InputMethodService. Here we handle all the user interaction with the keyboard itself. */\r\n\r\npublic class PCKeyboard extends InputMethodService\r\n        implements KeyboardView.OnKeyboardActionListener, SpellCheckerSession.SpellCheckerSessionListener {\r\n\r\n\r\n    /**\r\n     * As we don't want to bother changing the app theme, we use filters to theme the keyboard.\r\n     * Each filter needs an array of colors. The arrays are declared below.\r\n     */\r\n\r\n    // TODO: Add the arrays in a separate, static class, so they are eay to access and modify\r\n\r\n    private static final float[] sNoneColorArray = {\r\n            1.0f, 0, 0, 0, 0, // red\r\n            0, 1.0f, 0, 0, 0, // green\r\n            0, 0, 1.0f, 0, 0, // blue\r\n            0, 0, 0, 1.0f, 0 // alpha\r\n    };\r\n\r\n    private static final float[] sNegativeColorArray = {\r\n            -1.0f, 0, 0, 0, 255, // red\r\n            0, -1.0f, 0, 0, 255, // green\r\n            0, 0, -1.0f, 0, 255, // blue\r\n            0, 0, 0, 1.0f, 0 // alpha\r\n    };\r\n    private static final float[] sBlueBlackColorArray = {\r\n            -0.6f, 0, 0, 0, 41, // red\r\n            0, -0.6f, 0, 0, 128, // green\r\n            0, 0, -0.6f, 0, 185, // blue\r\n            0, 0, 0, 1.0f, 0 // alpha\r\n    };\r\n    private static final float[] sBlueWhiteColorArray = {\r\n            1.0f, 0, 0, 0, 41, // red\r\n            0, 1.0f, 0, 0, 128, // green\r\n            0, 0, 1.0f, 0, 185, // blue\r\n            0, 0, 0, 1.0f, 1 // alpha\r\n    };\r\n    private static final float[] sRedWhiteColorArray = {\r\n            1.0f, 0, 0, 0, 192, // red\r\n            0, 1.0f, 0, 0, 57, // green\r\n            0, 0, 1.0f, 0, 43, // blue\r\n            0, 0, 0, 1.0f, 0 // alpha\r\n    };\r\n    private static final float[] sRedBlackColorArray = {\r\n            -0.6f, 0, 0, 0, 192, // red\r\n            0, -0.6f, 0, 0, 57, // green\r\n            0, 0, -0.6f, 0, 43, // blue\r\n            0, 0, 0, 1.0f, 0 // alpha\r\n    };\r\n    private static final float[] sOrangeBlackColorArray = {\r\n            1.0f, 0, 0, 0, 230, // red\r\n            0, 1.0f, 0, 0, 126, // green\r\n            0, 0, 1.0f, 0, 34, // blue\r\n            0, 0, 0, 1.0f, 0 // alpha\r\n    };\r\n    private static final float[] sMaterialDarkColorArray = {\r\n            1.0f, 0, 0, 0, 55, // red\r\n            0, 1.0f, 0, 0, 71, // green\r\n            0, 0, 1.0f, 0, 79, // blue\r\n            0, 0, 0, 1.0f, 1 // alpha\r\n    };\r\n\r\n    static final boolean PROCESS_HARD_KEYS = true;\r\n\r\n    private InputMethodManager mInputMethodManager;\r\n\r\n    private CustomKeyboard mInputView;\r\n    private CandidateView mCandidateView;\r\n    private CompletionInfo[] mCompletions;\r\n\r\n    private StringBuilder mComposing = new StringBuilder();\r\n    private boolean mPredictionOn;\r\n    private boolean mCompletionOn;\r\n    private int mLastDisplayWidth;\r\n    private boolean mCapsLock;\r\n    private long mLastShiftTime;\r\n    private long mMetaState;\r\n\r\n    private LatinKeyboard mSymbolsKeyboard;\r\n    private LatinKeyboard mSymbolsShiftedKeyboard;\r\n    private LatinKeyboard mStandardKeyboard;\r\n\r\n\r\n\r\n    private String mWordSeparators;\r\n\r\n    private SpellCheckerSession mScs;\r\n    private List<String> mSuggestions;\r\n\r\n    private boolean firstCaps = false;\r\n    private boolean isSysmbols = false;\r\n    private boolean shiftSim = false;\r\n    private boolean isDpad = false;\r\n    private boolean isProgramming = false;\r\n    private InputMethodManager mServ;\r\n    private float[] mDefaultFilter;\r\n    long shift_pressed=0;\r\n\r\n    private short rowNumber = 4;\r\n    private CustomKeyboard kv;\r\n\r\n    private LatinKeyboard currentKeyboard;\r\n    private LatinKeyboard mCurKeyboard;\r\n    private LatinKeyboard standardKeyboard;\r\n\r\n    private int standardKeyboardID = R.xml.qwerty;\r\n    /**\r\n     * Main initialization of the input method component. Be sure to call\r\n     * to super class.\r\n     */\r\n\r\n    @Override public void onCreate() {\r\n        super.onCreate();\r\n        mInputMethodManager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);\r\n        mWordSeparators = getResources().getString(R.string.word_separators);\r\n        final TextServicesManager tsm = (TextServicesManager) getSystemService(\r\n                Context.TEXT_SERVICES_MANAGER_SERVICE);\r\n        mScs = tsm.newSpellCheckerSession(null, null, this, true);\r\n    }\r\n\r\n    /**\r\n     * This is the point where you can do all of your UI initialization.  It\r\n     * is called after creation and any configuration change.\r\n     */\r\n    @Override public void onInitializeInterface() {\r\n        if (mStandardKeyboard != null) {\r\n            // Configuration changes can happen after the keyboard gets recreated,\r\n            // so we need to be able to re-build the keyboards if the available\r\n            // space has changed.\r\n            int displayWidth = getMaxWidth();\r\n            if (displayWidth == mLastDisplayWidth) return;\r\n            mLastDisplayWidth = displayWidth;\r\n        }\r\n        mStandardKeyboard = new LatinKeyboard(this, standardKeyboardID);\r\n        mSymbolsKeyboard = new LatinKeyboard(this, R.xml.symbols);\r\n        mSymbolsShiftedKeyboard = new LatinKeyboard(this, R.xml.symbols2);\r\n    }\r\n\r\n    /**\r\n     * Called by the framework when your view for creating input needs to\r\n     * be generated.  This will be called the first time your input method\r\n     * is displayed, and every time it needs to be re-created such as due to\r\n     * a configuration change.\r\n     *\r\n     * We also s\r\n     */\r\n    @Override public View onCreateInputView() {\r\n        mInputView = (CustomKeyboard) getLayoutInflater().inflate(\r\n                R.layout.keyboard, null);\r\n        mInputView.setOnKeyboardActionListener(this);\r\n        mInputView.setPreviewEnabled(false);\r\n        setLatinKeyboard(mStandardKeyboard);\r\n        return mInputView;\r\n    }\r\n\r\n    private void setLatinKeyboard(LatinKeyboard nextKeyboard) {\r\n\r\n        mInputView.setKeyboard(nextKeyboard);\r\n\r\n    }\r\n\r\n    /**\r\n     * Called by the framework when your view for showing candidates needs to\r\n     * be generated, like {@link #onCreateInputView}.\r\n     */\r\n    @Override public View onCreateCandidatesView() {\r\n        mCandidateView = new CandidateView(this);\r\n        mCandidateView.setService(this);\r\n        setTheme();\r\n        Paint mPaint = new Paint();\r\n        ColorMatrixColorFilter filterInvert = new ColorMatrixColorFilter(mDefaultFilter);\r\n        mPaint.setColorFilter(filterInvert);\r\n        mCandidateView.setLayerType(View.LAYER_TYPE_HARDWARE, mPaint);\r\n\r\n\r\n        return mCandidateView;\r\n    }\r\n\r\n    /**\r\n     * This is the main point where we do our initialization of the input method\r\n     * to begin operating on an application.  At this point we have been\r\n     * bound to the client, and are now receiving all of the detailed information\r\n     * about the target of our edits.\r\n     *\r\n     *\r\n     * And we have to reinitialize all we've one to make sure the keyboard aspect matches\r\n     * The one selected in settings.\r\n     */\r\n    @Override public void onStartInput(EditorInfo attribute, boolean restarting) {\r\n        super.onStartInput(attribute, restarting);\r\n\r\n        setTheme();\r\n\r\n        mComposing.setLength(0);\r\n        updateCandidates();\r\n        /**\r\n         * Some code on here is based on the SoftKeyboard Sample. I don't fully understand it.\r\n         * I need to look it up and delete any unnecessary stuff.\r\n         * */\r\n        if (!restarting) {\r\n            // Clear shift states.\r\n            mMetaState = 0;\r\n        }\r\n        mCompletions = null;\r\n\r\n        if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"bord\",false)){\r\n            kv = (CustomKeyboard) getLayoutInflater().inflate(R.layout.keyboard_key_back, null);\r\n        }\r\n        else {\r\n            kv = (CustomKeyboard) getLayoutInflater().inflate(R.layout.keyboard, null);\r\n        }\r\n        setStandardKeyboard();\r\n        setInputType();\r\n        Paint mPaint = new Paint();\r\n        ColorMatrixColorFilter filterInvert = new ColorMatrixColorFilter(mDefaultFilter);\r\n        mPaint.setColorFilter(filterInvert);\r\n        mCandidateView = new CandidateView(this);\r\n        mCandidateView.setService(this);\r\n\r\n        kv.setLayerType(View.LAYER_TYPE_HARDWARE, mPaint);\r\n        currentKeyboard.setRowNumber(getRowNumber());\r\n\r\n        kv.setKeyboard(currentKeyboard);\r\n\r\n        capsOnFirst();\r\n        kv.setOnKeyboardActionListener(this);\r\n\r\n        mPredictionOn = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"pred\", false);\r\n        mCompletionOn = false;\r\n\r\n        mCandidateView.setLayerType(View.LAYER_TYPE_HARDWARE, mPaint);\r\n\r\n        setInputView(kv);\r\n        kv.getLatinKeyboard().changeKeyHeight(getHeightKeyModifier());\r\n\r\n        setCandidatesView(mCandidateView);\r\n\r\n    }\r\n\r\n    /**\r\n     * This is called when the user is done editing a field.  We can use\r\n     * this to reset our state.\r\n     */\r\n    @Override public void onFinishInput() {\r\n        super.onFinishInput();\r\n\r\n        // Clear current composing text and candidates.\r\n        mComposing.setLength(0);\r\n        updateCandidates();\r\n\r\n        // We only hide the candidates window when finishing input on\r\n        // a particular editor, to avoid popping the underlying application\r\n        // up and down if the user is entering text into the bottom of\r\n        // its window.\r\n        setCandidatesViewShown(false);\r\n\r\n        mCurKeyboard = mStandardKeyboard;\r\n        if (mInputView != null) {\r\n            mInputView.closing();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Deal with the editor reporting movement of its cursor.\r\n     */\r\n    @Override public void onUpdateSelection(int oldSelStart, int oldSelEnd,\r\n                                            int newSelStart, int newSelEnd,\r\n                                            int candidatesStart, int candidatesEnd) {\r\n        super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd,\r\n                candidatesStart, candidatesEnd);\r\n\r\n        // If the current selection in the text view changes, we should\r\n        // clear whatever candidate text we have.\r\n        if (mComposing.length() > 0 && (newSelStart != candidatesEnd\r\n                || newSelEnd != candidatesEnd)) {\r\n            mComposing.setLength(0);\r\n            updateCandidates();\r\n            InputConnection ic = getCurrentInputConnection();\r\n            if (ic != null) {\r\n                ic.finishComposingText();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * This tells us about completions that the editor has determined based\r\n     * on the current text in it.  We want to use this in fullscreen mode\r\n     * to show the completions ourself, since the editor can not be seen\r\n     * in that situation.\r\n     */\r\n    @Override public void onDisplayCompletions(CompletionInfo[] completions) {\r\n        if (mCompletionOn) {\r\n            mCompletions = completions;\r\n            if (completions == null) {\r\n                setSuggestions(null, false, false);\r\n                return;\r\n            }\r\n\r\n            List<String> stringList = new ArrayList<String>();\r\n            for (int i = 0; i < completions.length; i++) {\r\n                CompletionInfo ci = completions[i];\r\n                if (ci != null) stringList.add(ci.getText().toString());\r\n            }\r\n            setSuggestions(stringList, true, true);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * This translates incoming hard key events in to edit operations on an\r\n     * InputConnection.  It is only needed when using the\r\n     * PROCESS_HARD_KEYS option.\r\n     */\r\n    private boolean translateKeyDown(int keyCode, KeyEvent event) {\r\n        mMetaState = MetaKeyKeyListener.handleKeyDown(mMetaState,\r\n                keyCode, event);\r\n        int c = event.getUnicodeChar(MetaKeyKeyListener.getMetaState(mMetaState));\r\n        mMetaState = MetaKeyKeyListener.adjustMetaAfterKeypress(mMetaState);\r\n        InputConnection ic = getCurrentInputConnection();\r\n        if (c == 0 || ic == null) {\r\n            return false;\r\n        }\r\n\r\n        boolean dead = false;\r\n\r\n        if ((c & KeyCharacterMap.COMBINING_ACCENT) != 0) {\r\n            dead = true;\r\n            c = c & KeyCharacterMap.COMBINING_ACCENT_MASK;\r\n        }\r\n\r\n        if (mComposing.length() > 0) {\r\n            char accent = mComposing.charAt(mComposing.length() -1 );\r\n            int composed = KeyEvent.getDeadChar(accent, c);\r\n\r\n            if (composed != 0) {\r\n                c = composed;\r\n                mComposing.setLength(mComposing.length()-1);\r\n            }\r\n        }\r\n\r\n        onKey(c, null);\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * Use this to monitor key events being delivered to the application.\r\n     * We get first crack at them, and can either resume them or let them\r\n     * continue to the app.\r\n     */\r\n    @Override public boolean onKeyUp(int keyCode, KeyEvent event) {\r\n\r\n        return super.onKeyUp(keyCode, event);\r\n    }\r\n    @Override public boolean onKeyDown(int keyCode, KeyEvent event) {\r\n\r\n        return super.onKeyDown(keyCode, event);\r\n    }\r\n\r\n    /**\r\n     * Helper function to commit any text being composed in to the editor.\r\n     */\r\n    private void commitTyped(InputConnection inputConnection) {\r\n        if (mComposing.length() > 0) {\r\n            inputConnection.commitText(mComposing, mComposing.length());\r\n            mComposing.setLength(0);\r\n            updateCandidates();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Helper to update the shift state of our keyboard based on the initial\r\n     * editor state.\r\n     */\r\n    private void updateShiftKeyState(EditorInfo attr) {\r\n        if (attr != null\r\n                && mInputView != null && mStandardKeyboard == mInputView.getKeyboard()) {\r\n            int caps = 0;\r\n            EditorInfo ei = getCurrentInputEditorInfo();\r\n            if (ei != null && ei.inputType != InputType.TYPE_NULL) {\r\n                caps = getCurrentInputConnection().getCursorCapsMode(attr.inputType);\r\n            }\r\n            mInputView.setShifted(mCapsLock || caps != 0);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Helper to determine if a given character code is alphabetic.\r\n     */\r\n    private boolean isAlphabet(int code) {\r\n        if (Character.isLetter(code)) {\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Helper to send a key down / key up pair to the current editor.\r\n     */\r\n    private void keyDownUp(int keyEventCode) {\r\n        getCurrentInputConnection().sendKeyEvent(\r\n                new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode));\r\n        getCurrentInputConnection().sendKeyEvent(\r\n                new KeyEvent(KeyEvent.ACTION_UP, keyEventCode));\r\n    }\r\n\r\n    /**\r\n     * Helper to send a character to the editor as raw key events.\r\n     */\r\n    private void sendKey(int keyCode) {\r\n        switch (keyCode) {\r\n            case '\\n':\r\n                keyDownUp(KeyEvent.KEYCODE_ENTER);\r\n                break;\r\n            default:\r\n                if (keyCode >= '0' && keyCode <= '9') {\r\n                    keyDownUp(keyCode - '0' + KeyEvent.KEYCODE_0);\r\n                } else {\r\n                    getCurrentInputConnection().commitText(String.valueOf((char) keyCode), 1);\r\n                }\r\n                break;\r\n        }\r\n    }\r\n\r\n\r\n    public void onText(CharSequence text) {\r\n        InputConnection ic = getCurrentInputConnection();\r\n        if (ic == null) return;\r\n        ic.beginBatchEdit();\r\n        if (mComposing.length() > 0) {\r\n            commitTyped(ic);\r\n        }\r\n        ic.commitText(text, 0);\r\n        ic.endBatchEdit();\r\n        updateShiftKeyState(getCurrentInputEditorInfo());\r\n\r\n    }\r\n\r\n    @Override\r\n    public void swipeLeft() {\r\n\r\n    }\r\n\r\n    @Override\r\n    public void swipeRight() {\r\n\r\n    }\r\n\r\n    @Override\r\n    public void swipeDown() {\r\n\r\n    }\r\n\r\n    @Override\r\n    public void swipeUp() {\r\n\r\n    }\r\n\r\n    /**\r\n     * Update the list of available candidates from the current composing\r\n     * text.  This will need to be filled in by however you are determining\r\n     * candidates.\r\n     */\r\n    private void updateCandidates() {\r\n        if (!mCompletionOn) {\r\n            if (mComposing.length() > 0) {\r\n                ArrayList<String> list = new ArrayList<String>();\r\n                list.add(mComposing.toString());\r\n                mScs.getSentenceSuggestions(new TextInfo[] {new TextInfo(mComposing.toString())}, 5);\r\n                setSuggestions(list, true, true);\r\n            } else {\r\n                setSuggestions(null, false, false);\r\n            }\r\n        }\r\n    }\r\n\r\n    public void setSuggestions(List<String> suggestions, boolean completions,\r\n                               boolean typedWordValid) {\r\n        if (suggestions != null && suggestions.size() > 0) {\r\n            setCandidatesViewShown(true);\r\n        } else if (isExtractViewShown()) {\r\n            setCandidatesViewShown(true);\r\n        }\r\n        mSuggestions = suggestions;\r\n        if (mCandidateView != null) {\r\n            mCandidateView.setSuggestions(suggestions, completions, typedWordValid);\r\n        }\r\n    }\r\n\r\n    private void handleBackspace() {\r\n        final int length = mComposing.length();\r\n        if (length > 1) {\r\n            mComposing.delete(length - 1, length);\r\n            getCurrentInputConnection().setComposingText(mComposing, 1);\r\n            updateCandidates();\r\n        } else if (length > 0) {\r\n            mComposing.setLength(0);\r\n            getCurrentInputConnection().commitText(\"\", 0);\r\n            updateCandidates();\r\n        } else {\r\n            keyDownUp(KeyEvent.KEYCODE_DEL);\r\n        }\r\n        updateShiftKeyState(getCurrentInputEditorInfo());\r\n    }\r\n\r\n    private void handleCharacter(int primaryCode, int[] keyCodes) {\r\n        if (isInputViewShown()) {\r\n            if (kv.isShifted()) {\r\n                primaryCode = Character.toUpperCase(primaryCode);\r\n            }\r\n        }\r\n        if (mPredictionOn && !mWordSeparators.contains(String.valueOf((char)primaryCode))) {\r\n            mComposing.append((char) primaryCode);\r\n            getCurrentInputConnection().setComposingText(mComposing, 1);\r\n            updateShiftKeyState(getCurrentInputEditorInfo());\r\n            updateCandidates();\r\n        }\r\n        if(mPredictionOn && mWordSeparators.contains(String.valueOf((char)primaryCode))){\r\n            char code = (char) primaryCode;\r\n            if (Character.isLetter(code) && firstCaps || Character.isLetter(code) && Variables.isShift()) {\r\n                code = Character.toUpperCase(code);\r\n            }\r\n            getCurrentInputConnection().setComposingRegion(0,0);\r\n            getCurrentInputConnection().commitText(String.valueOf(code), 1);\r\n            firstCaps = false;\r\n            setCapsOn(false);\r\n        }\r\n        if(!mPredictionOn){\r\n            char code = (char) primaryCode;\r\n            if (Character.isLetter(code) && firstCaps || Character.isLetter(code) && Variables.isShift()) {\r\n                code = Character.toUpperCase(code);\r\n            }\r\n            getCurrentInputConnection().setComposingRegion(0,0);\r\n            getCurrentInputConnection().commitText(String.valueOf(code), 1);\r\n            firstCaps = false;\r\n            setCapsOn(false);\r\n        }\r\n    }\r\n\r\n    private void handleClose() {\r\n        commitTyped(getCurrentInputConnection());\r\n        requestHideSelf(0);\r\n        mInputView.closing();\r\n    }\r\n\r\n    private IBinder getToken() {\r\n        final Dialog dialog = getWindow();\r\n        if (dialog == null) {\r\n            return null;\r\n        }\r\n        final Window window = dialog.getWindow();\r\n        if (window == null) {\r\n            return null;\r\n        }\r\n        return window.getAttributes().token;\r\n    }\r\n\r\n    private void handleLanguageSwitch() {\r\n        mInputMethodManager.switchToNextInputMethod(getToken(), false /* onlyCurrentIme */);\r\n    }\r\n\r\n    private void checkToggleCapsLock() {\r\n        long now = System.currentTimeMillis();\r\n        if (mLastShiftTime + 800 > now) {\r\n            mCapsLock = !mCapsLock;\r\n            mLastShiftTime = 0;\r\n        } else {\r\n            mLastShiftTime = now;\r\n        }\r\n    }\r\n\r\n    private String getWordSeparators() {\r\n        return mWordSeparators;\r\n    }\r\n\r\n    public boolean isWordSeparator(String s) {\r\n\r\n       if(s.contains(\". \") || s.contains(\"? \") || s.contains(\"! \")){\r\n           return true;\r\n       }\r\n\r\n       return false;\r\n\r\n    }\r\n\r\n    public void pickDefaultCandidate() {\r\n        pickSuggestionManually(0);\r\n    }\r\n\r\n    public void pickSuggestionManually(int index) {\r\n        if (mCompletionOn && mCompletions != null && index >= 0\r\n                && index < mCompletions.length) {\r\n            CompletionInfo ci = mCompletions[index];\r\n            getCurrentInputConnection().commitCompletion(ci);\r\n            if (mCandidateView != null) {\r\n                mCandidateView.clear();\r\n            }\r\n            updateShiftKeyState(getCurrentInputEditorInfo());\r\n        } else if (mComposing.length() > 0) {\r\n\r\n            if (mPredictionOn && mSuggestions != null && index >= 0) {\r\n                mComposing.replace(0, mComposing.length(), mSuggestions.get(index));\r\n            }\r\n            commitTyped(getCurrentInputConnection());\r\n\r\n        }\r\n    }\r\n\r\n    public void onPress(int primaryCode) {\r\n        if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"vib\", false)) {\r\n            Vibrator v = (Vibrator) getBaseContext().getSystemService(Context.VIBRATOR_SERVICE);\r\n            v.vibrate(40);\r\n        }\r\n    }\r\n\r\n\r\n    public void onRelease(int primaryCode) {\r\n\r\n    }\r\n    /**\r\n     * http://www.tutorialspoint.com/android/android_spelling_checker.htm\r\n     * Sort of copy-paste, huh.\r\n     *\r\n     * I need to find time to refine this code\r\n     *\r\n     *\r\n     * @param results results\r\n     */\r\n    @Override\r\n    public void onGetSuggestions(SuggestionsInfo[] results) {\r\n        final StringBuilder sb = new StringBuilder();\r\n\r\n        for (SuggestionsInfo result : results) {\r\n            // Returned suggestions are contained in SuggestionsInfo\r\n            final int len = result.getSuggestionsCount();\r\n            sb.append('\\n');\r\n\r\n            for (int j = 0; j < len; ++j) {\r\n                sb.append(\",\").append(result.getSuggestionAt(j));\r\n            }\r\n\r\n            sb.append(\" (\").append(len).append(\")\");\r\n        }\r\n    }\r\n\r\n    private void dumpSuggestionsInfoInternal(\r\n            final List<String> sb, final SuggestionsInfo si, final int length, final int offset) {\r\n        // Returned suggestions are contained in SuggestionsInfo\r\n        final int len = si.getSuggestionsCount();\r\n        for (int j = 0; j < len; ++j) {\r\n            sb.add(si.getSuggestionAt(j));\r\n        }\r\n    }\r\n\r\n    @Override\r\n    public void onGetSentenceSuggestions(SentenceSuggestionsInfo[] results) {\r\n       try {\r\n           final List<String> sb = new ArrayList<>();\r\n           for (final SentenceSuggestionsInfo ssi : results) {\r\n               for (int j = 0; j < ssi.getSuggestionsCount(); ++j) {\r\n                   dumpSuggestionsInfoInternal(\r\n                           sb, ssi.getSuggestionsInfoAt(j), ssi.getOffsetAt(j), ssi.getLengthAt(j));\r\n               }\r\n           }\r\n\r\n           setSuggestions(sb, true, true);\r\n       }\r\n       catch(Exception ignored){}\r\n\r\n    }\r\n    private void setCapsOn(boolean on) {\r\n\r\n        /** Simple function that enables us to rapidly set the keyboard shifted or not.\r\n         * */\r\n        if(Variables.isShift()){\r\n            kv.getKeyboard().setShifted(true);\r\n            kv.invalidateAllKeys();\r\n        }\r\n        else {\r\n            kv.getKeyboard().setShifted(on);\r\n            kv.invalidateAllKeys();\r\n        }\r\n\r\n    }\r\n    private void processKeyCombo(int keycode) {\r\n       /** Ass the function name says, we process key combinations here*/\r\n\r\n        if (Variables.isAnyOn()) {\r\n            if (Variables.isCtrl() && Variables.isAlt()) {\r\n                getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, getHardKeyCode(keycode), 0, KeyEvent.META_CTRL_ON | KeyEvent.META_ALT_ON));\r\n                getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_UP, getHardKeyCode(keycode), 0, KeyEvent.META_CTRL_ON | KeyEvent.META_ALT_ON));\r\n            } else {\r\n                if (Variables.isCtrl()) {\r\n                    getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, getHardKeyCode(keycode), 0, KeyEvent.META_CTRL_ON));\r\n                    getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_UP, getHardKeyCode(keycode), 0, KeyEvent.META_CTRL_ON));\r\n                }\r\n                if (Variables.isAlt()) {\r\n                    getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, getHardKeyCode(keycode), 0, KeyEvent.META_ALT_ON));\r\n                    getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_UP, getHardKeyCode(keycode), 0, KeyEvent.META_ALT_ON));\r\n                }\r\n            }\r\n        }\r\n\r\n    }\r\n    private int getHardKeyCode(int keycode) {\r\n       /** Seems like the actual soft key code doesn't match the hard key code*/\r\n        PopupWindow p = new PopupWindow();\r\n        char code = (char) keycode;\r\n        switch (String.valueOf(code)) {\r\n            case \"a\":\r\n                return KeyEvent.KEYCODE_A;\r\n            case \"b\":\r\n                return KeyEvent.KEYCODE_B;\r\n            case \"c\":\r\n                return KeyEvent.KEYCODE_C;\r\n\r\n            case \"d\":\r\n                return KeyEvent.KEYCODE_D;\r\n\r\n            case \"e\":\r\n                return KeyEvent.KEYCODE_E;\r\n\r\n            case \"f\":\r\n                return KeyEvent.KEYCODE_F;\r\n\r\n\r\n            case \"g\":\r\n                return KeyEvent.KEYCODE_G;\r\n\r\n            case \"h\":\r\n                return KeyEvent.KEYCODE_H;\r\n\r\n            case \"i\":\r\n                return KeyEvent.KEYCODE_I;\r\n\r\n            case \"j\":\r\n                return KeyEvent.KEYCODE_J;\r\n\r\n\r\n            case \"k\":\r\n                return KeyEvent.KEYCODE_K;\r\n\r\n            case \"l\":\r\n                return KeyEvent.KEYCODE_L;\r\n\r\n            case \"m\":\r\n                return KeyEvent.KEYCODE_M;\r\n\r\n            case \"n\":\r\n                return KeyEvent.KEYCODE_N;\r\n\r\n            case \"o\":\r\n                return KeyEvent.KEYCODE_O;\r\n\r\n            case \"p\":\r\n                return KeyEvent.KEYCODE_P;\r\n\r\n\r\n            case \"q\":\r\n                return KeyEvent.KEYCODE_Q;\r\n\r\n            case \"r\":\r\n                return KeyEvent.KEYCODE_R;\r\n\r\n\r\n            case \"s\":\r\n                return KeyEvent.KEYCODE_S;\r\n\r\n            case \"t\":\r\n                return KeyEvent.KEYCODE_T;\r\n\r\n            case \"u\":\r\n                return KeyEvent.KEYCODE_U;\r\n\r\n            case \"v\":\r\n                return KeyEvent.KEYCODE_V;\r\n\r\n\r\n            case \"w\":\r\n                return KeyEvent.KEYCODE_W;\r\n\r\n            case \"x\":\r\n                return KeyEvent.KEYCODE_X;\r\n\r\n            case \"y\":\r\n                return KeyEvent.KEYCODE_Y;\r\n\r\n            case \"z\":\r\n                return KeyEvent.KEYCODE_Z;\r\n            default:\r\n                return keycode;\r\n        }\r\n    }\r\n\r\n    private void handleAction() {\r\n        EditorInfo curEditor = getCurrentInputEditorInfo();\r\n        switch (curEditor.imeOptions & EditorInfo.IME_MASK_ACTION) {\r\n            case EditorInfo.IME_ACTION_DONE:\r\n                getCurrentInputConnection().performEditorAction(EditorInfo.IME_ACTION_DONE);\r\n                break;\r\n            case EditorInfo.IME_ACTION_GO:\r\n                getCurrentInputConnection().performEditorAction(EditorInfo.IME_ACTION_GO);\r\n                break;\r\n            case EditorInfo.IME_ACTION_NEXT:\r\n                getCurrentInputConnection().performEditorAction(EditorInfo.IME_ACTION_NEXT);\r\n                break;\r\n            case EditorInfo.IME_ACTION_SEARCH:\r\n                getCurrentInputConnection().performEditorAction(EditorInfo.IME_ACTION_SEARCH);\r\n                break;\r\n            case EditorInfo.IME_ACTION_SEND:\r\n\r\n                getCurrentInputConnection().performEditorAction(EditorInfo.IME_ACTION_SEND);\r\n\r\n                break;\r\n            default:\r\n\r\n                break;\r\n        }\r\n    }\r\n\r\n    public void setTheme() {\r\n        switch (PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString(\"theme\", \"2\")) {\r\n            case \"1\":\r\n                mDefaultFilter = sNoneColorArray;\r\n                break;\r\n            case \"2\":\r\n                mDefaultFilter = sNegativeColorArray;\r\n                break;\r\n            case \"3\":\r\n                mDefaultFilter = sBlueWhiteColorArray;\r\n                break;\r\n            case \"4\":\r\n                mDefaultFilter = sBlueBlackColorArray;\r\n                break;\r\n            case \"5\":\r\n                mDefaultFilter = sRedWhiteColorArray;\r\n                break;\r\n            case \"6\":\r\n                mDefaultFilter = sRedBlackColorArray;\r\n                break;\r\n            case \"7\":\r\n                mDefaultFilter = sOrangeBlackColorArray;\r\n                break;\r\n            case \"8\":\r\n                mDefaultFilter = sMaterialDarkColorArray;\r\n                break;\r\n\r\n        }\r\n    }\r\n    private void setInputType() {\r\n\r\n        /** Checks the preferences for the default keyboard layout.\r\n         * If standard, we start out whether in standard or numbers, depending on the input type.\r\n         * */\r\n\r\n        EditorInfo attribute = getCurrentInputEditorInfo();\r\n\r\n        if (PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString(\"start\", \"1\").equals(\"1\")) {\r\n            switch (attribute.inputType & InputType.TYPE_MASK_CLASS) {\r\n                case InputType.TYPE_CLASS_NUMBER:\r\n                case InputType.TYPE_CLASS_DATETIME:\r\n                case InputType.TYPE_CLASS_PHONE:\r\n                    currentKeyboard = new LatinKeyboard(this, R.xml.numbers);\r\n                    break;\r\n                case InputType.TYPE_CLASS_TEXT:\r\n                    int webInputType = attribute.inputType & InputType.TYPE_MASK_VARIATION;\r\n\r\n                    if (webInputType == InputType.TYPE_TEXT_VARIATION_URI ||\r\n                            webInputType == InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT ||\r\n                            webInputType == InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS\r\n                            || webInputType == InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS) {\r\n                        currentKeyboard = new LatinKeyboard(this, standardKeyboardID);\r\n                    } else {\r\n                        currentKeyboard = new LatinKeyboard(this, standardKeyboardID);\r\n                    }\r\n\r\n                    break;\r\n\r\n                default:\r\n                    currentKeyboard = new LatinKeyboard(this, standardKeyboardID);\r\n                    break;\r\n            }\r\n        } else {\r\n            setDefaultKeyboard();\r\n        }\r\n        if (kv != null) {\r\n            kv.setKeyboard(currentKeyboard);\r\n        }\r\n    }\r\n    public void setDefaultKeyboard() {\r\n        switch (PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString(\"start\", \"1\")) {\r\n            case \"1\":\r\n                currentKeyboard = standardKeyboard;\r\n                break;\r\n            case \"2\":\r\n                currentKeyboard = new LatinKeyboard(this, R.xml.arrow_keys);\r\n                setRowNumber(4);\r\n                currentKeyboard.setRowNumber(getRowNumber());\r\n                break;\r\n            case \"3\":\r\n                currentKeyboard = new LatinKeyboard(this, R.xml.programming);\r\n                setRowNumber(5);\r\n                currentKeyboard.setRowNumber(getRowNumber());\r\n                break;\r\n        }\r\n    }\r\n    private void capsOnFirst() {\r\n\r\n        /** Huh, a method that calls getCursorCapsMode() and performs a check.\r\n         * Accordingly to the official android documentation, if the caps mode is not equal to 0,\r\n         * We should start in caps mode. Although, tests have proven that additionally checks are needed.\r\n         * I'll see what I can do on this.\r\n         * */\r\n        if(PreferenceManager.getDefaultSharedPreferences(this).getBoolean(\"caps\",true)){\r\n            if (getCursorCapsMode(getCurrentInputConnection(), getCurrentInputEditorInfo()) != 0) {\r\n                firstCaps = true;\r\n                setCapsOn(true);\r\n            }\r\n        }\r\n        else {\r\n            firstCaps = false;\r\n            setCapsOn(false);\r\n        }\r\n\r\n    }\r\n    private int getCursorCapsMode(InputConnection ic, EditorInfo attr) {\r\n\r\n        /** A rudimentary method to find out whether we should start with caps on or not.\r\n         * */\r\n        // TODO: Perform additional checks.\r\n\r\n        int caps = 0;\r\n        EditorInfo ei = getCurrentInputEditorInfo();\r\n        if (ei != null && ei.inputType != EditorInfo.TYPE_NULL) {\r\n            caps = ic.getCursorCapsMode(attr.inputType);\r\n        }\r\n        return caps;\r\n    }\r\n    @Override\r\n    public void onKey(int primaryCode, int[] keyCodes) {\r\n        InputConnection ic = getCurrentInputConnection();\r\n\r\n\r\n        /** Here we handle the key events. */\r\n\r\n        switch (primaryCode) {\r\n            case Keyboard.KEYCODE_DELETE:\r\n               handleBackspace();\r\n                break;\r\n            case Keyboard.KEYCODE_SHIFT:\r\n\r\n                /** We need to check whether we are on symbols layout or not.\r\n                 * Then, perform the operation accordingly.\r\n                 * Also, we check for double tab on the shift, and, if detected\r\n                 * We set a global variable that tells us that the Shift is in the lock position.\r\n                 * */\r\n\r\n                if (isSysmbols) {\r\n                    if (!shiftSim) {\r\n                        currentKeyboard = new LatinKeyboard(this, R.xml.symbols2);\r\n                        kv.setKeyboard(currentKeyboard);\r\n                        shiftSim = true;\r\n                    } else {\r\n                        currentKeyboard = new LatinKeyboard(this, R.xml.symbols);\r\n                        kv.setKeyboard(currentKeyboard);\r\n                        shiftSim = false;\r\n                    }\r\n                } else {\r\n                    if (shift_pressed + 200 > System.currentTimeMillis()){\r\n                        Variables.setShiftOn();\r\n                        setCapsOn(true);\r\n                        kv.draw(new Canvas());\r\n                    }\r\n                    else{\r\n                        if(Variables.isShift()){\r\n                            Variables.setShiftOff();\r\n                            firstCaps = false;\r\n                            setCapsOn(firstCaps);\r\n                            shift_pressed = System.currentTimeMillis();\r\n                        }\r\n                        else{\r\n                            firstCaps = !firstCaps;\r\n                            setCapsOn(firstCaps);\r\n                            shift_pressed = System.currentTimeMillis();\r\n                        }\r\n                    }\r\n\r\n\r\n                }\r\n                break;\r\n            case 10:\r\n\r\n                /** Handle the 'done' action accordingly to the IME Options. */\r\n\r\n                EditorInfo curEditor = getCurrentInputEditorInfo();\r\n                switch (curEditor.imeOptions & EditorInfo.IME_MASK_ACTION) {\r\n                    case EditorInfo.IME_ACTION_DONE:\r\n                        keyDownUp(66);\r\n                        break;\r\n                    case EditorInfo.IME_ACTION_GO:\r\n                        getCurrentInputConnection().performEditorAction(EditorInfo.IME_ACTION_GO);\r\n                        break;\r\n                    case EditorInfo.IME_ACTION_NEXT:\r\n                        keyDownUp(66);\r\n                        break;\r\n                    case EditorInfo.IME_ACTION_SEARCH:\r\n                        getCurrentInputConnection().performEditorAction(EditorInfo.IME_ACTION_SEARCH);\r\n                        break;\r\n                    case EditorInfo.IME_ACTION_SEND:\r\n                        keyDownUp(66);\r\n                        break;\r\n                    default:\r\n                       keyDownUp(66);\r\n                        break;\r\n                }\r\n                break;\r\n            case Keyboard.KEYCODE_MODE_CHANGE:\r\n\r\n                /** Switch between standard/symbols layout. */\r\n\r\n                if (!isSysmbols) {\r\n                    isSysmbols = !isSysmbols;\r\n                    currentKeyboard = new LatinKeyboard(this, R.xml.symbols);\r\n                    kv.setKeyboard(currentKeyboard);\r\n                } else {\r\n                    isSysmbols = false;\r\n                    currentKeyboard = new LatinKeyboard(this, standardKeyboardID);\r\n                    kv.setKeyboard(currentKeyboard);\r\n                }\r\n                kv.getLatinKeyboard().changeKeyHeight(getHeightKeyModifier());\r\n                break;\r\n\r\n            case LatinKeyboard.KEYCODE_LAYUOUT_SWITCH:\r\n\r\n                /** Language Switch is a custom value defined in the LatinKeyboard class.\r\n                 * We use it to switch between standard/arrow keys/programming layouts. */\r\n\r\n                if (isDpad || isProgramming) {\r\n                    if (isProgramming) {\r\n                        currentKeyboard = new LatinKeyboard(this, standardKeyboardID);\r\n                        kv.invalidateAllKeys();\r\n                        currentKeyboard.setRowNumber(getStandardRowNumber());\r\n                        kv.setKeyboard(currentKeyboard);\r\n                        isProgramming = false;\r\n                        isDpad = false;\r\n                    }\r\n\r\n                    if (isDpad) {\r\n                        currentKeyboard = new LatinKeyboard(this, R.xml.programming);\r\n                        kv.invalidateAllKeys();\r\n                        setRowNumber(5);\r\n                        currentKeyboard.setRowNumber(getRowNumber());\r\n                        kv.setKeyboard(currentKeyboard);\r\n                        isDpad = false;\r\n                        isProgramming = true;\r\n                    }\r\n                } else {\r\n                    currentKeyboard = new LatinKeyboard(this, R.xml.arrow_keys);\r\n                    kv.invalidateAllKeys();\r\n                    setRowNumber(4);\r\n                    currentKeyboard.setRowNumber(getRowNumber());\r\n                    kv.setKeyboard(currentKeyboard);\r\n                    isDpad = true;\r\n                }\r\n                kv.getLatinKeyboard().changeKeyHeight(getHeightKeyModifier());\r\n                break;\r\n            case LatinKeyboard.KEYCODE_DPAD_L:\r\n\r\n                /** Another custom keycode. */\r\n\r\n\r\n\r\n                    getCurrentInputConnection().sendKeyEvent(\r\n                            new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT));\r\n                    getCurrentInputConnection().sendKeyEvent(\r\n                            new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_LEFT));\r\n\r\n                break;\r\n\r\n            case LatinKeyboard.KEYCODE_DPAD_R:\r\n\r\n                getCurrentInputConnection().sendKeyEvent(\r\n                        new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT));\r\n                getCurrentInputConnection().sendKeyEvent(\r\n                        new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_RIGHT));\r\n                break;\r\n            case LatinKeyboard.KEYCODE_DPAD_U:\r\n\r\n                getCurrentInputConnection().sendKeyEvent(\r\n                        new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP));\r\n                getCurrentInputConnection().sendKeyEvent(\r\n                        new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_UP));\r\n                break;\r\n            case LatinKeyboard.KEYCODE_DPAD_DO:\r\n\r\n                getCurrentInputConnection().sendKeyEvent(\r\n                        new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN));\r\n                getCurrentInputConnection().sendKeyEvent(\r\n                        new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN));\r\n                break;\r\n            case LatinKeyboard.KEYCODE_ESCAPE:\r\n\r\n\r\n                getCurrentInputConnection().sendKeyEvent(\r\n                        new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ESCAPE, 0));\r\n                getCurrentInputConnection().sendKeyEvent(\r\n                        new KeyEvent(100, 100, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ESCAPE, 0));\r\n                break;\r\n            case LatinKeyboard.KEYCODE_CTRL:\r\n\r\n                if (Variables.isCtrl()) {\r\n                    Variables.setCtrlOff();\r\n                    kv.draw(new Canvas());\r\n                } else {\r\n                    Variables.setCtrlOn();\r\n                    kv.draw(new Canvas());\r\n                }\r\n                break;\r\n            case LatinKeyboard.KEYCODE_ALT:\r\n\r\n                if (Variables.isAlt()) {\r\n                    Variables.setAltOff();\r\n                    kv.draw(new Canvas());\r\n                } else {\r\n                    Variables.setAltOn();\r\n                    kv.draw(new Canvas());\r\n                }\r\n                break;\r\n            case LatinKeyboard.KEYCODE_STANDARD_SWITCH:\r\n\r\n                /** This key enables the user to switch rapidly between standard/arrow keys layouts.*/\r\n\r\n                currentKeyboard = new LatinKeyboard(getBaseContext(), standardKeyboardID);\r\n                currentKeyboard.setRowNumber(getStandardRowNumber());\r\n                kv.setKeyboard(currentKeyboard);\r\n                kv.getLatinKeyboard().changeKeyHeight(getHeightKeyModifier());\r\n                isDpad = false;\r\n                break;\r\n            case LatinKeyboard.KEYCODE_DELL_PROCESS:\r\n                /** Procces DEL key*/\r\n\r\n                if(Variables.isAnyOn()){\r\n                    if(Variables.isCtrl() && Variables.isAlt()) {\r\n                        getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL, 0, KeyEvent.META_CTRL_ON | KeyEvent.META_ALT_ON));\r\n                    }\r\n                    if(Variables.isAlt()){\r\n                        getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL, 0, KeyEvent.META_ALT_ON));\r\n                    }\r\n                    if(Variables.isCtrl()){\r\n                        getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL, 0, KeyEvent.META_CTRL_ON));\r\n                    }\r\n                }\r\n                else{\r\n                    getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL , 0));\r\n                    getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL, 0));\r\n                }\r\n                break;\r\n            case LatinKeyboard.KEYCODE_I_DONT_KNOW_WHY_I_PUT_THAT_HERE:\r\n\r\n                if(Variables.isAnyOn()){\r\n                    if(Variables.isCtrl() && Variables.isAlt()) {\r\n                        getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_TAB, 0, KeyEvent.META_CTRL_ON | KeyEvent.META_ALT_ON));\r\n                    }\r\n                    if(Variables.isAlt()){\r\n                        getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_TAB, 0, KeyEvent.META_ALT_ON));\r\n                    }\r\n                    if(Variables.isCtrl()){\r\n                        getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_TAB, 0, KeyEvent.META_CTRL_ON));\r\n                    }\r\n                }\r\n                else{\r\n                    getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_TAB , 0));\r\n                    getCurrentInputConnection().sendKeyEvent(new KeyEvent(100, 100, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_TAB, 0));\r\n                }\r\n\r\n                break;\r\n            default:\r\n\r\n                if (Variables.isAnyOn()) {\r\n                    processKeyCombo(primaryCode);\r\n                } else {\r\n                    handleCharacter(primaryCode, keyCodes);\r\n                }\r\n        }\r\n        try {\r\n\r\n            /** Some text processing. Helps some guys improve their writing skills, huh*/\r\n\r\n            if(PreferenceManager.getDefaultSharedPreferences(this).getBoolean(\"caps\",true)) {\r\n                if (isWordSeparator(ic.getTextBeforeCursor(2, 0).toString())) {\r\n                    setCapsOn(true);\r\n                    firstCaps = true;\r\n                }\r\n            }\r\n        } catch (Exception e) {\r\n        }\r\n    }\r\n\r\n    public short getRowNumber(){\r\n\r\n        return rowNumber;\r\n\r\n    }\r\n    public void setRowNumber(int number){\r\n\r\n        rowNumber = (short) number;\r\n    }\r\n    public short getStandardRowNumber(){\r\n\r\n        if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"arr_qrt\", false) && PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"nbr_qrt\", false)){\r\n            return 5;\r\n        }\r\n        else{\r\n            if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"arr_qrt\", false)){\r\n                return 4;\r\n            }\r\n            else if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"nbr_qrt\", false)){\r\n                return 5;\r\n            }\r\n            else {\r\n                 return 4;\r\n            }\r\n        }\r\n\r\n    }\r\n    public void setStandardKeyboard(){\r\n\r\n        int layout = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString(\"layout\", \"1\"));\r\n\r\n        if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"arr_qrt\", false) && PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"nbr_qrt\", false)){\r\n            switch (layout) {\r\n                case 2:\r\n                    standardKeyboardID = R.xml.azerty_arrow_numbers;\r\n                    break;\r\n                case 3:\r\n                    standardKeyboardID = R.xml.qwertz_arrow_numbers;\r\n                    break;\r\n                default:\r\n                    standardKeyboardID = R.xml.qwerty_arrow_numbers;\r\n            }\r\n            setRowNumber(5);\r\n        }\r\n        else{\r\n            if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"arr_qrt\", false)){\r\n                switch (layout) {\r\n                    case 2:\r\n                        standardKeyboardID = R.xml.azerty_arrows;\r\n                        break;\r\n                    case 3:\r\n                        standardKeyboardID = R.xml.qwertz_arrows;\r\n                        break;\r\n                    default:\r\n                        standardKeyboardID = R.xml.qwerty_arrows;\r\n                }\r\n                setRowNumber(4);\r\n            }\r\n            else if(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getBoolean(\"nbr_qrt\", false)){\r\n                switch (layout) {\r\n                    case 2:\r\n                        standardKeyboardID = R.xml.azerty_numbers;\r\n                        break;\r\n                    case 3:\r\n                        standardKeyboardID = R.xml.qwertz_numbers;\r\n                        break;\r\n                    default:\r\n                        standardKeyboardID = R.xml.qwerty_numbers;\r\n                }\r\n                setRowNumber(5);\r\n            }\r\n            else {\r\n                switch (layout) {\r\n                    case 2:\r\n                        standardKeyboardID = R.xml.azerty;\r\n                        break;\r\n                    case 3:\r\n                        standardKeyboardID = R.xml.qwertz;\r\n                        break;\r\n                    default:\r\n                        standardKeyboardID = R.xml.qwerty;\r\n                }\r\n                setRowNumber(4);\r\n            }\r\n        }\r\n    }\r\n    public double getHeightKeyModifier() {\r\n\r\n        return (double)PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt(\"height\", 50) / (double)50;\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/Preference.java",
    "content": "package com.vlath.keyboard;\r\n\r\nimport android.app.FragmentManager;\r\nimport android.os.Bundle;\r\nimport android.support.v7.app.ActionBarActivity;\r\n\r\n/**\r\n * Created by Vlad on 6/20/2017.\r\n */\r\n\r\npublic class Preference extends ActionBarActivity {\r\n   @Override\r\n    public void onCreate(Bundle h){\r\n       super.onCreate(h);\r\n       setContentView(R.layout.pref);\r\n       getFragmentManager().beginTransaction().replace(R.id.main, new PreferenceFragment()).commit();\r\n   }\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/PreferenceFragment.java",
    "content": "package com.vlath.keyboard;\n\nimport android.content.SharedPreferences;\nimport android.os.Bundle;\nimport android.preference.*;\nimport android.preference.Preference;\n\n/**\n * Created by todo on 30.06.2017.\n */\n\npublic class PreferenceFragment extends android.preference.PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {\n\n    ListPreference listTheme;\n    ListPreference listStart;\n    ListPreference listLayout;\n    @Override\n    public void onCreate(Bundle s){\n        super.onCreate(s);\n        addPreferencesFromResource(R.xml.ime_preferences);\n        listTheme = (ListPreference) findPreference(\"theme\");\n        listStart = (ListPreference) findPreference(\"start\");\n        listLayout = (ListPreference) findPreference(\"layout\");\n        listTheme.setSummary(listTheme.getEntry());\n        listStart.setSummary(listStart.getEntry());\n        listLayout.setSummary(listLayout.getEntry());\n        PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext()).registerOnSharedPreferenceChangeListener(this);\n    }\n\n\n    @Override\n    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {\n        listTheme.setSummary(listTheme.getEntry());\n        listStart.setSummary(listStart.getEntry());\n        listLayout.setSummary(listLayout.getEntry());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/SeekPreference.java",
    "content": "package com.vlath.keyboard;\n\n/**\n * Created by todo on 01.12.2017.\n */\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.preference.Preference;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.widget.SeekBar;\nimport android.widget.SeekBar.OnSeekBarChangeListener;\n\npublic class SeekPreference extends Preference implements OnSeekBarChangeListener {\n    private SeekBar mSeekBar;\n    private int mProgress;\n\n    public SeekPreference(Context context) {\n        this(context, null, 0);\n    }\n\n    public SeekPreference(Context context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public SeekPreference(Context context, AttributeSet attrs, int defStyle) {\n        super(context, attrs, defStyle);\n        setLayoutResource(R.layout.seek_dialog);\n    }\n\n    @Override\n    protected void onBindView(View view) {\n        super.onBindView(view);\n        mSeekBar = (SeekBar) view.findViewById(R.id.seekbar);\n        mSeekBar.setProgress(mProgress);\n        mSeekBar.setOnSeekBarChangeListener(this);\n    }\n\n    @Override\n    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {\n        if (!fromUser)\n            return;\n\n        setValue(progress);\n    }\n\n    @Override\n    public void onStartTrackingTouch(SeekBar seekBar) {\n        // not used\n    }\n\n    @Override\n    public void onStopTrackingTouch(SeekBar seekBar) {\n        // not used\n    }\n\n    @Override\n    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {\n        setValue(restoreValue ? getPersistedInt(mProgress) : (Integer) defaultValue);\n    }\n\n    public void setValue(int value) {\n        if (shouldPersist()) {\n            persistInt(value);\n        }\n\n        if (value != mProgress) {\n            mProgress = value;\n            notifyChanged();\n        }\n    }\n\n    @Override\n    protected Object onGetDefaultValue(TypedArray a, int index) {\n        return a.getInt(index, 0);\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/vlath/keyboard/Variables.java",
    "content": "package com.vlath.keyboard;\r\n\r\n/**\r\n * Created by Vlad on 6/22/2017.\r\n */\r\n\r\npublic  class Variables {\r\n\r\n\r\n    /**\r\n     * Here we handle global variables\r\n     */\r\n    private static boolean IS_CTRL = false;\r\n    private static boolean IS_ALT = false;\r\n    private static boolean IS_SHIFT = false;\r\n\r\n\r\n    public static boolean isAnyOn() {\r\n        return IS_CTRL || IS_ALT;\r\n    }\r\n\r\n    public static boolean isCtrl() {\r\n        return IS_CTRL;\r\n    }\r\n\r\n    public static boolean isAlt() {\r\n        return IS_ALT;\r\n    }\r\n\r\n    public static void setIsCtrl(boolean on) {\r\n        IS_CTRL = on;\r\n    }\r\n\r\n\r\n    public static void setIsAlt(boolean on) {\r\n        IS_ALT = on;\r\n    }\r\n\r\n    public static void setAltOn() {\r\n        IS_ALT = true;\r\n    }\r\n\r\n    public static void setAltOff() {\r\n        IS_ALT = false;\r\n    }\r\n\r\n    public static void setCtrlOn() {\r\n        IS_CTRL = true;\r\n    }\r\n\r\n    public static void setCtrlOff() {\r\n        IS_CTRL = false;\r\n    }\r\n\r\n    public static void setShiftOn() {\r\n        IS_SHIFT = true;\r\n    }\r\n\r\n    public static void setShiftOff() {\r\n        IS_SHIFT = false;\r\n    }\r\n\r\n    public static boolean isShift() {\r\n        return IS_SHIFT;\r\n    }\r\n\r\n\r\n\r\n}\r\n\r\n\r\n\r\n"
  },
  {
    "path": "app/src/main/res/drawable/key_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\r\n    <!-- Non focused states -->\r\n    <item\r\n        android:state_focused=\"false\"\r\n        android:state_selected=\"false\"\r\n        android:state_pressed=\"false\"\r\n        android:drawable=\"@drawable/normal\" />\r\n    <!-- Pressed state -->\r\n    <item\r\n        android:state_pressed=\"true\"\r\n        android:drawable=\"@drawable/press\" />\r\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/key_background_back.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <!-- Non focused states -->\n    <item\n        android:state_focused=\"false\"\n        android:state_selected=\"false\"\n        android:state_pressed=\"false\"\n        android:drawable=\"@drawable/round_corners\" />\n    <!-- Pressed state -->\n    <item\n        android:state_pressed=\"true\"\n        android:drawable=\"@drawable/press\" />\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/normal.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\r\n    <item android:left=\"2dp\" android:right=\"2dp\">\r\n        <shape android:shape=\"rectangle\">\r\n            <solid android:color=\"@color/black\" />\r\n        </shape>\r\n    </item>\r\n    <item android:bottom=\"2dp\">\r\n        <shape android:shape=\"rectangle\">\r\n            <solid android:color=\"@color/black\" />\r\n        </shape>\r\n    </item>\r\n</layer-list>"
  },
  {
    "path": "app/src/main/res/drawable/preview_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:shape=\"rectangle\" >\r\n\r\n    <solid android:color=\"#f1f1f1\" />\r\n\r\n    <corners android:radius=\"5dip\" />\r\n\r\n    <stroke\r\n        android:width=\"1dp\"\r\n        android:color=\"#f1f1f1\" />\r\n\r\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/round_corners.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"@color/gray_dark\"/>\n\n    <stroke android:width=\"1dp\"\n        android:color=\"#ff000000\" />\n\n    <padding android:left=\"1dp\"\n        android:top=\"1dp\"\n        android:right=\"1dp\"\n        android:bottom=\"1dp\" />\n\n    <corners android:bottomRightRadius=\"5dp\"\n        android:bottomLeftRadius=\"5dp\"\n        android:topLeftRadius=\"5dp\"\n        android:topRightRadius=\"5dp\" />\n</shape>"
  },
  {
    "path": "app/src/main/res/layout/activate.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\" android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <Button\n        android:id=\"@+id/enable\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignBaseline=\"@+id/settings\"\n        android:layout_alignBottom=\"@+id/settings\"\n        android:layout_alignEnd=\"@+id/textView\"\n        android:layout_marginEnd=\"37dp\"\n        android:onClick=\"enable\"\n        android:text=\"Enable\" />\n\n    <Button\n        android:id=\"@+id/select\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignBaseline=\"@+id/enable\"\n        android:layout_alignBottom=\"@+id/enable\"\n        android:layout_centerHorizontal=\"true\"\n        android:onClick=\"select\"\n        android:text=\"Select\" />\n\n    <Button\n        android:id=\"@+id/settings\"\n        android:onClick=\"settings\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignStart=\"@+id/textView\"\n        android:layout_below=\"@+id/textView\"\n        android:layout_marginStart=\"32dp\"\n        android:layout_marginTop=\"37dp\"\n        android:text=\"Settings\" />\n\n\n    <EditText\n        android:id=\"@+id/editText\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentStart=\"true\"\n        android:layout_below=\"@+id/settings\"\n        android:layout_marginTop=\"17dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:ems=\"10\"\n        android:hint=\"Test your keyboard here\"\n        android:inputType=\"textPersonName\" />\n\n    <TextView\n        android:id=\"@+id/textView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentStart=\"true\"\n        android:layout_alignParentTop=\"true\"\n        android:layout_marginTop=\"19dp\"\n        android:layout_marginRight=\"8dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:text=\"@string/activate\" />\n\n    <TextView\n        android:id=\"@+id/textView2\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentEnd=\"true\"\n        android:layout_marginRight=\"8dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_below=\"@+id/editText\"\n        android:layout_marginTop=\"19dp\"\n        android:text=\"@string/license\" />\n\n    <TextView\n        android:id=\"@+id/textView3\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignEnd=\"@+id/select\"\n        android:layout_alignParentBottom=\"true\"\n        android:layout_marginBottom=\"12dp\"\n        android:text=\"@string/version\"\n        android:textStyle=\"bold\" />\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/keyboard.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<com.vlath.keyboard.CustomKeyboard\r\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:id=\"@+id/keyboard\"\r\n    android:layout_alignParentBottom=\"true\"\r\n    android:paddingTop=\"0dp\"\r\n    android:layout_marginTop=\"20dp\"\r\n    android:layout_width=\"match_parent\"\r\n    android:keyPreviewLayout=\"@null\"\r\n    android:layout_height=\"wrap_content\"\r\n    android:keyBackground=\"@drawable/key_background\"\r\n    android:popupLayout=\"@layout/preview\"\r\n    android:keyPreviewOffset=\"5dp\"\r\n    android:keyTextColor=\"@color/text\"\r\n    android:shadowColor=\"@android:color/transparent\"\r\n    android:shadowRadius=\"0.0\"\r\n    android:background=\"@color/black\">\r\n    </com.vlath.keyboard.CustomKeyboard>"
  },
  {
    "path": "app/src/main/res/layout/keyboard_key_back.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.vlath.keyboard.CustomKeyboard\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/keyboard\"\n    android:layout_alignParentBottom=\"true\"\n    android:paddingTop=\"0dp\"\n    android:layout_marginTop=\"20dp\"\n    android:layout_width=\"match_parent\"\n    android:keyPreviewLayout=\"@null\"\n    android:layout_height=\"wrap_content\"\n    android:keyBackground=\"@drawable/key_background_back\"\n    android:popupLayout=\"@layout/preview\"\n    android:keyPreviewOffset=\"5dp\"\n    android:keyTextColor=\"@color/text\"\n    android:shadowColor=\"@android:color/transparent\"\n    android:shadowRadius=\"0.0\"\n    android:background=\"@color/black\">\n</com.vlath.keyboard.CustomKeyboard>"
  },
  {
    "path": "app/src/main/res/layout/main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n\n    <android.support.v4.view.ViewPager\n        android:id=\"@+id/view_pager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n    <LinearLayout\n        android:id=\"@+id/layoutDots\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dots_height\"\n        android:layout_alignParentBottom=\"true\"\n        android:layout_marginBottom=\"@dimen/dots_margin_bottom\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"/>\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1dp\"\n        android:alpha=\".5\"\n        android:layout_above=\"@id/layoutDots\"\n        android:background=\"@android:color/white\" />\n\n    <Button\n        android:id=\"@+id/btn_next\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:layout_alignParentRight=\"true\"\n        android:background=\"@null\"\n        android:text=\"Next\"\n        android:textColor=\"@android:color/white\" />\n\n    <Button\n        android:id=\"@+id/btn_skip\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:layout_alignParentLeft=\"true\"\n        android:background=\"@null\"\n        android:text=\"Skip\"\n        android:textColor=\"@android:color/white\" />\n\n</RelativeLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/popup.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center\"\n    android:background=\"@drawable/round_corners\"\n    android:textStyle=\"bold\"\n    android:textSize=\"30sp\"\n    >\n</TextView>"
  },
  {
    "path": "app/src/main/res/layout/pref.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n              android:orientation=\"vertical\"\r\n              android:layout_width=\"match_parent\"\r\n              android:id=\"@+id/main\"\r\n              android:layout_height=\"match_parent\">\r\n\r\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/preview.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<LinearLayout\r\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"wrap_content\"\r\n    android:orientation=\"horizontal\"\r\n    android:background=\"#FFF\"\r\n    >\r\n    <android.inputmethodservice.KeyboardView\r\n        android:id=\"@android:id/keyboardView\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:popupLayout=\"@layout/preview\"\r\n        android:keyBackground=\"@drawable/key_background\"\r\n        android:keyPreviewLayout=\"@null\"\r\n        android:keyTextColor=\"#fff\"\r\n        android:background=\"#a5a7aa\"\r\n        android:keyTextSize=\"22sp\"/>\r\n    <ImageButton android:id=\"@android:id/closeButton\"\r\n                 android:background=\"@android:color/transparent\"\r\n                 android:layout_width=\"wrap_content\"\r\n                 android:layout_height=\"wrap_content\"\r\n                 android:layout_gravity=\"center\"\r\n                 android:layout_marginStart=\"8dp\"\r\n                 android:layout_marginEnd=\"8dp\"\r\n                 android:clickable=\"true\"\r\n                 android:src=\"@drawable/ic_close\" />\r\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/seek_dialog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center_vertical\">\n\n    <TextView\n        android:id=\"@android:id/title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"20\"\n        android:textSize=\"18sp\"\n        />\n\n    <SeekBar\n        android:id=\"@+id/seekbar\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"80\" />\n\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/slide1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/bg_screen1\">\n\n    <LinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:gravity=\"center_horizontal\"\n        android:orientation=\"vertical\">\n\n        <ImageView\n            android:layout_width=\"@dimen/img_width_height\"\n            android:layout_height=\"@dimen/img_width_height\"\n            android:src=\"@drawable/icon\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/welcome\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/slide_title\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"20dp\"\n            android:paddingLeft=\"@dimen/desc_padding\"\n            android:paddingRight=\"@dimen/desc_padding\"\n            android:text=\"@string/welcome_desc\"\n            android:textAlignment=\"center\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/slide_desc\" />\n\n    </LinearLayout>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/slide2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/bg_screen2\">\n\n    <LinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:gravity=\"center_horizontal\"\n        android:orientation=\"vertical\">\n\n        <ImageView\n            android:layout_width=\"@dimen/img_width_height\"\n            android:layout_height=\"@dimen/img_width_height\"\n            android:src=\"@drawable/second\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/multiple_title\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/slide_title\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"20dp\"\n            android:paddingLeft=\"@dimen/desc_padding\"\n            android:paddingRight=\"@dimen/desc_padding\"\n            android:text=\"@string/multiple_desc\"\n            android:textAlignment=\"center\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/slide_desc\" />\n\n    </LinearLayout>\n\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/slide3.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/bg_screen3\">\n\n    <LinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:gravity=\"center_horizontal\"\n        android:orientation=\"vertical\">\n\n        <ImageView\n            android:layout_width=\"@dimen/img_width_height\"\n            android:layout_height=\"@dimen/img_width_height\"\n            android:src=\"@drawable/third\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/open_title\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/slide_title\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"20dp\"\n            android:paddingLeft=\"@dimen/desc_padding\"\n            android:paddingRight=\"@dimen/desc_padding\"\n            android:text=\"@string/open_desc\"\n            android:textAlignment=\"center\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/slide_desc\" />\n\n    </LinearLayout>\n\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/slide4.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/bg_screen4\">\n\n    <LinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:gravity=\"center_horizontal\"\n        android:orientation=\"vertical\">\n\n        <ImageView\n            android:layout_width=\"@dimen/img_width_height\"\n            android:layout_height=\"@dimen/img_width_height\"\n            android:src=\"@drawable/fourth\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/free_title\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/slide_title\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"20dp\"\n            android:paddingLeft=\"@dimen/desc_padding\"\n            android:paddingRight=\"@dimen/desc_padding\"\n            android:text=\"@string/free_desc\"\n            android:textAlignment=\"center\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/slide_desc\" />\n\n    </LinearLayout>\n\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/values/attr.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <attr name=\"keyBackColor\" format=\"color|reference\"/>\n    <attr name=\"boardBackColor\" format=\"color|reference\"/>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<resources>\r\n    <color name=\"colorPrimary\">#3F51B5</color>\r\n    <color name=\"colorPrimaryDark\">#303F9F</color>\r\n    <color name=\"colorAccent\">#FF4081</color>\r\n    <color name=\"black\">@android:color/black</color>\r\n    <color name=\"green\">#4CAF50</color>\r\n    <color name=\"blue\">#42A5F5</color>\r\n    <color name=\"red\">#EF5350</color>\r\n    <color name=\"cyan\">#26C6DA</color>\r\n    <color name=\"teal\">#26A69A</color>\r\n    <color name=\"amber\">#FFC107</color>\r\n    <color name=\"lime\">#D4E157</color>\r\n    <color name=\"purple\">#AB47BC</color>\r\n    <color name=\"white\">#FFFF</color>\r\n    <color name=\"gray\">#424242</color>\r\n    <color name=\"gray_dark\">#212121</color>\r\n    <color name=\"text\">#a5a7aa</color>\r\n    <color name=\"candidate_normal\">#FF000000</color>\r\n    <color name=\"candidate_recommended\">#000000</color>\r\n    <color name=\"candidate_other\">#ff808080</color>\r\n    <color name=\"candidate_background\">#bbffffff</color>\r\n\r\n     <!-- Screens background color-->\r\n    <color name=\"bg_screen1\">#009688</color>\r\n    <color name=\"bg_screen2\">#00bcd4</color>\r\n    <color name=\"bg_screen3\">#4caf50</color>\r\n    <color name=\"bg_screen4\">#8bc34a</color>\r\n\r\n    <!-- dots inactive colors -->\r\n    <color name=\"dot_dark_screen1\">#00897b</color>\r\n    <color name=\"dot_dark_screen2\">#00acc1</color>\r\n    <color name=\"dot_dark_screen3\">#43a047</color>\r\n    <color name=\"dot_dark_screen4\">#7cb342</color>\r\n\r\n    <!-- dots active colors -->\r\n    <color name=\"dot_light_screen1\">#26a69a</color>\r\n    <color name=\"dot_light_screen2\">#26c6da</color>\r\n    <color name=\"dot_light_screen3\">#66bb6a</color>\r\n    <color name=\"dot_light_screen4\">#9ccc65</color>\r\n\r\n    <array name=\"array_dot_active\">\r\n        <item>@color/dot_light_screen1</item>\r\n        <item>@color/dot_light_screen2</item>\r\n        <item>@color/dot_light_screen3</item>\r\n        <item>@color/dot_light_screen4</item>\r\n    </array>\r\n\r\n    <array name=\"array_dot_inactive\">\r\n        <item>@color/dot_dark_screen1</item>\r\n        <item>@color/dot_dark_screen2</item>\r\n        <item>@color/dot_dark_screen3</item>\r\n        <item>@color/dot_dark_screen4</item>\r\n    </array>\r\n\r\n</resources>\r\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n     <dimen name=\"key_height\">52dip</dimen>\n     <dimen name=\"candidate_font_height\">20sp</dimen>\n     <dimen name=\"candidate_vertical_padding\">16sp</dimen>\n     <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n     <dimen name=\"activity_vertical_margin\">16dp</dimen>\n     <dimen name=\"fab_margin\">16dp</dimen>\n     <dimen name=\"dots_height\">30dp</dimen>\n     <dimen name=\"dots_margin_bottom\">20dp</dimen>\n     <dimen name=\"img_width_height\">120dp</dimen>\n     <dimen name=\"slide_title\">30dp</dimen>\n     <dimen name=\"slide_desc\">16dp</dimen>\n     <dimen name=\"desc_padding\">40dp</dimen>\n\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\r\n    <string name=\"app_name\">BeHe Keyboard</string>\r\n    <string name=\"subtype_generic\">%s</string>\r\n    <string name=\"welcome\">Welcome to BeHe!</string>\r\n    <string name=\"activate\">Please click the enable button below to navigate to keyboard settings. Find BeHe Keyboard in the list and enable it. A warning dialog will appear, click ok. BeHe Keyboard does NOT collect any data. Then, navigate back and click the select button below and choose BeHe Keyboard from the list. After that you can test the keyboard using the text field below. To open the settings, tap the button below and click on BeHe Keyboard.  \\n\\nSpecial thanks to Matt and Thomas for donating!</string>\r\n    <string name=\"donate\">If you like the app, please consider supporting me. Thanks!</string>\r\n    <string name=\"up\">Stay up to date</string>\r\n    <string name=\"follow\">Follow me on Twitter to find news about my apps. @VlathXDA</string>\r\n    <string name=\"version\" translatable=\"false\">Version 1.1.2</string>\r\n    <string name=\"caps\">Auto capitalization</string>\r\n    <string name=\"vib\">Vibrate on key press</string>\r\n    <string name=\"borders\">Key borders</string>\r\n    <string name=\"prediction\" translatable=\"false\" >Enable text prediction</string>\r\n    <string name=\"welcome_desc\" translatable=\"false\">Enjoy a full-fledged PC keyboard on your android device</string>\r\n    <string name=\"multiple_desc\" translatable=\"false\">Switch easily between three keyboard faces, all with adjustable height</string>\r\n    <string name=\"multiple_title\" translatable=\"false\">Multiple faces</string>\r\n    <string name=\"open_desc\" translatable=\"false\">No spying, no data collecting. All the source code can be found on GitHub</string>\r\n    <string name=\"open_title\" translatable=\"false\">Open source</string>\r\n    <string name=\"free_title\" translatable=\"false\">Totally free</string>\r\n    <string name=\"free_desc\" translatable=\"false\">If you want, you can support me by donating. E-mail me for details</string>\r\n    <string name=\"license\" translatable=\"false\">BeHe Keyboard is licensed under Apache License 2.0. A copy of the license can be found <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">here.</a> \\n\\nAlso, the source code is hosted on <a href=\"https://github.com/VladThodo/behe-keyboard\">GitHub.</a> \\n\\n Got any problems or suggestions? <a href=\"mailto:vladtodosin@gmail.com?subject=BeHe Keyboard\">E-mail me!</a></string>\r\n    <string name=\"git\" translatable=\"false\">Also, the source code is hosted on <a href=\"\">GitHub</a></string>\r\n    <string-array name=\"color_values\">\r\n        <item name=\"1\">1</item>\r\n        <item name=\"2\">2</item>\r\n        <item name=\"3\">3</item>\r\n        <item name=\"4\">4</item>\r\n        <item name=\"5\">5</item>\r\n        <item name=\"6\">6</item>\r\n        <item name=\"7\">7</item>\r\n        <item name=\"7\">8</item>\r\n    </string-array>\r\n\r\n    <string-array name=\"color\">\r\n        <item name=\"1\">Black - white text</item>\r\n        <item name=\"2\">White - black text</item>\r\n        <item name=\"3\">Blue - white text</item>\r\n        <item name=\"4\">Blue - black text</item>\r\n        <item name=\"5\">Red - white text</item>\r\n        <item name=\"6\">Red - black text</item>\r\n        <item name=\"7\">Orange - white text</item>\r\n        <item name=\"7\">Material Dark - white text</item>\r\n    </string-array>\r\n\r\n    <string-array name=\"start\">\r\n        <item name=\"1\">Standard</item>\r\n        <item name=\"2\">Arrow Keys</item>\r\n        <item name=\"3\">Programming</item>\r\n    </string-array>\r\n    <string-array name=\"start_values\">\r\n        <item name=\"1\">1</item>\r\n        <item name=\"2\">2</item>\r\n        <item name=\"3\">3</item>\r\n    </string-array>\r\n\r\n    <string-array name=\"layout\">\r\n        <item name=\"1\">QWERTY (en-us)</item>\r\n        <item name=\"2\">AZERTY (fr-fr)</item>\r\n        <item name=\"3\">QWERTZ (de-de)</item>\r\n    </string-array>\r\n    <string-array name=\"layout_values\">\r\n        <item name=\"1\">1</item>\r\n        <item name=\"2\">2</item>\r\n        <item name=\"3\">3</item>\r\n    </string-array>\r\n    <string name=\"word_separators\" translatable=\"false\">\\u0020.,;:!?\\n()[]*&amp;@{}/&lt;&gt;_+=|&quot;</string>\r\n</resources>\r\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\r\n    <!-- Base application theme. -->\r\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\r\n        <!-- Customize your theme here. -->\r\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\r\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\r\n        <item name=\"colorAccent\">@color/colorAccent</item>\r\n    </style>\r\n\r\n    <style name=\"AppTheme.AppBarOverlay\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\r\n\r\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\r\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\r\n        <item name=\"colorAccent\">@color/colorAccent</item>\r\n\r\n    </style>\r\n\r\n    <style name=\"AppTheme.PopupOverlay\" parent=\"ThemeOverlay.AppCompat.Light\" />\r\n</resources>\r\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">Teclado BeHe</string>\n    <string name=\"subtype_generic\">%s</string>\n    <string name=\"welcome\">Bem-vindo ao Teclado BeHe!</string>\n    <string name=\"activate\">Por favor, clique no botão \\\"Ativar\\\" abaixo para navegar até as configurações do teclado. Encontre o teclado BeHe na lista e habilite-o. Uma aviso aparecerá, clique em OK. O Teclado BeHe NÃO coleta nenhum dado. Em seguida, navegue de volta,  clique no botão \\\"Selecionar\\\" abaixo e escolha o Teclado BeHe na lista. Depois disso, você pode testar o teclado usando o campo de texto abaixo. Para abrir as configurações, toque no botão abaixo e clique em Teclado BeHe.</string>\n    <string name=\"donate\">Se você gosta do aplicativo, considere me apoiar. Obrigado!</string>\n    <string name=\"up\">Mantenha-se atualizado</string>\n    <string name=\"follow\">Siga-me no Twitter para encontrar novidade sobre meus aplicativos. @VlathXDA</string>\n    \n    <!-- Should be unstranslatable -->\n\n    \n    <string name=\"caps\">Auto capitalização</string>\n    <string name=\"vib\">Vibrar ao pressionar uma tecla</string>\n    <string name=\"borders\">Bordas do teclado</string>\n    \n    <string-array name=\"color_values\">\n        <item name=\"1\">1</item>\n        <item name=\"2\">2</item>\n        <item name=\"3\">3</item>\n        <item name=\"4\">4</item>\n        <item name=\"5\">5</item>\n        <item name=\"6\">6</item>\n        <item name=\"7\">7</item>\n        <item name=\"7\">8</item>\n    </string-array>\n\n    <string-array name=\"color\">\n        <item name=\"1\">Preto - texto branco</item>\n        <item name=\"2\">Branco - texto preto</item>\n        <item name=\"3\">Azul - texto branco</item>\n        <item name=\"4\">Azul - black text</item>\n        <item name=\"5\">Vermelho - texto branco</item>\n        <item name=\"6\">Vermelho - texto preto</item>\n        <item name=\"7\">Laranja - texto branco</item>\n        <item name=\"7\">Material Escuro - texto branco</item>\n    </string-array>\n\n    <string-array name=\"start\">\n        <item name=\"1\">QWERTY</item>\n        <item name=\"2\">Teclas de seta</item>\n        <item name=\"3\">Programação</item>\n    </string-array>\n    \n    <string-array name=\"start_values\">\n        <item name=\"1\">1</item>\n        <item name=\"2\">2</item>\n        <item name=\"3\">3</item>\n    </string-array>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/xml/arrow_keys.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n          android:keyWidth=\"10%p\"\r\n          android:horizontalGap=\"0px\"\r\n          android:verticalGap=\"0px\"\r\n          android:keyHeight=\"9%p\">\r\n\r\n    <Row>\r\n        <Key android:codes=\"131\" android:keyLabel=\"F1\" android:keyEdgeFlags=\"left\"/>\r\n        <Key android:codes=\"132\" android:keyLabel=\"F2\"/>\r\n        <Key android:codes=\"133\" android:keyLabel=\"F3\"/>\r\n        <Key android:codes=\"134\" android:keyLabel=\"F4\"/>\r\n        <Key android:codes=\"-107\" android:keyIcon=\"@drawable/ic_keyboard_arrow_up\" android:isRepeatable=\"true\" android:keyWidth=\"20%p\"/>\r\n        <Key android:codes=\"135\" android:keyLabel=\"F5\"/>\r\n        <Key android:codes=\"136\" android:keyLabel=\"F6\"/>\r\n        <Key android:codes=\"137\" android:keyLabel=\"F7\"/>\r\n        <Key android:codes=\"138\" android:keyLabel=\"F8\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n\r\n    <Row>\r\n        <Key android:codes=\"139\" android:keyLabel=\"F9\" android:keyEdgeFlags=\"left\"/>\r\n        <Key android:codes=\"140\" android:keyLabel=\"F10\"/>\r\n        <Key android:codes=\"-108\" android:keyIcon=\"@drawable/ic_keyboard_arrow_left\" android:isRepeatable=\"true\" android:keyWidth=\"20%p\"/>\r\n        <Key android:codes=\"-4\" android:keyLabel=\"OK\" android:keyWidth=\"20%p\"/>\r\n        <Key android:codes=\"-111\" android:keyIcon=\"@drawable/ic_keyboard_arrow_right\" android:isRepeatable=\"true\" android:keyWidth=\"20%p\"/>\r\n        <Key android:codes=\"-5\"  android:keyWidth=\"18%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\"/>\r\n    </Row>\r\n\r\n    <Row>\r\n        <Key android:codes=\"-113\" android:keyLabel=\"CTRL\" android:keyEdgeFlags=\"left\" android:keyWidth=\"20%p\" />\r\n        <Key android:codes=\"-114\" android:keyLabel=\"ALT\" android:keyWidth=\"20%p\"/>\r\n        <Key android:codes=\"-109\" android:keyIcon=\"@drawable/ic_keyboard_arrow_down\" android:isRepeatable=\"true\" android:keyWidth=\"20%p\"/>\r\n        <Key android:codes=\"-122\" android:keyLabel=\"TAB\"  android:keyWidth=\"20%p\" />\r\n        <Key android:codes=\"-121\" android:keyLabel=\"DEL\" android:keyWidth=\"20%p\"/>\r\n    </Row>\r\n\r\n    <Row>\r\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"-117\" android:keyLabel=\"ABC\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\r\n             android:keyWidth=\"46.154%p\"/>\r\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\r\n        <Key android:codes=\"10\"  android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n\r\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/azerty.xml",
    "content": "\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"àâæ\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"z\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"éèêë\"/>\n        <Key android:codes=\"114\" android:keyLabel=\"r\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\"/>\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ÿ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ùûü\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"îï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ôœ\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"115\" android:keyLabel=\"s\"/>\n        <Key android:codes=\"100\" android:keyLabel=\"d\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\"/>\n        <Key android:codes=\"103\" android:keyLabel=\"g\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\"/>\n        <Key android:codes=\"120\" android:keyLabel=\"x\"/>\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ç\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\"/>\n        <Key android:codes=\"98\" android:keyLabel=\"b\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\"/>\n        <Key android:codes=\"39\" android:keyLabel=\"\\'\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"ESPACE\" android:keyWidth=\"46.154%p\"/>\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n\n    </Row>\n</Keyboard>\n"
  },
  {
    "path": "app/src/main/res/xml/azerty_arrow_numbers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\n        <Key android:codes=\"48\" android:keyLabel=\"0\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n\n    <Row>\n        <Key android:codes=\"97\"  android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"àáâä\" android:keyEdgeFlags=\"left\" />\n        <Key android:codes=\"122\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"éèêë\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ÿ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ùûü\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"îï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ôœ\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" />\n        <Key android:codes=\"115\" android:keyLabel=\"s\" />\n        <Key android:codes=\"100\" android:keyLabel=\"d\" />\n        <Key android:codes=\"102\" android:keyLabel=\"f\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" />\n        <Key android:codes=\"104\" android:keyLabel=\"h\" />\n        <Key android:codes=\"106\" android:keyLabel=\"j\" />\n        <Key android:codes=\"107\" android:keyLabel=\"k\" />\n        <Key android:codes=\"108\" android:keyLabel=\"l\" />\n        <Key android:codes=\"109\" android:keyLabel=\"m\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"  android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" />\n        <Key android:codes=\"120\" android:keyLabel=\"x\" />\n        <Key android:codes=\"99\"  android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ç\" />\n        <Key android:codes=\"118\" android:keyLabel=\"v\" />\n        <Key android:codes=\"98\"  android:keyLabel=\"b\" />\n        <Key android:codes=\"110\" android:keyLabel=\"n\" />\n        <Key android:codes=\"39\"  android:keyLabel=\"\\'\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\n        <Key android:codes=\"-108\" android:keyIcon=\"@drawable/ic_keyboard_arrow_left\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"30%p\"/>\n        <Key android:codes=\"-111\" android:keyIcon=\"@drawable/ic_keyboard_arrow_right\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"10%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n</Keyboard>\n"
  },
  {
    "path": "app/src/main/res/xml/azerty_arrows.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n    <Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:keyWidth=\"10%p\"\n        android:horizontalGap=\"0px\"\n        android:verticalGap=\"0px\"\n        android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"97\"  android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"àáâä\" android:keyEdgeFlags=\"left\" />\n        <Key android:codes=\"122\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"éèêë\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ÿ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ùûü\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"îï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ôœ\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" />\n        <Key android:codes=\"115\" android:keyLabel=\"s\" />\n        <Key android:codes=\"100\" android:keyLabel=\"d\" />\n        <Key android:codes=\"102\" android:keyLabel=\"f\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" />\n        <Key android:codes=\"104\" android:keyLabel=\"h\" />\n        <Key android:codes=\"106\" android:keyLabel=\"j\" />\n        <Key android:codes=\"107\" android:keyLabel=\"k\" />\n        <Key android:codes=\"108\" android:keyLabel=\"l\" />\n        <Key android:codes=\"109\" android:keyLabel=\"m\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"  android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" />\n        <Key android:codes=\"120\" android:keyLabel=\"x\" />\n        <Key android:codes=\"99\"  android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ç\" />\n        <Key android:codes=\"118\" android:keyLabel=\"v\" />\n        <Key android:codes=\"98\"  android:keyLabel=\"b\" />\n        <Key android:codes=\"110\" android:keyLabel=\"n\" />\n        <Key android:codes=\"39\"  android:keyLabel=\"\\'\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n        <Row android:rowEdgeFlags=\"bottom\">\n            <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"44\" android:keyLabel=\",\" />\n            <Key android:codes=\"-108\" android:keyIcon=\"@drawable/ic_keyboard_arrow_left\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n                android:keyWidth=\"30%p\"/>\n            <Key android:codes=\"-111\" android:keyIcon=\"@drawable/ic_keyboard_arrow_right\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"46\" android:keyLabel=\".\"/>\n            <Key android:codes=\"10\"   android:keyWidth=\"10%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n\n        </Row>\n    </Keyboard>\n"
  },
  {
    "path": "app/src/main/res/xml/azerty_numbers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\n        <Key android:codes=\"48\" android:keyLabel=\"0\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row>\n        <Key android:codes=\"97\"  android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"àáâä\" android:keyEdgeFlags=\"left\" />\n        <Key android:codes=\"122\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"éèêë\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" />\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ÿ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ùûü\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"îï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ôœ\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" />\n        <Key android:codes=\"115\" android:keyLabel=\"s\" />\n        <Key android:codes=\"100\" android:keyLabel=\"d\" />\n        <Key android:codes=\"102\" android:keyLabel=\"f\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" />\n        <Key android:codes=\"104\" android:keyLabel=\"h\" />\n        <Key android:codes=\"106\" android:keyLabel=\"j\" />\n        <Key android:codes=\"107\" android:keyLabel=\"k\" />\n        <Key android:codes=\"108\" android:keyLabel=\"l\" />\n        <Key android:codes=\"109\" android:keyLabel=\"m\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"  android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" />\n        <Key android:codes=\"120\" android:keyLabel=\"x\" />\n        <Key android:codes=\"99\"  android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ç\" />\n        <Key android:codes=\"118\" android:keyLabel=\"v\" />\n        <Key android:codes=\"98\"  android:keyLabel=\"b\" />\n        <Key android:codes=\"110\" android:keyLabel=\"n\" />\n        <Key android:codes=\"39\"  android:keyLabel=\"\\'\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"46.154%p\"/>\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n\n    </Row>\n</Keyboard>\n"
  },
  {
    "path": "app/src/main/res/xml/dvorak.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Keyboard\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"9%p\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"9%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\"/>\n    </Row>\n\n    <Row>\n\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:popupCharacters=\"4π\"/>\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupCharacters=\"5ýÿψ\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupCharacters=\"6ϕ\"/>\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupCharacters=\"7ĝ\"/>\n        <Key android:codes=\"99\"  android:keyLabel=\"c\" android:popupCharacters=\"8çćĉčγ\"/>\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupCharacters=\"9řŕρ\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupCharacters=\"0ľĺłλ\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupCharacters=\"òóôõöøőœōo\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupCharacters=\"èéêëęē€\"/>\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupCharacters=\"ùúûüŭűū\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupCharacters=\"ìíîïīι*\"/>\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupCharacters=\"đďδ\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupCharacters=\"ĥθ\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupCharacters=\"țť\\u0163τ\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupCharacters=\"ñńν\"/>\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"ßśŝšșσ\" android:keyEdgeFlags=\"right\"/>\n        <Key android:codes=\"34\" android:keyLabel=\"&quot;\" android:keyWidth=\"7%p\"/>\n        <Key android:codes=\"10\" android:keyWidth=\"9%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"9%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"59\" android:keyLabel=\";\"/>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:popupCharacters=\"β\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupCharacters=\"ĵ\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupCharacters=\"κ\"/>\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupCharacters=\"ξχ\"/>\n        <Key android:codes=\"98\"  android:keyLabel=\"b\" android:popupCharacters=\"β\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupCharacters=\"μ\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupCharacters=\"ŵω\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupCharacters=\"\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"z\" android:popupCharacters=\"żžźζ\"/>\n        <Key android:codes=\"-5\" android:keyEdgeFlags=\"right\" android:isRepeatable=\"true\"/>\n\n    </Row>\n\n    <Row>\n        <Key android:codes=\"-113\" android:keyLabel=\"CTRL\" android:keyEdgeFlags=\"left\" android:keyWidth=\"20%p\" />\n\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"8%p\"/>\n\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"50%p\"/>\n\n        <Key android:codes=\"-114\" android:keyLabel=\"ALT\" android:keyWidth=\"20%p\"/>\n\n    </Row>\n\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/emoji.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"0x1f601\" android:keyLabel=\"\\ud83d\\ude01\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"0x1f602\" android:keyLabel=\"\\ud83d\\ude02\" />\n        <Key android:codes=\"0x1f603\" android:keyLabel=\"\\ud83d\\ude03\" />\n        <Key android:codes=\"0x1f604\" android:keyLabel=\"\\ud83d\\ude04\" />\n        <Key android:codes=\"0x1f605\" android:keyLabel=\"\\ud83d\\ude05\" />\n        <Key android:codes=\"0x1f606\" android:keyLabel=\"\\ud83d\\ude06\" />\n        <Key android:codes=\"0x1f607\" android:keyLabel=\"\\ud83d\\ude07\" />\n        <Key android:codes=\"0x1f608\" android:keyLabel=\"\\ud83d\\ude08\" />\n        <Key android:codes=\"0x1f609\" android:keyLabel=\"\\ud83d\\ude09\" />\n        <Key android:codes=\"0x1f60a\" android:keyLabel=\"\\ud83d\\ude0a\" />\n    </Row>\n\n    <Row>\n        <Key android:codes=\"0x1f60b\" android:keyLabel=\"\\ud83d\\ude0b\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"0x1f60c\" android:keyLabel=\"\\ud83d\\ude0c\" />\n        <Key android:codes=\"0x1f60d\" android:keyLabel=\"\\ud83d\\ude0d\" />\n        <Key android:codes=\"0x1f60f\" android:keyLabel=\"\\ud83d\\ude0f\" />\n        <Key android:codes=\"0x1f612\" android:keyLabel=\"\\ud83d\\ude12\" />\n        <Key android:codes=\"0x1f613\" android:keyLabel=\"\\ud83d\\ude13\" />\n        <Key android:codes=\"0x1f614\" android:keyLabel=\"\\ud83d\\ude14\" />\n        <Key android:codes=\"0x1f615\" android:keyLabel=\"\\ud83d\\ude15\" />\n        <Key android:codes=\"0x1f616\" android:keyLabel=\"\\ud83d\\ude16\" />\n        <Key android:codes=\"0x1f618\" android:keyLabel=\"\\ud83d\\ude18\" />\n    </Row>\n\n    <Row>\n        <Key android:codes=\"0x1f61a\" android:keyLabel=\"\\ud83d\\ude1a\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"0x1f61c\" android:keyLabel=\"\\ud83d\\ude1c\" />\n        <Key android:codes=\"0x1f61d\" android:keyLabel=\"\\ud83d\\ude1d\" />\n        <Key android:codes=\"0x1f61e\" android:keyLabel=\"\\ud83d\\ude1e\" />\n        <Key android:codes=\"0x1f620\" android:keyLabel=\"\\ud83d\\ude20\" />\n        <Key android:codes=\"0x1f621\" android:keyLabel=\"\\ud83d\\ude21\" />\n        <Key android:codes=\"0x1f622\" android:keyLabel=\"\\ud83d\\ude22\" />\n        <Key android:codes=\"0x1f623\" android:keyLabel=\"\\ud83d\\ude23\" />\n        <Key android:codes=\"0x1f624\" android:keyLabel=\"\\ud83d\\ude24\" />\n        <Key android:codes=\"0x1f625\" android:keyLabel=\"\\ud83d\\ude25\" />\n    </Row>\n\n\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-117\" android:keyLabel=\"ABC\" android:keyWidth=\"13.46%p\"/>\n        <Key android:codes=\"-123\" android:keyIcon=\"@drawable/ic_keyboard_arrow_right\" android:keyWidth=\"13.46%p\"/>\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"46.154%p\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"13.46%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"13.46%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/emoji2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"0x1f628\" android:keyLabel=\"\\ud83d\\ude28\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"0x1f629\" android:keyLabel=\"\\ud83d\\ude29\" />\n        <Key android:codes=\"0x1f62a\" android:keyLabel=\"\\ud83d\\ude2a\" />\n        <Key android:codes=\"0x1f62b\" android:keyLabel=\"\\ud83d\\ude2b\" />\n        <Key android:codes=\"0x1f62d\" android:keyLabel=\"\\ud83d\\ude2d\" />\n        <Key android:codes=\"0x1f630\" android:keyLabel=\"\\ud83d\\ude30\" />\n        <Key android:codes=\"0x1f631\" android:keyLabel=\"\\ud83d\\ude31\" />\n        <Key android:codes=\"0x1f632\" android:keyLabel=\"\\ud83d\\ude32\" />\n        <Key android:codes=\"0x1f633\" android:keyLabel=\"\\ud83d\\ude33\" />\n        <Key android:codes=\"0x1f635\" android:keyLabel=\"\\ud83d\\ude35\" />\n    </Row>\n\n    <Row>\n        <Key android:codes=\"0x1f636\" android:keyLabel=\"\\ud83d\\ude36\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"0x1f637\" android:keyLabel=\"\\ud83d\\ude37\" />\n        <Key android:codes=\"0x1f638\" android:keyLabel=\"\\ud83d\\ude38\" />\n        <Key android:codes=\"0x1f639\" android:keyLabel=\"\\ud83d\\ude39\" />\n        <Key android:codes=\"0x1f63a\" android:keyLabel=\"\\ud83d\\ude3a\" />\n        <Key android:codes=\"0x1f63b\" android:keyLabel=\"\\ud83d\\ude3b\" />\n        <Key android:codes=\"0x1f63c\" android:keyLabel=\"\\ud83d\\ude3c\" />\n        <Key android:codes=\"0x1f63d\" android:keyLabel=\"\\ud83d\\ude3d\" />\n        <Key android:codes=\"0x1f63e\" android:keyLabel=\"\\ud83d\\ude3e\" />\n        <Key android:codes=\"0x1f63f\" android:keyLabel=\"\\ud83d\\ude3f\" />\n    </Row>\n\n    <Row>\n        <Key android:codes=\"0x1f640\" android:keyLabel=\"\\ud83d\\ude40\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"0x1f645\" android:keyLabel=\"\\ud83d\\ude45\" />\n        <Key android:codes=\"0x1f646\" android:keyLabel=\"\\ud83d\\ude46\" />\n        <Key android:codes=\"0x1f647\" android:keyLabel=\"\\ud83d\\ude47\" />\n        <Key android:codes=\"0x1f648\" android:keyLabel=\"\\ud83d\\ude48\" />\n        <Key android:codes=\"0x1f649\" android:keyLabel=\"\\ud83d\\ude49\" />\n        <Key android:codes=\"0x1f64a\" android:keyLabel=\"\\ud83d\\ude4a\" />\n        <Key android:codes=\"0x1f64b\" android:keyLabel=\"\\ud83d\\ude4b\" />\n        <Key android:codes=\"0x1f64c\" android:keyLabel=\"\\ud83d\\ude4c\" />\n        <Key android:codes=\"0x1f64d\" android:keyLabel=\"\\ud83d\\ude4d\" />\n    </Row>\n\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-117\" android:keyLabel=\"ABC\" android:keyWidth=\"13.46%p\"/>\n        <Key android:codes=\"-124\" android:keyIcon=\"@drawable/ic_keyboard_arrow_left\" android:keyWidth=\"13.46%p\"/>\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"46.154%p\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"13.46%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"13.46%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n</Keyboard>\n"
  },
  {
    "path": "app/src/main/res/xml/ime_preferences.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!-- Copyright (C) 2011 Google Inc.\r\n     Licensed under the Apache License, Version 2.0 (the \"License\");\r\n     you may not use this file except in compliance with the License.\r\n     You may obtain a copy of the License at\r\n          http://www.apache.org/licenses/LICENSE-2.0\r\n     Unless required by applicable law or agreed to in writing, software\r\n     distributed under the License is distributed on an \"AS IS\" BASIS,\r\n     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n     See the License for the specific language governing permissions and\r\n     limitations under the License.\r\n-->\r\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\r\n\r\n    <ListPreference\r\n     android:title=\"Theme\"\r\n     android:key=\"theme\"\r\n     android:entryValues=\"@array/color_values\"\r\n     android:defaultValue=\"2\"\r\n     android:entries=\"@array/color\"/>\r\n\r\n    <ListPreference\r\n        android:title=\"Default Keyboard\"\r\n        android:key=\"start\"\r\n        android:entryValues=\"@array/start_values\"\r\n        android:defaultValue=\"1\"\r\n        android:entries=\"@array/start\"/>\r\n\r\n    <ListPreference\r\n        android:title=\"Layout\"\r\n        android:key=\"layout\"\r\n        android:entryValues=\"@array/layout_values\"\r\n        android:defaultValue=\"1\"\r\n        android:entries=\"@array/layout\"/>\r\n\r\n    <SwitchPreference android:title=\"@string/caps\"\r\n        android:key=\"caps\"\r\n        android:defaultValue=\"true\" />\r\n\r\n    <SwitchPreference android:title=\"@string/vib\"\r\n        android:key=\"vib\"\r\n        android:defaultValue=\"false\" />\r\n\r\n    <SwitchPreference android:title=\"@string/borders\"\r\n        android:key=\"bord\"\r\n        android:defaultValue=\"false\" />\r\n\r\n    <SwitchPreference android:title=\"@string/prediction\"\r\n        android:key=\"pred\"\r\n        android:defaultValue=\"false\" />\r\n\r\n    <SwitchPreference android:title=\"Arrow keys on standard layout\"\r\n        android:key=\"arr_qrt\"\r\n        android:defaultValue=\"false\" />\r\n\r\n    <SwitchPreference android:title=\"Number keys on standard layout\"\r\n        android:key=\"nbr_qrt\"\r\n        android:defaultValue=\"false\" />\r\n\r\n    <com.vlath.keyboard.SeekPreference\r\n        android:defaultValue=\"50\"\r\n        android:key=\"height\"\r\n        android:title=\"Key Height\" />\r\n\r\n\r\n\r\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/method.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<input-method xmlns:android=\"http://schemas.android.com/apk/res/android\">\r\n    <subtype\r\n             android:label=\"\"\r\n             android:imeSubtypeMode=\"keyboard\"\r\n             android:imeSubtypeExtraValue=\"TrySuppressingImeSwitcher,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable\" />\r\n</input-method>"
  },
  {
    "path": "app/src/main/res/xml/numbers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Keyboard\r\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:keyWidth=\"26.67%p\"\r\n    android:horizontalGap=\"0px\"\r\n    android:keyHeight=\"10%p\"\r\n    android:verticalGap=\"1px\"\r\n    >\r\n    <Row\r\n        android:rowEdgeFlags=\"top\"\r\n        >\r\n        <Key\r\n            android:codes=\"49\"\r\n            android:keyLabel=\"1\"\r\n            android:keyEdgeFlags=\"left\" />\r\n        <Key\r\n            android:codes=\"50\"\r\n            android:keyLabel=\"2\"/>\r\n        <Key\r\n            android:codes=\"51\"\r\n            android:keyLabel=\"3\" />\r\n        <Key\r\n            android:keyLabel=\"-\"\r\n            android:keyWidth=\"20%p\"\r\n            android:isModifier=\"true\"\r\n            android:keyEdgeFlags=\"right\" />\r\n    </Row>\r\n    <Row>\r\n        <Key\r\n            android:codes=\"52\"\r\n            android:keyLabel=\"4\"\r\n            android:keyEdgeFlags=\"left\" />\r\n        <Key\r\n            android:codes=\"53\"\r\n            android:keyLabel=\"5\" />\r\n        <Key\r\n            android:codes=\"54\"\r\n            android:keyLabel=\"6\" />\r\n        <Key\r\n            android:keyLabel=\".\"\r\n            android:keyWidth=\"20%p\"\r\n            android:isModifier=\"true\"\r\n            android:keyEdgeFlags=\"right\" />\r\n    </Row>\r\n    <Row>\r\n        <Key\r\n            android:codes=\"55\"\r\n            android:keyLabel=\"7\"\r\n            android:keyEdgeFlags=\"left\" />\r\n        <Key\r\n            android:codes=\"56\"\r\n            android:keyLabel=\"8\" />\r\n        <Key\r\n            android:codes=\"57\"\r\n            android:keyLabel=\"9\" />\r\n        <Key\r\n            android:codes=\"-5\"\r\n            android:keyIcon=\"@drawable/ic_backspace\"\r\n            android:keyWidth=\"20%p\"\r\n            android:isModifier=\"true\"\r\n            android:isRepeatable=\"true\"\r\n            android:keyEdgeFlags=\"right\" />\r\n    </Row>\r\n    <Row\r\n        android:rowEdgeFlags=\"bottom\">\r\n        <Key\r\n            android:codes=\"48\"\r\n            android:keyLabel=\"0\"/>\r\n        <Key\r\n            android:codes=\"32\"\r\n            android:keyIcon=\"@drawable/ic_space_bar\"\r\n            android:isRepeatable=\"true\"\r\n            android:keyEdgeFlags=\"right\"\r\n            android:keyWidth=\"50%p\"\r\n            />\r\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/popup_template.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n          android:keyWidth=\"10%p\"\r\n          android:horizontalGap=\"0px\"\r\n          android:verticalGap=\"0px\"\r\n          android:keyHeight=\"56dp\">\r\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/programming.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"8.3%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\n        <Key android:codes=\"48\" android:keyLabel=\"0\" android:keyEdgeFlags=\"right\"/>\n        <Key android:codes=\"40\" android:keyLabel=\"(\"/>\n        <Key android:codes=\"41\" android:keyLabel=\")\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\"/>\n        <Key android:codes=\"114\" android:keyLabel=\"r\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\" />\n        <Key android:codes=\"121\" android:keyLabel=\"y\"/>\n        <Key android:codes=\"117\" android:keyLabel=\"u\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\"/>\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\"/>\n        <Key android:codes=\"123\" android:keyLabel=\"{\"/>\n        <Key android:codes=\"125\" android:keyLabel=\"}\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" />\n        <Key android:codes=\"115\" android:keyLabel=\"s\" />\n        <Key android:codes=\"100\" android:keyLabel=\"d\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\"/>\n        <Key android:codes=\"103\" android:keyLabel=\"g\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\"/>\n        <Key android:codes=\"91\" android:keyLabel=\"[\"/>\n        <Key android:codes=\"93\" android:keyLabel=\"]\" />\n        <Key android:codes=\"59\" android:keyLabel=\";\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"9%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"z\" />\n        <Key android:codes=\"120\" android:keyLabel=\"x\"/>\n        <Key android:codes=\"99\" android:keyLabel=\"c\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\"/>\n        <Key android:codes=\"98\" android:keyLabel=\"b\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\"/>\n        <Key android:codes=\"124\" android:keyLabel=\"|\"/>\n        <Key android:codes=\"58\" android:keyLabel=\":\"/>\n        <Key android:codes=\"34\" android:keyLabel=\"&quot;\" android:keyWidth=\"7%p\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"9%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\"/>\n    </Row>\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"8%p\"/>\n        <Key android:codes=\"61\" android:keyLabel=\"=\"/>\n        <Key android:codes=\"33\" android:keyLabel=\"!\" />\n        <Key android:codes=\"47\" android:keyLabel=\"/\" />\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"20%p\"/>\n        <Key android:codes=\"43\" android:keyLabel=\"+\"/>\n        <Key android:codes=\"45\" android:keyLabel=\"-\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"9%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n\n    </Row>\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/qwerty.xml",
    "content": "\r\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:keyWidth=\"10%p\"\r\n    android:horizontalGap=\"0px\"\r\n    android:verticalGap=\"0px\"\r\n    android:keyHeight=\"9%p\">\r\n\r\n    <Row>\r\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\r\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẃẁŵẅ\"/>\r\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĕḝȇêé\" />\r\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŕɍřŗṙ\"/>\r\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ťṫţṭțṱṯ\"/>\r\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ýỳŷÿỹ\" />\r\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŭʉụüǜ\"/>\r\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"íìĭîǐï\"/>\r\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"øǿöȫóò\" />\r\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṕṗᵽ\"/>\r\n    </Row>\r\n    <Row>\r\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"áăäâ\" android:keyEdgeFlags=\"left\"  android:horizontalGap=\"5%p\"/>\r\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"śṥŝšṧṡş\" android:popupKeyboard=\"@xml/popup_template\"/>\r\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"đɗḋḍḑḓ\"/>\r\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƒḟ\" />\r\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ǵǥĝǧğģ\"/>\r\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĥȟħḩⱨẖ\"/>\r\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĵɈɉj̇̃\"/>\r\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƙꝁḱǩḳķ\"/>\r\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĺłľḹl̃ļ\" />\r\n    </Row>\r\n    <Row>\r\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\r\n        <Key android:codes=\"122\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"źẑžżẓ\"/>\r\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẍẋ\"/>\r\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ćĉčċḉƈc̈ȼç\"/>\r\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṽṿ\" />\r\n        <Key android:codes=\"98\" android:keyLabel=\"b\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƀḃḅḇ\"/>\r\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ńñňǹṅṇṉ\"/>\r\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ḿṁṃm̃\"/>\r\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n    <Row android:rowEdgeFlags=\"bottom\">\r\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\r\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\r\n            android:keyWidth=\"46.154%p\"/>\r\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\r\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\r\n\r\n    </Row>\r\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/qwerty_arrow_numbers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\n        <Key android:codes=\"48\" android:keyLabel=\"0\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẃẁŵẅ\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĕḝȇêé\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŕɍřŗṙ\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ťṫţṭțṱṯ\"/>\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ýỳŷÿỹ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŭʉụüǜ\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"íìĭîǐï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"øǿöȫóò\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṕṗᵽ\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"áăäâ\" android:keyEdgeFlags=\"left\"  android:horizontalGap=\"5%p\"/>\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"śṥŝšṧṡş\" android:popupKeyboard=\"@xml/popup_template\"/>\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"đɗḋḍḑḓ\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƒḟ\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ǵǥĝǧğģ\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĥȟħḩⱨẖ\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĵɈɉj̇̃\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƙꝁḱǩḳķ\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĺłľḹl̃ļ\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"źẑžżẓ\"/>\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẍẋ\"/>\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ćĉčċḉƈc̈ȼç\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṽṿ\" />\n        <Key android:codes=\"98\" android:keyLabel=\"b\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƀḃḅḇ\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ńñňǹṅṇṉ\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ḿṁṃm̃\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\n        <Key android:codes=\"-108\" android:keyIcon=\"@drawable/ic_keyboard_arrow_left\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"30%p\"/>\n        <Key android:codes=\"-111\" android:keyIcon=\"@drawable/ic_keyboard_arrow_right\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"10%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/qwerty_arrows.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n    <Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:keyWidth=\"10%p\"\n        android:horizontalGap=\"0px\"\n        android:verticalGap=\"0px\"\n        android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẃẁŵẅ\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĕḝȇêé\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŕɍřŗṙ\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ťṫţṭțṱṯ\"/>\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ýỳŷÿỹ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŭʉụüǜ\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"íìĭîǐï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"øǿöȫóò\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṕṗᵽ\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"áăäâ\" android:keyEdgeFlags=\"left\"  android:horizontalGap=\"5%p\"/>\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"śṥŝšṧṡş\" android:popupKeyboard=\"@xml/popup_template\"/>\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"đɗḋḍḑḓ\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƒḟ\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ǵǥĝǧğģ\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĥȟħḩⱨẖ\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĵɈɉj̇̃\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƙꝁḱǩḳķ\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĺłľḹl̃ļ\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"źẑžżẓ\"/>\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẍẋ\"/>\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ćĉčċḉƈc̈ȼç\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṽṿ\" />\n        <Key android:codes=\"98\" android:keyLabel=\"b\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƀḃḅḇ\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ńñňǹṅṇṉ\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ḿṁṃm̃\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n        <Row android:rowEdgeFlags=\"bottom\">\n            <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"44\" android:keyLabel=\",\" />\n            <Key android:codes=\"-108\" android:keyIcon=\"@drawable/ic_keyboard_arrow_left\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n                android:keyWidth=\"30%p\"/>\n            <Key android:codes=\"-111\" android:keyIcon=\"@drawable/ic_keyboard_arrow_right\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"46\" android:keyLabel=\".\"/>\n            <Key android:codes=\"10\"   android:keyWidth=\"10%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n\n        </Row>\n    </Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/qwerty_numbers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\n        <Key android:codes=\"48\" android:keyLabel=\"0\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẃẁŵẅ\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĕḝȇêé\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŕɍřŗṙ\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ťṫţṭțṱṯ\"/>\n        <Key android:codes=\"121\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ýỳŷÿỹ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŭʉụüǜ\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"íìĭîǐï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"øǿöȫóò\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṕṗᵽ\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"áăäâ\" android:keyEdgeFlags=\"left\"  android:horizontalGap=\"5%p\"/>\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"śṥŝšṧṡş\" android:popupKeyboard=\"@xml/popup_template\"/>\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"đɗḋḍḑḓ\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƒḟ\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ǵǥĝǧğģ\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĥȟħḩⱨẖ\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĵɈɉj̇̃\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƙꝁḱǩḳķ\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĺłľḹl̃ļ\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"źẑžżẓ\"/>\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẍẋ\"/>\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ćĉčċḉƈc̈ȼç\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṽṿ\" />\n        <Key android:codes=\"98\" android:keyLabel=\"b\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƀḃḅḇ\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ńñňǹṅṇṉ\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ḿṁṃm̃\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"46.154%p\"/>\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n\n    </Row>\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/qwertz.xml",
    "content": "\r\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:keyWidth=\"10%p\"\r\n    android:horizontalGap=\"0px\"\r\n    android:verticalGap=\"0px\"\r\n    android:keyHeight=\"9%p\">\r\n\r\n    <Row>\r\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\r\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẃẁŵẅ\"/>\r\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĕḝȇêé\" />\r\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŕɍřŗṙ\"/>\r\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ťṫţṭțṱṯ\"/>\r\n        <Key android:codes=\"121\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ýỳŷÿỹ\" />\r\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŭʉụǜü\"/>\r\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"íìĭîǐï\"/>\r\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"øǿȫóòö\" />\r\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṕṗᵽ\"/>\r\n    </Row>\r\n    <Row>\r\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"áăâä\" android:keyEdgeFlags=\"left\"  android:horizontalGap=\"5%p\"/>\r\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"śṥŝšṧṡş\" android:popupKeyboard=\"@xml/popup_template\"/>\r\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"đɗḋḍḑḓ\"/>\r\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƒḟ\" />\r\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ǵǥĝǧğģ\"/>\r\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĥȟħḩⱨẖ\"/>\r\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĵɈɉj̇̃\"/>\r\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƙꝁḱǩḳķ\"/>\r\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĺłľḹl̃ļ\" />\r\n    </Row>\r\n    <Row>\r\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\r\n        <Key android:codes=\"122\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"źẑžżẓ\"/>\r\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẍẋ\"/>\r\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ćĉčċḉƈc̈ȼç\"/>\r\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṽṿ\" />\r\n        <Key android:codes=\"98\" android:keyLabel=\"b\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƀḃḅḇ\"/>\r\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ńñňǹṅṇṉ\"/>\r\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ḿṁṃm̃\"/>\r\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n    <Row android:rowEdgeFlags=\"bottom\">\r\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\r\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\r\n            android:keyWidth=\"46.154%p\"/>\r\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\r\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\r\n\r\n    </Row>\r\n</Keyboard>\r\n"
  },
  {
    "path": "app/src/main/res/xml/qwertz_arrow_numbers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\n        <Key android:codes=\"48\" android:keyLabel=\"0\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẃẁŵẅ\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĕḝȇêé\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŕɍřŗṙ\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ťṫţṭțṱṯ\"/>\n        <Key android:codes=\"121\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ýỳŷÿỹ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŭʉụǜü\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"íìĭîǐï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"øǿȫóòö\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṕṗᵽ\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"áăâä\" android:keyEdgeFlags=\"left\"  android:horizontalGap=\"5%p\"/>\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"śṥŝšṧṡş\" android:popupKeyboard=\"@xml/popup_template\"/>\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"đɗḋḍḑḓ\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƒḟ\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ǵǥĝǧğģ\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĥȟħḩⱨẖ\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĵɈɉj̇̃\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƙꝁḱǩḳķ\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĺłľḹl̃ļ\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"źẑžżẓ\"/>\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẍẋ\"/>\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ćĉčċḉƈc̈ȼç\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṽṿ\" />\n        <Key android:codes=\"98\" android:keyLabel=\"b\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƀḃḅḇ\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ńñňǹṅṇṉ\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ḿṁṃm̃\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\n        <Key android:codes=\"-108\" android:keyIcon=\"@drawable/ic_keyboard_arrow_left\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"30%p\"/>\n        <Key android:codes=\"-111\" android:keyIcon=\"@drawable/ic_keyboard_arrow_right\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"10%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n</Keyboard>\n"
  },
  {
    "path": "app/src/main/res/xml/qwertz_arrows.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n    <Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:keyWidth=\"10%p\"\n        android:horizontalGap=\"0px\"\n        android:verticalGap=\"0px\"\n        android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẃẁŵẅ\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĕḝȇêé\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŕɍřŗṙ\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ťṫţṭțṱṯ\"/>\n        <Key android:codes=\"121\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ýỳŷÿỹ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŭʉụǜü\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"íìĭîǐï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"øǿȫóòö\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṕṗᵽ\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"áăâä\" android:keyEdgeFlags=\"left\"  android:horizontalGap=\"5%p\"/>\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"śṥŝšṧṡş\" android:popupKeyboard=\"@xml/popup_template\"/>\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"đɗḋḍḑḓ\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƒḟ\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ǵǥĝǧğģ\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĥȟħḩⱨẖ\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĵɈɉj̇̃\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƙꝁḱǩḳķ\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĺłľḹl̃ļ\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"źẑžżẓ\"/>\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẍẋ\"/>\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ćĉčċḉƈc̈ȼç\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṽṿ\" />\n        <Key android:codes=\"98\" android:keyLabel=\"b\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƀḃḅḇ\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ńñňǹṅṇṉ\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ḿṁṃm̃\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n        <Row android:rowEdgeFlags=\"bottom\">\n            <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"44\" android:keyLabel=\",\" />\n            <Key android:codes=\"-108\" android:keyIcon=\"@drawable/ic_keyboard_arrow_left\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n                android:keyWidth=\"30%p\"/>\n            <Key android:codes=\"-111\" android:keyIcon=\"@drawable/ic_keyboard_arrow_right\" android:isRepeatable=\"true\" android:keyWidth=\"10%p\"/>\n            <Key android:codes=\"46\" android:keyLabel=\".\"/>\n            <Key android:codes=\"10\"   android:keyWidth=\"10%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n\n        </Row>\n    </Keyboard>\n"
  },
  {
    "path": "app/src/main/res/xml/qwertz_numbers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:keyWidth=\"10%p\"\n    android:horizontalGap=\"0px\"\n    android:verticalGap=\"0px\"\n    android:keyHeight=\"9%p\">\n\n    <Row>\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\n        <Key android:codes=\"48\" android:keyLabel=\"0\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row>\n        <Key android:codes=\"113\" android:keyLabel=\"q\" android:keyEdgeFlags=\"left\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ʠɋq̃\"/>\n        <Key android:codes=\"119\" android:keyLabel=\"w\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẃẁŵẅ\"/>\n        <Key android:codes=\"101\" android:keyLabel=\"e\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĕḝȇêé\" />\n        <Key android:codes=\"114\" android:keyLabel=\"r\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŕɍřŗṙ\"/>\n        <Key android:codes=\"116\" android:keyLabel=\"t\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ťṫţṭțṱṯ\"/>\n        <Key android:codes=\"121\" android:keyLabel=\"z\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ýỳŷÿỹ\" />\n        <Key android:codes=\"117\" android:keyLabel=\"u\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ŭʉụǜü\"/>\n        <Key android:codes=\"105\" android:keyLabel=\"i\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"íìĭîǐï\"/>\n        <Key android:codes=\"111\" android:keyLabel=\"o\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"øǿȫóòö\" />\n        <Key android:codes=\"112\" android:keyLabel=\"p\" android:keyEdgeFlags=\"right\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṕṗᵽ\"/>\n    </Row>\n    <Row>\n        <Key android:codes=\"97\" android:keyLabel=\"a\" android:popupKeyboard=\"@xml/popup_template\"  android:popupCharacters=\"áăâä\" android:keyEdgeFlags=\"left\"  android:horizontalGap=\"5%p\"/>\n        <Key android:codes=\"115\" android:keyLabel=\"s\" android:popupCharacters=\"śṥŝšṧṡş\" android:popupKeyboard=\"@xml/popup_template\"/>\n        <Key android:codes=\"100\" android:keyLabel=\"d\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"đɗḋḍḑḓ\"/>\n        <Key android:codes=\"102\" android:keyLabel=\"f\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƒḟ\" />\n        <Key android:codes=\"103\" android:keyLabel=\"g\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ǵǥĝǧğģ\"/>\n        <Key android:codes=\"104\" android:keyLabel=\"h\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĥȟħḩⱨẖ\"/>\n        <Key android:codes=\"106\" android:keyLabel=\"j\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĵɈɉj̇̃\"/>\n        <Key android:codes=\"107\" android:keyLabel=\"k\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƙꝁḱǩḳķ\"/>\n        <Key android:codes=\"108\" android:keyLabel=\"l\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ĺłľḹl̃ļ\" />\n    </Row>\n    <Row>\n        <Key android:codes=\"-1\"   android:keyEdgeFlags=\"left\" android:keyWidth=\"15%p\" android:keyIcon=\"@drawable/ic_file_upload\"/>\n        <Key android:codes=\"122\" android:keyLabel=\"y\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"źẑžżẓ\"/>\n        <Key android:codes=\"120\" android:keyLabel=\"x\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ẍẋ\"/>\n        <Key android:codes=\"99\" android:keyLabel=\"c\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ćĉčċḉƈc̈ȼç\"/>\n        <Key android:codes=\"118\" android:keyLabel=\"v\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ṽṿ\" />\n        <Key android:codes=\"98\" android:keyLabel=\"b\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ƀḃḅḇ\"/>\n        <Key android:codes=\"110\" android:keyLabel=\"n\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ńñňǹṅṇṉ\"/>\n        <Key android:codes=\"109\" android:keyLabel=\"m\" android:popupKeyboard=\"@xml/popup_template\" android:popupCharacters=\"ḿṁṃm̃\"/>\n        <Key android:codes=\"-5\"  android:keyWidth=\"15%p\"  android:isRepeatable=\"true\" android:keyIcon=\"@drawable/ic_backspace\" android:keyEdgeFlags=\"right\"/>\n    </Row>\n\n    <Row android:rowEdgeFlags=\"bottom\">\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"-2\" android:keyLabel=\"123\" android:keyWidth=\"10%p\"/>\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\n            android:keyWidth=\"46.154%p\"/>\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\n\n    </Row>\n</Keyboard>\n"
  },
  {
    "path": "app/src/main/res/xml/symbols.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:keyWidth=\"10%p\"\r\n    android:horizontalGap=\"0px\"\r\n    android:verticalGap=\"0px\"\r\n    android:keyHeight=\"9%p\"\r\n    >\r\n\r\n    <Row>\r\n        <Key android:codes=\"49\" android:keyLabel=\"1\" android:keyEdgeFlags=\"left\"/>\r\n        <Key android:codes=\"50\" android:keyLabel=\"2\"/>\r\n        <Key android:codes=\"51\" android:keyLabel=\"3\"/>\r\n        <Key android:codes=\"52\" android:keyLabel=\"4\"/>\r\n        <Key android:codes=\"53\" android:keyLabel=\"5\"/>\r\n        <Key android:codes=\"54\" android:keyLabel=\"6\"/>\r\n        <Key android:codes=\"55\" android:keyLabel=\"7\"/>\r\n        <Key android:codes=\"56\" android:keyLabel=\"8\"/>\r\n        <Key android:codes=\"57\" android:keyLabel=\"9\"/>\r\n        <Key android:codes=\"48\" android:keyLabel=\"0\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n\r\n    <Row>\r\n        <Key android:codes=\"64\" android:keyLabel=\"\\@\" android:keyEdgeFlags=\"left\"/>\r\n        <Key android:codes=\"35\" android:keyLabel=\"\\#\"/>\r\n        <Key android:codes=\"36\" android:keyLabel=\"$\"/>\r\n        <Key android:codes=\"37\" android:keyLabel=\"%\"/>\r\n        <Key android:codes=\"38\" android:keyLabel=\"&amp;\"/>\r\n        <Key android:codes=\"42\" android:keyLabel=\"*\"/>\r\n        <Key android:codes=\"45\" android:keyLabel=\"-\"/>\r\n        <Key android:codes=\"61\" android:keyLabel=\"=\"/>\r\n        <Key android:codes=\"40\" android:keyLabel=\"(\"/>\r\n        <Key android:codes=\"41\" android:keyLabel=\")\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n\r\n    <Row>\r\n        <Key android:codes=\"-1\" android:keyIcon=\"@drawable/ic_file_upload\"\r\n            android:keyWidth=\"15%p\" android:isModifier=\"true\"\r\n            android:isSticky=\"true\" android:keyEdgeFlags=\"left\"/>\r\n        <Key android:codes=\"33\" android:keyLabel=\"!\" />\r\n        <Key android:codes=\"34\" android:keyLabel=\"&quot;\"/>\r\n        <Key android:codes=\"39\" android:keyLabel=\"\\'\"/>\r\n        <Key android:codes=\"58\" android:keyLabel=\":\"/>\r\n        <Key android:codes=\"59\" android:keyLabel=\";\"/>\r\n        <Key android:codes=\"47\" android:keyLabel=\"/\" />\r\n        <Key android:codes=\"63\" android:keyLabel=\"\\?\"/>\r\n        <Key android:codes=\"-5\" android:keyIcon=\"@drawable/ic_backspace\"\r\n            android:keyWidth=\"15%p\" android:keyEdgeFlags=\"right\"\r\n            android:isRepeatable=\"true\"/>\r\n    </Row>\r\n    <Row android:rowEdgeFlags=\"bottom\">\r\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"-2\" android:keyLabel=\"ABC\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\r\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\r\n             android:keyWidth=\"46.154%p\"/>\r\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\r\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\r\n\r\n    </Row>\r\n\r\n</Keyboard>"
  },
  {
    "path": "app/src/main/res/xml/symbols2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Keyboard xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:keyWidth=\"10%p\"\r\n    android:horizontalGap=\"0px\"\r\n    android:verticalGap=\"0px\"\r\n    android:keyHeight=\"9%p\">\r\n\r\n    <Row>\r\n        <Key android:codes=\"126\" android:keyLabel=\"~\" android:keyEdgeFlags=\"left\"/>\r\n        <Key android:codes=\"177\" android:keyLabel=\"±\"/>\r\n        <Key android:codes=\"215\" android:keyLabel=\"×\"/>\r\n        <Key android:codes=\"247\" android:keyLabel=\"÷\"/>\r\n        <Key android:codes=\"8226\" android:keyLabel=\"•\"/>\r\n        <Key android:codes=\"176\" android:keyLabel=\"°\"/>\r\n        <Key android:codes=\"96\" android:keyLabel=\"`\"/>\r\n        <Key android:codes=\"180\" android:keyLabel=\"´\"/>\r\n        <Key android:codes=\"123\" android:keyLabel=\"{\"/>\r\n        <Key android:codes=\"125\" android:keyLabel=\"}\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n\r\n    <Row>\r\n        <Key android:codes=\"169\" android:keyLabel=\"©\" android:keyEdgeFlags=\"left\"/>\r\n        <Key android:codes=\"163\" android:keyLabel=\"£\"/>\r\n        <Key android:codes=\"8364\" android:keyLabel=\"€\"/>\r\n        <Key android:codes=\"94\" android:keyLabel=\"^\"/>\r\n        <Key android:codes=\"174\" android:keyLabel=\"®\"/>\r\n        <Key android:codes=\"165\" android:keyLabel=\"¥\"/>\r\n        <Key android:codes=\"95\" android:keyLabel=\"_\"/>\r\n        <Key android:codes=\"43\" android:keyLabel=\"+\"/>\r\n        <Key android:codes=\"91\" android:keyLabel=\"[\"/>\r\n        <Key android:codes=\"93\" android:keyLabel=\"]\" android:keyEdgeFlags=\"right\"/>\r\n    </Row>\r\n\r\n    <Row>\r\n        <Key android:codes=\"-1\" android:keyIcon=\"@drawable/ic_file_upload\"\r\n            android:keyWidth=\"15%p\" android:isModifier=\"true\"\r\n            android:isSticky=\"true\" android:keyEdgeFlags=\"left\"/>\r\n        <Key android:codes=\"161\" android:keyLabel=\"¡\" />\r\n        <Key android:codes=\"60\" android:keyLabel=\"&lt;\"/>\r\n        <Key android:codes=\"62\" android:keyLabel=\"&gt;\"/>\r\n        <Key android:codes=\"162\" android:keyLabel=\"¢\"/>\r\n        <Key android:codes=\"124\" android:keyLabel=\"|\"/>\r\n        <Key android:codes=\"92\" android:keyLabel=\"\\\\\" />\r\n        <Key android:codes=\"191\" android:keyLabel=\"¿\"/>\r\n        <Key android:codes=\"-5\" android:keyIcon=\"@drawable/ic_backspace\"\r\n            android:keyWidth=\"15%p\" android:keyEdgeFlags=\"right\"\r\n            android:isRepeatable=\"true\"/>\r\n    </Row>\r\n    <Row android:rowEdgeFlags=\"bottom\">\r\n        <Key android:codes=\"-101\" android:keyIcon=\"@drawable/ic_more_horiz\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"-2\" android:keyLabel=\"ABC\" android:keyWidth=\"10%p\"/>\r\n        <Key android:codes=\"44\" android:keyLabel=\",\" />\r\n        <Key android:codes=\"32\"   android:isRepeatable=\"true\" android:keyLabel=\"SPACE\"\r\n             android:keyWidth=\"46.154%p\"/>\r\n        <Key android:codes=\"46\" android:keyLabel=\".\"/>\r\n        <Key android:codes=\"10\"   android:keyWidth=\"15%p\"  android:keyIcon=\"@drawable/ic_keyboard_return\" android:keyEdgeFlags=\"right\"/>\r\n\r\n    </Row>\r\n\r\n</Keyboard>\r\n"
  },
  {
    "path": "app/src/test/java/com/vlath/keyboard/ExampleUnitTest.java",
    "content": "package com.vlath.keyboard;\r\n\r\nimport org.junit.Test;\r\n\r\nimport static org.junit.Assert.*;\r\n\r\n/**\r\n * Example local unit test, which will execute on the development machine (host).\r\n *\r\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\r\n */\r\npublic class ExampleUnitTest {\r\n    @Test\r\n    public void addition_isCorrect() throws Exception {\r\n        assertEquals(4, 2 + 2);\r\n    }\r\n}"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\r\n\r\nbuildscript {\r\n    repositories {\r\n        jcenter()\r\n    }\r\n    dependencies {\r\n        classpath 'com.android.tools.build:gradle:2.3.0'\r\n\r\n        // NOTE: Do not place your application dependencies here; they belong\r\n        // in the individual module build.gradle files\r\n    }\r\n}\r\n\r\nallprojects {\r\n    repositories {\r\n        jcenter()\r\n    }\r\n}\r\n\r\ntask clean(type: Delete) {\r\n    delete rootProject.buildDir\r\n}\r\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed Jun 14 12:07:36 EEST 2017\r\ndistributionBase=GRADLE_USER_HOME\r\ndistributionPath=wrapper/dists\r\nzipStoreBase=GRADLE_USER_HOME\r\nzipStorePath=wrapper/dists\r\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-3.3-all.zip\r\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\r\n\r\n# IDE (e.g. Android Studio) users:\r\n# Gradle settings configured through the IDE *will override*\r\n# any settings specified in this file.\r\n\r\n# For more details on how to configure your build environment visit\r\n# http://www.gradle.org/docs/current/userguide/build_environment.html\r\n\r\n# Specifies the JVM arguments used for the daemon process.\r\n# The setting is particularly useful for tweaking memory settings.\r\norg.gradle.jvmargs=-Xmx1536m\r\n\r\n# When configured, Gradle will run in incubating parallel mode.\r\n# This option should only be used with decoupled projects. More details, visit\r\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\r\n# org.gradle.parallel=true\r\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windowz variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\ngoto execute\r\n\r\n:4NT_args\r\n@rem Get arguments from the 4NT Shell from JP Software\r\nset CMD_LINE_ARGS=%$\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\r\n"
  }
]