diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..4dc2c8057
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+
+liberapay: Helium314
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index afe56ed1c..5a8389b12 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -4,7 +4,13 @@ about: Create a report to help us improve
labels: bug
---
-
@@ -29,9 +35,9 @@ If you add screenshots, reduce the size or use thumbnails to keep the issue nice
**App version**
-**Device (please complete the following information):**
- - Model:
- - OS:
+**Device:**
+ - Model: [e.g. Samsung Galaxy S9]
+ - OS: [e.g. Android 10] (please also mention whether you are using the manufacturer's OS or a custom ROM)
**Additional context**
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 1d164acbc..15afeebb7 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -5,6 +5,11 @@ labels: enhancement
---
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index f18e2fc8e..d02b92dbd 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,6 +1,12 @@
diff --git a/LICENSE-CC-BY-SA-4.0 b/LICENSE-CC-BY-SA-4.0
new file mode 100644
index 000000000..2d58298e6
--- /dev/null
+++ b/LICENSE-CC-BY-SA-4.0
@@ -0,0 +1,428 @@
+Attribution-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-ShareAlike 4.0 International Public
+License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution-ShareAlike 4.0 International Public License ("Public
+License"). To the extent this Public License may be interpreted as a
+contract, You are granted the Licensed Rights in consideration of Your
+acceptance of these terms and conditions, and the Licensor grants You
+such rights in consideration of benefits the Licensor receives from
+making the Licensed Material available under these terms and
+conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. BY-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative
+ Commons as essentially the equivalent of this Public License.
+
+ d. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ e. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of this
+ Public License are Attribution and ShareAlike.
+
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ k. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ l. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ m. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. Additional offer from the Licensor -- Adapted Material.
+ Every recipient of Adapted Material from You
+ automatically receives an offer from the Licensor to
+ exercise the Licensed Rights in the Adapted Material
+ under the conditions of the Adapter's License You apply.
+
+ c. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ b. ShareAlike.
+
+ In addition to the conditions in Section 3(a), if You Share
+ Adapted Material You produce, the following conditions also apply.
+
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or
+ later, or a BY-SA Compatible License.
+
+ 2. You must include the text of, or the URI or hyperlink to, the
+ Adapter's License You apply. You may satisfy this condition
+ in any reasonable manner based on the medium, means, and
+ context in which You Share Adapted Material.
+
+ 3. You may not offer or impose any additional or different terms
+ or conditions on, or apply any Effective Technological
+ Measures to, Adapted Material that restrict exercise of the
+ rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+ including for purposes of Section 3(b); and
+
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
+
diff --git a/README.md b/README.md
index 85d37afe2..b9fd5328a 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,9 @@
HeliBoard is a privacy-conscious and customizable open-source keyboard, based on AOSP / OpenBoard.
Does not use internet permission, and thus is 100% offline.
+[](https://f-droid.org/packages/helium314.keyboard/)
+[](https://github.com/Helium314/HeliBoard/releases/latest)
+
## Table of Contents
- [Features](#features)
@@ -22,7 +25,7 @@ Does not use internet permission, and thus is 100% offline.
build your own, or get them here, or in the experimental section (quality may vary)
additional dictionaries for emojis or scientific symbols can be used to provide suggestions (similar to "emoji search")
-
note that for Korean layouts, suggestions only work using [this dictionary](https://github.com/openboard-team/openboard/commit/83fca9533c03b9fecc009fc632577226bbd6301f), the tools in the dictionary repository are not able to create working dictionaries
+
note that for Korean layouts, suggestions only work using this dictionary, the tools in the dictionary repository are not able to create working dictionaries
Customize keyboard themes (style, colors and background image)
@@ -31,7 +34,7 @@ Does not use internet permission, and thus is 100% offline.
Customize keyboard layouts (only available when disabling use system languages)
Multilingual typing
-
Glide typing (_only with closed source library_ ☹️)
+
Glide typing (only with closed source library ☹️)
library not included in the app, as there is no compatible open source library available
can be extracted from GApps packages ("swypelibs"), or downloaded here
@@ -46,16 +49,22 @@ Does not use internet permission, and thus is 100% offline.
## FAQ / Common Issues
* __Add a dictionary__: First download the dictionary file, e.g. from [here](https://codeberg.org/Helium314/aosp-dictionaries#dictionaries). Then go to language settings, click on the language, then on `+` next to _dictionary_ the _add_ and select the file. Alternatively you can open a `.dict` file in a file explorer with HeliBoard and then select the language. Note that the latter method does not work with all file explorers.
* __Emoji search__: You can get addon dictionaries for emoji suggestions in the [dictionaries repo](https://codeberg.org/Helium314/aosp-dictionaries). An actual search function does not exist yet.
-* __Cannot switch choose layout__: This is only possible when _use system languages_ is disabled.
+* __Cannot switch choose layout__: This is only possible when _use system languages_ is disabled. You can select the layout when tapping on the language.
+ * __How to customize layout__: Go to layout selection and use the `+` button, then you can add a custom layout, either from a file or you can copy and edit an existing layout.
* __No suggestions for some language__: Check [dictionaries repo](https://codeberg.org/Helium314/aosp-dictionaries) whether a dictionary is available. If there is one, download it and add it in the language settings for this language.
* __No suggestions in some app / text field__: This app respects the [no suggestions flag](https://developer.android.com/reference/android/text/InputType#TYPE_TEXT_FLAG_NO_SUGGESTIONS) set by some input fields, i.e. the developer does not want you to see suggestions here. Best do in issue report for that app if you think this behavior is wrong. Alternatively you can enable the _always show suggestions_ setting that overrides the _no suggestions_ flag.
* __Multilingual typing__: Enable in _Languages & Layouts_, select the main language and tap the `+` button next to _multilingual typing_ to add a language. Note that the selection is limited to languages with the same script as the main language, and to languages that have a dictionary (see above for how to add).
* __How to enable glide typing__: There is no glide typing built into this app, but you can load compatible libraries: Go to advanced settings -> _load gesture typing library_ and point to a file (setting not available in _nouserlib_ version). You can extract the file from GApps packages ("_swypelibs_"), or download one [here](https://github.com/erkserkserks/openboard/tree/master/app/src/main/jniLibs). Make sure to use the correct version (app will tell you in the dialog to load the library).
* __Glide typing is not working after loading a library__: Possibly the download was corrupted, or you downloaded the wrong file. If you get a "_unknown file_" confirmation popup, it is likely you are not using the correct file (or you might be using a different version of the library). In rare cases, there might be crashes when the file is not in internal storage, or some [Samsung-specific problems](https://stackoverflow.com/a/75286899).
-* __What is the _nouserlib_ version?__: The normal version (_release_) allows the user to provide a library for glide typing. Running code that isn't supplied with the app is _dynamic code loading_, which is a security risk. Android Studio warns about this:
+* __German layout with / without umlauts__: _German (Germany)_ layout has umlauts, _German_ layout doesn't
+* __Spell checker is not checking all languages in multilingual typing__: Make sure you actually enabled HeliBoard spell checker. Usually it can be found in System Settings -> System -> Languages -> Advanced -> Spell Checker, but this may depend on Android version.
+* __Words added to Gboard dictionary are not suggested__: Gboard uses its own dictionary instead of the system's personal dictionary. See [here](https://github.com/Helium314/HeliBoard/issues/500#issuecomment-2032292161) for how to export the words.
+* __What is the _nouserlib_ version?__: The normal version (_release_) allows the user to provide a library for glide typing, while the _nouserlib_ version does not. Running code that isn't supplied with the app is _dynamic code loading_, which is a security risk. Android Studio warns about this:
> Dynamically loading code from locations other than the application's library directory or the Android platform's built-in library directories is dangerous, as there is an increased risk that the code could have been tampered with. Applications should use loadLibrary when possible, which provides increased assurance that libraries are loaded from one of these safer locations. Application developers should use the features of their development environment to place application native libraries into the lib directory of their compiled APKs.
The app checks the SHA256 checksum of the library and warns the user if it doesn't match with known library versions. A mismatch indicates the library was modified, but may also occur if the user intentionally provides a different library than expected (e.g. a self-built variant).
+ Note that if the the app is installed as a system app, both versions have access to the system glide typing library (if it is installed).
+* __App crashing when using as system app__: This happens if you do not install the app, but just copy the APK. Then the app's own library is not extracted from the APK, and not accessible to the app. You will need tp either install the app over itself, or provide a library.
* (_to be expanded_...)
## Hidden Functionality
@@ -66,21 +75,22 @@ Features that may go unnoticed, and further potentially useful information
* Emoji View and Language Switch will disappear if you have the corresponding key enabled;
* For some layouts it\'s not the Comma-key, but the key at the same position (e.g. it\'s `q` for Dvorak layout).
* When incognito mode is enabled, no words will be learned, and no emojis will be added to recents.
-* Sliding key input: Swipe from shift to another key to type a single uppercase key
- * This also works for the `?123` key to type a single symbol from the symbols keyboard, and for related keys.
-* Long-press the `?123` from main view to directly open numpad.
+* Sliding key input: Swipe from shift or symbol key to another key. This will enter a single uppercase key or symbol and return to the previous keyboard.
+* Hold shift or symbol key, press one or more keys, and then release shift or symbol key to return to the previous keyboard.
* Long-press a suggestion in the suggestion strip to show more suggestions, and a delete button to remove this suggestion.
* Swipe up from a suggestion to open more suggestions, and release on the suggestion to select it.
* Long-press an entry in the clipboard history to pin it (keep it in clipboard until you unpin).
* Swipe left in clipboard view to remove an entry (except when it's pinned)
+* Select text and press shift to switch between uppercase, lowercase and capitalize words
* You can add dictionaries by opening the file
* This only works with _content-uris_ and not with _file-uris_, meaning that it may not work with some file explorers.
-* _When using debug mode / debug APK_
+* _Debug mode / debug APK_
* Long-press a suggestion in the suggestion strip twice to show the source dictionary.
- * When using debug APK, you can find Debug Settings within the Advanced Preferences, though the usefulness is limited except for dumping dictionaries into the log.
+ * When using debug APK, you can find _Debug Settings_ within the _Advanced Preferences_, though the usefulness is limited except for dumping dictionaries into the log.
+ * For a release APK, you need to tap the version in _About_ several times, then you can find debug settings in _Advanced Preferences_.
+ * When enabling _Show suggestion infos_, suggestions will have some tiny numbers on top showing some internal score and source dictionary.
* In the event of an application crash, you will be prompted whether you want the crash logs when you open the Settings.
* When using multilingual typing, space bar will show an confidence value used for determining the currently used language.
- * Suggestions will have some tiny numbers on top showing some internal score and source dictionary (can be disabled)
* For users doing manual backups with root access: Starting at Android 7, some files and the main shared preferences file are not in the default location, because the app is using [device protected storage](https://developer.android.com/reference/android/content/Context#createDeviceProtectedStorageContext()). This is necessary so the settings and layout files can be read before the device is unlocked, e.g. at boot. The files are usually located in `/data/user_de/0//`, though the location may depend on the device and Android version.
# Contributing ❤
@@ -174,10 +184,12 @@ HeliBoard (as a fork of OpenBoard) is licensed under GNU General Public License
See repo's [LICENSE](/LICENSE-GPL-3) file.
-Since the app is based on Apache 2.0 licensed AOSP Keyboard, an [Apache 2.0](LICENSE-Apache-2.0) license file is provided too.
+Since the app is based on Apache 2.0 licensed AOSP Keyboard, an [Apache 2.0](LICENSE-Apache-2.0) license file is provided.
+
+The icon is licensed under [Creative Commons BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). A [license file](LICENSE-CC-BY-SA-4.0) is also included.
# Credits
-- Icon by [Marco TLS](https://www.marcotls.eu)
+- Icon by [Fabian OvrWrt](https://github.com/FabianOvrWrt) with contributions from [The Eclectic Dyslexic](https://github.com/the-eclectic-dyslexic)
- [OpenBoard](https://github.com/openboard-team/openboard)
- [AOSP Keyboard](https://android.googlesource.com/platform/packages/inputmethods/LatinIME/)
- [LineageOS](https://review.lineageos.org/admin/repos/LineageOS/android_packages_inputmethods_LatinIME)
diff --git a/app/build.gradle b/app/build.gradle
index 9eee06441..4f4972d4b 100755
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,8 +10,8 @@ android {
applicationId "helium314.keyboard"
minSdkVersion 21
targetSdkVersion 34
- versionCode 1000
- versionName '1.0-alpha1'
+ versionCode 1003
+ versionName '1.3-beta1'
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
diff --git a/app/src/main/assets/dictionaries_in_dict_repo.csv b/app/src/main/assets/dictionaries_in_dict_repo.csv
index 5414fc4f3..34de7d2f8 100644
--- a/app/src/main/assets/dictionaries_in_dict_repo.csv
+++ b/app/src/main/assets/dictionaries_in_dict_repo.csv
@@ -2,7 +2,7 @@ main,ar,
main,hy,
main,as,
main,bn,
-main,by,
+main,be,
main,bg,
main,ca,
main,hr,
@@ -64,6 +64,7 @@ main,ur,
main,af,exp
main,ar,exp
main,bn,exp
+main,bn_BD,exp
main,bg,exp
main,cs,exp
main,en_GB,exp
diff --git a/app/src/main/assets/language_key_texts/cv.txt b/app/src/main/assets/language_key_texts/cv.txt
new file mode 100644
index 000000000..53fa6e14c
--- /dev/null
+++ b/app/src/main/assets/language_key_texts/cv.txt
@@ -0,0 +1,20 @@
+[popup_keys]
+" « » „ “ ”
+у у́ ү ӯ
+к қ
+е е́ ә
+н ң
+г ғ
+х ҳ
+ы ы́
+а а́
+о о́ ө
+ж җ
+э э́ є
+я я́
+ч ҷ
+и и́ і ӣ
+ю ю́
+
+[labels]
+alphabet: АБВ
\ No newline at end of file
diff --git a/app/src/main/assets/language_key_texts/tr.txt b/app/src/main/assets/language_key_texts/tr.txt
index 73459f8d8..f9c797a25 100644
--- a/app/src/main/assets/language_key_texts/tr.txt
+++ b/app/src/main/assets/language_key_texts/tr.txt
@@ -2,6 +2,7 @@
a â ä á
e ə é
ı i î ï ì í į ī
+i ı î ï ì í į ī
o ö ô œ ò ó õ ø ō
u ü û ù ú ū
s ş ß ś š
diff --git a/app/src/main/assets/layouts/bengali_probhat.json b/app/src/main/assets/layouts/bengali_probhat.json
index dbcda68f6..e1d88cde7 100644
--- a/app/src/main/assets/layouts/bengali_probhat.json
+++ b/app/src/main/assets/layouts/bengali_probhat.json
@@ -122,11 +122,15 @@
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "ৃ" },
- "default": { "label": "." }
+ "default": { "label": "।" }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "ঁ" },
"default": { "label": "্" }
}
+ ],
+ [
+ { "label": "," },
+ { "label": "." }
]
]
diff --git a/app/src/main/assets/layouts/chuvash.txt b/app/src/main/assets/layouts/chuvash.txt
new file mode 100644
index 000000000..c94eef9c2
--- /dev/null
+++ b/app/src/main/assets/layouts/chuvash.txt
@@ -0,0 +1,44 @@
+ё
+ӑ
+ӗ
+ҫ
+ӳ
+ъ
+-
+!
+?
+"
+
+й
+ц
+у
+к
+е
+н
+г
+ш
+щ
+з
+х
+
+ф
+ы
+в
+а
+п
+р
+о
+л
+д
+ж
+э
+
+я
+ч
+с
+м
+и
+т
+ь
+б
+ю
\ No newline at end of file
diff --git a/app/src/main/assets/layouts/russian_student.txt b/app/src/main/assets/layouts/russian_student.txt
new file mode 100644
index 000000000..4716deaef
--- /dev/null
+++ b/app/src/main/assets/layouts/russian_student.txt
@@ -0,0 +1,33 @@
+я
+ш
+е
+р
+т
+ы
+y
+и
+о
+п
+э
+
+а
+с
+д
+ф
+г
+ч
+й
+к
+л
+ж
+щ
+
+з
+х
+ц
+в
+б
+н
+м
+ь
+ю
diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt b/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt
index 5f005e690..3bfc5375f 100644
--- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt
+++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt
@@ -16,6 +16,7 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp
override fun onPressKey(primaryCode: Int, repeatCount: Int, isSinglePointer: Boolean) {
keyboardSwitcher.onPressKey(primaryCode, isSinglePointer, latinIME.currentAutoCapsState, latinIME.currentRecapitalizeState)
+ latinIME.hapticAndAudioFeedback(primaryCode, repeatCount)
}
override fun onReleaseKey(primaryCode: Int, withSliding: Boolean) {
diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardTheme.kt b/app/src/main/java/helium314/keyboard/keyboard/KeyboardTheme.kt
index af5413428..6594c6f65 100644
--- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardTheme.kt
+++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardTheme.kt
@@ -17,7 +17,6 @@ import helium314.keyboard.latin.common.DefaultColors
import helium314.keyboard.latin.common.DynamicColors
import helium314.keyboard.latin.settings.Settings
import helium314.keyboard.latin.utils.DeviceProtectedUtils
-import helium314.keyboard.latin.utils.Log
import helium314.keyboard.latin.utils.ResourceUtils
class KeyboardTheme // Note: The themeId should be aligned with "themeId" attribute of Keyboard style in values/themes-
diff --git a/app/src/main/res/values/keyboard-icons-lxx-light.xml b/app/src/main/res/values/keyboard-icons-lxx-light.xml
index 09e145ab2..a2868674f 100644
--- a/app/src/main/res/values/keyboard-icons-lxx-light.xml
+++ b/app/src/main/res/values/keyboard-icons-lxx-light.xml
@@ -26,6 +26,7 @@
@drawable/sym_keyboard_incognito_lxx@drawable/sym_keyboard_space_lxx@drawable/sym_keyboard_language_switch_lxx
+ @drawable/ic_autocorrect@drawable/sym_keyboard_zwnj_lxx@drawable/sym_keyboard_zwj_lxx@drawable/sym_keyboard_smiley_lxx
@@ -33,6 +34,7 @@
@drawable/sym_keyboard_clipboard_lxx@drawable/sym_keyboard_clipboard_lxx@drawable/sym_keyboard_copy
+ @drawable/sym_keyboard_cut@drawable/sym_keyboard_clear_clipboard_lxx@drawable/sym_keyboard_start_onehanded_lxx@drawable/sym_keyboard_stop_onehanded_lxx
@@ -51,5 +53,6 @@
@drawable/ic_to_start@drawable/ic_to_end@drawable/ic_select
+ @drawable/ic_close
diff --git a/app/src/main/res/values/keyboard-icons-rounded.xml b/app/src/main/res/values/keyboard-icons-rounded.xml
index 55f05cf3f..ad66ba327 100644
--- a/app/src/main/res/values/keyboard-icons-rounded.xml
+++ b/app/src/main/res/values/keyboard-icons-rounded.xml
@@ -25,6 +25,7 @@
@drawable/sym_keyboard_incognito_lxx@drawable/sym_keyboard_space_rounded@drawable/sym_keyboard_language_switch_lxx
+ @drawable/ic_autocorrect_rounded@drawable/sym_keyboard_zwnj_lxx@drawable/sym_keyboard_zwj_lxx@drawable/sym_keyboard_smiley_rounded
@@ -32,6 +33,7 @@
@drawable/sym_keyboard_clipboard_rounded@drawable/sym_keyboard_clipboard_rounded@drawable/sym_keyboard_copy_rounded
+ @drawable/sym_keyboard_cut@drawable/sym_keyboard_clear_clipboard_rounded@drawable/sym_keyboard_start_onehanded_rounded@drawable/sym_keyboard_stop_onehanded_rounded
@@ -50,5 +52,6 @@
@drawable/ic_to_start_rounded@drawable/ic_to_end_rounded@drawable/ic_select_rounded
+ @drawable/ic_close
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 79c15a58e..e1ce7785b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -229,6 +229,7 @@
Select toolbar keys@android:string/copy
+ CutClipboardClear clipboardVoice input
@@ -248,10 +249,12 @@
Show functional hintsShow hints if long-pressing a key triggers additional functionality
-
+
Change input method with space keyLong pressing space key will prompt input method selection menu
+
+ Long press symbols key for numpadNarrow key gaps
@@ -269,6 +272,7 @@
Spanish (US)Hinglish
+
Kaitag
@@ -310,6 +314,9 @@
%s (Sebeolsik Final)
+
+ %s (Student)
diff --git a/app/src/main/res/xml/prefs_screen_advanced.xml b/app/src/main/res/xml/prefs_screen_advanced.xml
index 7c12641b6..2f34d7fc9 100644
--- a/app/src/main/res/xml/prefs_screen_advanced.xml
+++ b/app/src/main/res/xml/prefs_screen_advanced.xml
@@ -54,6 +54,12 @@
android:persistent="true"
android:defaultValue="true" />
+
+
+
+
+
diff --git a/art/launcher_icon/foreground_layer_export.svg b/art/launcher_icon/foreground_layer_export.svg
new file mode 100644
index 000000000..8cee2f91e
--- /dev/null
+++ b/art/launcher_icon/foreground_layer_export.svg
@@ -0,0 +1,59 @@
+
+
+
+
diff --git a/art/launcher_icon/icon_source_-_rubik_font_not_included.svg b/art/launcher_icon/icon_source_-_rubik_font_not_included.svg
new file mode 100644
index 000000000..cdc4cfae2
--- /dev/null
+++ b/art/launcher_icon/icon_source_-_rubik_font_not_included.svg
@@ -0,0 +1,237 @@
+
+
+
+
diff --git a/fastlane/metadata/android/en-US/changelogs/1001.txt b/fastlane/metadata/android/en-US/changelogs/1001.txt
index 8d1c8b69c..db576f9f1 100644
--- a/fastlane/metadata/android/en-US/changelogs/1001.txt
+++ b/fastlane/metadata/android/en-US/changelogs/1001.txt
@@ -1 +1,20 @@
-
+* new icon by @FabianOvrWrt with contributions from @the-eclectic-dyslexic (#517, #592)
+* more customizable space bar trackpad and language switch by @arcarum (#486)
+* add % to shift symbols layout (#568, #428)
+* improve behavior when language switch key is set to switch both language and keyboard
+* show links to existing dictionaries when adding a dictionary
+* add Kaitag layout by @alkaitagi (#519)
+* add Probhat layout by @fahimscirex (#489)
+* optionally reverse toolbar order for RTL languages by @codokie (#557, #574)
+* allow customizing special layouts (numpad, phone, ...)
+ * still experimental, as the base layouts may change
+* updated spellchecker.xml to include locales where dictionaries are available, but not included in app
+* update translations (thanks to all translators!)
+* upgrade ndk by @Syphyr (#560)
+* upgrade inline autofill code by @arcarum (#595)
+* fix issue with toolbar key dialog (#505)
+* fix issue with turkish layout (#508)
+* fix wrong switch states when rotating in customize colors screen (#563)
+* fix issue with recent emojis not loading (#527)
+* fix issue with numbers not appearing in certain fields (#585)
+* some minor fixes
diff --git a/fastlane/metadata/android/en-US/changelogs/1003.txt b/fastlane/metadata/android/en-US/changelogs/1003.txt
new file mode 100644
index 000000000..b6ad64140
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/1003.txt
@@ -0,0 +1,9 @@
+* change icons for autocorrect and select all toolbar keys by @codokie (#524, #651)
+* add Chuvash layout by @tenextractor (#677)
+* add cut toolbar key by @codokie (#678)
+* update Probhat layout by @fahimscirex (#628)
+* show toolbar icons in toolbar key dialog
+* add close button in clipboard history by @codokie (#403, #649)
+* add Russian (Student) layout by @Zolax9 (#640)
+* make numpad on symbols key long press optional (#588)
+* minor fixes and improvements, including #632, #637, #638 by @RHJihan
diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt
index 36198f66b..dcb0ab318 100644
--- a/fastlane/metadata/android/en-US/full_description.txt
+++ b/fastlane/metadata/android/en-US/full_description.txt
@@ -7,7 +7,7 @@ Features:
build your own, or get them here, or in the experimental section (quality may vary)
additional dictionaries for emojis or scientific symbols can be used to provide suggestions (similar to "emoji search")
-
note that for Korean layouts, suggestions only work using [this dictionary](https://github.com/openboard-team/openboard/commit/83fca9533c03b9fecc009fc632577226bbd6301f), the tools in the dictionary repository are not able to create working dictionaries
+
note that for Korean layouts, suggestions only work using this dictionary, the tools in the dictionary repository are not able to create working dictionaries
Customize keyboard themes (style, colors and background image)
@@ -16,7 +16,7 @@ Features:
Customize keyboard layouts (only available when disabling use system languages)
Multilingual typing
-
Glide typing (_only with closed source library_ ☹️)
+
Glide typing (only with closed source library ☹️)
library not included in the app, as there is no compatible open source library available
can be extracted from GApps packages ("swypelibs"), or downloaded here
diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png
index 1d22dabc1..33d802d6a 100644
Binary files a/fastlane/metadata/android/en-US/images/icon.png and b/fastlane/metadata/android/en-US/images/icon.png differ
diff --git a/layouts.md b/layouts.md
index 0adfd058c..066fee84c 100644
--- a/layouts.md
+++ b/layouts.md
@@ -65,3 +65,4 @@ Some special key labels will be implemented, most are already working in the (cu
* `[extra_keys]` are typically keys shown in the default layout of the language. This is currently only used for latin layouts to avoid duplicating layouts for just adding few keys on the right side. The layout name need to end with `+`, but the `+` is removed when looking up the actual layout.
* If you add a new language for which Android does not have a display name, it will be displayed using the language tag
* Avoiding this currently is more complicated than necessary: add the language tag to [LocaleUtils.getLocaleDisplayNameInSystemLocale](/app/src/main/java/helium314/keyboard/latin/common/LocaleUtils.kt#L181) to have an exception, and add a string named `subtype_` to [`strings.xml`](/app/src/main/res/values/strings.xml). Further you may need to add a `subtype_in_root_locale_` to [donottranslate.xml](/app/src/main/res/values/donottranslate.xml), and add the language tag to `subtype_locale_exception_keys` and `subtype_locale_displayed_in_root_locale`.
+* If a newly added language does not use latin script, please update the default scripts method `Locale.script` in [ScriptUtils](app/src/main/java/helium314/keyboard/latin/utils/ScriptUtils.kt)