Compare commits

...

256 commits
v2.3 ... main

Author SHA1 Message Date
Helium314
49ed863a7e upgrade version and translations 2025-04-21 10:23:49 +02:00
Helium314
46f9227615 properly reload emoji keyboards (fixes split layout change not shown) 2025-04-21 09:48:22 +02:00
Helium314
7e59bcc799 remove weird workaround to get acceptable layout edit dialog positioning
not necessary any more after enabling edge to edge
2025-04-21 08:29:50 +02:00
Eran Leshem
d9f17733d9
Make settings screens fully usable on Android 15 (#1484)
enable edge to edge in settings for all Android versions to avoid minor glitches and have more consistent appearance
2025-04-21 08:06:41 +02:00
Helium314
d15a97ccba consider all layout types when checking for custom layouts without file
fixes #1490
2025-04-21 07:37:42 +02:00
Helium314
da7ab05920 remove old upgrade functionality done for migration from previous package name
should be fine after more than a year of HeliBoard
fixes issue when restoring custom layouts

upgrade now would need to be OpenBoard -> HeliBoard <= 2.3 -> HeliBoard >= 3.0
2025-04-21 07:33:58 +02:00
Helium314
d87ed8e53d fix pattern for files to back up
see #1490
2025-04-21 06:03:32 +02:00
Eran Leshem
1012386c8c
more reliable fix for bottom inset padding on edge-to-edge (#1486) 2025-04-20 18:58:58 +02:00
Helium314
7748ed75fe clarify when we use our own name for the language instead of using whatver is provided by the system 2025-04-19 08:35:46 +02:00
Benson Muite
c32b3bada4
Keyboard layouts for languages primarily used in Africa (#1483) 2025-04-19 08:27:58 +02:00
Helium314
e042adc5b8 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-04-18 10:04:19 +02:00
Eran Leshem
901e745158
Fix bottom of keyboard being under navigation bar (#1461)
mostly for Android 15+, but issues may also occur on older Android versions
2025-04-18 10:02:27 +02:00
Helium314
91554b02eb fix unchanged layout list when deleting secondary layout 2025-04-14 18:46:41 +02:00
Helium314
fe7f1a1b38 fix crash when deleting subtype
fixes GH-1476
2025-04-14 17:06:34 +02:00
Helium314
8fddf94121 fix unable to change one-handed mode scale 2025-04-08 16:10:04 +02:00
Helium314
003ec854ab update version 2025-04-06 19:20:01 +02:00
Helium314
00ae92318d add missed changelog translations 2025-04-06 18:33:06 +02:00
Helium314
e4cd58a722 update translations 2025-04-06 18:32:23 +02:00
Eran Leshem
f4b4705e81
Add bottom inset padding on Android15+ (#1457) 2025-04-06 10:54:39 +02:00
Helium314
d4960c73dc fix tests after recent changes 2025-04-06 10:52:24 +02:00
Helium314
22eb48ff91 add comments about build variants 2025-04-06 10:50:10 +02:00
Helium314
6995266bd1 treat default button as value change for SliderPreference 2025-04-05 10:24:24 +02:00
Eran Leshem
087f87e95c
Optimize debug build (#1411) 2025-04-05 08:43:24 +02:00
Helium314
8edea4f7c5 allow renaming main layouts in subtypeScreen 2025-04-03 17:09:27 +02:00
Helium314
d79c84d7df fix issues when renaming or deleting layouts 2025-04-03 17:09:15 +02:00
Helium314
57deb82ca7 remove todo section from readme 2025-03-31 20:13:28 +02:00
Helium314
7a57f5a24f make searchText non-saveable and add a comment 2025-03-31 20:12:52 +02:00
Helium314
452770566c avoid creating additional subtypes that are the same as a resource subtype 2025-03-31 16:31:52 +02:00
Helium314
8247366bdd avoid issues with prefChanged not changing 2025-03-31 16:27:16 +02:00
Helium314
3dbd9c6ed9 slightly adjust behavior and layouts of subtype screen 2025-03-31 01:27:06 +02:00
Helium314
6bbce0b5ca change subtype dialog to screen
mostly just moved the content and adjusted necessary calls
still needs some minor tweaking
2025-03-30 12:40:06 +02:00
Helium314
ac805a9286 fix some issues with renaming color schemes
fixes GH-1449 and some more unreported bugs
2025-03-30 12:03:21 +02:00
Helium314
8932fc84e1 add timestamp keycode and setting for adjusting format, fixes GH-846 2025-03-29 12:36:07 +01:00
Helium314
525c4e59b6 confirm color in color picker dialog on done, fixes GH-1443 2025-03-29 11:47:06 +01:00
Helium314
a3fcce26a7 add all_colors color for popup key text, fixes #1297 2025-03-29 10:48:14 +01:00
Helium314
58778b1f23 add all_colors color for key preview text, fixes #1434 2025-03-29 10:38:43 +01:00
Helium314
fbfff03541 add all_colors color for key text in emoji keyboard, fixes #1058 2025-03-29 10:18:27 +01:00
Helium314
a1f991088d reduce font size for multilibgual typing in settings 2025-03-29 07:19:17 +01:00
Helium314
10af5def2b deal with some very bad behavior of firefox, fixes #1139 2025-03-27 21:04:42 +01:00
Helium314
a745c92e05 update ndk and translations 2025-03-26 21:26:05 +01:00
Helium314
b26ba76221 add test related to GH-1408 2025-03-26 20:57:54 +01:00
Helium314
1b1dbd4006 upgrade robolectric version to make tests work again 2025-03-26 20:38:06 +01:00
Helium314
f06521c8ec make text fields follow content language direction 2025-03-26 20:07:47 +01:00
Helium314
0847bac3d5 upgrade target SDK to 35
might cause issues with hebrew and indonesian on Android 15 devices due to changed language codes
2025-03-26 19:56:46 +01:00
Helium314
f5bc89b91d make reverting autocorrect on backspace optional
fixes GH-210
2025-03-26 19:18:13 +01:00
Helium314
c0b14635fd fix issue that could result in autospace being added before period 2025-03-26 18:29:57 +01:00
Helium314
b600431af9 reduce vertical padding for preference 2025-03-26 18:11:47 +01:00
Helium314
66a07eb8d2 Add more settings for autospace
fixes GH-1348
fixes GH-876
2025-03-26 18:05:00 +01:00
EduRGB
88a7f41038
Layout for shift + long press on number row (#1400)
Add full-featured number row layout and set it as default; set existing layout as basic.
2025-03-22 20:28:56 +01:00
Helium314
2fe0937ead apparently people want smaller icons 2025-03-22 20:05:51 +01:00
Helium314
efaddf6c51 store clipboard history as strings, fixes GH-1430 2025-03-22 19:34:27 +01:00
Helium314
9e91e7562b add another setting to disable always show suggestions just for web edit fields, which seem fo frequenty cause issues with this setting 2025-03-22 19:27:38 +01:00
Helium314
7228fa06d1 move "no limit" clipboard history retantion time to the right side
sort of fixes GH-1425 (at least the unclarity about finding the setting)
2025-03-22 19:05:24 +01:00
Helium314
a3bada8d25 upgrade version and translations 2025-03-16 15:01:39 +01:00
Helium314
9b7eaa4cf2 use default text button style for popup key order / hint source buttons 2025-03-16 14:49:04 +01:00
Helium314
7571890551 remove appcompat
was mainly used for settings
2025-03-16 14:33:53 +01:00
KuRa KuRd
cb70553484
Add Central Kurdish layout (#1417) 2025-03-16 14:00:23 +01:00
Helium314
8298542c39 add setting to switch to alphabet after typing on numpad and pressing space
fixes #1224
2025-03-15 15:59:49 +01:00
Helium314
a9e5f879d8 better way of determining whether a key should have action key background
mostly relevant for popups
fixes #1008
2025-03-15 15:35:55 +01:00
Quantom2
a6b6d1b659
Rework of UK and RU standard layout plus added extended layout (#1215)
Rework of UK and RU standard layout plus added extended layout (similar to PC keyboard) as optional;
- Added 'ї' as separate letter (it used much more often, just to be optional key in popups)
- Added [ { } } popups to fill empty hint space (similar to PC layout)
- Added ' (apostrofee) suggestion onto 'є' key (similar to oter keyboards and to PC layout)
RU)
Added siggestion to 'ъ' on 'х' key (similar to other keyboards, anyway there was no popups at all)
- Added [ { } } popups to fill empty hint space (similar to PC layout)
- Added 'э́' suggestion similar to other keyboards
Both)
- Improvements to multilanguage typing (now this is possible to sue UK-RU or RU-UK pair, I added letters from other language as popups)
Added)
- UK Extended with separate ' key (used less often than 'ї', but still used pretty often)
- RU Extended, with separate 'ъ' key (similar to full desk PC layout)
2025-03-15 14:05:05 +01:00
Helium314
ba88129641 make navigation transistion animation duration follow system transition animation scale 2025-03-15 09:06:10 +01:00
Helium314
55259b2915 fix disappearing all_colors for dark theme on upgrade from 2.3 2025-03-14 23:21:41 +01:00
Helium314
d3401e5c04 re-add background to app icon in about screen 2025-03-14 22:57:00 +01:00
Eran Leshem
18a328cd2b
Show TLD popup keys (#1399)
* Add option to replace period key's popup keys with the locale-specific top level domains for URL and email inputs. On by default.
Also change the wide keyboard's '.com' key to use the same TLD list.
Tweak TLD list order, putting default ones first, so that .com is the first TLD.

* Enable TLD hint
Avoid TLD popups on tablet
Revert to using set for TLDs, and insert default ones first
Move setting one slot up
Tweak setting description
Update docs

* Preserve case on period key

* Prevent non-TLD hints on period key
2025-03-13 16:31:03 +01:00
unlair
d05a59e4ed
Track overridden subtypes when auto-switching due to HintLocales (#1410)
* Track overridden subtypes when auto-switching due to HintLocales

* Move hint-locale switching logic to SubtypeState
2025-03-11 21:25:32 +01:00
Helium314
bf713d6967 copy user-supplied library to final file instead of renaming
apparently fixes #1251
2025-03-10 18:27:45 +01:00
Helium314
e9a2a7ebb1 remove unnecessary settings reloads during adjusting additional subtype 2025-03-08 17:55:02 +01:00
Helium314
2b8c39b125 make editing the "+" layouts work 2025-03-08 10:26:24 +01:00
Helium314
c47da4203f consistent way of for settingsSubtypes <-> string 2025-03-08 09:34:33 +01:00
Helium314
e1f02dab31 add some tests for subtype enablement 2025-03-08 09:23:41 +01:00
Helium314
a4d96a12a9 fix some issues with subtypes being disabled or not shown as enabled after editing 2025-03-08 09:05:33 +01:00
Helium314
15c1526895 toAdditional subtype not nullable any more
was causing too much trouble
and only was in there because "it always has been there"
2025-03-08 07:48:15 +01:00
Helium314
fa9ac20d39 fix edited subtypes not showing up when they weren't enabled 2025-03-08 07:35:49 +01:00
Helium314
912ba45d5e fix default additional subtypes 2025-03-08 07:35:08 +01:00
Helium314
631ab60eb9 upgrade version and translations 2025-03-06 18:13:32 +01:00
Md. Rifat Hasan Jihan
073318d7d0
Update existing incomplete bn-IN layout (#1374) 2025-03-06 18:10:44 +01:00
Helium314
43d96e3131 disable check breaking non-latin additional subtypes without custom main layout 2025-03-06 18:06:30 +01:00
Helium314
43f5dd555b remove the / at the end of layout folders
because apparently android 7 asset manager does not understand it
fixes #1393
2025-03-06 05:16:26 +01:00
Md. Rifat Hasan Jihan
ee33140106
add missing popup (#1396) 2025-03-04 22:49:14 +01:00
Md. Rifat Hasan Jihan
411bd79890
add label flag on manualOrLocked keys to hide popup hint (#1397) 2025-03-04 22:20:44 +01:00
Helium314
f60406d6ac upgrade dependencies 2025-03-04 22:19:17 +01:00
Helium314
4310025b2d fix light navbar symbols with light theme 2025-03-02 18:13:04 +01:00
Helium314
fad6c7b758 fix some bugs resulting in bad colors after entering ColorsScreen 2025-03-02 17:04:16 +01:00
Helium314
72ca12d52e pre-fill name for new color themes 2025-03-02 12:05:49 +01:00
Helium314
e342ff24b5 fix user-defined theme being added to list on first startup 2025-03-02 11:39:33 +01:00
Helium314
18693cdf20 fix welcome wizard title color in dark mode 2025-03-02 11:02:20 +01:00
Helium314
45c30b5c64 fix wrong name shown in launcher 2025-03-02 10:56:49 +01:00
Helium314
b4f3732cde better details for dictionaries 2025-03-02 10:36:05 +01:00
Helium314
2fb618888b use some resource strings again 2025-03-02 09:59:03 +01:00
Helium314
cffdbff23c remove some unused resource strings, and mark others for possible future removal 2025-03-02 09:36:13 +01:00
Helium314
5e63a7f29b add missing new metdatata file translations 2025-03-02 07:34:00 +01:00
Helium314
02e8a001cd update translations 2025-03-02 07:33:10 +01:00
Helium314
f929caa4d8
Remove old settings and clean up (#1392) 2025-03-02 07:28:37 +01:00
Helium314
8a8e8a70e3 re-add missing light theme 2025-03-02 00:47:31 +01:00
Helium314
8c557ec42c don't show welcome wizard in spell checker settings
and show crash reports only in normal settings
2025-03-01 23:39:55 +01:00
Helium314
122b51c0ed adjust welcome wizard colors 2025-03-01 23:36:05 +01:00
Md. Rifat Hasan Jihan
3d690ae371
Added Bengali (India)/Baishakhi layout (#1373) 2025-03-01 17:40:27 +01:00
Helium314
be3ccc631d minor improvements in appearance screen 2025-03-01 17:29:00 +01:00
Helium314
1fc5d60483 better instant-reload for some settings (while keyboard is showing) 2025-03-01 17:28:48 +01:00
Helium314
95b6333bf4 better way of force-reloading the keyboard theme
not duplicating an existing mechanism any more
and working while keyboard is shown (at least it looks like it)
2025-03-01 17:06:49 +01:00
Helium314
f0bb541b72 better "add dictionary" button in dictionaries screen 2025-03-01 10:31:38 +01:00
Helium314
b69ec39539 extend list of locales for which bigrams are used in contacts dictionary 2025-03-01 10:24:22 +01:00
Helium314
efa2faf474 more frequent selected subtype checks in welcome wizard 2025-03-01 10:02:56 +01:00
Helium314
5d1545687f fix broken list preferences 2025-03-01 10:01:16 +01:00
Helium314
7696beeb29 deal with empty subtype preference strings produced by old versions 2025-03-01 09:50:33 +01:00
Helium314
f016c20ca8 remove some values from old settings
preparation for removal
2025-03-01 09:23:34 +01:00
Helium314
7ec9e1a8cf sort extra value when creating SettingsSubtype 2025-03-01 08:40:50 +01:00
Helium314
c431f7043f move settings.kt and settings subtype 2025-03-01 07:32:09 +01:00
Helium314
e55b375f90 add more compose previews, and make them work better 2025-02-28 23:47:11 +01:00
Helium314
1b5a793690 more convenient access to settingsValues
Settings.getInstance().getCurrent() -> Settings.getValues()
2025-02-28 22:17:06 +01:00
Helium314
98640c6b0d add readable timestamp to logs and crash reports (similar to backup files) 2025-02-28 21:57:31 +01:00
Helium314
912be23900 avoid exception on startup
java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory"
see https://stackoverflow.com/a/65980047
2025-02-28 21:44:25 +01:00
Helium314
999c900f7f clearly show when a subtype is custom in languages & layouts 2025-02-28 21:42:09 +01:00
Helium314
27e2a6f584 determine whether to show shift key for scripts without uppercase 2025-02-28 21:29:38 +01:00
Helium314
48fbe86dcc fix accessing setting from system keyboard settings 2025-02-28 20:29:37 +01:00
Helium314
247ec2b7f3 compose welcome wizard (could look better, but good enough for now) 2025-02-28 20:26:38 +01:00
Helium314
b65d00e142 improve color picker: better landscape layout and survive orientation change 2025-02-27 19:35:07 +01:00
Helium314
1c955a34b2 convert popup multiTextKey codePoints into (KeySpec) label
fixes #1376
2025-02-26 21:16:23 +01:00
Md. Rifat Hasan Jihan
2e9ba954ad
Improved Probhat Layout (#1382)
Discussed in https://github.com/Helium314/HeliBoard/discussions/1368
2025-02-26 20:57:08 +01:00
ottosch
f65864a935
Add datestamp to backup filename (#1364)
resolve #1188
2025-02-26 20:00:25 +01:00
Helium314
aaa7fb2ad1 make unsaved changes in SubtypeDialog survive screen orientation change 2025-02-25 22:55:05 +01:00
Helium314
f0689b00f6 remove "use system locales"
now behavior is as it was disabled
if no subtypes are explicitly enabled, it behaves the same as if the setting was enabled (same as before, actually)
2025-02-25 22:41:54 +01:00
Helium314
cab9cc7de0 make subtypeDialog survive screen rotation (but currently loses changes to settings) 2025-02-25 22:32:05 +01:00
Helium314
93e6f88f6c update todo 2025-02-25 21:36:30 +01:00
Helium314
987f0560d9 add missing headers 2025-02-25 20:35:30 +01:00
Helium314
3c9d1c8795 add links to discussin sections to load dialogs for laoyuts and colors
and gather links in a single place
2025-02-25 20:24:24 +01:00
Helium314
6212f44283 fix theme not appearing after importing from file 2025-02-24 21:06:51 +01:00
Helium314
761b56fdc3 fix weird double window insets 2025-02-24 20:42:21 +01:00
Helium314
a8bd9058e7 move some icons and iconButtons to separate file 2025-02-24 19:17:21 +01:00
Helium314
875a98d3f4 rename "text" to "content" in alert dialog 2025-02-24 18:43:12 +01:00
Helium314
b7aadac07c add the "will not be translated" message to allColors 2025-02-24 18:30:12 +01:00
Helium314
f076d66f93 add contentDescription for some more icons 2025-02-24 18:16:38 +01:00
Helium314
d5d672ee33 fix links using annotatedString instead of html 2025-02-24 16:49:03 +01:00
Helium314
fa72e2bcbb work on some more todos 2025-02-23 20:57:16 +01:00
Helium314
adc5c8cf1c remove some outdated todos 2025-02-23 19:16:39 +01:00
Helium314
9ff5fda8ed fix issues with insets not being respected 2025-02-23 19:01:45 +01:00
Helium314
43cfbddf68 initialize RichIMM on app start (fixes tests) 2025-02-23 18:42:19 +01:00
Helium314
53a5cb0c92 upgrade compose dependencies 2025-02-23 18:38:07 +01:00
Helium314
4edaa485b6 some todos in SubtypeDialog 2025-02-23 17:58:04 +01:00
Helium314
e3fa210031 editing a theme does not automatically enabled it (outside edit screen) 2025-02-23 16:24:59 +01:00
Helium314
b41ad29e55 limit locales when adding dictionaries to matching scripts 2025-02-23 13:58:11 +01:00
Helium314
ff27d1f1c5 solve a bunch of recent todos 2025-02-23 13:41:30 +01:00
Helium314
86f15e11d8 compose PersonalDictionariesScreen 2025-02-23 11:38:06 +01:00
Helium314
52c887e941 add dictionary screen and dialogs 2025-02-22 22:42:36 +01:00
Helium314
7494d85aea allow editing main layouts in subtype dialog 2025-02-22 12:21:26 +01:00
Helium314
f15f65daa8 properly handle layout deletion 2025-02-21 05:07:13 +01:00
Helium314
05fc53c96f move file pickers to separate composable 2025-02-21 05:04:57 +01:00
Helium314
4efc33dba4 fix toast spam in layout editor 2025-02-20 18:24:59 +01:00
Helium314
31f7ef6182 also rename layout in preferences when renaming the file 2025-02-20 18:11:23 +01:00
Helium314
d03801f22e make the "+" layouts selectable with normal name 2025-02-20 16:18:19 +01:00
Helium314
f7cf1762b5 add better icon for using default setting 2025-02-20 00:31:13 +01:00
Helium314
e7acef5396 fix editing "+" layouts, update todos 2025-02-19 23:56:02 +01:00
Helium314
35083e6515 do some inits on app create instead of in the services 2025-02-19 23:33:51 +01:00
Helium314
0899245ae7 use existing constants for NO_LANGUAGE and QWERTY 2025-02-19 23:06:52 +01:00
Helium314
8d094e268a make the settings overrides in subtype work 2025-02-19 23:00:58 +01:00
Helium314
eec197c32c cache subtype display names for improved performance 2025-02-17 19:32:02 +01:00
Helium314
40de17c148 solve some todos in SubtypeDialog 2025-02-17 19:19:08 +01:00
Helium314
47070c1086 change ShowMorePopupKeys to string
and some minor adjustments / comments
2025-02-17 15:55:31 +01:00
Md. Rifat Hasan Jihan
23a067187c
Removed redundant number row for bn-BD (#1369)
And formatted the json for better readability
2025-02-17 14:09:20 +01:00
Helium314
85382de881 add language screen (not finished) 2025-02-16 22:58:19 +01:00
Helium314
12f1e20d9f make popup order prefs shorter 2025-02-16 22:45:48 +01:00
Helium314
56c7748dff fix issues with restoring old settings 2025-02-16 20:32:32 +01:00
Helium314
0fa8f58750 fix issue with creating subtype extra value 2025-02-16 13:09:18 +01:00
Helium314
6f1e79caa1 fix issues with settings upgrades when starting from 0 2025-02-16 13:01:31 +01:00
Helium314
2c1d6a5f4c change subtypeSettings to object, so it's clear which init is called 2025-02-16 12:49:19 +01:00
Helium314
6e77437ea9 copy the dictonary cleanup and crash report checker to new settings 2025-02-16 10:57:38 +01:00
Helium314
a25ed6d5e0 store layouts in the same way in selected, enabled and additional layouts 2025-02-16 10:44:11 +01:00
Helium314
d005ffac06 modify some separators we don't get into trouble when storing more data in extra values, and when storing extra values in prefs 2025-02-15 21:45:26 +01:00
Helium314
4c060689fa shorter name for some functions for custom layouts 2025-02-15 20:11:27 +01:00
Helium314
bccb10ea39 store custom latin layouts with scripts instead of language tag, so they can be used across languages 2025-02-15 18:31:25 +01:00
Helium314
5ccc117ae1 remove unused layout edit preference, read layout edit errors immediately 2025-02-15 17:44:24 +01:00
Helium314
682a4ae911 improve handling of IME padding
still not really good...
2025-02-15 14:35:59 +01:00
Helium314
d8e9a004e5 reduce padding for LayoutEditDialog 2025-02-15 13:30:48 +01:00
Helium314
42f4561422 convert additionalSubtypeUtils to kotlin 2025-02-15 12:22:53 +01:00
Helium314
aa3bf37852 put LayoutUtilsCustom into an object 2025-02-15 11:39:53 +01:00
Helium314
a3e85bc664 add layout screen for choosing and editing default (non-main) layouts 2025-02-15 10:52:56 +01:00
Helium314
6b86ea236b use isError and trainingIcon to indicate invalid name for color 2025-02-15 02:43:01 +01:00
Helium314
5ba40f7875 adjust arrangement for layouts
so we can have more than one layout per type (was possible only for main)
2025-02-14 13:37:21 +01:00
Helium314
846388de97 better checks for custom json layouts
and a todo
2025-02-13 19:47:01 +01:00
Helium314
fe59a598b7 fix potential issue with not set autocorrect threshold
and an unintentionally changed default
2025-02-13 18:08:34 +01:00
Helium314
201b430362 change what can be stored in KeyboardLayoutSet subtype extra value
and some more preparations for adjustments related to language/layout settings upgrade
2025-02-13 17:29:51 +01:00
Helium314
f2f7426ee5 merge pref for toolbar normal and longpress codes
and remove old toolbar customizer dialog
2025-02-12 16:47:31 +01:00
Helium314
b31b8f8fe2 string resources for load and error dialogs in color theme picker 2025-02-12 05:52:13 +01:00
Helium314
767be15006 fix issues with loading / adding / removing user theme 2025-02-12 05:46:42 +01:00
Helium314
589179e626 fix button text in info dialog 2025-02-12 05:39:54 +01:00
Helium314
e105f39752 add option to load colors 2025-02-11 23:21:34 +01:00
Helium314
6d9763d079 add save color options to new colors screen 2025-02-11 22:43:29 +01:00
Helium314
cb08d32d14 slightly improve weird behavior 2025-02-11 22:16:18 +01:00
Helium314
9bb087b422 make sure the right theme is shown in colors screen
proobably there is a way to do it more straightforward...
2025-02-11 21:42:31 +01:00
Helium314
f8bdd7dd1c add menu for switching moreColors 2025-02-11 19:47:05 +01:00
Helium314
1484d7021e allow renaming user themes 2025-02-11 19:20:15 +01:00
Helium314
bd7e92bcf8 fix issues with color screen navigation 2025-02-11 18:21:02 +01:00
Helium314
63bda02cc4 upgrade user theme selection, now multiple themes are possible
currently missing: old "show more/all colors", and import/export
2025-02-11 17:40:53 +01:00
Helium314
40433bd8d2 move radiobuttons to left side in listpickerdialog 2025-02-11 15:23:14 +01:00
Helium314
5300c4d930 change how colors are stored (color and appearance settings currently not working properly)
with settings upgrade from previous version
version code increase to make sure colors are upgraded
2025-02-10 18:39:16 +01:00
Helium314
6dad54b83d switch spell checker settings to compose 2025-02-09 21:14:27 +01:00
Helium314
57313a4b79 directly start SettingsActivity when keyboard is selected 2025-02-09 20:18:30 +01:00
Helium314
2a76b49f3a fix wrong text on setting 2025-02-09 19:30:13 +01:00
Helium314
e36a20719f remove todos (was already mostly solved) 2025-02-09 19:08:17 +01:00
Helium314
d807e08195 put setting defaults in one place
notable exceptions: color settings
they will be re-done anyway...
2025-02-09 19:01:57 +01:00
Helium314
ecf7aabdb1 stricter checks for json layouts (and fix an old bug in hebrew layout) 2025-02-09 15:17:06 +01:00
Helium314
2700c3428a fix unexpected dialog dismisses 2025-02-09 14:36:01 +01:00
Helium314
b31d6d0051 add a ktx shortcut for default shared preferences 2025-02-09 14:23:44 +01:00
Helium314
125a483591 use context.prefs() instead of the long DeviceProtected... 2025-02-09 13:52:59 +01:00
Helium314
deb9dda7e7 consistently check for landscape when looking for portrait/landscape orientation 2025-02-09 13:36:25 +01:00
Helium314
e845e38e42
Settings upgrade (#1325)
Re-implement most of the settings in compose, searchable
Languages & Layouts, Colors, and Personal Dictionary still missing, will be done later
2025-02-09 13:27:55 +01:00
PurplePickleMonster
679754bb2d
Add toolbar option to toggle Split Keyboard Setting - Enhancement #1218 (#1263)
---------

Co-authored-by: Josh <joshtidal24@gmail.com>
Co-authored-by: Helium314 <helium314@mailbox.org>
2025-02-09 11:32:16 +01:00
Helium314
c0b3e76741 use backspace key event instead of deleteSurroundingText when a browser claims it does not have text before the cursor
fixes #1337
2025-02-06 22:48:45 +01:00
Helium314
7c77f4d1c4 add tests related to #210 2025-02-03 20:44:30 +01:00
Helium314
f2a46cfa9a disable undo-like functionality for textInput, fixes #1019 2025-02-03 00:20:48 +01:00
Helium314
73988394a9 improve detection of emojis when deleting 2025-02-03 00:11:34 +01:00
QuantumSoul
ad3086183d
Arabic Hija'i Layout (#1329)
---------

Co-authored-by: Helium314 <helium314@mailbox.org>
2025-02-02 21:52:07 +01:00
Helium314
d57301918e clarify that some parts of the contribution guidelines are (strongly) recommended, but not necessary 2025-02-02 21:50:33 +01:00
Md. Rifat Hasan Jihan
274c6b0212
Improve behavior for language swipe cycling (#1319)
---------

Co-authored-by: Helium314 <helium314@mailbox.org>
2025-02-02 21:46:11 +01:00
Eran Leshem
82ec37f339
Optionally show popup hints on number row (#1303) 2025-01-31 22:53:08 +01:00
Md. Rifat Hasan Jihan
0d48a18264
adjust unijoy layout for bn-BD (#1321) 2025-01-28 19:10:25 +01:00
Helium314
92bc79b7e6
Add side padding scale setting (#1309) 2025-01-26 17:31:23 +01:00
Helium314
635cd5f8da toolbar key activated state now responds to settings changes 2025-01-26 13:16:13 +01:00
Helium314
79c9a85082 better choice of color for deactivated toolbar key 2025-01-26 11:36:17 +01:00
Helium314
833aa321b9 rename stateList to pressedStateList for clarification 2025-01-26 11:27:40 +01:00
Helium314
54f222c0ee fix weird issue with toolbar keys having wrong color for their state
and remove related semi-workaround
2025-01-26 11:25:50 +01:00
Helium314
419c0d847b switch from start / stop one-handed mode key codes to a toggle code
mainly so there is no awkward state-dependent key code on the toolbar key
2025-01-26 09:48:21 +01:00
Helium314
5afb1e3a0c use custom font also for hint labels, fixes #1323 2025-01-26 09:31:32 +01:00
Helium314
105a6a7791 add font scale setting (separat for emoji view, because here it feels different)
fixes #1149
2025-01-26 09:27:48 +01:00
Helium314
f45f69f8a2 add setting for adjusting bottom padding in landscape mode
fixes some issue I can't currently find
slight issue: will remove the bottom padding on large tables (sw768-land), users need to get it back by switching to 100%
2025-01-26 09:10:07 +01:00
Helium314
fc12877795 fix additional subtypes being removed when upgrading from 2.2 beta or older 2025-01-23 16:53:26 +01:00
Helium314
453683a925 fix typo, add short text to contributing about app size 2025-01-23 00:54:09 +01:00
zyachel
05816e4436
fix link to license file in about screen (#1315) 2025-01-22 17:35:32 +01:00
Helium314
35e0fe6be3 add TLD information to LocaleKeyboardInfos
preparation for #492
2025-01-20 21:28:12 +01:00
Helium314
df8c0c6c59 switch tests from junit to kotlin.test (mostly) 2025-01-19 18:27:31 +01:00
Helium314
da8827efc3 migrate build.gradle to kts 2025-01-19 18:15:58 +01:00
Helium314
5283c5878c consider custom font in floating preview 2025-01-18 14:07:36 +01:00
Helium314
cde1a70427 avoid repeated checks for custom typeface when there is none 2025-01-18 12:49:57 +01:00
Helium314
789b533358 set custom typeface also in clipboard suggestion view
and rename read method to get
2025-01-18 12:45:26 +01:00
Helium314
c1bbf51fa1 add custom font file to backup
and remove outdated unnecessary text
2025-01-18 07:59:05 +01:00
Helium314
9edbbcf0ea add button to clear all custom toolbar codes 2025-01-18 07:55:50 +01:00
Helium314
9a2009d182 allow using user-provided font
fixes #494
2025-01-17 21:47:13 +01:00
Helium314
c581e9601b allow setting background image for landscape and portrait separately
fixes #798
2025-01-17 20:10:16 +01:00
Helium314
71d17f6792 update readme / templates / guidelines 2025-01-17 18:15:25 +01:00
Helium314
092cac529f add setting to autocorrect shortcuts
fixes #1287
2025-01-14 22:19:44 +01:00
Helium314
83b48b474e use the first non-typed suggestion for determining autocorrect
otherwise the correction score is sometimes based on the typed word, and not on the word that will be corrected to
2025-01-14 21:25:24 +01:00
Eran Leshem
8931f79b62
Add a Hebrew 1452-2 layout (#1288) 2025-01-13 23:13:06 +01:00
Helium314
df37e3589e move keyboard coordinate transformation to KeyboardActionListener as per ancient TODO 2025-01-13 22:40:37 +01:00
Helium314
10c0b64e45 only show default button in reorder dialog if default actually exists 2025-01-13 20:40:20 +01:00
Arsen Abdusalamov
a4b07d6de2
Add Dargwa(Urakhi) layout (#1127) 2025-01-13 20:26:46 +01:00
tenextractor
0076f04639
Greek accent/dead key support (#1240)
Greek accent/dead key support: simplify by making every combining accent key a dead key

---------

Co-authored-by: Helium314 <helium314@mailbox.org>
2025-01-13 20:12:01 +01:00
Helium314
4638709db5 add missing default for navbar_color in prefs, and change in SettingsValues 2025-01-13 17:18:07 +01:00
Helium314
44015f6857 upgrade test dependencies 2025-01-13 17:16:34 +01:00
Helium314
13e2260aab tiny update to contributon guidelines 2025-01-13 17:14:34 +01:00
Helium314
1e7ea7d699 rename LICENSE-GPL-3 to LICENSE because GitHub is stupid and wrongly shows Apache-2.0 (can't choose, only determined automatically) 2025-01-12 21:12:14 +01:00
Helium314
c2fdce9d58 upgrade emojis to unicode 16.0
and set default emoji SDK level to 21, as we don't support 19 any more
2025-01-12 21:10:06 +01:00
Helium314
7339000df3 allow overriding sdk level for determining which emojis are shown
might show that dreaded [x] symbol, but allows newer emojis on older android versions with upgraded fonts
2025-01-12 21:08:20 +01:00
Helium314
465fc86e61 add new groupId -1 for suppressing default popups e.g. on action or comma keys
fixes #1243
2025-01-12 21:04:32 +01:00
Helium314
7e3657185f prevent selected text being the first suggestion when overwriting with glide typing
fixes #1284
2025-01-12 21:02:29 +01:00
npnpatidar
de5968d04a
Add Hindi Phonetic layout (#1278) 2025-01-12 21:00:47 +01:00
Mario Restuccia
bf37a7f947
Add schwa ə for Italian (#1275)
Added lowercase schwa `ə` to Italian keyboard layout, for inclusive language use
2025-01-12 21:00:08 +01:00
640 changed files with 18728 additions and 14445 deletions

View file

@ -12,13 +12,14 @@ 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.

View file

@ -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 also 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 to see 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) -->

View file

@ -2,31 +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 accepted 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.
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. 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. 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

View file

@ -14,7 +14,6 @@ Does not use internet permission, and thus is 100% offline.
* [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)
@ -41,12 +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>
For FAQ and more information about the app and features, please visit the [wiki](https://github.com/Helium314/HeliBoard/wiki) 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)
# Contributing ❤ # Contributing ❤
@ -88,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

View file

@ -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 2301
versionName '2.3'
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.7.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
View 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 = 3005
versionName = "3.0-beta2"
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 = false
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"
packaging {
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")
}

View 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>

View file

@ -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" />

View file

@ -20,6 +20,7 @@ emoji,fr,
main,fr, main,fr,
main,gl, main,gl,
main,ka, main,ka,
main,de_CH,
main,de, main,de,
main,gom, main,gom,
main,el, main,el,
@ -77,6 +78,7 @@ main,hr,exp
main,cs,exp main,cs,exp
main,da,exp main,da,exp
main,nl,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

1 main ar
20 main fr
21 main gl
22 main ka
23 main de_CH
24 main de
25 main gom
26 main el
78 main cs exp
79 main da exp
80 main nl exp
81 main en_CA exp
82 main en_GB exp
83 main en_US exp
84 symbols en exp

View file

@ -1,34 +0,0 @@

View file

@ -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": "." }
]
]

View file

@ -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": "ম" }
}
]
]

View file

@ -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 }
] ]
] ]

View 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

View file

@ -0,0 +1,34 @@
ز
ر
ذ
د
خ
ح
ج
ث
ت
ب
ا
ك
ق
ف
غ
ع
ظ
ط
ض
ص
ش
س
ء
ى
ي
ؤ
و
ة
ن
م
ل

View 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

View 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": "ঁ" }]}}
}
]
]

View 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": "য" }]}}
}
]
]

View 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": "ঁ" }]}}
}
]
]

View 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": "শ" }]}}
}
]
]

View file

@ -0,0 +1,31 @@
ق
و
ە
ر
ت
ی
ێ
ئ
ۆ
پ
ا
س
ش
د
ف
ھ|ه
ژ
ل
ک
گ
ز
ع
ح
ج
چ
خ
ب
ن
م

View 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

View file

@ -0,0 +1,35 @@
й
ц
у ӯ ӱ ý ӱ́
к ҟ ҝ ҡ
е ē ë е́ ë́
н
г ґ ғ ꚕ
ш
щ
з ҙ
х ҳ ẋ
ъ
ф
ы
в w
а ā ӓ á ӓ́
п ԥ
р ҏ
о о̄ ӧ ó ӧ́
л
д
ж җ
э э̄ э́
Ӏ
я я̄ я́ ǽ æ ǣ
ч ҹ
с
м
и ӣ и́
т ԏ
ь
б ҕ
ю ю́

View 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

View 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

View file

@ -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": "ζ" },

View 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

View file

@ -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": {

View 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" }
]
} }
]
]

View 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": "ऀ"
}
]
}
}
}
]
]

View 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

View 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

View 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

View 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

View file

@ -8,7 +8,7 @@
ш ш
щ щ
з з
х х ъ [ {
ф ф
ы ы
@ -20,7 +20,7 @@
л л
д д
ж ж
э э э́ ] }
я я
ч ч

View file

@ -0,0 +1,34 @@
й
ц
у
к
е
н
г
ш
щ
з
х [ {
ъ ] }
ф
ы
в
а
п
р
о
л
д
ж
э э́
я
ч
с
м
и
т
ь
б <
ю >

View 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

View file

@ -8,7 +8,8 @@
ш ш
щ щ
з з
х х [ {
ї ] }
ф ф
і і
@ -20,7 +21,7 @@
л л
д д
ж ж
є є ' "
я я
ч ч
@ -30,4 +31,4 @@
т т
ь ь
б < б <
ю > ю > ґ

View file

@ -0,0 +1,35 @@
й
ц
у
к
е
н
г
ш
щ
з
х [ {
ї ] }
ф
і
в
а
п
р
о
л
д
ж
є ' "
' "
я
ч
с
м
и
т
ь
б <
ю > ґ

View 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

View file

@ -0,0 +1,44 @@
[
[
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "!" },
"default": { "label": "1", "popup": { "relevant": [{ "label": "¹" }, { "label": "½" }, { "label": "⅓" }, { "label": "¼" }, { "label": "⅛" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "@" },
"default": { "label": "2", "popup": { "relevant": [{ "label": "²" }, { "label": "⅔" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "#" },
"default": { "label": "3", "popup": { "relevant": [{ "label": "³" }, { "label": "¾" }, { "label": "⅜" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "$" },
"default": { "label": "4", "popup": { "relevant": [{ "label": "⁴" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "%" },
"default": { "label": "5", "popup": { "relevant": [{ "label": "⁵" }, { "label": "⅝" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "^" },
"default": { "label": "6", "popup": { "relevant": [{ "label": "⁶" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "&" },
"default": { "label": "7", "popup": { "relevant": [{ "label": "⁷" }, { "label": "⅞" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "*" },
"default": { "label": "8", "popup": { "relevant": [{ "label": "⁸" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": "(" },
"default": { "label": "9", "popup": { "relevant": [{ "label": "⁹" }] } }
},
{ "$": "shift_state_selector",
"manualOrLocked": { "label": ")" },
"default": { "label": "0", "popup": { "relevant": [{ "label": "⁰" }, { "label": "ⁿ" }, { "label": "∅" }] } }
}
]
]

View file

@ -7,4 +7,4 @@
7 ⁷ ⅞ 7 ⁷ ⅞
8 ⁸ 8 ⁸
9 ⁹ 9 ⁹
0 ⁰ ⁿ ∅ 0 ⁰ ⁿ ∅

Some files were not shown because too many files have changed in this diff Show more