mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-04-19 21:59:11 +00:00
Compare commits
321 commits
v2.2-beta1
...
main
Author | SHA1 | Date | |
---|---|---|---|
|
7748ed75fe | ||
|
c32b3bada4 | ||
|
e042adc5b8 | ||
|
901e745158 | ||
|
91554b02eb | ||
|
fe7f1a1b38 | ||
|
8fddf94121 | ||
|
003ec854ab | ||
|
00ae92318d | ||
|
e4cd58a722 | ||
|
f4b4705e81 | ||
|
d4960c73dc | ||
|
22eb48ff91 | ||
|
6995266bd1 | ||
|
087f87e95c | ||
|
8edea4f7c5 | ||
|
d79c84d7df | ||
|
57deb82ca7 | ||
|
7a57f5a24f | ||
|
452770566c | ||
|
8247366bdd | ||
|
3dbd9c6ed9 | ||
|
6bbce0b5ca | ||
|
ac805a9286 | ||
|
8932fc84e1 | ||
|
525c4e59b6 | ||
|
a3fcce26a7 | ||
|
58778b1f23 | ||
|
fbfff03541 | ||
|
a1f991088d | ||
|
10af5def2b | ||
|
a745c92e05 | ||
|
b26ba76221 | ||
|
1b1dbd4006 | ||
|
f06521c8ec | ||
|
0847bac3d5 | ||
|
f5bc89b91d | ||
|
c0b14635fd | ||
|
b600431af9 | ||
|
66a07eb8d2 | ||
|
88a7f41038 | ||
|
2fe0937ead | ||
|
efaddf6c51 | ||
|
9e91e7562b | ||
|
7228fa06d1 | ||
|
a3bada8d25 | ||
|
9b7eaa4cf2 | ||
|
7571890551 | ||
|
cb70553484 | ||
|
8298542c39 | ||
|
a9e5f879d8 | ||
|
a6b6d1b659 | ||
|
ba88129641 | ||
|
55259b2915 | ||
|
d3401e5c04 | ||
|
18a328cd2b | ||
|
d05a59e4ed | ||
|
bf713d6967 | ||
|
e9a2a7ebb1 | ||
|
2b8c39b125 | ||
|
c47da4203f | ||
|
e1f02dab31 | ||
|
a4d96a12a9 | ||
|
15c1526895 | ||
|
fa9ac20d39 | ||
|
912ba45d5e | ||
|
631ab60eb9 | ||
|
073318d7d0 | ||
|
43d96e3131 | ||
|
43f5dd555b | ||
|
ee33140106 | ||
|
411bd79890 | ||
|
f60406d6ac | ||
|
4310025b2d | ||
|
fad6c7b758 | ||
|
72ca12d52e | ||
|
e342ff24b5 | ||
|
18693cdf20 | ||
|
45c30b5c64 | ||
|
b4f3732cde | ||
|
2fb618888b | ||
|
cffdbff23c | ||
|
5e63a7f29b | ||
|
02e8a001cd | ||
|
f929caa4d8 | ||
|
8a8e8a70e3 | ||
|
8c557ec42c | ||
|
122b51c0ed | ||
|
3d690ae371 | ||
|
be3ccc631d | ||
|
1fc5d60483 | ||
|
95b6333bf4 | ||
|
f0bb541b72 | ||
|
b69ec39539 | ||
|
efa2faf474 | ||
|
5d1545687f | ||
|
7696beeb29 | ||
|
f016c20ca8 | ||
|
7ec9e1a8cf | ||
|
c431f7043f | ||
|
e55b375f90 | ||
|
1b5a793690 | ||
|
98640c6b0d | ||
|
912be23900 | ||
|
999c900f7f | ||
|
27e2a6f584 | ||
|
48fbe86dcc | ||
|
247ec2b7f3 | ||
|
b65d00e142 | ||
|
1c955a34b2 | ||
|
2e9ba954ad | ||
|
f65864a935 | ||
|
aaa7fb2ad1 | ||
|
f0689b00f6 | ||
|
cab9cc7de0 | ||
|
93e6f88f6c | ||
|
987f0560d9 | ||
|
3c9d1c8795 | ||
|
6212f44283 | ||
|
761b56fdc3 | ||
|
a8bd9058e7 | ||
|
875a98d3f4 | ||
|
b7aadac07c | ||
|
f076d66f93 | ||
|
d5d672ee33 | ||
|
fa72e2bcbb | ||
|
adc5c8cf1c | ||
|
9ff5fda8ed | ||
|
43cfbddf68 | ||
|
53a5cb0c92 | ||
|
4edaa485b6 | ||
|
e3fa210031 | ||
|
b41ad29e55 | ||
|
ff27d1f1c5 | ||
|
86f15e11d8 | ||
|
52c887e941 | ||
|
7494d85aea | ||
|
f15f65daa8 | ||
|
05fc53c96f | ||
|
4efc33dba4 | ||
|
31f7ef6182 | ||
|
d03801f22e | ||
|
f7cf1762b5 | ||
|
e7acef5396 | ||
|
35083e6515 | ||
|
0899245ae7 | ||
|
8d094e268a | ||
|
eec197c32c | ||
|
40de17c148 | ||
|
47070c1086 | ||
|
23a067187c | ||
|
85382de881 | ||
|
12f1e20d9f | ||
|
56c7748dff | ||
|
0fa8f58750 | ||
|
6f1e79caa1 | ||
|
2c1d6a5f4c | ||
|
6e77437ea9 | ||
|
a25ed6d5e0 | ||
|
d005ffac06 | ||
|
4c060689fa | ||
|
bccb10ea39 | ||
|
5ccc117ae1 | ||
|
682a4ae911 | ||
|
d8e9a004e5 | ||
|
42f4561422 | ||
|
aa3bf37852 | ||
|
a3e85bc664 | ||
|
6b86ea236b | ||
|
5ba40f7875 | ||
|
846388de97 | ||
|
fe59a598b7 | ||
|
201b430362 | ||
|
f2f7426ee5 | ||
|
b31b8f8fe2 | ||
|
767be15006 | ||
|
589179e626 | ||
|
e105f39752 | ||
|
6d9763d079 | ||
|
cb08d32d14 | ||
|
9bb087b422 | ||
|
f8bdd7dd1c | ||
|
1484d7021e | ||
|
bd7e92bcf8 | ||
|
63bda02cc4 | ||
|
40433bd8d2 | ||
|
5300c4d930 | ||
|
6dad54b83d | ||
|
57313a4b79 | ||
|
2a76b49f3a | ||
|
e36a20719f | ||
|
d807e08195 | ||
|
ecf7aabdb1 | ||
|
2700c3428a | ||
|
b31d6d0051 | ||
|
125a483591 | ||
|
deb9dda7e7 | ||
|
e845e38e42 | ||
|
679754bb2d | ||
|
c0b3e76741 | ||
|
7c77f4d1c4 | ||
|
f2a46cfa9a | ||
|
73988394a9 | ||
|
ad3086183d | ||
|
d57301918e | ||
|
274c6b0212 | ||
|
82ec37f339 | ||
|
0d48a18264 | ||
|
92bc79b7e6 | ||
|
635cd5f8da | ||
|
79c9a85082 | ||
|
833aa321b9 | ||
|
54f222c0ee | ||
|
419c0d847b | ||
|
5afb1e3a0c | ||
|
105a6a7791 | ||
|
f45f69f8a2 | ||
|
fc12877795 | ||
|
453683a925 | ||
|
05816e4436 | ||
|
35e0fe6be3 | ||
|
df8c0c6c59 | ||
|
da8827efc3 | ||
|
5283c5878c | ||
|
cde1a70427 | ||
|
789b533358 | ||
|
c1bbf51fa1 | ||
|
9edbbcf0ea | ||
|
9a2009d182 | ||
|
c581e9601b | ||
|
71d17f6792 | ||
|
092cac529f | ||
|
83b48b474e | ||
|
8931f79b62 | ||
|
df37e3589e | ||
|
10c0b64e45 | ||
|
a4b07d6de2 | ||
|
0076f04639 | ||
|
4638709db5 | ||
|
44015f6857 | ||
|
13e2260aab | ||
|
1e7ea7d699 | ||
|
c2fdce9d58 | ||
|
7339000df3 | ||
|
465fc86e61 | ||
|
7e3657185f | ||
|
de5968d04a | ||
|
bf37a7f947 | ||
|
0543ccdb2d | ||
|
cd5ac492be | ||
|
548bf64c9d | ||
|
d4d3ba16e0 | ||
|
9f09d28f4e | ||
|
ce61fa9a21 | ||
|
fce02d4669 | ||
|
30180165cb | ||
|
16b6196c54 | ||
|
846ab1edef | ||
|
5251bcd989 | ||
|
76990814e1 | ||
|
5e64e94085 | ||
|
250a43e4e7 | ||
|
ab974a980e | ||
|
3cf9d4c87e | ||
|
d25df2c4de | ||
|
2ad45af856 | ||
|
3989c1348a | ||
|
ca67fc71a6 | ||
|
eb8d204d00 | ||
|
4b21e3e54e | ||
|
afd7bc2985 | ||
|
8c3ed1ac22 | ||
|
fe041293b6 | ||
|
51a7508374 | ||
|
044f6dd81c | ||
|
f7c694bfe0 | ||
|
c9b8dfd4c2 | ||
|
cd1ed0e1e7 | ||
|
d3bd97a104 | ||
|
d08afcd279 | ||
|
6100186f73 | ||
|
32a37eaddf | ||
|
6e50d6e208 | ||
|
a1c70a1181 | ||
|
7652af888d | ||
|
d0157361f7 | ||
|
71d98e1e4f | ||
|
d754e7ca7f | ||
|
27d257ce1d | ||
|
640f26d0fc | ||
|
b4eb63e9a9 | ||
|
05523ecd30 | ||
|
7d1cf0dd63 | ||
|
723812d913 | ||
|
b1798d5777 | ||
|
056452775c | ||
|
404f6a5726 | ||
|
ab34815c7d | ||
|
be13ca40a1 | ||
|
8ca65aebc9 | ||
|
4ddfd2d5a9 | ||
|
374b840127 | ||
|
c96326a256 | ||
|
6f71e577d3 | ||
|
3306ffb849 | ||
|
44eb296d38 | ||
|
a1a7489856 | ||
|
ee748023fd | ||
|
be5c86ac31 | ||
|
b43e06c66f | ||
|
c0e3811698 | ||
|
7b4420cc6b | ||
|
2de5798504 | ||
|
48b0bb1cbf | ||
|
aed5704582 | ||
|
8a457c1821 | ||
|
2b135481be | ||
|
83ae078cfa | ||
|
28ba8a7a72 | ||
|
136b45880e | ||
|
446b0fb826 |
740 changed files with 33653 additions and 15194 deletions
18
.github/DISCUSSION_TEMPLATE/custom-colors.yml
vendored
Normal file
18
.github/DISCUSSION_TEMPLATE/custom-colors.yml
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
body:
|
||||||
|
- type: input
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
placeholder: |
|
||||||
|
"You can add some description and screenshots here if you want."
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
id: colors
|
||||||
|
attributes:
|
||||||
|
label: Colors
|
||||||
|
placeholder: |
|
||||||
|
"Please paste the colors (obtained via the _copy_ button) here, and surround the text with ``` to make sure it's displayed in a way that can be copied easily."
|
||||||
|
validations:
|
||||||
|
required: true
|
18
.github/DISCUSSION_TEMPLATE/custom-layout.yml
vendored
Normal file
18
.github/DISCUSSION_TEMPLATE/custom-layout.yml
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
body:
|
||||||
|
- type: input
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
placeholder: |
|
||||||
|
"You can add some description and screenshots here if you want."
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
id: layout
|
||||||
|
attributes:
|
||||||
|
label: Layout
|
||||||
|
placeholder: |
|
||||||
|
"Please paste the layout here, and surround it with ``` to make sure it's displayed in a way that can be copied easily."
|
||||||
|
validations:
|
||||||
|
required: true
|
5
.github/ISSUE_TEMPLATE/bug_report.md
vendored
5
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -12,19 +12,20 @@ tl;dr:
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
issue template below, please remove above text before submitting (and the template too if you think it's a good idea)
|
issue template below, please remove above text before submitting (and the template too if you think it's a good idea)
|
||||||
Please choose a meaningful title for your issue
|
Please choose a meaningful title for your issue, and consider that if you want help you should provide enough information that people can actually help
|
||||||
-->
|
-->
|
||||||
|
|
||||||
**Describe the bug**
|
**Describe the bug**
|
||||||
|
|
||||||
**To Reproduce**
|
**To Reproduce**
|
||||||
If possible, provide all the necessary steps to reproduce your problem, including the involved apps or settings if relevant.
|
If possible, provide all the necessary steps to reproduce your problem, including the involved apps or settings if relevant.
|
||||||
|
In case you cannot reproduce the bug, say so and provide information about when the bug may occur for you. Settings and the app you're writing in are usually important, please don't omit them.
|
||||||
|
|
||||||
**Expected behavior**
|
**Expected behavior**
|
||||||
If it's not obvious (e.g. not crash), describe how you think the app should behave.
|
If it's not obvious (e.g. not crash), describe how you think the app should behave.
|
||||||
|
|
||||||
**Screenshots**
|
**Screenshots**
|
||||||
ONLY add screenshots if applicable and helpful.
|
ONLY add screenshots when they add real value.
|
||||||
If you add screenshots, reduce the size or use thumbnails to keep the issue nicely readable.
|
If you add screenshots, reduce the size or use thumbnails to keep the issue nicely readable.
|
||||||
|
|
||||||
**App version**
|
**App version**
|
||||||
|
|
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
@ -8,7 +8,7 @@ Please see the appropriate readme section for issue reporting guidelines: https:
|
||||||
tl;dr:
|
tl;dr:
|
||||||
* search for duplicates, also in closed issues
|
* search for duplicates, also in closed issues
|
||||||
* a single issue per topic
|
* a single issue per topic
|
||||||
* reduce screenshot size
|
* ONLY add screenshots when necessary, and reduce their size
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
issue template below, please remove above text before submitting (and the template too if you think it's a good idea)
|
issue template below, please remove above text before submitting (and the template too if you think it's a good idea)
|
||||||
|
|
2
.github/ISSUE_TEMPLATE/other.md
vendored
2
.github/ISSUE_TEMPLATE/other.md
vendored
|
@ -7,6 +7,6 @@ Please see the appropriate readme section for issue reporting guidelines: https:
|
||||||
tl;dr:
|
tl;dr:
|
||||||
* search for duplicates, also in closed issues
|
* search for duplicates, also in closed issues
|
||||||
* a single issue per topic
|
* a single issue per topic
|
||||||
* reduce screenshot size
|
* ONLY add screenshots when necessary, and reduce their size
|
||||||
|
|
||||||
<!-- please remove above text before submitting, and choose a meaningful title for your issue -->
|
<!-- please remove above text before submitting, and choose a meaningful title for your issue -->
|
||||||
|
|
15
.github/PULL_REQUEST_TEMPLATE.md
vendored
15
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -1,16 +1,19 @@
|
||||||
See the contributing readme for more detailed guideline, please understand and accept them: https://github.com/Helium314/HeliBoard/blob/main/CONTRIBUTING.md
|
See the contributing readme for more detailed guidelines: https://github.com/Helium314/HeliBoard/blob/main/CONTRIBUTING.md#guidelines
|
||||||
tl;dr (you should still read the full list though):
|
tl;dr:
|
||||||
* make sure it's wanted
|
necessary;
|
||||||
* a single thing only
|
* a single thing only
|
||||||
* describe it properly
|
* describe it properly
|
||||||
|
recommended:
|
||||||
|
* make changes optional
|
||||||
* re-use existing mechanisms / code
|
* re-use existing mechanisms / code
|
||||||
* low performance impact
|
* low performance impact
|
||||||
* make it a draft if you still want to work on it
|
* make it a draft if you still want to work on it
|
||||||
* no translations or dictionaries
|
|
||||||
|
A good description and small scope ("single thing") massively help with reviewing. Don't be surprised when your PR gets closes if you clearly / repeatedly violate these parts of the guidelines.
|
||||||
|
|
||||||
Further
|
Further
|
||||||
* When the PR contains "fixes" <issue number>, the related issue will be linked and automatically closed if the PR is merged (also works for other words like "fix", "resolve", "resolves", "closes", ...)
|
* When the PR contains "fixes" <issue number>, the related issue will be linked and automatically closed if the PR is merged (also works for other words like "fix", "resolve", "resolves", "closes", ...)
|
||||||
* If you add a keyboard layout, make sure you have read https://github.com/Helium314/HeliBoard/blob/main/layouts.md#adding-new-layouts--languages
|
* If you add a keyboard layout, best read https://github.com/Helium314/HeliBoard/blob/main/layouts.md#adding-new-layouts--languages
|
||||||
* Please avoid force-pushing when doing changes. This way it's not possible which parts have changed since the previous state.
|
* Please avoid force-pushing when doing requested changes. This way it's not possible to see which parts have changed since the previous state.
|
||||||
|
|
||||||
<!-- (please remove the text above before submitting the PR) -->
|
<!-- (please remove the text above before submitting the PR) -->
|
|
@ -2,29 +2,69 @@
|
||||||
|
|
||||||
HeliBoard project is based on Gradle and Android Gradle Plugin. To get started, you can install [Android Studio](https://developer.android.com/studio), and import project 'from Version Control / Git / Github' by providing this git repository [URL](https://github.com/Helium314/HeliBoard) (or git SSH [URL](git@github.com:Helium314/heliboard.git)).
|
HeliBoard project is based on Gradle and Android Gradle Plugin. To get started, you can install [Android Studio](https://developer.android.com/studio), and import project 'from Version Control / Git / Github' by providing this git repository [URL](https://github.com/Helium314/HeliBoard) (or git SSH [URL](git@github.com:Helium314/heliboard.git)).
|
||||||
Of course you can also use any other compatible IDE, or work with text editor and command line.
|
Of course you can also use any other compatible IDE, or work with text editor and command line.
|
||||||
|
|
||||||
Once everything is up correctly, you're ready to go!
|
Once everything is up correctly, you're ready to go!
|
||||||
|
|
||||||
|
If you have difficulties implementing some functionality, you're welcome to ask for help. No one will write the code for you, but often other contributors can give you very useful hints.
|
||||||
|
|
||||||
|
# About the Code
|
||||||
|
|
||||||
|
HeliBoard is based on AOSP keyboard, and in many places still contains mostly the original code. There are some extensions, and some parts have been replaced completely.
|
||||||
|
When working on this app, you will likely notice its rather large size, and quite different code styles and often ancient comments and _TODO_s, where the latter are typically untouched since AOSP times.
|
||||||
|
Unfortunately a lot of the old code is hard to read or to fully understand with all of its intended (and unintended) consequences.
|
||||||
|
|
||||||
|
Some hints for finding what you're looking for:
|
||||||
|
* Layouts: stored in `layouts` folder in assets, interpreted by `KeyboardParser` and `TextKeyData`
|
||||||
|
* Popups: either on layouts, or in `locale_key_texts` (mostly letter variations for specific languages that are not dependent on layout)
|
||||||
|
* Touch and swipe input handling: `PointerTracker`
|
||||||
|
* Handling of key inputs: `InputLogic`
|
||||||
|
* Suggestions: `DictionaryFacilitatorImpl`, `Suggest`, `InputLogic`, and `SuggestionStripView` (in order from creation to display)
|
||||||
|
* Forwarding entered text / keys to the app / text field: `RichInputConnection`
|
||||||
|
* Receiving events and information from the app / text field: `LatinIME`
|
||||||
|
* Settings are in `SettingsValues`, with some functionality in `Settings` and the default values in `Default`
|
||||||
|
|
||||||
# Guidelines
|
# Guidelines
|
||||||
|
|
||||||
HeliBoard is a complex application, when contributing, you must take a step back and make sure your contribution:
|
## Recommended
|
||||||
- **Is actually wanted**. Best check related open issues before you start working on a PR. Issues with "PR" and "contributor needed" labels are accepted, but still it would be good if you announced that you are working on it, so we can discuss how changes are best implemented.
|
|
||||||
If there is no issue related to your intended contribution, it's a good idea to open a new one to avoid disappointment of the contribution not being accepted. For small changes or fixing obvious bugs this step is not necessary.
|
|
||||||
- **Is only about a single thing**. Mixing unrelated or semi-related contributions into a single PR is hard to review and can get messy.
|
|
||||||
- **Is finished or a draft**. When you keep changing the PR without reviewer's feedback, any attempt to review it is doomed and a waste of time. Better mark it as a draft in this case.
|
|
||||||
- **Has a proper description**. What your contribution does is usually less obvious to reviewers than for yourself. A good description helps _a lot_ for understanding what is going on, and for separating wanted from unintended changes in behavior. Therefore the changes should be as described, not more and not less.
|
|
||||||
- **Uses already in-place mechanism and take advantage of them**. In other terms, does not reinvent the wheel or uses shortcuts that could alter the consistency of the existing code. The contribution should only add as little complexity as necessary, the code is overly complicated already 😶.
|
|
||||||
- **Has a low footprint**. Some parts of the code are executed very frequently, and the keyboard should stay responsive even on older devices.
|
|
||||||
- **Does not bring any non-free code or proprietary binary blobs**. This also applies to code/binaries with unknown licenses. Make sure you do not introduce any closed-source library from Google.
|
|
||||||
If your contribution contains code that is not your own, provide a link to the source.
|
|
||||||
- **Complies with the user privacy principle HeliBoard follows**.
|
|
||||||
|
|
||||||
(and leave dependency upgrades to the maintainers, unless it's an actual security issue)
|
If you want to contribute, it's a good idea to make sure your idea is actually wanted in HeliBoard.
|
||||||
In addition to previous elements, HeliBoard must stick to [F-Droid inclusion guidelines](https://f-droid.org/docs/Inclusion_Policy/).
|
Best check related issues before you start working on a PR. If the issue has the [labels](https://github.com/Helium314/HeliBoard/labels) [_PR_](https://github.com/Helium314/HeliBoard/labels/PR) or [_contributor needed_](https://github.com/Helium314/HeliBoard/issues?q=label%3A%22contributor%20needed%22) (even closed ones), contributions are wanted. If you don't find a related issue, it's recommended to open one, but ultimately it's your choice.
|
||||||
|
Asking before starting a PR may help you for getting pointers to potentially relevant code, and deciding how to implement your desired changes.
|
||||||
|
|
||||||
# Adding Layouts
|
HeliBoard is a complex application and used by users with a large variety of opinions on how things should be.
|
||||||
|
When contributing to the app, please:
|
||||||
|
* Be careful when modifying core components, as it's easy to trigger unintended consequences
|
||||||
|
* When introducing a feature or change that might not be wanted by everyone, make it optional
|
||||||
|
* Keep code simple where possible. Complex code is harder to review and to maintain, so the complexity should also add a clear benefit
|
||||||
|
* Avoid noticeable performance impact. Some parts of the code are executed very frequently, and the keyboard should stay responsive even on older devices.
|
||||||
|
* Try making use of in-place mechanisms instead of re-inventing the wheel. Your contribution should only add as much complexity as necessary, the code is overly complicated already 😶.
|
||||||
|
* Keep your changes to few places, as opposed to sprinkling them over many parts of the code. This helps with keeping down complexity during review, and with maintainability of the app.
|
||||||
|
* Make a draft PR when you intend to still work on it. Submitting an unfinished PR can be a good idea when you're not sure how to best continue and would like some comments.
|
||||||
|
|
||||||
See [layouts.md](layouts.md#adding-new-layouts--languages) for how to add new layouts to the app.
|
Further things to consider (though irrelevant for most PRs):
|
||||||
|
* APK size:
|
||||||
|
* Large increases should be discussed first, and will only be added when it's considered worth the increase for a majority of users. It might be possible to avoid size increase by importing optional parts, like it's done for dictionaries.
|
||||||
|
* Small increases like when adding code or layouts are never an issue
|
||||||
|
* Do not add proprietary code or binary blobs. If it turns out to be necessary for a feature you want to add, it might be acceptable when the user opts in and imports those parts, like it's done for glide typing.
|
||||||
|
* Privacy: Only relevant when adding some form of communication with other apps. Internet permission will not be added.
|
||||||
|
* If your contribution contains code that is not your own, provide a link to the source
|
||||||
|
* This is especially relevant to be sure the code's license is compatible to HeliBoard's GPL3
|
||||||
|
|
||||||
|
## Necessary
|
||||||
|
|
||||||
|
Some parts of the guidelines are necessary to fulfill for facilitating code review. It doesn't need to be perfect from the start, but consider it for your future PRs when you're reminded of these guidelines. Note that the larger / more complex your PR is, the more relevant these guidelines are.
|
||||||
|
Your PR should:
|
||||||
|
- **Be only about a single thing**. Mixing unrelated or semi-related contributions into a single PR is hard to review and can get messy. As a general rule: if one part doesn't need the other one(s), it should be separate PRs. If one feature builds on top of another one, but the base is usable on its own, do a PR for the base and then a follow-up once it's merged.
|
||||||
|
- **Have a proper description**. A good description helps _a lot_ for understanding what you intend to achieve with the changes, and for understanding the code. This is relevant for separating wanted from unintended changes in behavior during review.
|
||||||
|
- **No translations**. Translations should be done using [Weblate](https://translate.codeberg.org/projects/heliboard/). Exception is when you add new resource strings, those can be added right away.
|
||||||
|
|
||||||
|
Please leave dependency upgrades to the maintainers, unless you state a good reason why they should be done now.
|
||||||
|
|
||||||
|
# Adding / Adjusting Layouts
|
||||||
|
|
||||||
|
See [layouts.md](layouts.md#adding-new-layouts--languages) for how to add new layouts to the app. Please stay in line with other layouts regarding the popup keys.
|
||||||
|
|
||||||
|
When editing existing layouts, please consider that people should should still get what they're used to. In case of doubt it might be better to add a new layout instead of overhauling existing layouts.
|
||||||
|
`locale_key_texts` files should only contain letters that are actually part of the language, with exception of the optional `more_popups_<...>.txt` files.
|
||||||
|
|
||||||
# Update Emojis
|
# Update Emojis
|
||||||
|
|
||||||
|
|
85
README.md
85
README.md
|
@ -9,14 +9,11 @@ Does not use internet permission, and thus is 100% offline.
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
- [Features](#features)
|
- [Features](#features)
|
||||||
* [FAQ / Common Issues](#faq--common-issues)
|
|
||||||
* [Hidden Functionality](#hidden-functionality)
|
|
||||||
- [Contributing](#contributing-)
|
- [Contributing](#contributing-)
|
||||||
* [Reporting Issues](#reporting-issues)
|
* [Reporting Issues](#reporting-issues)
|
||||||
* [Translations](#translations)
|
* [Translations](#translations)
|
||||||
* [To Community Creation](#to-community)
|
* [To Community Creation](#to-community)
|
||||||
* [Code Contribution](CONTRIBUTING.md)
|
* [Code Contribution](CONTRIBUTING.md)
|
||||||
- [To-do](#to-do)
|
|
||||||
- [License](#license)
|
- [License](#license)
|
||||||
- [Credits](#credits)
|
- [Credits](#credits)
|
||||||
|
|
||||||
|
@ -43,56 +40,12 @@ Does not use internet permission, and thus is 100% offline.
|
||||||
</ul>
|
</ul>
|
||||||
<li>Clipboard history</li>
|
<li>Clipboard history</li>
|
||||||
<li>One-handed mode</li>
|
<li>One-handed mode</li>
|
||||||
<li>Split keyboard (only available if the screen is large enough)</li>
|
<li>Split keyboard</li>
|
||||||
<li>Number pad</li>
|
<li>Number pad</li>
|
||||||
<li>Backup and restore your settings and learned word / history data</li>
|
<li>Backup and restore your settings and learned word / history data</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
## FAQ / Common Issues
|
For [FAQ](https://github.com/Helium314/HeliBoard/wiki/FAQ) and more information about the app and features, please visit the [wiki](https://github.com/Helium314/HeliBoard/wiki)
|
||||||
* __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. 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__ (type in multiple languages without switching manually): 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).
|
|
||||||
* __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.
|
|
||||||
|
|
||||||
## Hidden Functionality
|
|
||||||
Features that may go unnoticed, and further potentially useful information
|
|
||||||
* Long-pressing toolbar keys results in additional functionality: clipboard -> paste, move left/right -> word left/right, move up/down -> page up/down, word left/right -> line start/end, page up/down -> page start/end, copy -> cut, select word <-> select all, undo <-> redo
|
|
||||||
* Long-press the Comma-key to access Clipboard View, Emoji View, One-handed Mode, Settings, or Switch Language:
|
|
||||||
* 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 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.
|
|
||||||
* Not really a feature, but you can restart the keyboard by going to the settings and swiping it away from recents
|
|
||||||
* _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.
|
|
||||||
* 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.
|
|
||||||
* 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/<package_id>/`, though the location may depend on the device and Android version.
|
|
||||||
|
|
||||||
# Contributing ❤
|
# Contributing ❤
|
||||||
|
|
||||||
|
@ -105,7 +58,7 @@ Before opening a new issue, be sure to check the following:
|
||||||
- **Is the issue still relevant?** Make sure your issue is not already fixed in the latest version of HeliBoard.
|
- **Is the issue still relevant?** Make sure your issue is not already fixed in the latest version of HeliBoard.
|
||||||
- **Is it a single topic?** If you want to suggest multiple things, open multiple issues.
|
- **Is it a single topic?** If you want to suggest multiple things, open multiple issues.
|
||||||
- **Did you use the issue template?** It is important to make life of our kind contributors easier by avoiding issues that miss key information to their resolution.
|
- **Did you use the issue template?** It is important to make life of our kind contributors easier by avoiding issues that miss key information to their resolution.
|
||||||
Note that issues that that ignore part of the issue template will likely get treated with very low priority, as often they are needlessly hard to read or understand (e.g. huge screenshots, not providing a proper description, or addressing multiple topics).
|
Note that issues that that ignore part of the issue template will likely get treated with very low priority, as often they are needlessly hard to read or understand (e.g. huge screenshots, not providing a proper description, or addressing multiple topics). Blatant violation of the guidelines may result in the issue getting closed.
|
||||||
|
|
||||||
If you're interested, you can read the following useful text about effective bug reporting (a bit longer read): https://www.chiark.greenend.org.uk/~sgtatham/bugs.html
|
If you're interested, you can read the following useful text about effective bug reporting (a bit longer read): https://www.chiark.greenend.org.uk/~sgtatham/bugs.html
|
||||||
|
|
||||||
|
@ -113,12 +66,18 @@ If you're interested, you can read the following useful text about effective bug
|
||||||
Translations can be added using [Weblate](https://translate.codeberg.org/projects/heliboard/). You will need an account to update translations and add languages. Add the language you want to translate to in Languages -> Manage translated languages in the top menu bar.
|
Translations can be added using [Weblate](https://translate.codeberg.org/projects/heliboard/). You will need an account to update translations and add languages. Add the language you want to translate to in Languages -> Manage translated languages in the top menu bar.
|
||||||
Updating translations in a PR will not be accepted, as it may cause conflicts with Weblate translations.
|
Updating translations in a PR will not be accepted, as it may cause conflicts with Weblate translations.
|
||||||
|
|
||||||
|
Some notes on translations
|
||||||
|
* when translating metadata, translating the changelogs is rather useless. It's available as it was requested by translators.
|
||||||
|
* the `hidden_features_message` is horrible to translate with Weblate, and serves little benefit as it's just a copy of what's already in the wiki: https://github.com/Helium314/HeliBoard/wiki/Hidden-functionality. It's been made available in the app on user request/contribution.
|
||||||
|
|
||||||
## To Community
|
## To Community
|
||||||
You can share your themes, layouts and dictionaries with other people:
|
You can share your themes, layouts and dictionaries with other people:
|
||||||
* Themes can be saved and loaded using the menu on top-right in the _adjust colors_ screen
|
* Themes can be saved and loaded using the menu on top-right in the _adjust colors_ screen
|
||||||
|
* You can share custom colors in a separate [discussion section](https://github.com/Helium314/HeliBoard/discussions/categories/custom-colors)
|
||||||
* Custom keyboard layouts are text files whose content you can edit, copy and share
|
* Custom keyboard layouts are text files whose content you can edit, copy and share
|
||||||
* this applies to main keyboard layouts and to special layouts adjustable in advanced settings
|
* this applies to main keyboard layouts and to special layouts adjustable in advanced settings
|
||||||
* see [layouts.md](layouts.md) for details
|
* see [layouts.md](layouts.md) for details
|
||||||
|
* You can share custom layouts in a separate [discussion section](https://github.com/Helium314/HeliBoard/discussions/categories/custom-layout)
|
||||||
* Creating dictionaries is a little more work
|
* Creating dictionaries is a little more work
|
||||||
* first you will need a wordlist, as described [here](https://codeberg.org/Helium314/aosp-dictionaries/src/branch/main/wordlists/sample.combined) and in the repository readme
|
* first you will need a wordlist, as described [here](https://codeberg.org/Helium314/aosp-dictionaries/src/branch/main/wordlists/sample.combined) and in the repository readme
|
||||||
* the you need to compile the dictionary using [external tools](https://github.com/remi0s/aosp-dictionary-tools)
|
* the you need to compile the dictionary using [external tools](https://github.com/remi0s/aosp-dictionary-tools)
|
||||||
|
@ -128,39 +87,15 @@ You can share your themes, layouts and dictionaries with other people:
|
||||||
## Code Contribution
|
## Code Contribution
|
||||||
See [Contribution Guidelines](CONTRIBUTING.md)
|
See [Contribution Guidelines](CONTRIBUTING.md)
|
||||||
|
|
||||||
# To-do
|
|
||||||
__Planned features and improvements:__
|
|
||||||
* Improve support for modifier keys (_alt_, _ctrl_, _meta_ and _fn_), some ideas:
|
|
||||||
* keep modifier keys on with long press
|
|
||||||
* keep modifier keys on until the next key press
|
|
||||||
* use sliding input
|
|
||||||
* Less complicated addition of new keyboard languages (e.g. #519)
|
|
||||||
* Additional and customizable key swipe functionality
|
|
||||||
* Some functionality will not be possible when using glide typing
|
|
||||||
* Ability to enter all emojis independent of Android version (optional, #297)
|
|
||||||
* Add and enable emoji dictionaries by default (if available for language)
|
|
||||||
* Clearer / more intuitive arrangement of settings
|
|
||||||
* Maybe hide some less used settings by default (similar to color customization)
|
|
||||||
* Make use of the `.com` key in URL fields (currently only available for tablets)
|
|
||||||
* With language-dependent TLDs
|
|
||||||
* Internal cleanup (a lot of over-complicated and convoluted code)
|
|
||||||
* [Bug fixes](https://github.com/Helium314/HeliBoard/issues?q=is%3Aissue+is%3Aopen+label%3Abug)
|
|
||||||
|
|
||||||
__What will _not_ be added:__
|
|
||||||
* Material 3 (not worth adding 1.5 MB to app size)
|
|
||||||
* Dictionaries for more languages (you can still download them)
|
|
||||||
* Anything that requires additional permissions, unless there is a very good reason
|
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
|
||||||
HeliBoard (as a fork of OpenBoard) is licensed under GNU General Public License v3.0.
|
HeliBoard (as a fork of OpenBoard) is licensed under GNU General Public License v3.0.
|
||||||
|
|
||||||
> Permissions of this strong copyleft license are conditioned on making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license. Copyright and license notices must be preserved. Contributors provide an express grant of patent rights.
|
> Permissions of this strong copyleft license are conditioned on making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license. Copyright and license notices must be preserved. Contributors provide an express grant of patent rights.
|
||||||
|
|
||||||
See repo's [LICENSE](/LICENSE-GPL-3) file.
|
See repo's [LICENSE](/LICENSE) 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.
|
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.
|
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
|
# Credits
|
||||||
|
|
118
app/build.gradle
118
app/build.gradle
|
@ -1,118 +0,0 @@
|
||||||
apply plugin: 'com.android.application'
|
|
||||||
apply plugin: 'kotlin-android'
|
|
||||||
apply plugin: 'kotlinx-serialization'
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdk 34
|
|
||||||
buildToolsVersion = '34.0.0'
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
applicationId "helium314.keyboard"
|
|
||||||
minSdkVersion 21
|
|
||||||
targetSdkVersion 34
|
|
||||||
versionCode 2200
|
|
||||||
versionName '2.2-beta1'
|
|
||||||
ndk {
|
|
||||||
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
|
||||||
}
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled true
|
|
||||||
shrinkResources false
|
|
||||||
debuggable false
|
|
||||||
jniDebuggable false
|
|
||||||
renderscriptDebuggable false
|
|
||||||
}
|
|
||||||
nouserlib { // same as release, but does not allow the user to provide a library
|
|
||||||
minifyEnabled true
|
|
||||||
shrinkResources false
|
|
||||||
debuggable false
|
|
||||||
jniDebuggable false
|
|
||||||
renderscriptDebuggable false
|
|
||||||
}
|
|
||||||
debug {
|
|
||||||
minifyEnabled true
|
|
||||||
jniDebuggable false
|
|
||||||
applicationIdSuffix ".debug"
|
|
||||||
}
|
|
||||||
runTests { // build variant for running tests on CI that skips tests known to fail
|
|
||||||
minifyEnabled true
|
|
||||||
jniDebuggable false
|
|
||||||
}
|
|
||||||
archivesBaseName = "HeliBoard_" + defaultConfig.versionName
|
|
||||||
}
|
|
||||||
|
|
||||||
buildFeatures {
|
|
||||||
viewBinding true
|
|
||||||
buildConfig true
|
|
||||||
}
|
|
||||||
|
|
||||||
externalNativeBuild {
|
|
||||||
ndkBuild {
|
|
||||||
path 'src/main/jni/Android.mk'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ndkVersion '26.2.11394342'
|
|
||||||
|
|
||||||
packagingOptions {
|
|
||||||
jniLibs {
|
|
||||||
// shrinks APK by 3 MB, zipped size unchanged
|
|
||||||
useLegacyPackaging true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
testOptions {
|
|
||||||
unitTests {
|
|
||||||
includeAndroidResources = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility JavaVersion.VERSION_17
|
|
||||||
targetCompatibility JavaVersion.VERSION_17
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
// see https://github.com/Helium314/HeliBoard/issues/477
|
|
||||||
dependenciesInfo {
|
|
||||||
includeInApk = false
|
|
||||||
includeInBundle = false
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace "helium314.keyboard.latin"
|
|
||||||
lint {
|
|
||||||
abortOnError true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
// androidx
|
|
||||||
implementation 'androidx.core:core-ktx:1.13.1'
|
|
||||||
implementation 'androidx.appcompat:appcompat:1.7.0'
|
|
||||||
implementation 'androidx.preference:preference:1.2.1'
|
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.3.2'
|
|
||||||
implementation 'androidx.autofill:autofill:1.1.0'
|
|
||||||
|
|
||||||
// kotlin
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3"
|
|
||||||
|
|
||||||
// color picker for user-defined colors
|
|
||||||
implementation 'com.github.martin-stone:hsv-alpha-color-picker-android:3.1.0'
|
|
||||||
|
|
||||||
// test
|
|
||||||
testImplementation 'junit:junit:4.13.2'
|
|
||||||
testImplementation 'org.mockito:mockito-core:5.11.0'
|
|
||||||
testImplementation 'org.mockito:mockito-inline:5.2.0'
|
|
||||||
testImplementation 'org.robolectric:robolectric:4.12.1'
|
|
||||||
testImplementation 'androidx.test:runner:1.5.2'
|
|
||||||
testImplementation 'androidx.test:core:1.5.0'
|
|
||||||
}
|
|
132
app/build.gradle.kts
Executable file
132
app/build.gradle.kts
Executable file
|
@ -0,0 +1,132 @@
|
||||||
|
plugins {
|
||||||
|
id("com.android.application")
|
||||||
|
kotlin("android")
|
||||||
|
kotlin("plugin.serialization") version "2.0.21"
|
||||||
|
kotlin("plugin.compose") version "2.0.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdk = 35
|
||||||
|
buildToolsVersion = "34.0.0"
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
applicationId = "helium314.keyboard"
|
||||||
|
minSdk = 21
|
||||||
|
targetSdk = 35
|
||||||
|
versionCode = 3004
|
||||||
|
versionName = "3.0-beta1"
|
||||||
|
ndk {
|
||||||
|
abiFilters.clear()
|
||||||
|
abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64"))
|
||||||
|
}
|
||||||
|
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
isShrinkResources = false
|
||||||
|
isDebuggable = false
|
||||||
|
isJniDebuggable = false
|
||||||
|
}
|
||||||
|
create("nouserlib") { // same as release, but does not allow the user to provide a library
|
||||||
|
isMinifyEnabled = true
|
||||||
|
isShrinkResources = false
|
||||||
|
isDebuggable = false
|
||||||
|
isJniDebuggable = false
|
||||||
|
}
|
||||||
|
debug {
|
||||||
|
// "normal" debug has minify for smaller APK to fit the GitHub 25 MB limit when zipped
|
||||||
|
// and for better performance in case users want to install a debug APK
|
||||||
|
isMinifyEnabled = true
|
||||||
|
isJniDebuggable = false
|
||||||
|
applicationIdSuffix = ".debug"
|
||||||
|
}
|
||||||
|
create("runTests") { // build variant for running tests on CI that skips tests known to fail
|
||||||
|
isMinifyEnabled = true
|
||||||
|
isJniDebuggable = false
|
||||||
|
}
|
||||||
|
create("debugNoMinify") { // for faster builds in IDE
|
||||||
|
isDebuggable = true
|
||||||
|
isMinifyEnabled = false
|
||||||
|
isJniDebuggable = false
|
||||||
|
signingConfig = signingConfigs.getByName("debug")
|
||||||
|
applicationIdSuffix = ".debug"
|
||||||
|
}
|
||||||
|
base.archivesBaseName = "HeliBoard_" + defaultConfig.versionName
|
||||||
|
}
|
||||||
|
|
||||||
|
buildFeatures {
|
||||||
|
viewBinding = true
|
||||||
|
buildConfig = true
|
||||||
|
compose = true
|
||||||
|
}
|
||||||
|
|
||||||
|
externalNativeBuild {
|
||||||
|
ndkBuild {
|
||||||
|
path = File("src/main/jni/Android.mk")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ndkVersion = "28.0.13004108"
|
||||||
|
|
||||||
|
packagingOptions {
|
||||||
|
jniLibs {
|
||||||
|
// shrinks APK by 3 MB, zipped size unchanged
|
||||||
|
useLegacyPackaging = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testOptions {
|
||||||
|
unitTests {
|
||||||
|
isIncludeAndroidResources = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
// see https://github.com/Helium314/HeliBoard/issues/477
|
||||||
|
dependenciesInfo {
|
||||||
|
includeInApk = false
|
||||||
|
includeInBundle = false
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace = "helium314.keyboard.latin"
|
||||||
|
lint {
|
||||||
|
abortOnError = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// androidx
|
||||||
|
implementation("androidx.core:core-ktx:1.15.0")
|
||||||
|
implementation("androidx.recyclerview:recyclerview:1.4.0")
|
||||||
|
implementation("androidx.autofill:autofill:1.1.0")
|
||||||
|
|
||||||
|
// kotlin
|
||||||
|
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0")
|
||||||
|
|
||||||
|
// compose
|
||||||
|
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
|
||||||
|
implementation(platform("androidx.compose:compose-bom:2025.02.00"))
|
||||||
|
implementation("androidx.compose.material3:material3")
|
||||||
|
implementation("androidx.compose.ui:ui-tooling-preview")
|
||||||
|
debugImplementation("androidx.compose.ui:ui-tooling")
|
||||||
|
implementation("androidx.navigation:navigation-compose:2.8.8")
|
||||||
|
implementation("sh.calvin.reorderable:reorderable:2.4.3") // for easier re-ordering
|
||||||
|
implementation("com.github.skydoves:colorpicker-compose:1.1.2") // for user-defined colors
|
||||||
|
|
||||||
|
// test
|
||||||
|
testImplementation(kotlin("test"))
|
||||||
|
testImplementation("junit:junit:4.13.2")
|
||||||
|
testImplementation("org.mockito:mockito-core:5.15.2")
|
||||||
|
testImplementation("org.robolectric:robolectric:4.14.1")
|
||||||
|
testImplementation("androidx.test:runner:1.6.2")
|
||||||
|
testImplementation("androidx.test:core:1.6.1")
|
||||||
|
}
|
9
app/src/debugNoMinify/res/values/strings.xml
Normal file
9
app/src/debugNoMinify/res/values/strings.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
-->
|
||||||
|
<resources>
|
||||||
|
<string name="english_ime_name" translatable="false">HeliBoard debug</string>
|
||||||
|
<string name="spell_checker_service_name" translatable="false">HeliBoard debug Spell Checker</string>
|
||||||
|
<string name="ime_settings" translatable="false">HeliBoard debug Settings</string>
|
||||||
|
</resources>
|
|
@ -5,7 +5,8 @@ modified
|
||||||
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
|
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
|
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
|
@ -20,7 +21,9 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:defaultToDeviceProtectedStorage="true"
|
android:defaultToDeviceProtectedStorage="true"
|
||||||
android:directBootAware="true">
|
android:directBootAware="true"
|
||||||
|
tools:remove="android:appComponentFactory"
|
||||||
|
tools:targetApi="p">
|
||||||
|
|
||||||
<!-- Services -->
|
<!-- Services -->
|
||||||
<service android:name="LatinIME"
|
<service android:name="LatinIME"
|
||||||
|
@ -46,42 +49,15 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<!-- Activities -->
|
<!-- Activities -->
|
||||||
<activity android:name=".setup.SetupActivity"
|
<activity android:name="helium314.keyboard.settings.SettingsActivity"
|
||||||
android:theme="@style/platformActivityTheme"
|
android:theme="@style/platformActivityTheme"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:launchMode="singleTask"
|
android:windowSoftInputMode="adjustResize"
|
||||||
android:noHistory="true"
|
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name=".permissions.PermissionsActivity"
|
|
||||||
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
|
||||||
android:exported="false"
|
|
||||||
android:taskAffinity="" >
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity android:name=".setup.SetupWizardActivity"
|
|
||||||
android:theme="@style/platformActivityTheme"
|
|
||||||
android:clearTaskOnLaunch="true"
|
|
||||||
android:exported="true">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity android:name=".settings.SettingsActivity"
|
|
||||||
android:theme="@style/platformActivityTheme"
|
|
||||||
android:label="@string/ime_settings"
|
|
||||||
android:excludeFromRecents="true"
|
|
||||||
android:exported="true">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
</intent-filter>
|
|
||||||
<!-- intent filter for opening .dict files -->
|
<!-- intent filter for opening .dict files -->
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
@ -92,8 +68,8 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name=".spellcheck.SpellCheckerSettingsActivity"
|
<activity android:name=".spellcheck.SpellCheckerSettingsActivity"
|
||||||
android:theme="@style/platformActivityTheme"
|
android:theme="@style/platformActivityTheme"
|
||||||
android:label="@string/android_spell_checker_settings"
|
android:label="@string/spell_checker_service_name"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
|
@ -32,6 +32,8 @@ main,hu,
|
||||||
main,it,
|
main,it,
|
||||||
main,kn,
|
main,kn,
|
||||||
main,ks,
|
main,ks,
|
||||||
|
main,km,
|
||||||
|
main,la,
|
||||||
main,lv,
|
main,lv,
|
||||||
main,lt,
|
main,lt,
|
||||||
main,lb,
|
main,lb,
|
||||||
|
@ -54,6 +56,8 @@ main,sr,
|
||||||
main,sd,
|
main,sd,
|
||||||
main,sl,
|
main,sl,
|
||||||
main,es,
|
main,es,
|
||||||
|
main,zgh_ZZ,
|
||||||
|
main,zgh,
|
||||||
main,sv,
|
main,sv,
|
||||||
main,ta,
|
main,ta,
|
||||||
main,te,
|
main,te,
|
||||||
|
@ -68,23 +72,44 @@ main,ar,exp
|
||||||
main,bn_BD,exp
|
main,bn_BD,exp
|
||||||
main,bn,exp
|
main,bn,exp
|
||||||
main,bg,exp
|
main,bg,exp
|
||||||
|
main,ca,exp
|
||||||
|
main,hr,exp
|
||||||
main,cs,exp
|
main,cs,exp
|
||||||
|
main,da,exp
|
||||||
|
main,nl,exp
|
||||||
|
main,en_CA,exp
|
||||||
main,en_GB,exp
|
main,en_GB,exp
|
||||||
main,en_US,exp
|
main,en_US,exp
|
||||||
symbols,en,exp
|
symbols,en,exp
|
||||||
|
main,eo,exp
|
||||||
|
main,et,exp
|
||||||
|
main,fi,exp
|
||||||
symbols,fr,exp
|
symbols,fr,exp
|
||||||
main,fr,exp
|
main,fr,exp
|
||||||
|
main,gl,exp
|
||||||
main,de_AT,exp
|
main,de_AT,exp
|
||||||
main,de,exp
|
main,de,exp
|
||||||
main,he,exp
|
main,he,exp
|
||||||
|
main,hu,exp
|
||||||
|
main,is,exp
|
||||||
main,id,exp
|
main,id,exp
|
||||||
main,it,exp
|
main,it,exp
|
||||||
main,kab,exp
|
main,kab,exp
|
||||||
main,kk,exp
|
main,kk,exp
|
||||||
|
main,lv,exp
|
||||||
|
main,lt,exp
|
||||||
addon,ml_ZZ,exp
|
addon,ml_ZZ,exp
|
||||||
|
main,ne,exp
|
||||||
|
main,nb,exp
|
||||||
main,pms,exp
|
main,pms,exp
|
||||||
|
main,pl,exp
|
||||||
|
main,pt_PT,exp
|
||||||
|
main,ro,exp
|
||||||
main,ru,exp
|
main,ru,exp
|
||||||
main,sk,exp
|
main,sk,exp
|
||||||
|
main,sl,exp
|
||||||
main,es,exp
|
main,es,exp
|
||||||
|
main,sv,exp
|
||||||
|
main,tr,exp
|
||||||
main,uk,exp
|
main,uk,exp
|
||||||
main,vi,exp
|
main,vi,exp
|
||||||
|
|
|
|
@ -1,34 +0,0 @@
|
||||||
ঔ
|
|
||||||
ঐ
|
|
||||||
আ
|
|
||||||
ঈ
|
|
||||||
ঊ
|
|
||||||
ব
|
|
||||||
হ
|
|
||||||
গ
|
|
||||||
দ
|
|
||||||
জ
|
|
||||||
ড
|
|
||||||
|
|
||||||
ও
|
|
||||||
এ
|
|
||||||
অ
|
|
||||||
ই
|
|
||||||
উ
|
|
||||||
প
|
|
||||||
র
|
|
||||||
ক
|
|
||||||
ত
|
|
||||||
চ
|
|
||||||
ট
|
|
||||||
|
|
||||||
ঁ
|
|
||||||
ঢ
|
|
||||||
ম
|
|
||||||
ন
|
|
||||||
ঞ
|
|
||||||
ল
|
|
||||||
ষ
|
|
||||||
স
|
|
||||||
য়
|
|
||||||
।
|
|
|
@ -1,136 +0,0 @@
|
||||||
[
|
|
||||||
[
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ধ" },
|
|
||||||
"default": { "label": "দ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঊ" },
|
|
||||||
"default": { "label": "ূ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঈ" },
|
|
||||||
"default": { "label": "ী" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ড়" },
|
|
||||||
"default": { "label": "র" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঠ", "popup": { "main": { "label": "৳" } } },
|
|
||||||
"default": { "label": "ট" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঐ", "popup": { "main": { "label": "ঞ" } } },
|
|
||||||
"default": { "label": "এ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "উ", "popup": { "main": { "label": "ৎ" } } },
|
|
||||||
"default": { "label": "ু" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ই" },
|
|
||||||
"default": { "label": "ি" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঔ" },
|
|
||||||
"default": { "label": "ও" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ফ" },
|
|
||||||
"default": { "label": "প" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ৈ" },
|
|
||||||
"default": { "label": "ে" }
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "অ" },
|
|
||||||
"default": { "label": "া" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ষ" },
|
|
||||||
"default": { "label": "স" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঢ" },
|
|
||||||
"default": { "label": "ড" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "থ" },
|
|
||||||
"default": { "label": "ত" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঘ" },
|
|
||||||
"default": { "label": "গ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঃ" },
|
|
||||||
"default": { "label": "হ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঝ" },
|
|
||||||
"default": { "label": "জ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "খ" },
|
|
||||||
"default": { "label": "ক" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ং" },
|
|
||||||
"default": { "label": "ল" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ৌ" },
|
|
||||||
"default": { "label": "ো" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "৳" },
|
|
||||||
"default": { "label": "॥" }
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "য" },
|
|
||||||
"default": { "label": "য়" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঢ়" },
|
|
||||||
"default": { "label": "শ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ছ" },
|
|
||||||
"default": { "label": "চ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঋ" },
|
|
||||||
"default": { "label": "আ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ভ" },
|
|
||||||
"default": { "label": "ব" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ণ" },
|
|
||||||
"default": { "label": "ন" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঙ" },
|
|
||||||
"default": { "label": "ম" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ৃ" },
|
|
||||||
"default": { "label": "।" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঁ" },
|
|
||||||
"default": { "label": "্" }
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ "label": "," },
|
|
||||||
{ "label": "." }
|
|
||||||
]
|
|
||||||
]
|
|
|
@ -1,112 +0,0 @@
|
||||||
[
|
|
||||||
[
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ং" },
|
|
||||||
"default": { "label": "ঙ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "য়" },
|
|
||||||
"default": { "label": "য" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঢ" },
|
|
||||||
"default": { "label": "ড" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ফ" },
|
|
||||||
"default": { "label": "প" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঠ" },
|
|
||||||
"default": { "label": "ট" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ছ" },
|
|
||||||
"default": { "label": "চ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঝ" },
|
|
||||||
"default": { "label": "জ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঞ" },
|
|
||||||
"default": { "label": "হ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঘ" },
|
|
||||||
"default": { "label": "গ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঢ়" },
|
|
||||||
"default": { "label": "ড়" }
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঃ" },
|
|
||||||
"default": { "label": "ৃ" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ূ" },
|
|
||||||
"default": { "label": "ু" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ী" },
|
|
||||||
"default": { "label": "ি" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "অ" },
|
|
||||||
"default": { "label": "া" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ঁ" },
|
|
||||||
"default": { "label": "্" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ভ" },
|
|
||||||
"default": { "label": "ব" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "খ" },
|
|
||||||
"default": { "label": "ক" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "থ" },
|
|
||||||
"default": { "label": "ত" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ধ" },
|
|
||||||
"default": { "label": "দ" }
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "্য" },
|
|
||||||
"default": { "label": "্র" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ৌ" },
|
|
||||||
"default": { "label": "ো" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ৈ" },
|
|
||||||
"default": { "label": "ে" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ল" },
|
|
||||||
"default": { "label": "র" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ণ" },
|
|
||||||
"default": { "label": "ন" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "ষ" },
|
|
||||||
"default": { "label": "স" }
|
|
||||||
},
|
|
||||||
{ "$": "shift_state_selector",
|
|
||||||
"manualOrLocked": { "label": "শ" },
|
|
||||||
"default": { "label": "ম" }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{ "label": "alpha", "width": 0.15 },
|
||||||
|
{ "label": "space", "width": -1 },
|
||||||
|
{ "label": "delete", "width": 0.15 }
|
||||||
|
]
|
||||||
|
]
|
|
@ -0,0 +1,7 @@
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{ "label": "alpha", "width": 0.15 },
|
||||||
|
{ "label": "space", "width": -1 },
|
||||||
|
{ "label": "delete", "width": 0.15 }
|
||||||
|
]
|
||||||
|
]
|
|
@ -15,7 +15,7 @@
|
||||||
{ "$": "keyboard_state_selector", "emojiKeyEnabled": { "$": "keyboard_state_selector", "alphabet": { "label": "emoji" }}},
|
{ "$": "keyboard_state_selector", "emojiKeyEnabled": { "$": "keyboard_state_selector", "alphabet": { "label": "emoji" }}},
|
||||||
{ "$": "keyboard_state_selector", "symbols": { "label": "numpad" }},
|
{ "$": "keyboard_state_selector", "symbols": { "label": "numpad" }},
|
||||||
{ "label": "space" },
|
{ "label": "space" },
|
||||||
{ "label": "period", "labelFlags": 1073741824 },
|
{ "label": "period" },
|
||||||
{ "label": "action", "width": 0.15 }
|
{ "label": "action", "width": 0.15 }
|
||||||
]
|
]
|
||||||
]
|
]
|
28
app/src/main/assets/layouts/main/akan.txt
Normal file
28
app/src/main/assets/layouts/main/akan.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
ɛ q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
ɔ x
|
||||||
|
c ¢
|
||||||
|
v
|
||||||
|
b
|
||||||
|
n
|
||||||
|
m
|
34
app/src/main/assets/layouts/main/arabic_hijai.txt
Normal file
34
app/src/main/assets/layouts/main/arabic_hijai.txt
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
ز
|
||||||
|
ر
|
||||||
|
ذ
|
||||||
|
د
|
||||||
|
خ
|
||||||
|
ح
|
||||||
|
ج
|
||||||
|
ث
|
||||||
|
ت
|
||||||
|
ب
|
||||||
|
ا
|
||||||
|
|
||||||
|
ك
|
||||||
|
ق
|
||||||
|
ف
|
||||||
|
غ
|
||||||
|
ع
|
||||||
|
ظ
|
||||||
|
ط
|
||||||
|
ض
|
||||||
|
ص
|
||||||
|
ش
|
||||||
|
س
|
||||||
|
|
||||||
|
ء
|
||||||
|
ى
|
||||||
|
ي
|
||||||
|
ؤ
|
||||||
|
و
|
||||||
|
ة
|
||||||
|
ﻩ
|
||||||
|
ن
|
||||||
|
م
|
||||||
|
ل
|
29
app/src/main/assets/layouts/main/bemba.txt
Normal file
29
app/src/main/assets/layouts/main/bemba.txt
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
ŋ
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
x
|
||||||
|
c
|
||||||
|
v
|
||||||
|
b
|
||||||
|
n
|
||||||
|
m
|
127
app/src/main/assets/layouts/main/bengali_baishakhi.json
Normal file
127
app/src/main/assets/layouts/main/bengali_baishakhi.json
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঢ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ড", "popup": { "relevant": [{ "label": "ঢ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ূ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ী", "popup": { "relevant": [{ "label": "ূ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "এ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ে", "popup": { "relevant": [{ "label": "ঐ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ৃ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "র", "popup": { "main": { "label": "ঋ" }, "relevant": [{ "label": "র্য" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঠ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ট", "popup": { "relevant": [{ "label": "ঠ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "য়", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "য", "popup": { "relevant": [{ "label": "য়" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "উ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ু", "popup": { "relevant": [{ "label": "ঊ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ই", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ি", "popup": { "relevant": [{ "label": "ঈ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ও", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ো", "popup": { "relevant": [{ "label": "ঔ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ফ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "প", "popup": { "relevant": [{ "label": "ফ" }]}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "অ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "া", "popup": { "relevant": [{ "label": "আ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "শ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "স", "popup": { "relevant": [{ "label": "ষ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ধ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "দ", "popup": { "relevant": [{ "label": "ধ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "থ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ত", "popup": { "main": { "label": "থ" }, "relevant": [{ "label": "ৎ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঘ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "গ", "popup": { "relevant": [{ "label": "ঘ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "হ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "্", "popup": { "relevant": [{ "label": "ঃ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঝ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "জ", "popup": { "relevant": [{ "label": "ঝ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "খ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ক", "popup": { "relevant": [{ "label": "খ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ং", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ল", "popup": { "relevant": [{ "label": "ং" }]}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ৌ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ৈ", "popup": { "relevant": [{ "label": "ৌ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ড়", "popup": { "relevant": [{ "label": "ঢ়" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ছ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "চ", "popup": { "relevant": [{ "label": "ছ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঁ", "labelFlags": 1073741824, "popup": { "relevant": [
|
||||||
|
{ "label": "!autoColumnOrder!6" },
|
||||||
|
{ "label": "়" },
|
||||||
|
{ "label": "ৄ" },
|
||||||
|
{ "label": "ঽ" },
|
||||||
|
{ "label": "ৢ" },
|
||||||
|
{ "label": "ৱ" },
|
||||||
|
{ "label": "ৣ" },
|
||||||
|
{ "label": "ৗ" },
|
||||||
|
{ "label": "ৠ" },
|
||||||
|
{ "label": "৺" },
|
||||||
|
{ "label": "ঌ" },
|
||||||
|
{ "label": "ৰ" },
|
||||||
|
{ "label": "ৡ"}
|
||||||
|
]}},
|
||||||
|
"default": { "label": "ঞ", "popup": { "relevant": [{ "label": "ঁ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ভ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ব", "popup": { "relevant": [{ "label": "ভ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ণ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ন", "popup": { "relevant": [{ "label": "ণ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঙ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ম", "popup": { "relevant": [{ "label": "ঁ" }]}}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
142
app/src/main/assets/layouts/main/bengali_inscript.json
Normal file
142
app/src/main/assets/layouts/main/bengali_inscript.json
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঔ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ৌ", "popup": { "relevant": [{"label": "ঔ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঐ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ৈ", "popup": { "relevant": [{"label": "ঐ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "আ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "া", "popup": { "relevant": [{"label": "আ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঈ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ী", "popup": { "relevant": [{"label": "ঈ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঊ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ূ", "popup": { "relevant": [{"label": "ঊ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ভ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ব", "popup": { "relevant": [{"label": "ভ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঙ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "হ", "popup": { "relevant": [{"label": "ঙ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঘ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "গ", "popup": { "relevant": [{"label": "ঘ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ধ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "দ", "popup": { "relevant": [{"label": "ধ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঝ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "জ", "popup": { "relevant": [{"label": "ঝ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঢ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ড", "popup": { "relevant": [{"label": "ঢ" }]}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ও", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ো", "popup": { "relevant": [{"label": "ও" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "এ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ে", "popup": { "relevant": [{"label": "এ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "অ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "্", "popup": { "relevant": [{"label": "অ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ই", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ি", "popup": { "relevant": [{"label": "ই" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "উ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ু", "popup": { "relevant": [{"label": "উ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ফ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "প", "popup": { "relevant": [{"label": "ফ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ড়", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "র", "popup": { "main": { "label": "ড়" }, "relevant": [{ "label": "র্য" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "খ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ক", "popup": { "relevant": [{"label": "খ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "থ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ত", "popup": { "main": { "label": "থ" }, "relevant": [{ "label": "ৎ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ছ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "চ", "popup": { "relevant": [{"label": "ছ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঠ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ট", "popup": { "relevant": [{"label": "ঠ" }]}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঋ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ৃ", "popup": { "relevant": [{"label": "ঋ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঁ", "labelFlags": 1073741824, "popup": { "relevant": [
|
||||||
|
{"label": "!autoColumnOrder!6" },
|
||||||
|
{ "label": "়" },
|
||||||
|
{ "label": "ৄ" },
|
||||||
|
{ "label": "ঽ" },
|
||||||
|
{ "label": "ৢ" },
|
||||||
|
{ "label": "ৱ" },
|
||||||
|
{ "label": "ৣ" },
|
||||||
|
{ "label": "ৗ" },
|
||||||
|
{ "label": "ৠ" },
|
||||||
|
{ "label": "৺" },
|
||||||
|
{ "label": "ঌ" },
|
||||||
|
{ "label": "ৰ" },
|
||||||
|
{ "label": "ৡ" }
|
||||||
|
]}},
|
||||||
|
"default": { "label": "ং", "popup": { "main": { "label": "ঁ" }, "relevant": [{ "label": "ঃ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ণ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ম", "popup": { "relevant": [{"label": "ণ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঞ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ন", "popup": { "relevant": [{"label": "ঞ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ব", "popup": { "relevant": [{"label": "ঢ়" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ষ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ল", "popup": { "relevant": [{"label": "ষ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "শ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "স", "popup": { "relevant": [{"label": "শ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "য", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "য়", "popup": { "relevant": [{"label": "য" }]}}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
141
app/src/main/assets/layouts/main/bengali_probhat.json
Normal file
141
app/src/main/assets/layouts/main/bengali_probhat.json
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ধ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "দ", "popup": { "relevant": [{ "label": "ধ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঊ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ূ", "popup": { "relevant": [{ "label": "ঊ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঈ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ী", "popup": { "relevant": [{ "label": "ঈ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ড়", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "র", "popup": { "main": { "label": "ড়" }, "relevant": [{ "label": "র্য" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঠ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ট", "popup": { "relevant": [{ "label": "ঠ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঐ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "এ", "popup": { "relevant": [{ "label": "ঐ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "উ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ু", "popup": { "relevant": [{ "label": "উ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ই", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ি", "popup": { "relevant": [{ "label": "ই" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঔ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ও", "popup": { "relevant": [{ "label": "ঔ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ফ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "প", "popup": { "relevant": [{ "label": "ফ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ৈ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ে", "popup": { "relevant": [{ "label": "ৈ" }]}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "অ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "া", "popup": { "relevant": [{ "label": "অ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ষ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "স", "popup": { "relevant": [{ "label": "ষ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঢ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ড", "popup": { "relevant": [{ "label": "ঢ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "থ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ত", "popup": { "main": { "label": "থ" }, "relevant": [{ "label": "ৎ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঘ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "গ", "popup": { "relevant": [{ "label": "ঘ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঃ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "হ", "popup": { "relevant": [{ "label": "ঃ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঝ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "জ", "popup": { "relevant": [{ "label": "ঝ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "খ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ক", "popup": { "relevant": [{ "label": "খ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ং", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ল", "popup": { "relevant": [{ "label": "ং" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ৌ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ো", "popup": { "relevant": [{ "label": "ৌ" }]}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "য", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "য়", "popup": { "main": { "label": "য" }, "relevant": [{ "label": "্য" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "শ", "popup": { "relevant": [{ "label": "ঢ়" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ছ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "চ", "popup": { "relevant": [{ "label": "ছ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঋ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "আ", "popup": { "relevant": [{ "label": "ঋ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ভ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ব", "popup": { "relevant": [{ "label": "ভ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ণ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ন", "popup": { "relevant": [{ "label": "ণ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঙ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ম", "popup": { "relevant": [{ "label": "ঙ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ৃ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ঞ", "popup": { "relevant": [{ "label": "ৃ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঁ", "popup": { "relevant": [
|
||||||
|
{ "label": "!autoColumnOrder!6"},
|
||||||
|
{ "label": "়" },
|
||||||
|
{ "label": "ৄ"},
|
||||||
|
{ "label": "ঽ"},
|
||||||
|
{ "label": "ৢ"},
|
||||||
|
{ "label": "ৱ"},
|
||||||
|
{ "label": "ৣ"},
|
||||||
|
{ "label": "ৗ"},
|
||||||
|
{ "label": "ৠ"},
|
||||||
|
{ "label": "৺"},
|
||||||
|
{ "label": "ঌ"},
|
||||||
|
{ "label": "ৰ"},
|
||||||
|
{ "label": "ৡ" }]}},
|
||||||
|
"default": { "label": "্", "popup": { "relevant": [{ "label": "ঁ" }]}}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
126
app/src/main/assets/layouts/main/bengali_unijoy.json
Normal file
126
app/src/main/assets/layouts/main/bengali_unijoy.json
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ং", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ঙ", "popup": { "relevant": [{ "label": "ং" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "য়", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "য", "popup": { "relevant": [{ "label": "য়" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঢ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ড", "popup": { "relevant": [{ "label": "ঢ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ফ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "প", "popup": { "relevant": [{ "label": "ফ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঠ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ট", "popup": { "relevant": [{ "label": "ঠ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ছ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "চ", "popup": { "relevant": [{ "label": "ছ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঝ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "জ", "popup": { "relevant": [{ "label": "ঝ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঞ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "হ", "popup": { "relevant": [{ "label": "ঞ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঘ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "গ", "popup": { "relevant": [{ "label": "ঘ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ড়", "popup": { "relevant": [{ "label": "ঢ়" }]}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঃ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ৃ", "popup": { "relevant": [{ "label": "ঋ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ূ", "popup": { "relevant": [{ "label": "ঊ" }]}},
|
||||||
|
"default": { "label": "ু", "popup": { "relevant": [{ "label": "উ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ী", "popup": { "relevant": [{ "label": "ঈ"}]}},
|
||||||
|
"default": { "label": "ি", "popup": { "relevant": [{ "label": "ই" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "অ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "া", "popup": { "main": { "label": "আ" }, "relevant": [{ "label": "অ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ঁ", "labelFlags": 1073741824, "popup": { "relevant": [
|
||||||
|
{ "label": "!autoColumnOrder!6" },
|
||||||
|
{ "label": "়" },
|
||||||
|
{ "label": "ৄ" },
|
||||||
|
{ "label": "ঽ" },
|
||||||
|
{ "label": "ৢ" },
|
||||||
|
{ "label": "ৱ" },
|
||||||
|
{ "label": "ৣ" },
|
||||||
|
{ "label": "ৗ" },
|
||||||
|
{ "label": "ৠ" },
|
||||||
|
{ "label": "৺" },
|
||||||
|
{ "label": "ঌ" },
|
||||||
|
{ "label": "ৰ" },
|
||||||
|
{ "label": "ৡ"}
|
||||||
|
]}},
|
||||||
|
"default": { "label": "্", "popup": { "relevant": [{ "label": "ঁ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ভ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ব", "popup": { "relevant": [{ "label": "ভ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "খ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ক", "popup": { "relevant": [{ "label": "খ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "থ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ত", "popup": { "main": { "label": "থ" }, "relevant": [{ "label": "ৎ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ধ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "দ", "popup": { "relevant": [{ "label": "ধ" }]}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "্য", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "্র", "popup": { "relevant": [{ "label": "্য" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ৌ", "popup": { "relevant": [{ "label": "ঔ" }]}},
|
||||||
|
"default": { "label": "ো", "popup": { "relevant": [{ "label": "ও" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ৈ", "popup": { "relevant": [{ "label": "ঐ" }]}},
|
||||||
|
"default": { "label": "ে", "popup": { "relevant": [{ "label": "এ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ল", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "র", "popup": { "main": { "label": "ল" }, "relevant": [{ "label": "র্য" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ণ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ন", "popup": { "relevant": [{ "label": "ণ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "ষ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "স", "popup": { "relevant": [{ "label": "ষ" }]}}
|
||||||
|
},
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"manualOrLocked": { "label": "শ", "labelFlags": 1073741824 },
|
||||||
|
"default": { "label": "ম", "popup": { "relevant": [{ "label": "শ" }]}}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
31
app/src/main/assets/layouts/main/central_kurdish.txt
Normal file
31
app/src/main/assets/layouts/main/central_kurdish.txt
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
ق
|
||||||
|
و
|
||||||
|
ە
|
||||||
|
ر
|
||||||
|
ت
|
||||||
|
ی
|
||||||
|
ێ
|
||||||
|
ئ
|
||||||
|
ۆ
|
||||||
|
پ
|
||||||
|
|
||||||
|
ا
|
||||||
|
س
|
||||||
|
ش
|
||||||
|
د
|
||||||
|
ف
|
||||||
|
ھ|ه
|
||||||
|
ژ
|
||||||
|
ل
|
||||||
|
ک
|
||||||
|
گ
|
||||||
|
|
||||||
|
ز
|
||||||
|
ع
|
||||||
|
ح
|
||||||
|
ج
|
||||||
|
چ
|
||||||
|
خ
|
||||||
|
ب
|
||||||
|
ن
|
||||||
|
م
|
28
app/src/main/assets/layouts/main/dagbani.txt
Normal file
28
app/src/main/assets/layouts/main/dagbani.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
q
|
||||||
|
w
|
||||||
|
ɛ e
|
||||||
|
r ¢
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
ɔ o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
ɣ g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
ʒ z
|
||||||
|
x x
|
||||||
|
c
|
||||||
|
v
|
||||||
|
b
|
||||||
|
ŋ n
|
||||||
|
m
|
35
app/src/main/assets/layouts/main/dargwa_urakhi.txt
Normal file
35
app/src/main/assets/layouts/main/dargwa_urakhi.txt
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
й
|
||||||
|
ц
|
||||||
|
у ӯ ӱ ý ӱ́
|
||||||
|
к ҟ ҝ ҡ
|
||||||
|
е ē ë е́ ë́
|
||||||
|
н
|
||||||
|
г ґ ғ ꚕ
|
||||||
|
ш
|
||||||
|
щ
|
||||||
|
з ҙ
|
||||||
|
х ҳ ẋ
|
||||||
|
ъ
|
||||||
|
|
||||||
|
ф
|
||||||
|
ы
|
||||||
|
в w
|
||||||
|
а ā ӓ á ӓ́
|
||||||
|
п ԥ
|
||||||
|
р ҏ
|
||||||
|
о о̄ ӧ ó ӧ́
|
||||||
|
л
|
||||||
|
д
|
||||||
|
ж җ
|
||||||
|
э э̄ э́
|
||||||
|
Ӏ
|
||||||
|
|
||||||
|
я я̄ я́ ǽ æ ǣ
|
||||||
|
ч ҹ
|
||||||
|
с
|
||||||
|
м
|
||||||
|
и ӣ и́
|
||||||
|
т ԏ
|
||||||
|
ь
|
||||||
|
б ҕ
|
||||||
|
ю ю́
|
28
app/src/main/assets/layouts/main/ewe.txt
Normal file
28
app/src/main/assets/layouts/main/ewe.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
ɛ q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
ɣ y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
ɔ x
|
||||||
|
c ¢
|
||||||
|
v
|
||||||
|
b
|
||||||
|
n
|
||||||
|
m
|
28
app/src/main/assets/layouts/main/ga.txt
Normal file
28
app/src/main/assets/layouts/main/ga.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
ɛ q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
ɔ x
|
||||||
|
ŋ c ¢
|
||||||
|
v
|
||||||
|
b
|
||||||
|
n
|
||||||
|
m
|
|
@ -23,7 +23,11 @@
|
||||||
{ "label": "η" },
|
{ "label": "η" },
|
||||||
{ "label": "ξ" },
|
{ "label": "ξ" },
|
||||||
{ "label": "κ" },
|
{ "label": "κ" },
|
||||||
{ "label": "λ" }
|
{ "label": "λ" },
|
||||||
|
{ "$": "shift_state_selector",
|
||||||
|
"shiftedManual": { "code": 776, "label": "¨" },
|
||||||
|
"default": { "code": 769, "label": "´" }
|
||||||
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ "label": "ζ" },
|
{ "label": "ζ" },
|
28
app/src/main/assets/layouts/main/hausa.txt
Normal file
28
app/src/main/assets/layouts/main/hausa.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
ẹ q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
ọ x
|
||||||
|
c
|
||||||
|
v
|
||||||
|
b
|
||||||
|
n ₦
|
||||||
|
m
|
|
@ -2,12 +2,12 @@
|
||||||
[
|
[
|
||||||
{ "$": "variation_selector",
|
{ "$": "variation_selector",
|
||||||
"email": { "label": "-" },
|
"email": { "label": "-" },
|
||||||
"url": { "label": "-" },
|
"uri": { "label": "-" },
|
||||||
"default": { "label": "'", "popup": { "relevant": [{ "label": "׳" }, { "label": "״" }, { "label": "\"" }] } }
|
"default": { "label": "'", "popup": { "relevant": [{ "label": "׳" }, { "label": "״" }, { "label": "\"" }] } }
|
||||||
},
|
},
|
||||||
{ "$": "variation_selector",
|
{ "$": "variation_selector",
|
||||||
"email": { "label": "_" },
|
"email": { "label": "_" },
|
||||||
"url": { "label": "_" },
|
"uri": { "label": "_" },
|
||||||
"default": { "label": "-", "popup": { "relevant": [{ "label": "־" }, { "label": "_" }] } }
|
"default": { "label": "-", "popup": { "relevant": [{ "label": "־" }, { "label": "_" }] } }
|
||||||
},
|
},
|
||||||
{ "label": "ק", "popup": {
|
{ "label": "ק", "popup": {
|
85
app/src/main/assets/layouts/main/hebrew_1452_2.json
Normal file
85
app/src/main/assets/layouts/main/hebrew_1452_2.json
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{ "label": "ץ", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "ש\u05c2" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ן", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "ש\u05c1" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ק", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b8" },
|
||||||
|
{ "label": "\u05bb" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ר", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b3" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "א" },
|
||||||
|
{ "label": "ט" },
|
||||||
|
{ "label": "ו", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b9" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ת" },
|
||||||
|
{ "label": "ם" },
|
||||||
|
{ "label": "פ", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b2" },
|
||||||
|
{ "label": "\u05b7" }
|
||||||
|
]
|
||||||
|
} }
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "label": "ש", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b0" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ד", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05bc" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ג" },
|
||||||
|
{ "label": "כ" },
|
||||||
|
{ "label": "ע" },
|
||||||
|
{ "label": "י" },
|
||||||
|
{ "label": "ח", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b4" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ל" },
|
||||||
|
{ "label": "ך" },
|
||||||
|
{ "label": "ף" }
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ "label": "ז" },
|
||||||
|
{ "label": "ס", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b6" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ב", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b1" }
|
||||||
|
]
|
||||||
|
} },
|
||||||
|
{ "label": "ה" },
|
||||||
|
{ "label": "נ" },
|
||||||
|
{ "label": "מ" },
|
||||||
|
{ "label": "צ", "popup": {
|
||||||
|
"relevant": [
|
||||||
|
{ "label": "\u05b5" }
|
||||||
|
]
|
||||||
|
} }
|
||||||
|
]
|
||||||
|
]
|
554
app/src/main/assets/layouts/main/hindi_phonetic.json
Normal file
554
app/src/main/assets/layouts/main/hindi_phonetic.json
Normal file
|
@ -0,0 +1,554 @@
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ठ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ट"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ढ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ड",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ड़"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ढ़"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ै"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "े",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ए"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ऍ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ऐ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2374,
|
||||||
|
"label": " ॆ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2389,
|
||||||
|
"label": " ॕ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2382,
|
||||||
|
"label": " ॎ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ऎ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ृ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "र",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ऋ"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ॠ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॄ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ऱ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "थ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "त",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "त्र"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "य़"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "य",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ॺ"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ू"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ु",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "उ"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ऊ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॷ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2390,
|
||||||
|
"label": " ॖ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॶ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2391,
|
||||||
|
"label": " ॗ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ी"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ि",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "इ"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ई"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ौ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ो",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ओ"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "औ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ऑ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2383,
|
||||||
|
"label": " ॏ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॵ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॐ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॉ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॳ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॴ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2362,
|
||||||
|
"label": " ऺ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2363,
|
||||||
|
"label": " ऻ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ऒ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"code": 2378,
|
||||||
|
"label": " ॊ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "फ़"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "प"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "अ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ा",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "आ"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ॅ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॲ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ऄ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "श"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "स",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "श्र"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ष"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ध"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "द",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ड़"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ॾ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ढ़"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॸ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"code": 2364,
|
||||||
|
"label": " ़"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "फ",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "फ़"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "घ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ग",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ग़"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ॻ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ः"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ह"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "झ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ज",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ज़"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ॼ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॹ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ख"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "क",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "क़"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ख़"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ळ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ल",
|
||||||
|
"popup": {
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ऴ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॣ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ऌ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॡ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ॢ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ज़",
|
||||||
|
"labelFlags": 128
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ज्ञ",
|
||||||
|
"labelFlags": 128
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ष"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "क्ष",
|
||||||
|
"labelFlags": 128
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "छ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "च",
|
||||||
|
"popup": {
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"$": "auto_text_key",
|
||||||
|
"code": 2385,
|
||||||
|
"label": " ॑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "auto_text_key",
|
||||||
|
"code": 2386,
|
||||||
|
"label": " ॒"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "्"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "व",
|
||||||
|
"popup": {
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"$": "auto_text_key",
|
||||||
|
"code": 2387,
|
||||||
|
"label": " ॓"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "auto_text_key",
|
||||||
|
"code": 2388,
|
||||||
|
"label": " ॔"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "भ"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "ब",
|
||||||
|
"popup": {
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ॿ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ऽ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "॰"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ण"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "न",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ङ"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ऩ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ञ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$": "shift_state_selector",
|
||||||
|
"manualOrLocked": {
|
||||||
|
"label": "ं"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"label": "म",
|
||||||
|
"popup": {
|
||||||
|
"main": {
|
||||||
|
"label": "ँ"
|
||||||
|
},
|
||||||
|
"relevant": [
|
||||||
|
{
|
||||||
|
"label": "ऀ"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
28
app/src/main/assets/layouts/main/igbo.txt
Normal file
28
app/src/main/assets/layouts/main/igbo.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
ṅ q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
ọ x
|
||||||
|
c
|
||||||
|
ụ v
|
||||||
|
b
|
||||||
|
n ₦
|
||||||
|
m
|
28
app/src/main/assets/layouts/main/kikuyu.txt
Normal file
28
app/src/main/assets/layouts/main/kikuyu.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
ĩ q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
ũ x
|
||||||
|
c
|
||||||
|
v
|
||||||
|
b
|
||||||
|
n
|
||||||
|
m
|
28
app/src/main/assets/layouts/main/lingala.txt
Normal file
28
app/src/main/assets/layouts/main/lingala.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
q
|
||||||
|
w
|
||||||
|
ɛ e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
ɔ o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
x
|
||||||
|
c
|
||||||
|
̌ v
|
||||||
|
b
|
||||||
|
n
|
||||||
|
m
|
29
app/src/main/assets/layouts/main/luganda.txt
Normal file
29
app/src/main/assets/layouts/main/luganda.txt
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
ŋ
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
x
|
||||||
|
c
|
||||||
|
v
|
||||||
|
b
|
||||||
|
n
|
||||||
|
m
|
|
@ -8,7 +8,7 @@
|
||||||
ш
|
ш
|
||||||
щ
|
щ
|
||||||
з
|
з
|
||||||
х
|
х ъ [ {
|
||||||
|
|
||||||
ф
|
ф
|
||||||
ы
|
ы
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
л
|
л
|
||||||
д
|
д
|
||||||
ж
|
ж
|
||||||
э
|
э э́ ] }
|
||||||
|
|
||||||
я
|
я
|
||||||
ч
|
ч
|
34
app/src/main/assets/layouts/main/russian_extended.txt
Normal file
34
app/src/main/assets/layouts/main/russian_extended.txt
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
й
|
||||||
|
ц
|
||||||
|
у
|
||||||
|
к
|
||||||
|
е
|
||||||
|
н
|
||||||
|
г
|
||||||
|
ш
|
||||||
|
щ
|
||||||
|
з
|
||||||
|
х [ {
|
||||||
|
ъ ] }
|
||||||
|
|
||||||
|
ф
|
||||||
|
ы
|
||||||
|
в
|
||||||
|
а
|
||||||
|
п
|
||||||
|
р
|
||||||
|
о
|
||||||
|
л
|
||||||
|
д
|
||||||
|
ж
|
||||||
|
э э́
|
||||||
|
|
||||||
|
я
|
||||||
|
ч
|
||||||
|
с
|
||||||
|
м
|
||||||
|
и
|
||||||
|
т
|
||||||
|
ь
|
||||||
|
б <
|
||||||
|
ю >
|
28
app/src/main/assets/layouts/main/sesotho.txt
Normal file
28
app/src/main/assets/layouts/main/sesotho.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
š s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
x
|
||||||
|
c
|
||||||
|
v
|
||||||
|
b
|
||||||
|
n
|
||||||
|
m
|
|
@ -8,7 +8,8 @@
|
||||||
ш
|
ш
|
||||||
щ
|
щ
|
||||||
з
|
з
|
||||||
х
|
х [ {
|
||||||
|
ї ] }
|
||||||
|
|
||||||
ф
|
ф
|
||||||
і
|
і
|
||||||
|
@ -20,7 +21,7 @@
|
||||||
л
|
л
|
||||||
д
|
д
|
||||||
ж
|
ж
|
||||||
є
|
є ' "
|
||||||
|
|
||||||
я
|
я
|
||||||
ч
|
ч
|
||||||
|
@ -30,4 +31,4 @@
|
||||||
т
|
т
|
||||||
ь
|
ь
|
||||||
б <
|
б <
|
||||||
ю >
|
ю > ґ
|
35
app/src/main/assets/layouts/main/ukrainian_extended.txt
Normal file
35
app/src/main/assets/layouts/main/ukrainian_extended.txt
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
й
|
||||||
|
ц
|
||||||
|
у
|
||||||
|
к
|
||||||
|
е
|
||||||
|
н
|
||||||
|
г
|
||||||
|
ш
|
||||||
|
щ
|
||||||
|
з
|
||||||
|
х [ {
|
||||||
|
ї ] }
|
||||||
|
|
||||||
|
ф
|
||||||
|
і
|
||||||
|
в
|
||||||
|
а
|
||||||
|
п
|
||||||
|
р
|
||||||
|
о
|
||||||
|
л
|
||||||
|
д
|
||||||
|
ж
|
||||||
|
є ' "
|
||||||
|
' "
|
||||||
|
|
||||||
|
я
|
||||||
|
ч
|
||||||
|
с
|
||||||
|
м
|
||||||
|
и
|
||||||
|
т
|
||||||
|
ь
|
||||||
|
б <
|
||||||
|
ю > ґ
|
28
app/src/main/assets/layouts/main/yoruba.txt
Normal file
28
app/src/main/assets/layouts/main/yoruba.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
ẹ q
|
||||||
|
w
|
||||||
|
e
|
||||||
|
r
|
||||||
|
t
|
||||||
|
y
|
||||||
|
u
|
||||||
|
i
|
||||||
|
o
|
||||||
|
p
|
||||||
|
|
||||||
|
a
|
||||||
|
s
|
||||||
|
d
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
|
||||||
|
z
|
||||||
|
ọ x
|
||||||
|
c
|
||||||
|
ṣ v
|
||||||
|
b
|
||||||
|
n ₦
|
||||||
|
m
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue