├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── thumbkey.png
│ │ │ ├── font
│ │ │ │ └── nasin_nanpa_4_0_2.otf
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.webp
│ │ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.webp
│ │ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.webp
│ │ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.webp
│ │ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.webp
│ │ │ │ └── ic_launcher_round.webp
│ │ │ ├── xml
│ │ │ │ ├── method.xml
│ │ │ │ └── locales_config.xml
│ │ │ ├── drawable
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ └── thumb_key_icon.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values-cs
│ │ │ │ └── strings.xml
│ │ │ ├── values-ca
│ │ │ │ └── strings.xml
│ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── values-pl
│ │ │ │ └── strings.xml
│ │ │ └── values-zh-rCN
│ │ │ │ └── strings.xml
│ │ ├── ic_launcher-playstore.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── dessalines
│ │ │ │ └── thumbkey
│ │ │ │ ├── ui
│ │ │ │ ├── theme
│ │ │ │ │ ├── Type.kt
│ │ │ │ │ ├── Shape.kt
│ │ │ │ │ └── Theme.kt
│ │ │ │ └── components
│ │ │ │ │ ├── common
│ │ │ │ │ ├── TextFields.kt
│ │ │ │ │ └── Dialogs.kt
│ │ │ │ │ └── setup
│ │ │ │ │ └── SetupScreen.kt
│ │ │ │ ├── keyboards
│ │ │ │ ├── DEMessagEaseLeft.kt
│ │ │ │ ├── FAThumbKeySamsung.kt
│ │ │ │ ├── DEMessagEaseLeftInvertedNumpad.kt
│ │ │ │ ├── ENQBasedLeft.kt
│ │ │ │ ├── ENMessagEaseLeft.kt
│ │ │ │ ├── ENMessagEaseLeftSymbols.kt
│ │ │ │ ├── ENMessagEaseSymbolsTwoHands.kt
│ │ │ │ ├── HEMessagEase.kt
│ │ │ │ ├── NumericENDENL.kt
│ │ │ │ ├── ARThumbKeyLevant.kt
│ │ │ │ ├── NumericHyper.kt
│ │ │ │ ├── KAThumbKey.kt
│ │ │ │ ├── NumericFlipped.kt
│ │ │ │ ├── NumericArabic.kt
│ │ │ │ ├── NumericTypeSplit.kt
│ │ │ │ ├── Numeric.kt
│ │ │ │ ├── NumericFrenchTypeSplit.kt
│ │ │ │ ├── NumericMyanmar.kt
│ │ │ │ ├── NumericFarsiSamsung.kt
│ │ │ │ ├── HEThumbKey.kt
│ │ │ │ ├── NumericENMessagEase.kt
│ │ │ │ ├── NumericESMessagEase.kt
│ │ │ │ ├── NumericDual.kt
│ │ │ │ ├── NumericFrench.kt
│ │ │ │ ├── NumericFarsi.kt
│ │ │ │ ├── FAThumbKey.kt
│ │ │ │ ├── NumericPTEN.kt
│ │ │ │ ├── DEMessagEaseInvertedNumpad.kt
│ │ │ │ ├── NumericNordicMessagEase.kt
│ │ │ │ └── HEMessagEaseSymbols.kt
│ │ │ │ ├── textprocessors
│ │ │ │ └── TextProcessor.kt
│ │ │ │ ├── utils
│ │ │ │ └── AutoCapitalizers.kt
│ │ │ │ └── ComposeKeyboardView.kt
│ │ ├── assets
│ │ │ └── RELEASES.md
│ │ └── AndroidManifest.xml
│ └── debug
│ │ └── res
│ │ └── values
│ │ └── strings.xml
└── proguard-rules.pro
├── fastlane
└── metadata
│ └── android
│ ├── da
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── br
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── de
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── es
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── fr
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── ru
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── uk
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── en-US
│ ├── title.txt
│ ├── changelogs
│ │ ├── 6.txt
│ │ ├── 149.txt
│ │ ├── 148.txt
│ │ ├── 134.txt
│ │ ├── 161.txt
│ │ ├── 144.txt
│ │ ├── 135.txt
│ │ ├── 147.txt
│ │ ├── 157.txt
│ │ ├── 137.txt
│ │ ├── 132.txt
│ │ ├── 151.txt
│ │ ├── 133.txt
│ │ ├── 140.txt
│ │ ├── 139.txt
│ │ ├── 131.txt
│ │ ├── 150.txt
│ │ ├── 130.txt
│ │ ├── 152.txt
│ │ ├── 143.txt
│ │ ├── 158.txt
│ │ ├── 159.txt
│ │ ├── 141.txt
│ │ ├── 160.txt
│ │ ├── 146.txt
│ │ ├── 138.txt
│ │ ├── 153.txt
│ │ ├── 142.txt
│ │ ├── 164.txt
│ │ ├── 136.txt
│ │ ├── 163.txt
│ │ ├── 162.txt
│ │ ├── 156.txt
│ │ ├── 154.txt
│ │ ├── 165.txt
│ │ ├── 155.txt
│ │ └── 145.txt
│ ├── short_description.txt
│ ├── images
│ │ ├── icon.png
│ │ ├── phoneScreenshots
│ │ │ └── 1.png
│ │ └── userGuideImages
│ │ │ ├── modify_keys_example_1.png
│ │ │ ├── modify_keys_example_2.png
│ │ │ └── modify_keys_example_3.png
│ └── full_description.txt
│ └── fa
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
├── .editorconfig
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .github
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── feature_request.yml
│ ├── layout.yml
│ └── issue_report.yml
└── CODEOWNERS
├── renovate.json
├── .gitignore
├── settings.gradle
├── generate_changelog.sh
├── .woodpecker.yml
├── gradle.properties
├── cliff.toml
└── gradlew.bat
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/fastlane/metadata/android/da/title.txt:
--------------------------------------------------------------------------------
1 | Tommeltast
--------------------------------------------------------------------------------
/fastlane/metadata/android/br/title.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/title.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/title.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr/title.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/title.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/title.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fa/title.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key (کلید-شصتی)
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/6.txt:
--------------------------------------------------------------------------------
1 | An initial release.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/149.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fa/short_description.txt:
--------------------------------------------------------------------------------
1 | یک کیبرد محافظ حریم شخصی برای انگشت شصت شما
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*.{kt,kts}]
2 | ktlint_function_naming_ignore_when_annotated_with=Composable
3 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | A privacy-conscious keyboard made for your thumbs.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/da/short_description.txt:
--------------------------------------------------------------------------------
1 | Et privatlivsbevidst tastatur lavet til dine tommelfingre.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr/short_description.txt:
--------------------------------------------------------------------------------
1 | Un clavier respectueux de la vie privée conçu pour vos pouces.
--------------------------------------------------------------------------------
/app/src/main/res/thumbkey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/thumbkey.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/short_description.txt:
--------------------------------------------------------------------------------
1 | Eine privatsphären-respektierende Tastatur gemacht für deine Daumen.
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/short_description.txt:
--------------------------------------------------------------------------------
1 | Un teclado conciente de la privacidad hecho para tus pulgares.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/short_description.txt:
--------------------------------------------------------------------------------
1 | Конфиденциальная клавиатура, созданная для ваших больших пальцев.
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/short_description.txt:
--------------------------------------------------------------------------------
1 | Конфіденційна клавіатура, створена для ваших великих пальців.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/br/short_description.txt:
--------------------------------------------------------------------------------
1 | Ur c'hlavier graet evit ho pizied-meud hag a zouj ho buhez prevez.
2 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/src/debug/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Thumb-Key (Debug)
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/res/font/nasin_nanpa_4_0_2.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/font/nasin_nanpa_4_0_2.otf
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Discussion
4 | url: https://lemmy.ml/c/thumbkey
5 | about: Discussion board
6 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @dessalines @alerque
2 | app/src/main/java/com/dessalines/thumbkey/keyboards/TRArti.kt @alerque
3 | app/src/main/java/com/dessalines/thumbkey/keyboards/RUArti.kt @alerque
4 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": ["config:recommended"],
4 | "schedule": ["every weekend"],
5 | "automerge": true
6 | }
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/userGuideImages/modify_keys_example_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/fastlane/metadata/android/en-US/images/userGuideImages/modify_keys_example_1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/userGuideImages/modify_keys_example_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/fastlane/metadata/android/en-US/images/userGuideImages/modify_keys_example_2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/userGuideImages/modify_keys_example_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dessalines/thumb-key/HEAD/fastlane/metadata/android/en-US/images/userGuideImages/modify_keys_example_3.png
--------------------------------------------------------------------------------
/app/src/main/res/xml/method.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/ui/theme/Type.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey.ui.theme
2 |
3 | import androidx.compose.material3.Typography
4 |
5 | // Set of Material typography styles to start with
6 | val Typography = Typography()
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea
5 | .DS_Store
6 | /build
7 | /*/build/
8 | /captures
9 | /Gemfile*
10 | .externalNativeBuild
11 | .cxx
12 | local.properties
13 | app/release
14 | app/schemas
15 | .project
16 | .settings
17 | .classpath
18 | .kotlin
19 | build.sh
20 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/148.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.30
2 |
3 | - Fixing key mods. by @dessalines in [#1374](https://github.com/dessalines/thumb-key/pull/1374)
4 |
5 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.29...4.0.30
6 |
7 |
8 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/134.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.16
2 |
3 | - Fix ´ compose in dvorak Shifted by @lyluqo in [#1238](https://github.com/dessalines/thumb-key/pull/1238)
4 |
5 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.15...4.0.16
6 |
7 |
8 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/161.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 5.0.6
2 |
3 | - add top bottom key actions (closes #1418) by @pohmelie in [#1512](https://github.com/dessalines/thumb-key/pull/1512)
4 |
5 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.5...5.0.6
6 |
7 |
8 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/144.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.26
2 |
3 | - ENMessagEaseSymbolsModifiers: Enter & Tab by @W-Bosman in [#1331](https://github.com/dessalines/thumb-key/pull/1331)
4 |
5 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.25...4.0.26
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionSha256Sum=72f44c9f8ebcb1af43838f45ee5c4aa9c5444898b3468ab3f4af7b6076c5bc3f
4 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
5 | networkTimeout=10000
6 | validateDistributionUrl=true
7 | zipStoreBase=GRADLE_USER_HOME
8 | zipStorePath=wrapper/dists
9 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/135.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.17
2 |
3 | - Relatively large change to JAKanaThumbKey.kt by @K0baU in [#1241](https://github.com/dessalines/thumb-key/pull/1241)
4 | - Add Breton translation by @zeecho in [#1240](https://github.com/dessalines/thumb-key/pull/1240)
5 |
6 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.16...4.0.17
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/ui/theme/Shape.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey.ui.theme
2 |
3 | import androidx.compose.foundation.shape.RoundedCornerShape
4 | import androidx.compose.material3.Shapes
5 | import androidx.compose.ui.unit.dp
6 |
7 | val Shapes =
8 | Shapes(
9 | small = RoundedCornerShape(4.dp),
10 | medium = RoundedCornerShape(4.dp),
11 | large = RoundedCornerShape(0.dp),
12 | )
13 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/147.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.29
2 |
3 | - Using lets instead of null and empty checks. by @dessalines in [#1369](https://github.com/dessalines/thumb-key/pull/1369)
4 | - feature/key_modifications by @Toldry in [#1364](https://github.com/dessalines/thumb-key/pull/1364)
5 |
6 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.28...4.0.29
7 |
8 |
9 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/157.txt:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | ## What's Changed in 5.0.2
6 |
7 | - Revert "Fix bottom padding for Android 15+ " by @dessalines in [#1465](https://github.com/dessalines/thumb-key/pull/1465)
8 |
9 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.1...5.0.2
10 |
11 |
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/137.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.19
2 |
3 | - add hyper layout by @luminespire in [#1260](https://github.com/dessalines/thumb-key/pull/1260)
4 |
5 | ## New Contributors
6 |
7 | - @luminespire made their first contribution in [#1260](https://github.com/dessalines/thumb-key/pull/1260)
8 |
9 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.18...4.0.19
10 |
11 |
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/132.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.14
2 |
3 | - Update NumericWide ° \* # by @lyluqo in [#1227](https://github.com/dessalines/thumb-key/pull/1227)
4 | - Fix swipe types of NumericWide by @lyluqo in [#1226](https://github.com/dessalines/thumb-key/pull/1226)
5 | - Fix dvorak compose ´ by @lyluqo in [#1225](https://github.com/dessalines/thumb-key/pull/1225)
6 |
7 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.13...4.0.14
8 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/151.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.33
2 |
3 | - Merge remote-tracking branch 'refs/remotes/origin/main' by @dessalines
4 | - modify keys: support keyboards up to size 10x10 by @Toldry in [#1386](https://github.com/dessalines/thumb-key/pull/1386)
5 | - feat: added `keyAction` to key mods by @Toldry in [#1385](https://github.com/dessalines/thumb-key/pull/1385)
6 |
7 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.32...4.0.33
8 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/133.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.15
2 |
3 | - Layout portuguese dvorak wide by @lyluqo in [#1234](https://github.com/dessalines/thumb-key/pull/1234)
4 | - Add Tab, Esc in dvorak-wide by @lyluqo in [#1232](https://github.com/dessalines/thumb-key/pull/1232)
5 | - Add Breton French compose keyboard by @zeecho in [#1231](https://github.com/dessalines/thumb-key/pull/1231)
6 |
7 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.14...4.0.15
8 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/140.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.22
2 |
3 | - Add voice input option to README.md by @jm355 in [#1286](https://github.com/dessalines/thumb-key/pull/1286)
4 | - Update ENThumbKeyWordsSymbols.kt by @jm355 in [#1282](https://github.com/dessalines/thumb-key/pull/1282)
5 | - Slightly loosen password field definition for disabling animations by @bklaase in [#1280](https://github.com/dessalines/thumb-key/pull/1280)
6 |
7 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.21...4.0.22
8 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/139.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.21
2 |
3 | - adds variant layout: English Twohanded with symbols, numbers, and arrows by @bklaase in [#1278](https://github.com/dessalines/thumb-key/pull/1278)
4 | - Add "I'll" autocapitalizer for word layout by @jm355 in [#1275](https://github.com/dessalines/thumb-key/pull/1275)
5 | - neon theme make purple slightly brighter. by @bklaase in [#1276](https://github.com/dessalines/thumb-key/pull/1276)
6 |
7 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.20...4.0.21
8 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/131.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.13
2 |
3 | - Adding Arabic levant thumbkey keyboard. by @dessalines in [#1224](https://github.com/dessalines/thumb-key/pull/1224)
4 | - Support for CTRL&ALT modified keyboards. ENMessagEaseSymbolsModified. by @W-Bosman in [#1220](https://github.com/dessalines/thumb-key/pull/1220)
5 |
6 | ## New Contributors
7 |
8 | - @W-Bosman made their first contribution in [#1220](https://github.com/dessalines/thumb-key/pull/1220)
9 |
10 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.12...4.0.13
11 |
12 |
13 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/150.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.32
2 |
3 | - Fix issue: key modifications screen shows error by @Toldry in [#1377](https://github.com/dessalines/thumb-key/pull/1377)
4 | - Added greek keyboards with greek layout and greek character accents by @VMichailidis in [#1376](https://github.com/dessalines/thumb-key/pull/1376)
5 |
6 | ## New Contributors
7 |
8 | - @VMichailidis made their first contribution in [#1376](https://github.com/dessalines/thumb-key/pull/1376)
9 |
10 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.31...4.0.32
11 |
12 |
13 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/130.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.12
2 |
3 | - Adding fastlane generation. by @dessalines in [#1219](https://github.com/dessalines/thumb-key/pull/1219)
4 | - Using a center-aligned app bar. by @dessalines in [#1217](https://github.com/dessalines/thumb-key/pull/1217)
5 | - Fixing icon dep. by @dessalines in [#1214](https://github.com/dessalines/thumb-key/pull/1214)
6 | - Add Layout english dvorak wide compose by @lyluqo in [#1213](https://github.com/dessalines/thumb-key/pull/1213)
7 |
8 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.11...4.0.12
9 |
10 |
11 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | gradlePluginPortal()
4 | google()
5 | mavenCentral()
6 | }
7 | plugins {
8 | id 'com.android.application' version '8.13.2'
9 | id 'com.android.library' version '8.13.2'
10 | id 'org.jetbrains.kotlin.android' version '2.2.21'
11 | }
12 | }
13 | dependencyResolutionManagement {
14 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
15 | repositories {
16 | google()
17 | mavenCentral()
18 | maven { url 'https://jitpack.io' }
19 | }
20 | }
21 | rootProject.name = "com.dessalines.thumbkey"
22 | include ':app'
23 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/locales_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/152.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.34
2 |
3 | - added combining marks example by @Toldry in [#1395](https://github.com/dessalines/thumb-key/pull/1395)
4 | - Adjust Vietnamese layout to use correct tone marks by @3T1C in [#1391](https://github.com/dessalines/thumb-key/pull/1391)
5 | - Adding android lint. by @dessalines in [#1390](https://github.com/dessalines/thumb-key/pull/1390)
6 |
7 | ## New Contributors
8 |
9 | - @3T1C made their first contribution in [#1391](https://github.com/dessalines/thumb-key/pull/1391)
10 |
11 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.33...4.0.34
12 |
13 |
14 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/143.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.25
2 |
3 | - Add turkish locale.
4 | - A few code fixes. by @dessalines in [#1313](https://github.com/dessalines/thumb-key/pull/1313)
5 | - Adding DE_THUMBKEY_WORDS layout. by @dessalines in [#1312](https://github.com/dessalines/thumb-key/pull/1312)
6 |
7 | ## New Contributors
8 |
9 | - @weblate made their first contribution in [#1316](https://github.com/dessalines/thumb-key/pull/1316)
10 | - @dessalines made their first contribution in [#1313](https://github.com/dessalines/thumb-key/pull/1313)
11 |
12 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.24...4.0.25
13 |
14 |
15 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/158.txt:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | ## What's Changed in 5.0.3
6 |
7 | - Adding setting to ignore bottom padding. by @dessalines in [#1477](https://github.com/dessalines/thumb-key/pull/1477)
8 | - Update README.md by @Toldry in [#1480](https://github.com/dessalines/thumb-key/pull/1480)
9 | - Move migrations to own file. by @dessalines in [#1479](https://github.com/dessalines/thumb-key/pull/1479)
10 | - Fix a few stringres param issues. by @dessalines in [#1478](https://github.com/dessalines/thumb-key/pull/1478)
11 |
12 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.2...5.0.3
13 |
14 |
15 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/159.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 5.0.4
2 |
3 | - limfjorden's PR by @dessalines in [#1496](https://github.com/dessalines/thumb-key/pull/1496)
4 | - add "show toast on layout switch" option by @pohmelie in [#1495](https://github.com/dessalines/thumb-key/pull/1495)
5 | - feat: Add swipeReturn to key mods by @Toldry in [#1493](https://github.com/dessalines/thumb-key/pull/1493)
6 | - add extensionDefinitionPrefix to key mods YAML by @Toldry in [#1492](https://github.com/dessalines/thumb-key/pull/1492)
7 | - Update README.md by @Toldry in [#1490](https://github.com/dessalines/thumb-key/pull/1490)
8 |
9 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.3...5.0.4
10 |
11 |
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/141.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.23
2 |
3 | - Update Hyper symbol layer and punctuation by @luminespire in [#1293](https://github.com/dessalines/thumb-key/pull/1293)
4 | - Update old br-fr keyboards and create a new BRFRThumbKeyV3 by @zeecho in [#1290](https://github.com/dessalines/thumb-key/pull/1290)
5 | - Draft: use minSwipeLength setting for DragReturn and Circular detection by @stfstf123 in [#1244](https://github.com/dessalines/thumb-key/pull/1244)
6 |
7 | ## New Contributors
8 |
9 | - @stfstf123 made their first contribution in [#1244](https://github.com/dessalines/thumb-key/pull/1244)
10 |
11 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.22...4.0.23
12 |
13 |
14 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/160.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 5.0.5
2 |
3 | - adds new layout: english twohands symbols numbers arrows compact. by @bklaase in [#1507](https://github.com/dessalines/thumb-key/pull/1507)
4 | - Remove mention of the deprecated moving cursor up or down lines from the README by @JulienVig in [#1506](https://github.com/dessalines/thumb-key/pull/1506)
5 | - Add option to disable fullscreen editor by @jm355 in [#1499](https://github.com/dessalines/thumb-key/pull/1499)
6 |
7 | ## New Contributors
8 |
9 | - @JulienVig made their first contribution in [#1506](https://github.com/dessalines/thumb-key/pull/1506)
10 |
11 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.4...5.0.5
12 |
13 |
14 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/146.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.28
2 |
3 | - added flipped numpad layout for EN thumbkey by @axolotl-being in [#1363](https://github.com/dessalines/thumb-key/pull/1363)
4 | - Adding DE_TYPESPLIT_IMPROVED. by @dessalines in [#1360](https://github.com/dessalines/thumb-key/pull/1360)
5 | - fixed Hebrew final letters by @Toldry in [#1349](https://github.com/dessalines/thumb-key/pull/1349)
6 |
7 | ## New Contributors
8 |
9 | - @axolotl-being made their first contribution in [#1363](https://github.com/dessalines/thumb-key/pull/1363)
10 | - @Toldry made their first contribution in [#1349](https://github.com/dessalines/thumb-key/pull/1349)
11 |
12 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.27...4.0.28
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/DEMessagEaseLeft.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.KeyboardDefinition
6 | import com.dessalines.thumbkey.utils.KeyboardDefinitionModes
7 | import com.dessalines.thumbkey.utils.lastColKeysToFirst
8 |
9 | val KB_DE_MESSAGEASE_LEFT: KeyboardDefinition =
10 | KeyboardDefinition(
11 | title = "deutsch messagease left-handed",
12 | modes =
13 | KeyboardDefinitionModes(
14 | main = lastColKeysToFirst(KB_DE_MESSAGEASE_MAIN),
15 | shifted = lastColKeysToFirst(KB_DE_MESSAGEASE_SHIFTED),
16 | numeric = lastColKeysToFirst(KB_EN_MESSAGEASE_NUMERIC),
17 | ),
18 | )
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/FAThumbKeySamsung.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_FA_THUMBKEY_SAMSUNG: KeyboardDefinition =
12 | KeyboardDefinition(
13 | title = "فارسی thumb-key samsung",
14 | modes =
15 | KeyboardDefinitionModes(
16 | main = KB_FA_THUMBKEY_MAIN,
17 | shifted = KB_FA_THUMBKEY_MAIN,
18 | numeric = FARSI_NUMERIC_SAMSUNG_KEYBOARD,
19 | ),
20 | )
21 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/138.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.20
2 |
3 | - Slight tweaks to en typesplit programming layout by @bklaase in [#1274](https://github.com/dessalines/thumb-key/pull/1274)
4 | - add English Typesplit layout, optimized for programming by @bklaase in [#1272](https://github.com/dessalines/thumb-key/pull/1272)
5 | - add hyper space and minor fixes to hyper by @luminespire in [#1268](https://github.com/dessalines/thumb-key/pull/1268)
6 | - Add layout with words and common symbols by @jm355 in [#1262](https://github.com/dessalines/thumb-key/pull/1262)
7 | - Update README.md to include other voice input option (transcribro) by @jm355 in [#1263](https://github.com/dessalines/thumb-key/pull/1263)
8 |
9 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.19...4.0.20
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/DEMessagEaseLeftInvertedNumpad.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.KeyboardDefinition
6 | import com.dessalines.thumbkey.utils.KeyboardDefinitionModes
7 | import com.dessalines.thumbkey.utils.lastColKeysToFirst
8 |
9 | val KB_DE_MESSAGEASE_LEFT_INVERTED_NUMPAD: KeyboardDefinition =
10 | KeyboardDefinition(
11 | title = "deutsch messagease left-handed, inverted numpad",
12 | modes =
13 | KeyboardDefinitionModes(
14 | main = lastColKeysToFirst(KB_DE_MESSAGEASE_MAIN),
15 | shifted = lastColKeysToFirst(KB_DE_MESSAGEASE_SHIFTED),
16 | numeric = lastColKeysToFirst(KB_DE_MESSAGEASE_INVERTED_NUMPAD_NUMERIC),
17 | ),
18 | )
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/153.txt:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | ## What's Changed in 4.0.35
6 |
7 | - Merge remote-tracking branch 'refs/remotes/origin/main' by @dessalines
8 | - Merge remote-tracking branch 'refs/remotes/origin/main' by @dessalines
9 | - fix emoji picker ignoring navigationBars in Android 15 by @mruncreative in [#1413](https://github.com/dessalines/thumb-key/pull/1413)
10 | - Added Keyboard: MessagEase German Left / Inverted Numpad by @beeh5 in [#1408](https://github.com/dessalines/thumb-key/pull/1408)
11 |
12 | ## New Contributors
13 |
14 | - @beeh5 made their first contribution in [#1408](https://github.com/dessalines/thumb-key/pull/1408)
15 |
16 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.34...4.0.35
17 |
18 |
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/142.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.24
2 |
3 | - Toki Pona keyboard improvments by @nfd9001 in [#1308](https://github.com/dessalines/thumb-key/pull/1308)
4 | - Smart Quotes „“ Tested by @mruncreative in [#1309](https://github.com/dessalines/thumb-key/pull/1309)
5 | - Add ENESCATwoHands layout by @josereyesjrz in [#1301](https://github.com/dessalines/thumb-key/pull/1301)
6 |
7 | ## New Contributors
8 |
9 | - @nfd9001 made their first contribution in [#1308](https://github.com/dessalines/thumb-key/pull/1308)
10 | - @mruncreative made their first contribution in [#1309](https://github.com/dessalines/thumb-key/pull/1309)
11 | - @josereyesjrz made their first contribution in [#1301](https://github.com/dessalines/thumb-key/pull/1301)
12 |
13 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.23...4.0.24
14 |
15 |
16 |
--------------------------------------------------------------------------------
/generate_changelog.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | # Creating the new tag and version code
5 | new_tag="$1"
6 | new_version_code="$2"
7 |
8 | # Replacing the versions in the app/build.gradle.kts
9 | app_build_gradle="app/build.gradle.kts"
10 | sed -i "s/versionCode = .*/versionCode = $new_version_code/" $app_build_gradle
11 | sed -i "s/versionName = .*/versionName = \"$new_tag\"/" $app_build_gradle
12 |
13 | # Writing to the Releases.md asset that's loaded inside the app
14 | tmp_file="tmp_release.md"
15 | assets_releases="app/src/main/assets/RELEASES.md"
16 | git cliff --unreleased --tag "$new_tag" --output $tmp_file
17 | prettier -w $tmp_file
18 |
19 | cp $tmp_file $assets_releases
20 | rm $tmp_file
21 |
22 | # Adding to RELEASES.md
23 | git cliff --tag "$new_tag" --output RELEASES.md
24 | prettier -w RELEASES.md
25 |
26 | # Add them all to git
27 | git add $assets_releases $app_build_gradle RELEASES.md
28 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key is a privacy-conscious smart keyboard, made specifically for your thumbs.
2 |
3 | It features a 3x3 grid layout, and uses swipes for the less common letters. Its easy to learn, and designed for fast typing speeds.
4 |
5 | Instead of relying on profit-driven, privacy-offending word and sentence prediction for accuracy, as do most popular phone keyboards like Gboard and Swiftkey, Thumb-Key uses large keys with predictable positions, to prevent your eyes from hunting and pecking for letters.
6 |
7 | As the key positions get ingrained into your muscle memory, eventually you'll be able to appromixate the fast speeds of touch-typing, your eyes never having to leave the text edit area.
8 |
9 | This project is a follow-up to the now unmaintained (and closed-source) MessagEase Keyboard, which is its main inspiration.
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fa/full_description.txt:
--------------------------------------------------------------------------------
1 | Thumb-key یک کیبرد هوشمند و محافظ حریم شخصی است، که به صورت ویژه برای انگشت شصت شما طراحی شده.
2 |
3 | این برنامه یک لایه شبکه ای 3 در 3 را در اختیار شما میگذارد، و از کشیدن انگشت برای کلمات کمتر رایج استفاده میکند. بسیار ساده برای یادگیری و طراحی شده برای تایپ کردن سریع است.
4 |
5 | به جای اتکا به سود محور بودن، حدس زدن کلمات و جملات بعدی شما به شکلی ناقض حریم خصوصی به بهانه دقت، طوری که اکثر کیبردها مثل Gboard یا Swift key انجام میدهد، Thumb-key از کلید های بزرگ با مکان قابل حدس استفاده میکند، تا چشم شما به دنبال مکان کلمات روی کیبرد نباشد.
6 |
7 | همچنان که جای کلیدها در حافظه عضلانی شما ذخیره میشود، به مرور شما میتوانید مکان حدودی کلیدهای لمسی را یاد بگیرید، و چشم شما هرگز منقطه ویرایش متن را ترک نخواهد کرد.
8 |
9 | این پروژه یک دنبال از MessagEase Keyboard است که دیگر نگهداری نمیشود (و متن بسته است)، که منبع اصلی الهام آن است.
--------------------------------------------------------------------------------
/fastlane/metadata/android/da/full_description.txt:
--------------------------------------------------------------------------------
1 | Tommeltast er et privatlivsbevidst smart tastatur, lavet specifikt til dine tommelfingre.
2 |
3 | Det består af et 3x3 tastaturgitter, og benytter swipes til de mindre hyppige bogstaver.
4 |
5 | I stedet for at være afhænging af profitdreven og privatlivskrænkende forudsigelse af ord og sætninger, som de fleste populære tastaturer som Gboard og Swiftkey, bruger Tommeltast store taster med forudsigelige positioner. På den måde kan præcision stadig opnås, og samtdig behøver dine øjne ikke søge og prikke præcist efter bogstaver.
6 |
7 | Efterhånden som tasternes positioner bliver indgroede i din fingre, vil du nå samme hastighed som ved normal tastning uden at behøve at kigge på tastaturet, mens du skriver.
8 |
9 | Dette projekt er en efterfølger til det nu forladte (og closed-source) MessagEase Tastatur, hvilket er projektes største inspirationskilde.
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/164.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 5.0.9
2 |
3 | - Adding a few keyboards. by @dessalines in [#1611](https://github.com/dessalines/thumb-key/pull/1611)
4 | - Update FRENFrappeFluideV1: Better spot for backtick, on main layer by @jiquiame in [#1598](https://github.com/dessalines/thumb-key/pull/1598)
5 | - Update FRENFrappeFluideV1: Add ff and gh by @jiquiame in [#1594](https://github.com/dessalines/thumb-key/pull/1594)
6 | - Update FRENFrappeFluideV1: Add # to principal layer in [#1590](https://github.com/dessalines/thumb-key/pull/1590)
7 | - switch language resets to main by @Toldry in [#1586](https://github.com/dessalines/thumb-key/pull/1586)
8 |
9 | ## New Contributors
10 |
11 | - @jiquiame made their first contribution in [#1598](https://github.com/dessalines/thumb-key/pull/1598)
12 |
13 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.8...5.0.9
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | -dontwarn okhttp3.internal.platform.**
23 | -dontwarn org.conscrypt.**
24 | -dontwarn org.bouncycastle.**
25 | -dontwarn org.openjsse.**
26 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/full_description.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key - це розумна клавіатура, яка зосереджена на конфіденційності і створена спеціально для ваших великих пальців.
2 |
3 | Вона має макет сітки 3x3 і використовує гортання для менш поширених літер. Її легко освоїти та розроблено для швидкого введення тексту.
4 |
5 | Замість того, щоб покладатися на точність передбачення слів і речень, орієнтованих на отримання прибутку та порушення конфіденційності, як роблять більшість популярних телефонних клавіатур, таких як Gboard і Swiftkey, Thumb-Key використовує великі клавіші з передбачуваним положенням, щоб ваші очі не шукали букви.
6 |
7 | Коли ключові позиції закріпляться у вашій м'язовій пам'яті, ви зможете засвоїти високу швидкість набору тексту, не відриваючи очей від області редагування тексту.
8 |
9 | Цей проект є продовженням клавіатури MessagEase Keyboard, яка зараз не підтримується (і має закритий код), і є головним джерелом натхнення.
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/full_description.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key - это клавиатура с акцентом на конфиденциальность, созданная специально для ваших больших пальцев.
2 |
3 | Она предлагает сетку раскладки 3x3 и использует свайпы для редко используемых букв. Легко осваивается и разработана для быстрого набора текста.
4 |
5 | В отличие от популярных клавиатур, таких как Gboard и SwiftKey, которые полагаются на предсказание слов и нарушают конфиденциальность в целях прибыли, Thumb-Key использует большие клавиши с предсказуемым расположением, чтобы ускорить набор текста и сократить время поиска букв на клавиатуре.
6 |
7 | После того как положение клавиш запомнится вашей мускульной памятью, вы сможете достичь скорости набора близкой к той, которую можно достичь с техникой слепой печати, не отводя глаз от области редактирования текста.
8 |
9 | Главным вдохновлением для этого проекта послужила клавиатура MessagEase Keyboard, которая имеет закрытый код и больше не поддерживается.
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/136.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.18
2 |
3 | - Theme/neon -> slightly mute purple to better fit android app palettes by @bklaase in [#1259](https://github.com/dessalines/thumb-key/pull/1259)
4 | - Add Neon theme(s) by @bklaase in [#1258](https://github.com/dessalines/thumb-key/pull/1258)
5 | - Skipping weblate updates for git cliff. by @dessalines
6 | - Adding more weblate share to readme. by @dessalines in [#1246](https://github.com/dessalines/thumb-key/pull/1246)
7 | - Use svg badge by @dessalines
8 | - Adding weblate translations url. by @dessalines in [#1242](https://github.com/dessalines/thumb-key/pull/1242)
9 |
10 | ## New Contributors
11 |
12 | - @bklaase made their first contribution in [#1259](https://github.com/dessalines/thumb-key/pull/1259)
13 | - @weblate made their first contribution in [#1247](https://github.com/dessalines/thumb-key/pull/1247)
14 |
15 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.17...4.0.18
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/ENQBasedLeft.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_EN_QBASED_LEFT: KeyboardDefinition =
12 | KeyboardDefinition(
13 | title = "english qbased left-handed",
14 | modes =
15 | KeyboardDefinitionModes(
16 | main = lastColKeysToFirst(KB_EN_QBASED_MAIN),
17 | shifted = lastColKeysToFirst(KB_EN_QBASED_SHIFTED),
18 | numeric = lastColKeysToFirst(NUMERIC_KEYBOARD),
19 | ),
20 | settings =
21 | KeyboardDefinitionSettings(
22 | autoCapitalizers = arrayOf(::autoCapitalizeI, ::autoCapitalizeIApostrophe),
23 | ),
24 | )
25 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/br/full_description.txt:
--------------------------------------------------------------------------------
1 | Ur c'hlavier speredek doujus d'ar vuhez prevez eo Thumb-Key, graet eo bet evit ho pizied-meud.
2 |
3 | Implijet e vez ur gael 3x3 gantañ hag arveret ar mod riklañ (swipe) evit al lizherennoù ar rouezañ. Aes eo da zeskiñ ha krouet e oa bet evit skrivañ buan.
4 |
5 | E-lec'h kaout fiziañs e kinnigoù gerioù diazezet war pal arc'hantus hag a lak ho puhez prevez en arvar evel ma vez graet gant ar c'hlavierioù Android ar brudetañ evel Gboard ha Swiftkey, arverañ a ra Thumb-key stokelloù ledan gant lec'hiadurioù stabil evit mirout ho taoulagad ouzh mont da chaseal al lizherennoù.
6 |
7 | Tamm-ha-tamm e vo gwriziaouet lec'hiadurioù al lizherennoù e-barzh ho memor kigennel hag a-benn ar fin e c'hallit tostaat eus an tizh skrivañ gant klavier mod urzhiataer hep kaout ezhomm sellet ouzh un dra all eget ar vaezienn destenn.
8 |
9 | Warlec'hiad klavier kozh (ha gant tarzh serret) MessagEase Keyboard eo ar raktres-mañ. E awen pennañ eo hemañ.
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/full_description.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key es un teclado inteligente enfocado en la privacidad, hecho específicamente para tus pulgares.
2 |
3 | Se caracteriza por su rejilla 3x3, y utiliza deslizamientos para las letras menos comunes. Es fácil de aprender y está diseñado para escribir a gran velocidad.
4 |
5 | En lugar de basarse en la predicción de palabras y frases con fines lucrativos y que atentan contra la privacidad, como hacen la mayoría de los teclados telefónicos populares como Gboard y Swiftkey, Thumb-Key utiliza teclas grandes con posiciones predecibles, para evitar que tus ojos busquen y picoteen letras.
6 |
7 | A medida que las posiciones de las teclas se arraiguen en tu memoria muscular, serás capaz de asimilar las rápidas velocidades de la escritura táctil, sin tener que apartar los ojos del área de edición de texto.
8 |
9 | Este proyecto es una continuación del ya sin mantenimiento (y de código cerrado) Teclado MessagEase, que es su principal inspiración.
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/ENMessagEaseLeft.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_EN_MESSAGEASE_LEFT: KeyboardDefinition =
12 | KeyboardDefinition(
13 | title = "english messagease left-handed",
14 | modes =
15 | KeyboardDefinitionModes(
16 | main = lastColKeysToFirst(KB_EN_MESSAGEASE_MAIN),
17 | shifted = lastColKeysToFirst(KB_EN_MESSAGEASE_SHIFTED),
18 | numeric = lastColKeysToFirst(KB_EN_MESSAGEASE_NUMERIC),
19 | ),
20 | settings =
21 | KeyboardDefinitionSettings(
22 | autoCapitalizers = arrayOf(::autoCapitalizeI, ::autoCapitalizeIApostrophe),
23 | ),
24 | )
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/textprocessors/TextProcessor.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey.textprocessors
2 |
3 | import android.view.KeyEvent
4 | import com.dessalines.thumbkey.IMEService
5 |
6 | interface TextProcessor {
7 | // intercepts text to be committed
8 | fun handleCommitText(
9 | ime: IMEService,
10 | input: CharSequence,
11 | )
12 |
13 | // intercepts non-text key events (e.g. ENTER, DEL, DPAD)
14 | fun handleKeyEvent(
15 | ime: IMEService,
16 | ev: KeyEvent,
17 | )
18 |
19 | // notifies before input ends (e.g. keyboard hidden) or other IME action (eg. copy, paste, emoji mode toggle)
20 | fun handleFinishInput(ime: IMEService)
21 |
22 | // notifies on selection update
23 | fun handleCursorUpdate(
24 | ime: IMEService,
25 | oldSelStart: Int,
26 | oldSelEnd: Int,
27 | newSelStart: Int,
28 | newSelEnd: Int,
29 | )
30 |
31 | // manually update position after switching layouts
32 | fun updateCursorPosition(ime: IMEService)
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/ENMessagEaseLeftSymbols.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_EN_MESSAGEASE_LEFT_SYMBOLS: KeyboardDefinition =
12 | KeyboardDefinition(
13 | title = "english messagease left-handed symbols",
14 | modes =
15 | KeyboardDefinitionModes(
16 | main = lastColKeysToFirst(KB_EN_MESSAGEASE_SYMBOLS_MAIN),
17 | shifted = lastColKeysToFirst(KB_EN_MESSAGEASE_SYMBOLS_SHIFTED),
18 | numeric = lastColKeysToFirst(KB_EN_MESSAGEASE_NUMERIC),
19 | ),
20 | settings =
21 | KeyboardDefinitionSettings(
22 | autoCapitalizers = arrayOf(::autoCapitalizeI, ::autoCapitalizeIApostrophe),
23 | ),
24 | )
25 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr/full_description.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key est un clavier intelligent respectueux de la vie privée, conçu spécialement pour vos pouces.
2 |
3 | Il est constitué d'une grille 3x3, et utilise le balayage (swipe) pour les lettres les moins fréquentes. C'est facile à apprendre, et conçu pour une écriture rapide.
4 |
5 | Au lieu de s'appuyer sur une prédiction des mots et des phrases basée sur le profit et portant atteinte à la vie privée, comme le font les claviers Android les plus populaires comme Gboard et Swiftkey, Thumb-Key utilise de larges touches avec des positions stables, pour éviter à vos yeux de partir à la chasse aux lettres.
6 |
7 | Au fur et à mesure, la position des lettres va s'ancrer dans votre mémoire musculaire, et vous pourrez approcher la vitesse rapide de l'écriture au clavier à 10 doigts, sans que vos yeux aient besoin de quitter la zone d'écriture.
8 |
9 | Ce projet s'inscrit dans la lignée du clavier MessagEase Keyboard, qui n'est plus maintenu (et n'est pas open-source). C'est sa principale source d'inspiration.
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/full_description.txt:
--------------------------------------------------------------------------------
1 | Thumb-Key ist eine intelligente Tastatur die deine Privatsphäre respektiert und speziell für deine Daumen gemacht ist.
2 |
3 | Sie besteht aus einem 3 mal 3 feldern, und benutzt wisch-muster für weniger verwendete Buchstaben. Die Tastatur ist einfach zu lernen und wurde für schnelles schreiben konzipiert.
4 |
5 | Anders als profit-orientiert, privatsphären-verletzende autokorrektur zu sehen wie Gboard und SwiftKey benutzt Thumb-Key eine 3x3 Tastenmatrix um zu verhindern dass deine Augen nach dem nächsten Buchstaben ausschau halten müssen.
6 |
7 | Sobald die Tastenpositionen drauf hast wirst du fast so schnell sein wie mit einer herkömmlichen touch-tastatur. Deine Augen müssen nie wieder vom Text wegsehen.
8 |
9 | Diese Projekt ist eine fortsetzung vom mittlerweile eingestellten (und nicht Quelloffenen-Projekt) MessagEase Keyboard, welche die Hauptinspiration ist.
10 | This project is a follow-up to the now unmaintained (and closed-source) MessagEase Keyboard, which is its main inspiration.
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/163.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 5.0.8
2 |
3 | - Add `ch` to frenfrappefluidev1 by @antoinepouille in [#1584](https://github.com/dessalines/thumb-key/pull/1584)
4 | - Adds Korean Thumb-Key layout by @Hate9 in [#1575](https://github.com/dessalines/thumb-key/pull/1575)
5 | - Update fren frappefluide v1 : move delete_word by @antoinepouille in [#1570](https://github.com/dessalines/thumb-key/pull/1570)
6 | - Update FREN_frappefluide_v1 by @antoinepouille in [#1550](https://github.com/dessalines/thumb-key/pull/1550)
7 | - ENMessagEaseSymbolsModifiers: Add "up" and "down" keys by @federvieh in [#1560](https://github.com/dessalines/thumb-key/pull/1560)
8 | - CommonKeys: Add return programming key item by @federvieh in [#1561](https://github.com/dessalines/thumb-key/pull/1561)
9 | - Key modifications: Fix NPE if ctrled/alted are empty by @federvieh in [#1552](https://github.com/dessalines/thumb-key/pull/1552)
10 |
11 | ## New Contributors
12 |
13 | - @federvieh made their first contribution in [#1560](https://github.com/dessalines/thumb-key/pull/1560)
14 |
15 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.7...5.0.8
16 |
17 |
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/162.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 5.0.7
2 |
3 | - Add Korean layout and custom input processor implementation by @uranium-boy in [#1534](https://github.com/dessalines/thumb-key/pull/1534)
4 | - Update README.md by @jwkwshjsjsj in [#1531](https://github.com/dessalines/thumb-key/pull/1531)
5 | - Verify apk fingerprint. by @dessalines in [#1528](https://github.com/dessalines/thumb-key/pull/1528)
6 | - English based Latvian keyboard by @HX3A in [#1522](https://github.com/dessalines/thumb-key/pull/1522)
7 | - downgrade agp version (closes #1514) by @pohmelie in [#1521](https://github.com/dessalines/thumb-key/pull/1521)
8 | - add top bottom action keys to documentation by @pohmelie in [#1520](https://github.com/dessalines/thumb-key/pull/1520)
9 |
10 | ## New Contributors
11 |
12 | - @uranium-boy made their first contribution in [#1534](https://github.com/dessalines/thumb-key/pull/1534)
13 | - @jwkwshjsjsj made their first contribution in [#1531](https://github.com/dessalines/thumb-key/pull/1531)
14 | - @HX3A made their first contribution in [#1522](https://github.com/dessalines/thumb-key/pull/1522)
15 |
16 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.6...5.0.7
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/assets/RELEASES.md:
--------------------------------------------------------------------------------
1 | ## What's Changed in 5.0.12
2 |
3 | - Adding a fast toggle for hiding letters. by @dessalines in [#1706](https://github.com/dessalines/thumb-key/pull/1706)
4 | - Adding norsk data driven layout. by @dessalines in [#1705](https://github.com/dessalines/thumb-key/pull/1705)
5 | - add keyboard name comments by @Toldry in [#1693](https://github.com/dessalines/thumb-key/pull/1693)
6 | - Add Thai language by @sarchar in [#1700](https://github.com/dessalines/thumb-key/pull/1700)
7 | - add more key actions by @Toldry in [#1692](https://github.com/dessalines/thumb-key/pull/1692)
8 | - Add kannada language. by @dessalines in [#1691](https://github.com/dessalines/thumb-key/pull/1691)
9 | - fix numeric wide underscore by @Toldry in [#1690](https://github.com/dessalines/thumb-key/pull/1690)
10 | - Add instructions on spacebar word swiping to readme. by @dessalines in [#1689](https://github.com/dessalines/thumb-key/pull/1689)
11 | - Using resources.getString by @dessalines in [#1688](https://github.com/dessalines/thumb-key/pull/1688)
12 | - add ToggleABCMode key action by @Toldry in [#1677](https://github.com/dessalines/thumb-key/pull/1677)
13 |
14 | ## New Contributors
15 |
16 | - @sarchar made their first contribution in [#1700](https://github.com/dessalines/thumb-key/pull/1700)
17 |
18 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.11...5.0.12
19 |
20 |
21 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/156.txt:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | ## What's Changed in 5.0.1
6 |
7 | - Fix bottom padding for Android 15+ by @juschmitt in [#1463](https://github.com/dessalines/thumb-key/pull/1463)
8 | - Fix navigation header back action by @alerque in [#1464](https://github.com/dessalines/thumb-key/pull/1464)
9 | - Add RU adaption of 'türkçe artı çok' layout by @alerque in [#1460](https://github.com/dessalines/thumb-key/pull/1460)
10 | - Accomodate lack of shifted support on numeric layouts by @alerque
11 | - Adding alerque as a codeowner. by @dessalines in [#1459](https://github.com/dessalines/thumb-key/pull/1459)
12 | - add `HideKeyboard` to readme by @pohmelie in [#1458](https://github.com/dessalines/thumb-key/pull/1458)
13 | - Invert primary/secondary currency for TR vs. KZ use by @alerque
14 | - Override key actions with thumb-key Russian letters by @alerque
15 | - Shuffle symbols around on 'TR Artı' to accomodate Thumb Key Russian letters by @alerque
16 | - Reduce error-prone duplicate symbols with copied and modified keys by @alerque
17 | - Initialize Russian layout based on 'türkçe artı çok' by @alerque
18 | - Add utility methods to keys for easier modification of existing layouts by @alerque
19 |
20 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.0...5.0.1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/154.txt:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | ## What's Changed in 4.0.36
6 |
7 | - Add Serbian language layouts, both Cyrillic and Latin scripts by @markokocic in [#1440](https://github.com/dessalines/thumb-key/pull/1440)
8 | - Restore colon and semi-colon to TR+ keyboard by @alerque in [#1438](https://github.com/dessalines/thumb-key/pull/1438)
9 | - Implement 3-row emoji picker for wide layout keyboards by @alerque in [#1422](https://github.com/dessalines/thumb-key/pull/1422)
10 | - Make emoji keyboard row count automatic based on main layout by @alerque
11 | - Implement 3-row emoji picker for wide layout keyboards by @alerque
12 | - Small follow up tweaks to TR+ keyboard by @alerque in [#1421](https://github.com/dessalines/thumb-key/pull/1421)
13 | - Add new TR+ keyboard with EN+TR language and typographic symbols by @alerque in [#1420](https://github.com/dessalines/thumb-key/pull/1420)
14 | - ntfy message fix. by @dessalines in [#1419](https://github.com/dessalines/thumb-key/pull/1419)
15 |
16 | ## New Contributors
17 |
18 | - @markokocic made their first contribution in [#1440](https://github.com/dessalines/thumb-key/pull/1440)
19 | - @alerque made their first contribution in [#1438](https://github.com/dessalines/thumb-key/pull/1438)
20 |
21 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.35...4.0.36
22 |
23 |
24 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/165.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 5.0.10
2 |
3 | - Fixed kana cycle: tsu -> sokuon -> zu by @DeBestTrap in [#1640](https://github.com/dessalines/thumb-key/pull/1640)
4 | - fix: korean composition breaking when switching layouts by @uranium-boy in [#1636](https://github.com/dessalines/thumb-key/pull/1636)
5 | - Add back `gh` to français frappefluide by @jiquiame in [#1639](https://github.com/dessalines/thumb-key/pull/1639)
6 | - Updates English Thumb-Key Programmer Expanded to use default special keys; adds custom numeric layout by @Hate9 in [#1634](https://github.com/dessalines/thumb-key/pull/1634)
7 | - Standard japanese keyboard by @K0baU in [#1630](https://github.com/dessalines/thumb-key/pull/1630)
8 | - add Wurstfinger as related project by @cl445 in [#1632](https://github.com/dessalines/thumb-key/pull/1632)
9 | - Fixed incorrect swipetype in center key on KRThumbKey by @Hate9 in [#1621](https://github.com/dessalines/thumb-key/pull/1621)
10 | - Update RUHyper.kt by @bjarjfff in [#1616](https://github.com/dessalines/thumb-key/pull/1616)
11 |
12 | ## New Contributors
13 |
14 | - @DeBestTrap made their first contribution in [#1640](https://github.com/dessalines/thumb-key/pull/1640)
15 | - @cl445 made their first contribution in [#1632](https://github.com/dessalines/thumb-key/pull/1632)
16 | - @bjarjfff made their first contribution in [#1616](https://github.com/dessalines/thumb-key/pull/1616)
17 |
18 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/5.0.9...5.0.10
19 |
20 |
21 |
--------------------------------------------------------------------------------
/.woodpecker.yml:
--------------------------------------------------------------------------------
1 | steps:
2 | prettier_markdown_check:
3 | image: jauderho/prettier:3.7.4-alpine
4 | commands:
5 | - prettier -c "**/*.md" "**/*.yml"
6 | when:
7 | - event: pull_request
8 |
9 | check_formatting:
10 | image: cimg/android:2025.12.1
11 | commands:
12 | - sudo chown -R circleci:circleci .
13 | - ./gradlew lintKotlin
14 | environment:
15 | GRADLE_USER_HOME: ".gradle"
16 | when:
17 | - event: pull_request
18 |
19 | check_android_lint:
20 | image: cimg/android:2025.12.1
21 | commands:
22 | - sudo chown -R circleci:circleci .
23 | - ./gradlew lint
24 | environment:
25 | GRADLE_USER_HOME: ".gradle"
26 | when:
27 | - event: pull_request
28 |
29 | build_project:
30 | image: cimg/android:2025.12.1
31 | commands:
32 | - sudo chown -R circleci:circleci .
33 | - ./gradlew assembleDebug
34 | environment:
35 | GRADLE_USER_HOME: ".gradle"
36 | when:
37 | - event: pull_request
38 |
39 | notify_success:
40 | image: alpine:3
41 | commands:
42 | - apk add curl
43 | - "curl -H'Title: ✔️ ${CI_REPO_NAME}/${CI_COMMIT_SOURCE_BRANCH}' -d'${CI_PIPELINE_URL}' ntfy.sh/thumbkey_ci"
44 | when:
45 | - event: pull_request
46 | status: [success]
47 |
48 | notify_failure:
49 | image: alpine:3
50 | commands:
51 | - apk add curl
52 | - "curl -H'Title: ❌ ${CI_REPO_NAME}/${CI_COMMIT_SOURCE_BRANCH}' -d'${CI_PIPELINE_URL}' ntfy.sh/thumbkey_ci"
53 | when:
54 | - event: pull_request
55 | status: [failure]
56 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/utils/AutoCapitalizers.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey.utils
2 |
3 | import com.dessalines.thumbkey.IMEService
4 |
5 | typealias AutoCapitalizers = Array<(IMEService) -> Unit>
6 |
7 | fun autoCapitalizeI(ime: IMEService) {
8 | // Capitalizes 'i'
9 | val textBefore = ime.currentInputConnection.getTextBeforeCursor(3, 0)
10 | if (!textBefore.isNullOrEmpty()) {
11 | if (textBefore == " i ") {
12 | ime.currentInputConnection.deleteSurroundingText(2, 0)
13 | ime.currentInputConnection.commitText(
14 | "I ",
15 | 1,
16 | )
17 | }
18 | }
19 | }
20 |
21 | fun autoCapitalizeIApostrophe(ime: IMEService) {
22 | // Capitalizes "i'"
23 | val textBefore = ime.currentInputConnection.getTextBeforeCursor(3, 0)
24 | if (!textBefore.isNullOrEmpty()) {
25 | if (textBefore == " i\'") {
26 | ime.currentInputConnection.deleteSurroundingText(2, 0)
27 | ime.currentInputConnection.commitText(
28 | "I\'",
29 | 1,
30 | )
31 | }
32 | }
33 | }
34 |
35 | fun autoCapitalizeIApostropheLL(ime: IMEService) {
36 | // Capitalizes "i'll"
37 | val textBefore = ime.currentInputConnection.getTextBeforeCursor(5, 0)
38 | if (!textBefore.isNullOrEmpty()) {
39 | if (textBefore == " i\'ll") {
40 | ime.currentInputConnection.deleteSurroundingText(4, 0)
41 | ime.currentInputConnection.commitText(
42 | "I\'ll",
43 | 1,
44 | )
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/155.txt:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | ## What's Changed in 5.0.0
6 |
7 | - add hide keyboard action by @pohmelie in [#1456](https://github.com/dessalines/thumb-key/pull/1456)
8 | - Add option to automatically scale keyboard to screen width by @alerque in [#1424](https://github.com/dessalines/thumb-key/pull/1424)
9 | - Setup auto-with calculations for new 'Dual' layout position by @alerque
10 | - Add split keyboard layout to the position cycle by @jm355 in [#1443](https://github.com/dessalines/thumb-key/pull/1443)
11 | - feat: add anchors to keyboard modifications by @Toldry in [#1452](https://github.com/dessalines/thumb-key/pull/1452)
12 | - Address CoPilot review issues, improve function signatures by @alerque
13 | - Overhaul migrations to avoid SQLite & Room limitations by @alerque
14 | - Fix long press numeric key yaml by @jm355 in [#1453](https://github.com/dessalines/thumb-key/pull/1453)
15 | - Add FRENFrappeFluideV1 by @antoinepouille in [#1450](https://github.com/dessalines/thumb-key/pull/1450)
16 | - Deconflate size vs. width vs. height and save user input values by @alerque
17 | - Add option to calculate key size based on available screen width by @alerque
18 |
19 | ## New Contributors
20 |
21 | - @pohmelie made their first contribution in [#1456](https://github.com/dessalines/thumb-key/pull/1456)
22 | - @antoinepouille made their first contribution in [#1450](https://github.com/dessalines/thumb-key/pull/1450)
23 |
24 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.36...5.0.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app"s APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Automatically convert third-party libraries to use AndroidX
19 | android.enableJetifier=false
20 | # Kotlin code style for this project: "official" or "obsolete":
21 | kotlin.code.style=official
22 | # Enables namespacing of each library's R class so that its R class includes only the
23 | # resources declared in the library itself and none from the library's dependencies,
24 | # thereby reducing the size of the R class for that library
25 | android.nonTransitiveRClass=true
26 | org.gradle.unsafe.configuration-cache=true
27 | android.nonFinalResIds=false
28 | org.gradle.daemon=false
29 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
14 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
31 |
32 |
33 |
34 |
35 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/values-cs/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Nastavení
4 | Systém
5 | Světlý
6 | Tmavý
7 | Dynamické
8 | Zelené
9 | Růžové
10 | Modré
11 | Zatmění
12 | Kontrastní
13 | Kontrastní barevné
14 | Anarcho-komunistické barvy
15 | Uprostřed
16 | Vpravo
17 | Vlevo
18 | Zdvojené
19 | Novinky
20 | Verze %1$s
21 | Vydání
22 | Podpora
23 | Darujte projektu
24 | Sociální sítě
25 | Připojte se k c/thumbkey
26 | Sledujte mě na Mastodonu
27 | Zdrojový kód
28 | Thumb-Key je svobodný open-source software, licencovaný pod GNU Affero General Public License v3.0
29 | Vzhled a odezva
30 | Chování
31 | Rozložení
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/ui/components/common/TextFields.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey.ui.components.common
2 |
3 | import androidx.compose.foundation.layout.fillMaxWidth
4 | import androidx.compose.foundation.text.KeyboardOptions
5 | import androidx.compose.material3.Text
6 | import androidx.compose.material3.TextField
7 | import androidx.compose.material3.TextFieldDefaults
8 | import androidx.compose.runtime.Composable
9 | import androidx.compose.runtime.getValue
10 | import androidx.compose.runtime.mutableStateOf
11 | import androidx.compose.runtime.remember
12 | import androidx.compose.runtime.setValue
13 | import androidx.compose.ui.Modifier
14 | import androidx.compose.ui.graphics.Color
15 | import androidx.compose.ui.res.stringResource
16 | import androidx.compose.ui.text.input.KeyboardCapitalization
17 | import com.dessalines.thumbkey.R
18 |
19 | @Composable
20 | fun TestOutTextField() {
21 | var text by remember { mutableStateOf("") }
22 | TextField(
23 | modifier =
24 | Modifier
25 | .fillMaxWidth(),
26 | value = text,
27 | onValueChange = { text = it },
28 | placeholder = { Text(stringResource(R.string.test_out_thumbkey)) },
29 | colors =
30 | TextFieldDefaults.colors(
31 | focusedContainerColor = Color.Transparent,
32 | unfocusedContainerColor = Color.Transparent,
33 | disabledContainerColor = Color.Transparent,
34 | focusedIndicatorColor = Color.Transparent,
35 | unfocusedIndicatorColor = Color.Transparent,
36 | ),
37 | keyboardOptions = KeyboardOptions(capitalization = KeyboardCapitalization.Sentences),
38 | )
39 | }
40 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/145.txt:
--------------------------------------------------------------------------------
1 | ## What's Changed in 4.0.27
2 |
3 | - Update Hyper's symbol layer with small changes by @luminespire in [#1340](https://github.com/dessalines/thumb-key/pull/1340)
4 | - feat: add owl-layout by @owl-from-hogvarts in [#1337](https://github.com/dessalines/thumb-key/pull/1337)
5 | - Merge remote-tracking branch 'weblate/main' by @dessalines
6 | - Translated using Weblate (Arabic) by @weblate
7 | - Translated using Weblate (Polish) by @weblate
8 | - Translated using Weblate (Turkish) by @weblate
9 | - Translated using Weblate (Slovak) by @weblate
10 | - Translated using Weblate (Japanese) by @weblate
11 | - Translated using Weblate (Chinese (Simplified Han script)) by @weblate
12 | - Translated using Weblate (Ukrainian) by @weblate
13 | - Translated using Weblate (Russian) by @weblate
14 | - Translated using Weblate (Italian) by @weblate
15 | - Translated using Weblate (French) by @weblate
16 | - Translated using Weblate (Persian) by @weblate
17 | - Translated using Weblate (Spanish) by @weblate
18 | - Translated using Weblate (German) by @weblate
19 | - Translated using Weblate (Danish) by @weblate
20 | - Translated using Weblate (Breton) by @weblate
21 | - Translated using Weblate (Bulgarian) by @weblate
22 | - Added translation using Weblate (Arabic) by @williampiti
23 | - Translated using Weblate (Japanese) by @williampiti
24 | - Translated using Weblate (Japanese) by @williampiti
25 | - Translated using Weblate (Polish)
26 | - Translated using Weblate (Japanese) by @williampiti
27 | - Merge remote-tracking branch 'refs/remotes/origin/main' by @dessalines
28 |
29 | ## New Contributors
30 |
31 | - @owl-from-hogvarts made their first contribution in [#1337](https://github.com/dessalines/thumb-key/pull/1337)
32 | - @williampiti made their first contribution
33 |
34 | **Full Changelog**: https://github.com/dessalines/thumb-key/compare/4.0.26...4.0.27
35 |
36 |
37 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: 🌟 Feature request
2 | description: Suggest a feature to improve the app
3 | labels: [feature]
4 | body:
5 | - type: textarea
6 | id: feature-description
7 | attributes:
8 | label: Describe your suggested feature
9 | description: How can the app be improved?
10 | placeholder: |
11 | Example:
12 | "It should work like this..."
13 | validations:
14 | required: true
15 |
16 | - type: textarea
17 | id: other-details
18 | attributes:
19 | label: Other details
20 | placeholder: Additional details and attachments.
21 |
22 | - type: checkboxes
23 | id: acknowledgements
24 | attributes:
25 | label: Acknowledgements
26 | description: >-
27 | Read this carefully, we will close and ignore your issue if you skimmed through this.
28 | options:
29 | - label: I have written a short but informative title.
30 | required: true
31 | - label: I have updated the app to **[the latest version](https://github.com/dessalines/thumb-key/releases/latest)**.
32 | required: true
33 | - label: I have checked through the app settings for my feature.
34 | required: true
35 | - label: >-
36 | I have searched the existing issues and this is a new one, **NOT** a
37 | duplicate or related to another open issue.
38 | required: true
39 | - label: >-
40 | This is a **single** feature request, in case of multiple feature
41 | requests I will open a separate issue for each one
42 | (they can always link to each other if related)
43 | required: true
44 | - label: >-
45 | This is not a question or a discussion, in which case I should have
46 | gone to [lemmy.ml/c/thumbkey](https://lemmy.ml/c/thumbkey)
47 | required: true
48 | - label: I have admitted that I am a clown by having checked this box, as I have not read these acknowledgements. 🤡
49 | - label: I will fill out all of the requested information in this form.
50 | required: true
51 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ca/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Thumb-Key
4 | Arranjament
5 | Sistema
6 | Clar
7 | Fosc
8 | Dinàmic
9 | Verd
10 | Rosa
11 | Matricial-AMOLED
12 | Blau
13 | Dràcula
14 | Crepuscle
15 | Alt contrast
16 | Colors anarco-comunistes
17 | Centre
18 | Dreta
19 | Esquerra
20 | Dual
21 | Quant a
22 | Novetats
23 | Versió %1$s
24 | Llançaments
25 | Donar a Thumb-Key
26 | Xarxes socials
27 | Uniu-vos a c/thumbkey
28 | Segueix-nos a Mastodon
29 | Codi obert
30 | Codi font
31 | Thumb-Key és un programari de codi obert amb llicència GNU Affero General Public License v3.0
32 | Comportament
33 | Disposicions
34 | Tema
35 | Color del tema
36 | Posició
37 | Vibra en tocar
38 | Reprodueix un so en tocar
39 | Maximitzar per adaptar-se a l\'amplada de la pantalla
40 | Mida de la tecla: %1$s
41 | Utilitzar tecles no quadrades
42 | Alçada de la tecla: %1$s
43 | Amplada de la tecla: %1$s
44 |
45 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/ui/theme/Theme.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey.ui.theme
2 |
3 | import android.os.Build
4 | import androidx.compose.foundation.isSystemInDarkTheme
5 | import androidx.compose.material3.MaterialTheme
6 | import androidx.compose.material3.dynamicDarkColorScheme
7 | import androidx.compose.material3.dynamicLightColorScheme
8 | import androidx.compose.runtime.Composable
9 | import androidx.compose.ui.platform.LocalContext
10 | import com.dessalines.thumbkey.db.AppSettings
11 | import com.dessalines.thumbkey.utils.ThemeColor
12 | import com.dessalines.thumbkey.utils.ThemeMode
13 |
14 | @Composable
15 | fun ThumbkeyTheme(
16 | settings: AppSettings?,
17 | content: @Composable () -> Unit,
18 | ) {
19 | val themeMode = ThemeMode.entries[settings?.theme ?: 0]
20 | val themeColor = ThemeColor.entries[settings?.themeColor ?: 0]
21 |
22 | val ctx = LocalContext.current
23 | val android12OrLater = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
24 |
25 | // Dynamic schemes crash on lower than android 12
26 | val dynamicPair =
27 | if (android12OrLater) {
28 | Pair(dynamicLightColorScheme(ctx), dynamicDarkColorScheme(ctx))
29 | } else {
30 | pink()
31 | }
32 |
33 | val colorPair =
34 | when (themeColor) {
35 | ThemeColor.Dynamic -> dynamicPair
36 | ThemeColor.Green -> green()
37 | ThemeColor.Pink -> pink()
38 | ThemeColor.Matrix -> matrix()
39 | ThemeColor.Srcery -> srcery()
40 | ThemeColor.Blue -> blue()
41 | ThemeColor.Dracula -> dracula()
42 | ThemeColor.Twilight -> twilight()
43 | ThemeColor.HighContrast -> highContrast()
44 | ThemeColor.HighContrastColorful -> highContrastColorful()
45 | ThemeColor.Ancom -> ancom()
46 | ThemeColor.Neon -> neon()
47 | }
48 |
49 | val systemTheme =
50 | if (!isSystemInDarkTheme()) {
51 | colorPair.first
52 | } else {
53 | colorPair.second
54 | }
55 |
56 | val colors =
57 | when (themeMode) {
58 | ThemeMode.System -> systemTheme
59 | ThemeMode.Light -> colorPair.first
60 | ThemeMode.Dark -> colorPair.second
61 | }
62 |
63 | MaterialTheme(
64 | colorScheme = colors,
65 | typography = Typography,
66 | shapes = Shapes,
67 | content = content,
68 | )
69 | }
70 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/layout.yml:
--------------------------------------------------------------------------------
1 | name: ⌨️ Layout
2 | description: Request a new layout or changes to an existing one
3 | labels: ["layout"]
4 | body:
5 | - type: input
6 | id: language
7 | attributes:
8 | label: Language
9 | description: which language does the layout correspond to?
10 | placeholder: "example: English"
11 | validations:
12 | required: true
13 | - type: input
14 | id: variant
15 | attributes:
16 | label: Variant
17 | description: If this is a variant, name it here (MessagEase, with symbols, etc.)
18 | placeholder: "example: MessagEase"
19 | validations:
20 | required: false
21 |
22 | - type: dropdown
23 | id: kind
24 | attributes:
25 | label: "Kind of request"
26 | description: "Is this a new layout, or changes on an existing one?"
27 | options:
28 | - "New Layout"
29 | - "Changes on an existing layout"
30 | validations:
31 | required: true
32 |
33 | - type: textarea
34 | id: details
35 | attributes:
36 | label: More details
37 | description: If more details are required, write them here
38 | placeholder: |
39 | If requesting a new layout, information like how the layout should be
40 | made, what it can be based off, if it's a variant of an existing layout, etc.
41 |
42 | If requesting changes, details on what you're asking for
43 | validations:
44 | required: false
45 |
46 | - type: checkboxes
47 | id: acknowledgements
48 | attributes:
49 | label: Acknowledgements
50 | description: Read this carefully, I will close and ignore your issue if you skimmed through this.
51 | options:
52 | - label: I have written a short but informative title.
53 | required: true
54 | - label: >-
55 | I have searched the existing layouts and issues to confirm that this
56 | layout either does not exist or was not requested already
57 | required: true
58 | # - label: >-
59 | # This is not a question or a discussion, in which case I should have gone to
60 | # (discussion URL)
61 | # required: true
62 | # - label: >-
63 | # I am requesting a **single** layout.
64 | # In case of multiple layouts I will open a separate issue for each one
65 | # (they can always link to each other if related)
66 | # required: true
67 | # - label: I have updated the app **[the latest version](https://github.com/user/repo/releases/latest)**.
68 | # required: true
69 | - label: I have admitted that I am a clown by having checked this box, as I have not read these acknowledgements. 🤡
70 | - label: I have filled out all of the requested information in this form.
71 | required: true
72 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
55 |
56 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/thumb_key_icon.xml:
--------------------------------------------------------------------------------
1 |
7 |
11 |
16 |
21 |
26 |
31 |
36 |
41 |
46 |
51 |
56 |
57 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/ENMessagEaseSymbolsTwoHands.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_EN_MESSAGEASE_SYMBOLS_TWO_HANDS_MAIN =
12 | KeyboardC(
13 | listOf(
14 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[0] +
15 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[0].subList(0, 3),
16 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[1] +
17 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[1].subList(0, 3),
18 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[2] +
19 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[2].subList(0, 3),
20 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[3] +
21 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[3].subList(0, 1),
22 | ),
23 | )
24 |
25 | val KB_EN_MESSAGEASE_SYMBOLS_TWO_HANDS_SHIFTED =
26 | KeyboardC(
27 | listOf(
28 | KB_EN_MESSAGEASE_SYMBOLS_SHIFTED.arr[0] +
29 | KB_EN_MESSAGEASE_SYMBOLS_SHIFTED.arr[0].subList(0, 3),
30 | KB_EN_MESSAGEASE_SYMBOLS_SHIFTED.arr[1] +
31 | KB_EN_MESSAGEASE_SYMBOLS_SHIFTED.arr[1].subList(0, 3),
32 | KB_EN_MESSAGEASE_SYMBOLS_SHIFTED.arr[2] +
33 | KB_EN_MESSAGEASE_SYMBOLS_SHIFTED.arr[2].subList(0, 3),
34 | KB_EN_MESSAGEASE_SYMBOLS_SHIFTED.arr[3] +
35 | KB_EN_MESSAGEASE_SYMBOLS_SHIFTED.arr[3].subList(0, 1),
36 | ),
37 | )
38 |
39 | val NUMERIC_KEYBOARD_MESSAGEASE_TWO_HANDS =
40 | KeyboardC(
41 | listOf(
42 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[0] +
43 | KB_EN_MESSAGEASE_NUMERIC.arr[0].subList(0, 3),
44 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[1].subList(0, 3) +
45 | listOf(ABC_KEY_ITEM) +
46 | KB_EN_MESSAGEASE_NUMERIC.arr[1].subList(0, 3),
47 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[2] +
48 | KB_EN_MESSAGEASE_NUMERIC.arr[2].subList(0, 3),
49 | KB_EN_MESSAGEASE_SYMBOLS_MAIN.arr[3] +
50 | KB_EN_MESSAGEASE_NUMERIC.arr[3].subList(0, 2),
51 | ),
52 | )
53 |
54 | val KB_EN_MESSAGEASE_SYMBOLS_TWO_HANDS: KeyboardDefinition =
55 | KeyboardDefinition(
56 | title = "english messagease symbols two-hands",
57 | modes =
58 | KeyboardDefinitionModes(
59 | main = KB_EN_MESSAGEASE_SYMBOLS_TWO_HANDS_MAIN,
60 | shifted = KB_EN_MESSAGEASE_SYMBOLS_TWO_HANDS_SHIFTED,
61 | numeric = NUMERIC_KEYBOARD_MESSAGEASE_TWO_HANDS,
62 | ),
63 | settings =
64 | KeyboardDefinitionSettings(
65 | autoCapitalizers = arrayOf(::autoCapitalizeI, ::autoCapitalizeIApostrophe),
66 | ),
67 | )
68 |
--------------------------------------------------------------------------------
/cliff.toml:
--------------------------------------------------------------------------------
1 | # git-cliff ~ configuration file
2 | # https://git-cliff.org/docs/configuration
3 |
4 | [remote.github]
5 | owner = "dessalines"
6 | repo = "thumb-key"
7 | # token = ""
8 |
9 | [changelog]
10 | # template for the changelog body
11 | # https://keats.github.io/tera/docs/#introduction
12 | body = """
13 | ## What's Changed
14 |
15 | {%- if version %} in {{ version }}{%- endif -%}
16 | {% for commit in commits %}
17 | {% if commit.remote.pr_title -%}
18 | {%- set commit_message = commit.remote.pr_title -%}
19 | {%- else -%}
20 | {%- set commit_message = commit.message -%}
21 | {%- endif -%}
22 | * {{ commit_message | split(pat="\n") | first | trim }}\
23 | {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%}
24 | {% if commit.remote.pr_number %} in \
25 | [#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.remote.pr_number }}) \
26 | {%- endif %}
27 | {%- endfor -%}
28 |
29 | {%- if github -%}
30 | {% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %}
31 | {% raw %}\n{% endraw -%}
32 | ## New Contributors
33 | {%- endif %}\
34 | {% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %}
35 | * @{{ contributor.username }} made their first contribution
36 | {%- if contributor.pr_number %} in \
37 | [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \
38 | {%- endif %}
39 | {%- endfor -%}
40 | {%- endif -%}
41 |
42 | {% if version %}
43 | {% if previous.version %}
44 | **Full Changelog**: {{ self::remote_url() }}/compare/{{ previous.version }}...{{ version }}
45 | {% endif %}
46 | {% else -%}
47 | {% raw %}\n{% endraw %}
48 | {% endif %}
49 |
50 | {%- macro remote_url() -%}
51 | https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
52 | {%- endmacro -%}
53 | """
54 | # remove the leading and trailing whitespace from the template
55 | trim = true
56 | # template for the changelog footer
57 | footer = """
58 |
59 | """
60 | # postprocessors
61 | postprocessors = []
62 |
63 | [git]
64 | # parse the commits based on https://www.conventionalcommits.org
65 | conventional_commits = false
66 | # filter out the commits that are not conventional
67 | filter_unconventional = true
68 | # process each line of a commit as an individual commit
69 | split_commits = false
70 | # regex for preprocessing the commit messages
71 | commit_preprocessors = [
72 | # remove issue numbers from commits
73 | { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" },
74 | ]
75 | commit_parsers = [
76 | { field = "author.name", pattern = "renovate", skip = true },
77 | { field = "author.name", pattern = "Weblate", skip = true },
78 | { field = "message", pattern = "Upping version", skip = true },
79 | { field = "message", pattern = "Merge remote-tracking", skip = true },
80 | ]
81 | # filter out the commits that are not matched by commit parsers
82 | filter_commits = false
83 | # sort the tags topologically
84 | topo_order = false
85 | # sort the commits inside sections by oldest/newest order
86 | sort_commits = "newest"
87 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | @rem SPDX-License-Identifier: Apache-2.0
17 | @rem
18 |
19 | @if "%DEBUG%"=="" @echo off
20 | @rem ##########################################################################
21 | @rem
22 | @rem Gradle startup script for Windows
23 | @rem
24 | @rem ##########################################################################
25 |
26 | @rem Set local scope for the variables with windows NT shell
27 | if "%OS%"=="Windows_NT" setlocal
28 |
29 | set DIRNAME=%~dp0
30 | if "%DIRNAME%"=="" set DIRNAME=.
31 | @rem This is normally unused
32 | set APP_BASE_NAME=%~n0
33 | set APP_HOME=%DIRNAME%
34 |
35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
37 |
38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
40 |
41 | @rem Find java.exe
42 | if defined JAVA_HOME goto findJavaFromJavaHome
43 |
44 | set JAVA_EXE=java.exe
45 | %JAVA_EXE% -version >NUL 2>&1
46 | if %ERRORLEVEL% equ 0 goto execute
47 |
48 | echo. 1>&2
49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50 | echo. 1>&2
51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52 | echo location of your Java installation. 1>&2
53 |
54 | goto fail
55 |
56 | :findJavaFromJavaHome
57 | set JAVA_HOME=%JAVA_HOME:"=%
58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
59 |
60 | if exist "%JAVA_EXE%" goto execute
61 |
62 | echo. 1>&2
63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64 | echo. 1>&2
65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66 | echo location of your Java installation. 1>&2
67 |
68 | goto fail
69 |
70 | :execute
71 | @rem Setup the command line
72 |
73 |
74 |
75 | @rem Execute Gradle
76 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
77 |
78 | :end
79 | @rem End local scope for the variables with windows NT shell
80 | if %ERRORLEVEL% equ 0 goto mainEnd
81 |
82 | :fail
83 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
84 | rem the _cmd.exe /c_ return code!
85 | set EXIT_CODE=%ERRORLEVEL%
86 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
87 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
88 | exit /b %EXIT_CODE%
89 |
90 | :mainEnd
91 | if "%OS%"=="Windows_NT" endlocal
92 |
93 | :omega
94 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/ui/components/setup/SetupScreen.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey.ui.components.setup
2 |
3 | import android.content.Intent
4 | import android.provider.Settings
5 | import android.util.Log
6 | import androidx.compose.foundation.layout.Arrangement
7 | import androidx.compose.foundation.layout.Column
8 | import androidx.compose.foundation.layout.fillMaxWidth
9 | import androidx.compose.foundation.layout.padding
10 | import androidx.compose.material3.Button
11 | import androidx.compose.material3.ExperimentalMaterial3Api
12 | import androidx.compose.material3.Scaffold
13 | import androidx.compose.material3.SnackbarHost
14 | import androidx.compose.material3.SnackbarHostState
15 | import androidx.compose.material3.Text
16 | import androidx.compose.runtime.Composable
17 | import androidx.compose.runtime.remember
18 | import androidx.compose.ui.Modifier
19 | import androidx.compose.ui.platform.LocalContext
20 | import androidx.compose.ui.res.stringResource
21 | import androidx.compose.ui.unit.dp
22 | import androidx.navigation.NavController
23 | import com.dessalines.thumbkey.R
24 | import com.dessalines.thumbkey.utils.SimpleTopAppBar
25 | import com.dessalines.thumbkey.utils.TAG
26 | import splitties.systemservices.inputMethodManager
27 |
28 | @OptIn(ExperimentalMaterial3Api::class)
29 | @Composable
30 | fun SetupScreen(
31 | navController: NavController,
32 | thumbkeyEnabled: Boolean,
33 | thumbkeySelected: Boolean,
34 | ) {
35 | Log.d(TAG, "Got to setup activity")
36 |
37 | val snackbarHostState = remember { SnackbarHostState() }
38 | val ctx = LocalContext.current
39 |
40 | val spacing = 16.dp
41 |
42 | Scaffold(
43 | snackbarHost = { SnackbarHost(snackbarHostState) },
44 | topBar = {
45 | SimpleTopAppBar(
46 | text = stringResource(R.string.setup_thumbkey),
47 | navController = navController,
48 | showBack = false,
49 | )
50 | },
51 | content = { padding ->
52 | Column(
53 | verticalArrangement = Arrangement.spacedBy(spacing),
54 | modifier =
55 | Modifier
56 | .padding(padding)
57 | .padding(horizontal = spacing),
58 | ) {
59 | if (!thumbkeyEnabled) {
60 | Button(modifier = Modifier.fillMaxWidth(), onClick = {
61 | ctx.startActivity(Intent(Settings.ACTION_INPUT_METHOD_SETTINGS))
62 | }) {
63 | Text(stringResource(R.string.enable_thumbkey))
64 | }
65 | }
66 | if (!thumbkeySelected) {
67 | Button(modifier = Modifier.fillMaxWidth(), onClick = {
68 | inputMethodManager.showInputMethodPicker()
69 | }) {
70 | Text(stringResource(R.string.select_thumbkey))
71 | }
72 | }
73 | Button(modifier = Modifier.fillMaxWidth(), onClick = {
74 | navController.navigate("settings")
75 | }) {
76 | Text(stringResource(R.string.finish_setup))
77 | }
78 | }
79 | },
80 | )
81 | }
82 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/issue_report.yml:
--------------------------------------------------------------------------------
1 | name: 🐞 Issue report
2 | description: Report an issue or bug
3 | labels: [bug]
4 | body:
5 | - type: textarea
6 | id: reproduce-steps
7 | attributes:
8 | label: Steps to reproduce
9 | description: Provide an example of the issue.
10 | placeholder: |
11 | Example:
12 | 1. First step
13 | 2. Second step
14 | 3. Issue here
15 | validations:
16 | required: true
17 |
18 | - type: textarea
19 | id: expected-behavior
20 | attributes:
21 | label: Expected behavior
22 | description: Explain what you should expect to happen.
23 | placeholder: |
24 | Example:
25 | "This should happen..."
26 | validations:
27 | required: true
28 |
29 | - type: textarea
30 | id: actual-behavior
31 | attributes:
32 | label: Actual behavior
33 | description: Explain what actually happens.
34 | placeholder: |
35 | Example:
36 | "This happened instead..."
37 | validations:
38 | required: true
39 |
40 | - type: input
41 | id: version
42 | attributes:
43 | label: version of the program
44 | placeholder: >-
45 | Example: "2.6.14"
46 | validations:
47 | required: true
48 |
49 | - type: input
50 | id: android-version
51 | attributes:
52 | label: Android version
53 | description: You can find this somewhere in your Android settings.
54 | placeholder: |
55 | Example: "Android 14"
56 | validations:
57 | required: true
58 |
59 | - type: input
60 | id: device
61 | attributes:
62 | label: Device
63 | description: List your device and model.
64 | placeholder: |
65 | Example: "Google Pixel 8"
66 | validations:
67 | required: true
68 |
69 | - type: textarea
70 | id: other-details
71 | attributes:
72 | label: Other details
73 | placeholder: Additional details and attachments.
74 |
75 | - type: checkboxes
76 | id: acknowledgements
77 | attributes:
78 | label: Acknowledgements
79 | description: >-
80 | Read this carefully, I will close and ignore your issue if you skimmed through this.
81 | options:
82 | - label: I have written a short but informative title.
83 | required: true
84 | - label: I have updated the app to **[the latest version](https://github.com/dessalines/thumb-key/releases/latest)**.
85 | required: true
86 | - label: >-
87 | I have searched the existing issues and this is a new one, **NOT** a
88 | duplicate or related to another open issue.
89 | required: true
90 | - label: >-
91 | This is not a question or a discussion, in which case I should have
92 | gone to [lemmy.ml/c/thumbkey](https://lemmy.ml/c/thumbkey)
93 | required: true
94 | - label: >-
95 | This is a **single** bug report, in case of multiple bugs I will open
96 | a separate issue for each one
97 | (they can always link to each other if related)
98 | required: true
99 | - label: I have admitted that I am a clown by having checked this box, as I have not read these acknowledgements. 🤡
100 | - label: I have filled out all of the requested information in this form.
101 | required: true
102 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/HEMessagEase.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_HE_MESSAGEASE_MAIN =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("ר", size = LARGE),
17 | swipeType = FOUR_WAY_DIAGONAL,
18 | bottomRight = KeyC("ן", swipeReturnAction = CommitText("נ")),
19 | ),
20 | KeyItemC(
21 | center = KeyC("ב", size = LARGE),
22 | swipeType = TWO_WAY_VERTICAL,
23 | bottom = KeyC("ג"),
24 | ),
25 | KeyItemC(
26 | center = KeyC("א", size = LARGE),
27 | bottomLeft = KeyC("צ", swipeReturnAction = CommitText("ץ")),
28 | ),
29 | EMOJI_KEY_ITEM,
30 | ),
31 | listOf(
32 | KeyItemC(
33 | center = KeyC("מ", size = LARGE),
34 | right = KeyC("ם", swipeReturnAction = CommitText("מ")),
35 | ),
36 | KeyItemC(
37 | center = KeyC("י", size = LARGE),
38 | topLeft = KeyC("ק"),
39 | top = KeyC("ח"),
40 | topRight = KeyC("פ", swipeReturnAction = CommitText("ף")),
41 | right = KeyC("ד"),
42 | bottomRight = KeyC("ש"),
43 | bottom = KeyC("נ", swipeReturnAction = CommitText("ן")),
44 | bottomLeft = KeyC("כ", swipeReturnAction = CommitText("ך")),
45 | left = KeyC("ע"),
46 | ),
47 | KeyItemC(
48 | center = KeyC("ו", size = LARGE),
49 | swipeType = FOUR_WAY_DIAGONAL,
50 | ),
51 | NUMERIC_KEY_ITEM,
52 | ),
53 | listOf(
54 | KeyItemC(
55 | center = KeyC("ת", size = LARGE),
56 | swipeType = FOUR_WAY_DIAGONAL,
57 | topRight = KeyC("ז"),
58 | ),
59 | KeyItemC(
60 | center = KeyC("ה", size = LARGE),
61 | top = KeyC("ס"),
62 | topRight = KeyC("'", color = MUTED),
63 | bottomRight = KeyC("-", color = MUTED),
64 | bottom = KeyC(".", color = MUTED),
65 | bottomLeft = KeyC(",", color = MUTED),
66 | ),
67 | KeyItemC(
68 | center = KeyC("ל", size = LARGE),
69 | swipeType = FOUR_WAY_DIAGONAL,
70 | topLeft = KeyC("ט"),
71 | ),
72 | BACKSPACE_KEY_ITEM,
73 | ),
74 | listOf(
75 | SPACEBAR_KEY_ITEM,
76 | RETURN_KEY_ITEM,
77 | ),
78 | ),
79 | )
80 |
81 | val KB_HE_MESSAGEASE: KeyboardDefinition =
82 | KeyboardDefinition(
83 | title = "עברית messagease",
84 | modes =
85 | KeyboardDefinitionModes(
86 | main = KB_HE_MESSAGEASE_MAIN,
87 | shifted = KB_HE_MESSAGEASE_MAIN,
88 | numeric = KB_EN_MESSAGEASE_NUMERIC,
89 | ),
90 | )
91 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericENDENL.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val NUMERIC_ENDENL_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("1", size = LARGE),
17 | topLeft = KeyC("@"),
18 | topRight = KeyC("\$"),
19 | bottomRight = KeyC("£"),
20 | bottomLeft = KeyC("€"),
21 | ),
22 | KeyItemC(
23 | center = KeyC("2", size = LARGE),
24 | topLeft = KeyC("`"),
25 | top = KeyC("^"),
26 | topRight = KeyC("´"),
27 | bottomRight = KeyC("\\"),
28 | bottomLeft = KeyC("/"),
29 | ),
30 | KeyItemC(
31 | center = KeyC("3", size = LARGE),
32 | left = KeyC("+"),
33 | topRight = KeyC("&"),
34 | bottom = KeyC("="),
35 | ),
36 | EMOJI_KEY_ITEM,
37 | ),
38 | listOf(
39 | KeyItemC(
40 | center = KeyC("4", size = LARGE),
41 | topLeft = KeyC("{"),
42 | topRight = KeyC("%"),
43 | bottomLeft = KeyC("["),
44 | left = KeyC("("),
45 | ),
46 | KeyItemC(
47 | center = KeyC("5", size = LARGE),
48 | ),
49 | KeyItemC(
50 | center = KeyC("6", size = LARGE),
51 | topLeft = KeyC("|"),
52 | topRight = KeyC("}"),
53 | right = KeyC(")"),
54 | bottomRight = KeyC("]"),
55 | ),
56 | ABC_KEY_ITEM,
57 | ),
58 | listOf(
59 | KeyItemC(
60 | center = KeyC("7", size = LARGE),
61 | topLeft = KeyC("~"),
62 | bottomRight = KeyC(":"),
63 | bottom = KeyC(";"),
64 | bottomLeft = KeyC("<"),
65 | ),
66 | KeyItemC(
67 | center = KeyC("8", size = LARGE),
68 | topLeft = KeyC("\""),
69 | topRight = KeyC("'"),
70 | right = KeyC("_"),
71 | bottomRight = KeyC("-"),
72 | bottom = KeyC("."),
73 | bottomLeft = KeyC(","),
74 | left = KeyC("*"),
75 | ),
76 | KeyItemC(
77 | center = KeyC("9", size = LARGE),
78 | topRight = KeyC("°"),
79 | bottomRight = KeyC(">"),
80 | bottom = KeyC("!"),
81 | bottomLeft = KeyC("?"),
82 | left = KeyC("#"),
83 | ),
84 | BACKSPACE_KEY_ITEM,
85 | ),
86 | listOf(
87 | KeyItemC(
88 | center = KeyC("0", size = LARGE),
89 | widthMultiplier = 2,
90 | ),
91 | SPACEBAR_SKINNY_KEY_ITEM,
92 | RETURN_KEY_ITEM,
93 | ),
94 | ),
95 | )
96 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/ARThumbKeyLevant.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 |
9 | val KB_AR_THUMBKEY_LEVANT_MAIN =
10 | KeyboardC(
11 | listOf(
12 | listOf(
13 | KeyItemC(
14 | center = KeyC("ب", size = LARGE),
15 | bottomRight = KeyC("ش"),
16 | ),
17 | KeyItemC(
18 | center = KeyC("ر", size = LARGE),
19 | bottomRight = KeyC("ز"),
20 | bottom = KeyC("ق"),
21 | ),
22 | KeyItemC(
23 | center = KeyC("و", size = LARGE),
24 | top = KeyC("ؤ"),
25 | bottomLeft = KeyC("س"),
26 | ),
27 | EMOJI_KEY_ITEM,
28 | ),
29 | listOf(
30 | KeyItemC(
31 | center = KeyC("ن", size = LARGE),
32 | right = KeyC("ف"),
33 | bottomRight = KeyC("ذ"),
34 | left = KeyC(")", color = MUTED),
35 | ),
36 | KeyItemC(
37 | center = KeyC("ت", size = LARGE),
38 | topLeft = KeyC("ض"),
39 | top = KeyC("ث"),
40 | topRight = KeyC("خ"),
41 | right = KeyC("ح"),
42 | bottomRight = KeyC("ج"),
43 | bottom = KeyC("ة"),
44 | bottomLeft = KeyC("ص"),
45 | left = KeyC("ط"),
46 | ),
47 | KeyItemC(
48 | center = KeyC("ي", size = LARGE),
49 | top = KeyC("ئ"),
50 | right = KeyC("(", color = MUTED),
51 | bottom = KeyC("ى"),
52 | bottomLeft = KeyC("غ"),
53 | left = KeyC("ك"),
54 | ),
55 | NUMERIC_KEY_ITEM,
56 | ),
57 | listOf(
58 | KeyItemC(
59 | center = KeyC("ل", size = LARGE),
60 | topRight = KeyC("د"),
61 | bottomRight = KeyC(":", color = MUTED),
62 | bottomLeft = KeyC("!", color = MUTED),
63 | ),
64 | KeyItemC(
65 | center = KeyC("م", size = LARGE),
66 | top = KeyC("ه"),
67 | topRight = KeyC("ظ"),
68 | bottomRight = KeyC("،", color = MUTED),
69 | bottom = KeyC(".", color = MUTED),
70 | bottomLeft = KeyC("؟", color = MUTED),
71 | ),
72 | KeyItemC(
73 | center = KeyC("ا", size = LARGE),
74 | topLeft = KeyC("ع"),
75 | top = KeyC("أ"),
76 | topRight = KeyC("آ"),
77 | bottom = KeyC("إ"),
78 | left = KeyC("ء"),
79 | ),
80 | BACKSPACE_KEY_ITEM,
81 | ),
82 | listOf(
83 | SPACEBAR_KEY_ITEM,
84 | RETURN_KEY_ITEM,
85 | ),
86 | ),
87 | )
88 |
89 | val KB_AR_THUMBKEY_LEVANT: KeyboardDefinition =
90 | KeyboardDefinition(
91 | title = "عربية شامية thumb-key",
92 | modes =
93 | KeyboardDefinitionModes(
94 | main = KB_AR_THUMBKEY_LEVANT_MAIN,
95 | shifted = KB_AR_THUMBKEY_LEVANT_MAIN,
96 | numeric = ARABIC_NUMERIC_KEYBOARD,
97 | ),
98 | )
99 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericHyper.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val HYPER_NUMERIC_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | RETURN_KEY_ITEM,
16 | KeyItemC(
17 | center = KeyC("1", size = LARGE),
18 | top = KeyC(":(", size = SMALL),
19 | left = KeyC("["),
20 | bottomRight = KeyC("<"),
21 | right = KeyC("\\"),
22 | ),
23 | KeyItemC(
24 | center = KeyC("2", size = LARGE),
25 | bottom = KeyC("@"),
26 | ),
27 | KeyItemC(
28 | center = KeyC("3", size = LARGE),
29 | top = KeyC(":)", size = SMALL),
30 | left = KeyC("|"),
31 | right = KeyC("]"),
32 | bottomLeft = KeyC(">"),
33 | ),
34 | KeyItemC(
35 | center = KeyC(".", size = LARGE),
36 | bottom = KeyC(","),
37 | left = KeyC("!"),
38 | ),
39 | BACKSPACE_KEY_ITEM,
40 | ),
41 | listOf(
42 | SPACEBAR_SKINNY_KEY_ITEM,
43 | KeyItemC(
44 | center = KeyC("4", size = LARGE),
45 | top = KeyC("\""),
46 | bottom = KeyC(":"),
47 | left = KeyC("("),
48 | right = KeyC("_"),
49 | ),
50 | KeyItemC(
51 | center = KeyC("5", size = LARGE),
52 | left = KeyC("€"),
53 | right = KeyC("£"),
54 | top = KeyC("$"),
55 | bottom = KeyC("&"),
56 | ),
57 | KeyItemC(
58 | center = KeyC("6", size = LARGE),
59 | top = KeyC("'"),
60 | bottom = KeyC(";"),
61 | left = KeyC("^"),
62 | right = KeyC(")"),
63 | ),
64 | KeyItemC(
65 | center = KeyC("0", size = LARGE),
66 | left = KeyC("%"),
67 | ),
68 | SPACEBAR_SKINNY_KEY_ITEM,
69 | ),
70 | listOf(
71 | ABC_KEY_ITEM,
72 | KeyItemC(
73 | center = KeyC("7", size = LARGE),
74 | topRight = KeyC("?"),
75 | top = KeyC("~"),
76 | left = KeyC("{"),
77 | ),
78 | KeyItemC(
79 | center = KeyC("8", size = LARGE),
80 | topLeft = KeyC("`"),
81 | topRight = KeyC("´"),
82 | ),
83 | KeyItemC(
84 | center = KeyC("9", size = LARGE),
85 | right = KeyC("}"),
86 | top = KeyC("°"),
87 | topLeft = KeyC("#"),
88 | ),
89 | KeyItemC(
90 | center = KeyC("="),
91 | top = KeyC("+"),
92 | bottom = KeyC("-"),
93 | left = KeyC("*"),
94 | right = KeyC("/"),
95 | ),
96 | EMOJI_KEY_ITEM,
97 | ),
98 | ),
99 | )
100 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pl/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Wsparcie
4 | Wersja %1$s
5 | Thumb-Key
6 | Ustawienia
7 | System
8 | Jasny
9 | Ciemny
10 | Dynamiczny
11 | Różowy
12 | Matrix-AMOLED
13 | Niebieski
14 | Dracula
15 | Zmierzch
16 | Wysoki kontrast
17 | Kolorowy wysoki kontrast
18 | Kolory anarcho komunistyczne
19 | Środek
20 | Prawo
21 | Lewo
22 | O aplikacji
23 | Co nowego
24 | Wydania
25 | Przekaż darowiznę Thumb-Key
26 | Media społecznościowe
27 | Srcery
28 | Dołącz do c/thumbkey
29 | Obserwuj mnie na Mastodonie
30 | Kod źródłowy
31 | Thumb-Key to wolne otwarto źródłowe oprogramowanie, które używa licencji GNU Affero General Public License v3.0
32 | Wygląd
33 | Zachowanie
34 | Układy
35 | Motyw
36 | Kolor motywu
37 | Pozycja
38 | Wymaga by wibracje były włączone w ustawieniach systemu
39 | Wielkość klawiszy: %1$s
40 | Wysokość klawiszy: %1$s
41 | Szerokość klawiszy: %1$s
42 | Szybkość animacji: %1$s
43 | Tryb ruchu kursora
44 | Brak przyśpieszania / Stała prędkość
45 | Przywróć domyślne
46 | Czy na pewno chcesz przywrócić ustawienia do domyślnych?
47 | Przywróć
48 | Anuluj
49 | Zaczynaj wielką literą
50 | Zapisz kopię zapasową oraz przywróć
51 | Przewodnik dla użytkownika
52 | Wybierz Thumb-Key
53 | Skopiuj wybrany tekst
54 | Ukryj litery
55 | Ukryj symbole
56 | Przywróć kopię zapasową
57 | Uwaga: To wyczyści twoją obecną bazę danych
58 | Baza danych przywrócona.
59 | Kopia zapasowa bazy danych została wykonana.
60 | Zielony
61 | Przetestuj Thumb-Key
62 | Śledzenie zgłoszeń
63 | Konfiguracja
64 | Gotowe
65 |
66 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/KAThumbKey.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_KA_THUMBKEY_MAIN =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("მ", size = LARGE),
17 | right = KeyC("ხ"),
18 | bottomRight = KeyC("ვ"),
19 | bottom = KeyC("ც"),
20 | ),
21 | KeyItemC(
22 | center = KeyC("ბ", size = LARGE),
23 | swipeType = TWO_WAY_VERTICAL,
24 | bottom = KeyC("ლ"),
25 | ),
26 | KeyItemC(
27 | center = KeyC("ე", size = LARGE),
28 | swipeType = FOUR_WAY_DIAGONAL,
29 | bottomLeft = KeyC("გ"),
30 | bottomRight = KeyC("ჰ"),
31 | ),
32 | EMOJI_KEY_ITEM,
33 | ),
34 | listOf(
35 | KeyItemC(
36 | center = KeyC("ს", size = LARGE),
37 | swipeType = FOUR_WAY_CROSS,
38 | right = KeyC("თ"),
39 | bottom = KeyC("ნ"),
40 | ),
41 | KeyItemC(
42 | center = KeyC("დ", size = LARGE),
43 | topLeft = KeyC("ძ"),
44 | top = KeyC("ჩ"),
45 | topRight = KeyC("ღ"),
46 | right = KeyC("პ"),
47 | bottomRight = KeyC("ქ"),
48 | bottom = KeyC("ფ"),
49 | bottomLeft = KeyC("ყ"),
50 | left = KeyC("ზ"),
51 | ),
52 | KeyItemC(
53 | center = KeyC("ი", size = LARGE),
54 | swipeType = FOUR_WAY_CROSS,
55 | left = KeyC("კ"),
56 | ),
57 | NUMERIC_KEY_ITEM,
58 | ),
59 | listOf(
60 | KeyItemC(
61 | center = KeyC("რ", size = LARGE),
62 | topRight = KeyC("წ"),
63 | top = KeyC("შ"),
64 | right = KeyC("ჟ"),
65 | ),
66 | KeyItemC(
67 | center = KeyC("ო", size = LARGE),
68 | top = KeyC("ტ"),
69 | right = KeyC("ჯ"),
70 | topLeft = KeyC("\"", color = MUTED),
71 | topRight = KeyC("'", color = MUTED),
72 | bottomRight = KeyC("-", color = MUTED),
73 | bottom = KeyC(".", color = MUTED),
74 | bottomLeft = KeyC("*", color = MUTED),
75 | left = KeyC(",", color = MUTED),
76 | ),
77 | KeyItemC(
78 | center = KeyC("ა", size = LARGE),
79 | topLeft = KeyC("უ"),
80 | top = KeyC("ჭ"),
81 | ),
82 | BACKSPACE_KEY_ITEM,
83 | ),
84 | listOf(
85 | SPACEBAR_KEY_ITEM,
86 | RETURN_KEY_ITEM,
87 | ),
88 | ),
89 | )
90 |
91 | val KB_KA_THUMBKEY: KeyboardDefinition =
92 | KeyboardDefinition(
93 | title = "kartuli ena thumb-key",
94 | modes =
95 | KeyboardDefinitionModes(
96 | main = KB_KA_THUMBKEY_MAIN,
97 | shifted = KB_KA_THUMBKEY_MAIN,
98 | numeric = NUMERIC_KEYBOARD,
99 | ),
100 | )
101 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericFlipped.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
7 |
8 | val NUMERIC_KEYBOARD_FLIPPED =
9 | KeyboardC(
10 | listOf(
11 | listOf(
12 | KeyItemC(
13 | center = KeyC("7", size = LARGE),
14 | bottomLeft = KeyC("$"),
15 | bottomRight =
16 | getLocalCurrency()?.let {
17 | if (it !in setOf("$", "£", "€")) {
18 | KeyC(it)
19 | } else {
20 | null
21 | }
22 | },
23 | ),
24 | KeyItemC(
25 | center = KeyC("8", size = LARGE),
26 | topLeft = KeyC("`"),
27 | top = KeyC("^"),
28 | topRight = KeyC("´"),
29 | right = KeyC("!"),
30 | bottomRight = KeyC("\\"),
31 | bottomLeft = KeyC("/"),
32 | left = KeyC("+"),
33 | ),
34 | KeyItemC(
35 | center = KeyC("9", size = LARGE),
36 | left = KeyC("?"),
37 | bottomRight = KeyC("€"),
38 | bottomLeft = KeyC("£"),
39 | bottom = KeyC("="),
40 | ),
41 | EMOJI_KEY_ITEM,
42 | ),
43 | listOf(
44 | KeyItemC(
45 | center = KeyC("4", size = LARGE),
46 | topLeft = KeyC("{"),
47 | topRight = KeyC("%"),
48 | bottomRight = KeyC("_"),
49 | bottomLeft = KeyC("["),
50 | left = KeyC("("),
51 | ),
52 | KeyItemC(
53 | center = KeyC("5", size = LARGE),
54 | ),
55 | KeyItemC(
56 | center = KeyC("6", size = LARGE),
57 | topLeft = KeyC("|"),
58 | topRight = KeyC("}"),
59 | right = KeyC(")"),
60 | bottomRight = KeyC("]"),
61 | bottomLeft = KeyC("@"),
62 | ),
63 | ABC_KEY_ITEM,
64 | ),
65 | listOf(
66 | KeyItemC(
67 | center = KeyC("1", size = LARGE),
68 | topLeft = KeyC("~"),
69 | bottomRight = KeyC(":"),
70 | bottomLeft = KeyC("<"),
71 | ),
72 | KeyItemC(
73 | center = KeyC("2", size = LARGE),
74 | topLeft = KeyC("\""),
75 | topRight = KeyC("'"),
76 | bottomRight = KeyC("-"),
77 | bottom = KeyC("."),
78 | bottomLeft = KeyC("*"),
79 | left = KeyC(","),
80 | ),
81 | KeyItemC(
82 | center = KeyC("3", size = LARGE),
83 | top = KeyC("&"),
84 | topRight = KeyC("°"),
85 | bottomRight = KeyC(">"),
86 | bottomLeft = KeyC(";"),
87 | left = KeyC("#"),
88 | ),
89 | BACKSPACE_KEY_ITEM,
90 | ),
91 | listOf(
92 | KeyItemC(
93 | center = KeyC("0", size = LARGE),
94 | widthMultiplier = 2,
95 | ),
96 | SPACEBAR_SKINNY_KEY_ITEM,
97 | RETURN_KEY_ITEM,
98 | ),
99 | ),
100 | )
101 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericArabic.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
7 |
8 | val ARABIC_NUMERIC_KEYBOARD =
9 | KeyboardC(
10 | listOf(
11 | listOf(
12 | KeyItemC(
13 | center = KeyC("1", size = LARGE),
14 | bottomLeft = KeyC("$"),
15 | ),
16 | KeyItemC(
17 | center = KeyC("2", size = LARGE),
18 | topLeft = KeyC("`"),
19 | top = KeyC("^"),
20 | topRight = KeyC("´"),
21 | right = KeyC("!"),
22 | bottomRight = KeyC("\\"),
23 | bottomLeft = KeyC("/"),
24 | left = KeyC("+"),
25 | ),
26 | KeyItemC(
27 | center = KeyC("3", size = LARGE),
28 | bottomRight = KeyC("€"),
29 | bottomLeft = KeyC("£"),
30 | bottom = KeyC("="),
31 | ),
32 | EMOJI_KEY_ITEM,
33 | ),
34 | listOf(
35 | KeyItemC(
36 | center = KeyC("4", size = LARGE),
37 | topLeft = KeyC("{"),
38 | topRight = KeyC("%"),
39 | bottomRight = KeyC("_"),
40 | bottomLeft = KeyC("["),
41 | left = KeyC("("),
42 | ),
43 | KeyItemC(
44 | center = KeyC("5", size = LARGE),
45 | topLeft = KeyC("ً"),
46 | top = KeyC("ّ"),
47 | topRight = KeyC("َ"),
48 | right = KeyC("ُ"),
49 | bottomRight = KeyC("ِ"),
50 | bottom = KeyC("ْ"),
51 | bottomLeft = KeyC("ٍ"),
52 | left = KeyC("ٌ"),
53 | ),
54 | KeyItemC(
55 | center = KeyC("6", size = LARGE),
56 | topLeft = KeyC("|"),
57 | topRight = KeyC("}"),
58 | right = KeyC(")"),
59 | bottomRight = KeyC("]"),
60 | bottomLeft = KeyC("@"),
61 | ),
62 | ABC_KEY_ITEM,
63 | ),
64 | listOf(
65 | KeyItemC(
66 | center = KeyC("7", size = LARGE),
67 | topLeft = KeyC("~"),
68 | topRight = KeyC("-"),
69 | bottomRight = KeyC(":"),
70 | bottomLeft = KeyC("!"),
71 | left = KeyC("<"),
72 | ),
73 | KeyItemC(
74 | center = KeyC("8", size = LARGE),
75 | topLeft = KeyC("\""),
76 | top = KeyC("*"),
77 | topRight = KeyC("'"),
78 | right = KeyC("؛"),
79 | bottomRight = KeyC("،"),
80 | bottom = KeyC("."),
81 | bottomLeft = KeyC("؟"),
82 | left = KeyC(","),
83 | ),
84 | KeyItemC(
85 | center = KeyC("9", size = LARGE),
86 | top = KeyC("&"),
87 | topRight = KeyC("°"),
88 | right = KeyC(">"),
89 | bottomLeft = KeyC(";"),
90 | left = KeyC("#"),
91 | ),
92 | BACKSPACE_KEY_ITEM,
93 | ),
94 | listOf(
95 | KeyItemC(
96 | center = KeyC("0", size = LARGE),
97 | widthMultiplier = 2,
98 | ),
99 | SPACEBAR_SKINNY_KEY_ITEM,
100 | RETURN_KEY_ITEM,
101 | ),
102 | ),
103 | )
104 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericTypeSplit.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val TYPESPLIT_NUMERIC_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | textEditKeyItem(
16 | center = KeyC(" "),
17 | ),
18 | KeyItemC(
19 | center = KeyC("1", size = LARGE),
20 | bottomRight = KeyC("!"),
21 | top = KeyC("¯\\_(ツ)_/¯", size = SMALLEST),
22 | bottom = KeyC("~"),
23 | left = KeyC("{"),
24 | ),
25 | KeyItemC(
26 | center = KeyC("2", size = LARGE),
27 | bottom = KeyC("@"),
28 | topLeft = KeyC("`"),
29 | topRight = KeyC("´"),
30 | ),
31 | KeyItemC(
32 | center = KeyC("3", size = LARGE),
33 | right = KeyC("}"),
34 | topRight = KeyC("°"),
35 | bottomLeft = KeyC("#"),
36 | ),
37 | KeyItemC(
38 | center = KeyC(".", size = LARGE),
39 | ),
40 | ),
41 | listOf(
42 | KeyItemC(
43 | center = KeyC(" "),
44 | top = KeyC("+"),
45 | bottom = KeyC("="),
46 | left = KeyC("-"),
47 | right = KeyC("_"),
48 | backgroundColor = SURFACE_VARIANT,
49 | ),
50 | KeyItemC(
51 | center = KeyC("4", size = LARGE),
52 | top = KeyC("\""),
53 | bottom = KeyC(":"),
54 | left = KeyC("("),
55 | right = KeyC("$"),
56 | ),
57 | KeyItemC(
58 | center = KeyC("5", size = LARGE),
59 | left = KeyC("€"),
60 | right = KeyC("£"),
61 | bottom = KeyC("%"),
62 | ),
63 | KeyItemC(
64 | center = KeyC("6", size = LARGE),
65 | top = KeyC("'"),
66 | bottom = KeyC(";"),
67 | left = KeyC("^"),
68 | right = KeyC(")"),
69 | ),
70 | KeyItemC(
71 | center = KeyC(",", size = LARGE),
72 | ),
73 | ),
74 | listOf(
75 | SPACEBAR_SKINNY_KEY_ITEM,
76 | KeyItemC(
77 | center = KeyC("7", size = LARGE),
78 | topLeft = KeyC("["),
79 | topRight = KeyC("&"),
80 | bottomLeft = KeyC("<"),
81 | ),
82 | KeyItemC(
83 | center = KeyC("8", size = LARGE),
84 | top = KeyC("*"),
85 | bottom = KeyC("?"),
86 | left = KeyC("/"),
87 | right = KeyC("\\"),
88 | ),
89 | KeyItemC(
90 | center = KeyC("9", size = LARGE),
91 | left = KeyC("|"),
92 | topRight = KeyC("]"),
93 | bottomRight = KeyC(">"),
94 | ),
95 | KeyItemC(
96 | center = KeyC("0", size = LARGE),
97 | ),
98 | ),
99 | listOf(
100 | ABC_KEY_ITEM_ALT,
101 | BACKSPACE_WIDE_KEY_ITEM,
102 | RETURN_KEY_ITEM,
103 | ),
104 | ),
105 | )
106 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/Numeric.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val NUMERIC_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("1", size = LARGE),
17 | bottomLeft = KeyC("$"),
18 | bottomRight =
19 | getLocalCurrency()?.let {
20 | if (it !in setOf("$", "£", "€")) {
21 | KeyC(it)
22 | } else {
23 | null
24 | }
25 | },
26 | ),
27 | KeyItemC(
28 | center = KeyC("2", size = LARGE),
29 | topLeft = KeyC("`"),
30 | top = KeyC("^"),
31 | topRight = KeyC("´"),
32 | right = KeyC("!"),
33 | bottomRight = KeyC("\\"),
34 | bottomLeft = KeyC("/"),
35 | left = KeyC("+"),
36 | ),
37 | KeyItemC(
38 | center = KeyC("3", size = LARGE),
39 | left = KeyC("?"),
40 | bottomRight = KeyC("€"),
41 | bottomLeft = KeyC("£"),
42 | bottom = KeyC("="),
43 | ),
44 | EMOJI_KEY_ITEM,
45 | ),
46 | listOf(
47 | KeyItemC(
48 | center = KeyC("4", size = LARGE),
49 | topLeft = KeyC("{"),
50 | topRight = KeyC("%"),
51 | bottomRight = KeyC("_"),
52 | bottomLeft = KeyC("["),
53 | left = KeyC("("),
54 | ),
55 | KeyItemC(
56 | center = KeyC("5", size = LARGE),
57 | ),
58 | KeyItemC(
59 | center = KeyC("6", size = LARGE),
60 | topLeft = KeyC("|"),
61 | topRight = KeyC("}"),
62 | right = KeyC(")"),
63 | bottomRight = KeyC("]"),
64 | bottomLeft = KeyC("@"),
65 | ),
66 | ABC_KEY_ITEM,
67 | ),
68 | listOf(
69 | KeyItemC(
70 | center = KeyC("7", size = LARGE),
71 | topLeft = KeyC("~"),
72 | bottomRight = KeyC(":"),
73 | bottomLeft = KeyC("<"),
74 | ),
75 | KeyItemC(
76 | center = KeyC("8", size = LARGE),
77 | topLeft = KeyC("\""),
78 | topRight = KeyC("'"),
79 | bottomRight = KeyC("-"),
80 | bottom = KeyC("."),
81 | bottomLeft = KeyC("*"),
82 | left = KeyC(","),
83 | ),
84 | KeyItemC(
85 | center = KeyC("9", size = LARGE),
86 | top = KeyC("&"),
87 | topRight = KeyC("°"),
88 | bottomRight = KeyC(">"),
89 | bottomLeft = KeyC(";"),
90 | left = KeyC("#"),
91 | ),
92 | BACKSPACE_KEY_ITEM,
93 | ),
94 | listOf(
95 | KeyItemC(
96 | center = KeyC("0", size = LARGE),
97 | widthMultiplier = 2,
98 | ),
99 | SPACEBAR_SKINNY_KEY_ITEM,
100 | RETURN_KEY_ITEM,
101 | ),
102 | ),
103 | )
104 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericFrenchTypeSplit.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val FRENCH_TYPESPLIT_NUMERIC_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | textEditKeyItem(
16 | center = KeyC(" "),
17 | ),
18 | KeyItemC(
19 | center = KeyC("1", size = LARGE),
20 | bottomRight = KeyC("!"),
21 | top = KeyC("¯\\_(ツ)_/¯", size = SMALLEST),
22 | bottom = KeyC("~"),
23 | left = KeyC("{"),
24 | ),
25 | KeyItemC(
26 | center = KeyC("2", size = LARGE),
27 | bottom = KeyC("@"),
28 | topLeft = KeyC("`"),
29 | topRight = KeyC("´"),
30 | ),
31 | KeyItemC(
32 | center = KeyC("3", size = LARGE),
33 | right = KeyC("}"),
34 | topRight = KeyC("°"),
35 | bottomLeft = KeyC("#"),
36 | ),
37 | KeyItemC(
38 | center = KeyC(".", size = LARGE),
39 | ),
40 | ),
41 | listOf(
42 | KeyItemC(
43 | center = KeyC(" "),
44 | top = KeyC("+"),
45 | bottom = KeyC("="),
46 | left = KeyC("-"),
47 | right = KeyC("_"),
48 | backgroundColor = SURFACE_VARIANT,
49 | ),
50 | KeyItemC(
51 | center = KeyC("4", size = LARGE),
52 | top = KeyC("\""),
53 | bottom = KeyC(":"),
54 | left = KeyC("("),
55 | right = KeyC("$"),
56 | ),
57 | KeyItemC(
58 | center = KeyC("5", size = LARGE),
59 | left = KeyC("€"),
60 | right = KeyC("£"),
61 | bottom = KeyC("%"),
62 | ),
63 | KeyItemC(
64 | center = KeyC("6", size = LARGE),
65 | top = KeyC("'"),
66 | bottom = KeyC(";"),
67 | left = KeyC("^"),
68 | right = KeyC(")"),
69 | ),
70 | KeyItemC(
71 | center = KeyC(",", size = LARGE),
72 | ),
73 | ),
74 | listOf(
75 | SPACEBAR_FRENCH_SKINNY_KEY_ITEM,
76 | KeyItemC(
77 | center = KeyC("7", size = LARGE),
78 | topLeft = KeyC("["),
79 | topRight = KeyC("&"),
80 | bottomLeft = KeyC("<"),
81 | ),
82 | KeyItemC(
83 | center = KeyC("8", size = LARGE),
84 | top = KeyC("*"),
85 | bottom = KeyC("?"),
86 | left = KeyC("/"),
87 | right = KeyC("\\"),
88 | ),
89 | KeyItemC(
90 | center = KeyC("9", size = LARGE),
91 | left = KeyC("|"),
92 | topRight = KeyC("]"),
93 | bottomRight = KeyC(">"),
94 | ),
95 | KeyItemC(
96 | center = KeyC("0", size = LARGE),
97 | ),
98 | ),
99 | listOf(
100 | ABC_KEY_ITEM_ALT,
101 | BACKSPACE_WIDE_KEY_ITEM,
102 | RETURN_KEY_ITEM,
103 | ),
104 | ),
105 | )
106 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericMyanmar.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val MYANMAR_NUMERIC_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("၁", size = LARGE),
17 | bottomLeft = KeyC("$"),
18 | bottomRight =
19 | getLocalCurrency()?.let {
20 | if (it !in setOf("$", "£", "€")) {
21 | KeyC(it)
22 | } else {
23 | null
24 | }
25 | },
26 | ),
27 | KeyItemC(
28 | center = KeyC("၂", size = LARGE),
29 | topLeft = KeyC("`"),
30 | top = KeyC("^"),
31 | topRight = KeyC("´"),
32 | right = KeyC("!"),
33 | bottomRight = KeyC("\\"),
34 | bottomLeft = KeyC("/"),
35 | left = KeyC("+"),
36 | ),
37 | KeyItemC(
38 | center = KeyC("၃", size = LARGE),
39 | left = KeyC("?"),
40 | bottomRight = KeyC("€"),
41 | bottomLeft = KeyC("£"),
42 | bottom = KeyC("="),
43 | ),
44 | EMOJI_KEY_ITEM,
45 | ),
46 | listOf(
47 | KeyItemC(
48 | center = KeyC("၄", size = LARGE),
49 | topLeft = KeyC("{"),
50 | topRight = KeyC("%"),
51 | bottomRight = KeyC("_"),
52 | bottomLeft = KeyC("["),
53 | left = KeyC("("),
54 | ),
55 | KeyItemC(
56 | center = KeyC("၅", size = LARGE),
57 | ),
58 | KeyItemC(
59 | center = KeyC("၆", size = LARGE),
60 | topLeft = KeyC("|"),
61 | topRight = KeyC("}"),
62 | right = KeyC(")"),
63 | bottomRight = KeyC("]"),
64 | bottomLeft = KeyC("@"),
65 | ),
66 | ABC_KEY_ITEM,
67 | ),
68 | listOf(
69 | KeyItemC(
70 | center = KeyC("၇", size = LARGE),
71 | topLeft = KeyC("~"),
72 | bottomRight = KeyC(":"),
73 | bottomLeft = KeyC("<"),
74 | ),
75 | KeyItemC(
76 | center = KeyC("၈", size = LARGE),
77 | topLeft = KeyC("\""),
78 | topRight = KeyC("'"),
79 | bottomRight = KeyC("-"),
80 | bottom = KeyC("."),
81 | bottomLeft = KeyC("*"),
82 | left = KeyC(","),
83 | ),
84 | KeyItemC(
85 | center = KeyC("၉", size = LARGE),
86 | top = KeyC("&"),
87 | topRight = KeyC("°"),
88 | bottomRight = KeyC(">"),
89 | bottomLeft = KeyC(";"),
90 | left = KeyC("#"),
91 | ),
92 | BACKSPACE_KEY_ITEM,
93 | ),
94 | listOf(
95 | KeyItemC(
96 | center = KeyC("၀", size = LARGE),
97 | widthMultiplier = 2,
98 | ),
99 | SPACEBAR_SKINNY_KEY_ITEM,
100 | RETURN_KEY_ITEM,
101 | ),
102 | ),
103 | )
104 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericFarsiSamsung.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val FARSI_NUMERIC_SAMSUNG_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("۱", size = LARGE),
17 | right = KeyC("ّ", displayText = "ـّ"),
18 | bottom = KeyC("٫"),
19 | bottomLeft = KeyC("﷼"),
20 | ),
21 | KeyItemC(
22 | center = KeyC("۲", size = LARGE),
23 | topLeft = KeyC("`"),
24 | top = KeyC("^"),
25 | topRight = KeyC("´"),
26 | right = KeyC("!"),
27 | bottomRight = KeyC("\\"),
28 | bottomLeft = KeyC("/"),
29 | left = KeyC("+"),
30 | ),
31 | KeyItemC(
32 | center = KeyC("۳", size = LARGE),
33 | left = KeyC("؟"),
34 | bottomRight = KeyC("$"),
35 | bottom = KeyC("="),
36 | ),
37 | EMOJI_KEY_ITEM,
38 | ),
39 | listOf(
40 | KeyItemC(
41 | center = KeyC("۴", size = LARGE),
42 | topLeft = KeyC("{"),
43 | topRight = KeyC("٪"),
44 | bottomRight = KeyC("_"),
45 | bottomLeft = KeyC("["),
46 | left = KeyC("("),
47 | ),
48 | KeyItemC(
49 | center = KeyC("۵", size = LARGE),
50 | topLeft = KeyC("ُ", displayText = "ـُ"),
51 | topRight = KeyC("َ", displayText = "ـَ"),
52 | bottom = KeyC("ِ", displayText = "ـِ"),
53 | ),
54 | KeyItemC(
55 | center = KeyC("۶", size = LARGE),
56 | topLeft = KeyC("|"),
57 | topRight = KeyC("}"),
58 | right = KeyC(")"),
59 | bottomRight = KeyC("]"),
60 | bottomLeft = KeyC("@"),
61 | ),
62 | ABC_KEY_ITEM,
63 | ),
64 | listOf(
65 | KeyItemC(
66 | center = KeyC("۷", size = LARGE),
67 | topLeft = KeyC("~"),
68 | topRight = KeyC("ً", displayText = "ـً"),
69 | bottomRight = KeyC(":"),
70 | bottomLeft = KeyC("<"),
71 | left = KeyC("«"),
72 | ),
73 | KeyItemC(
74 | center = KeyC("۸", size = LARGE),
75 | topLeft = KeyC("\""),
76 | topRight = KeyC("'"),
77 | bottomRight = KeyC("-"),
78 | bottom = KeyC("."),
79 | bottomLeft = KeyC("*"),
80 | left = KeyC("،"),
81 | ),
82 | KeyItemC(
83 | center = KeyC("۹", size = LARGE),
84 | top = KeyC("&"),
85 | topRight = KeyC("°"),
86 | right = KeyC("»"),
87 | bottomRight = KeyC(">"),
88 | bottomLeft = KeyC("؛"),
89 | left = KeyC("#"),
90 | ),
91 | BACKSPACE_KEY_ITEM,
92 | ),
93 | listOf(
94 | KeyItemC(
95 | center = KeyC("۰", size = LARGE),
96 | widthMultiplier = 2,
97 | ),
98 | SPACEBAR_FARSI_SKINNY_KEY_ITEM,
99 | RETURN_KEY_ITEM,
100 | ),
101 | ),
102 | )
103 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/HEThumbKey.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_HE_THUMBKEY_MAIN =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("מ", size = LARGE),
17 | topLeft = KeyC("\u200E", displayText = "LRM", color = MUTED),
18 | bottomRight = KeyC("נ"),
19 | swipeType = FOUR_WAY_DIAGONAL,
20 | ),
21 | KeyItemC(
22 | center = KeyC("ב", size = LARGE),
23 | bottom = KeyC("ע"),
24 | swipeType = TWO_WAY_VERTICAL,
25 | ),
26 | KeyItemC(
27 | center = KeyC("א", size = LARGE),
28 | topRight = KeyC("\u200F", displayText = "RLM", color = MUTED),
29 | bottomLeft = KeyC("כ"),
30 | swipeType = FOUR_WAY_DIAGONAL,
31 | ),
32 | EMOJI_KEY_ITEM,
33 | ),
34 | listOf(
35 | KeyItemC(
36 | center = KeyC("ת", size = LARGE),
37 | right = KeyC("ם"),
38 | left = KeyC("ץ"),
39 | swipeType = TWO_WAY_HORIZONTAL,
40 | ),
41 | KeyItemC(
42 | center = KeyC("ל", size = LARGE),
43 | topLeft = KeyC("ט"),
44 | top = KeyC("ך"),
45 | topRight = KeyC("ק"),
46 | right = KeyC("צ"),
47 | bottomRight = KeyC("ס"),
48 | bottom = KeyC("ז"),
49 | bottomLeft = KeyC("ג"),
50 | left = KeyC("ן"),
51 | ),
52 | KeyItemC(
53 | center = KeyC("ו", size = LARGE),
54 | left = KeyC("פ"),
55 | right = KeyC("ף"),
56 | swipeType = TWO_WAY_HORIZONTAL,
57 | ),
58 | NUMERIC_KEY_ITEM,
59 | ),
60 | listOf(
61 | KeyItemC(
62 | center = KeyC("ר", size = LARGE),
63 | topRight = KeyC("ש"),
64 | bottomRight = KeyC("”", color = MUTED),
65 | swipeType = FOUR_WAY_DIAGONAL,
66 | ),
67 | KeyItemC(
68 | center = KeyC("ה", size = LARGE),
69 | topLeft = KeyC("״", color = MUTED),
70 | top = KeyC("ד"),
71 | topRight = KeyC("׳", color = MUTED),
72 | right = KeyC("–", color = MUTED),
73 | bottomRight = KeyC("…", color = MUTED),
74 | bottom = KeyC(".", color = MUTED),
75 | bottomLeft = KeyC(",", color = MUTED),
76 | left = KeyC("־", color = MUTED),
77 | ),
78 | KeyItemC(
79 | center = KeyC("י", size = LARGE),
80 | topLeft = KeyC("ח"),
81 | bottomLeft = KeyC("’", color = MUTED),
82 | swipeType = FOUR_WAY_DIAGONAL,
83 | ),
84 | BACKSPACE_KEY_ITEM,
85 | ),
86 | listOf(
87 | SPACEBAR_KEY_ITEM,
88 | RETURN_KEY_ITEM,
89 | ),
90 | ),
91 | )
92 |
93 | val KB_HE_THUMBKEY: KeyboardDefinition =
94 | KeyboardDefinition(
95 | title = "עברית thumb-key",
96 | modes =
97 | KeyboardDefinitionModes(
98 | main = KB_HE_THUMBKEY_MAIN,
99 | shifted = KB_HE_THUMBKEY_MAIN,
100 | numeric = NUMERIC_KEYBOARD,
101 | ),
102 | )
103 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericENMessagEase.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_EN_MESSAGEASE_NUMERIC =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("1", size = LARGE),
17 | bottomLeft = KeyC("$"),
18 | right = KeyC("-"),
19 | bottomRight =
20 | getLocalCurrency()?.let {
21 | if (it !in setOf("$", "£", "€")) {
22 | KeyC(it)
23 | } else {
24 | null
25 | }
26 | },
27 | ),
28 | KeyItemC(
29 | center = KeyC("2", size = LARGE),
30 | topLeft = KeyC("`"),
31 | top = KeyC("^"),
32 | topRight = KeyC("´"),
33 | right = KeyC("!"),
34 | bottomRight = KeyC("\\"),
35 | bottomLeft = KeyC("/"),
36 | left = KeyC("+"),
37 | ),
38 | KeyItemC(
39 | center = KeyC("3", size = LARGE),
40 | left = KeyC("?"),
41 | bottomRight = KeyC("€"),
42 | bottomLeft = KeyC("£"),
43 | bottom = KeyC("="),
44 | ),
45 | EMOJI_KEY_ITEM,
46 | ),
47 | listOf(
48 | KeyItemC(
49 | center = KeyC("4", size = LARGE),
50 | topLeft = KeyC("{"),
51 | topRight = KeyC("%"),
52 | bottomRight = KeyC("_"),
53 | bottomLeft = KeyC("["),
54 | left = KeyC("("),
55 | ),
56 | KeyItemC(
57 | center = KeyC("5", size = LARGE),
58 | top = KeyC("¬"),
59 | ),
60 | KeyItemC(
61 | center = KeyC("6", size = LARGE),
62 | topLeft = KeyC("|"),
63 | topRight = KeyC("}"),
64 | right = KeyC(")"),
65 | bottomRight = KeyC("]"),
66 | bottomLeft = KeyC("@"),
67 | ),
68 | ABC_KEY_ITEM,
69 | ),
70 | listOf(
71 | KeyItemC(
72 | center = KeyC("7", size = LARGE),
73 | topLeft = KeyC("~"),
74 | left = KeyC("<"),
75 | right = KeyC("*"),
76 | bottomRight = KeyC("\t", displayText = "⇥"),
77 | ),
78 | KeyItemC(
79 | center = KeyC("8", size = LARGE),
80 | topLeft = KeyC("\""),
81 | topRight = KeyC("'"),
82 | bottomRight = KeyC(":"),
83 | bottom = KeyC("."),
84 | bottomLeft = KeyC(","),
85 | ),
86 | KeyItemC(
87 | center = KeyC("9", size = LARGE),
88 | top = KeyC("&"),
89 | topRight = KeyC("°"),
90 | right = KeyC(">"),
91 | bottomLeft = KeyC(";"),
92 | left = KeyC("#"),
93 | ),
94 | BACKSPACE_KEY_ITEM,
95 | ),
96 | listOf(
97 | KeyItemC(
98 | center = KeyC("0", size = LARGE),
99 | widthMultiplier = 2,
100 | ),
101 | SPACEBAR_SKINNY_KEY_ITEM,
102 | RETURN_KEY_ITEM,
103 | ),
104 | ),
105 | )
106 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericESMessagEase.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | // this val is so we can can use mapOf in the key with currency symbol
12 | val KB_ES_MESSAGEASE_CURRENCY_SYMBOL: String =
13 | getLocalCurrency()?.let {
14 | if (it !in setOf("$", "£", "€")) {
15 | it
16 | } else {
17 | "$"
18 | }
19 | }!!
20 |
21 | val KB_ES_MESSAGEASE_NUMERIC =
22 | KeyboardC(
23 | listOf(
24 | listOf(
25 | KeyItemC(
26 | center = KeyC("1", size = LARGE),
27 | right = KeyC("-"),
28 | bottomLeft = KeyC(KB_ES_MESSAGEASE_CURRENCY_SYMBOL),
29 | ),
30 | KeyItemC(
31 | center = KeyC("2", size = LARGE),
32 | topLeft = KeyC("`"),
33 | top = KeyC("^"),
34 | topRight = KeyC("´"),
35 | right = KeyC("!"),
36 | bottomRight = KeyC("\\"),
37 | bottomLeft = KeyC("/"),
38 | left = KeyC("+"),
39 | ),
40 | KeyItemC(
41 | center = KeyC("3", size = LARGE),
42 | topRight = KeyC("¡"),
43 | left = KeyC("?"),
44 | right = KeyC("¿"),
45 | bottomRight = KeyC("€"),
46 | bottomLeft = KeyC("£"),
47 | bottom = KeyC("="),
48 | ),
49 | EMOJI_KEY_ITEM,
50 | ),
51 | listOf(
52 | KeyItemC(
53 | center = KeyC("4", size = LARGE),
54 | topLeft = KeyC("{"),
55 | topRight = KeyC("%"),
56 | bottomRight = KeyC("_"),
57 | bottomLeft = KeyC("["),
58 | left = KeyC("("),
59 | ),
60 | KeyItemC(
61 | center = KeyC("5", size = LARGE),
62 | top = KeyC("¬"),
63 | ),
64 | KeyItemC(
65 | center = KeyC("6", size = LARGE),
66 | topLeft = KeyC("|"),
67 | topRight = KeyC("}"),
68 | right = KeyC(")"),
69 | bottomRight = KeyC("]"),
70 | bottomLeft = KeyC("@"),
71 | ),
72 | ABC_KEY_ITEM,
73 | ),
74 | listOf(
75 | KeyItemC(
76 | center = KeyC("7", size = LARGE),
77 | topLeft = KeyC("~"),
78 | top = KeyC("¨"),
79 | left = KeyC("<"),
80 | right = KeyC("*"),
81 | ),
82 | KeyItemC(
83 | center = KeyC("8", size = LARGE),
84 | topLeft = KeyC("\""),
85 | topRight = KeyC("'"),
86 | bottomRight = KeyC(":"),
87 | bottom = KeyC("."),
88 | bottomLeft = KeyC(","),
89 | ),
90 | KeyItemC(
91 | center = KeyC("9", size = LARGE),
92 | top = KeyC("&"),
93 | topRight = KeyC("°"),
94 | right = KeyC(">"),
95 | bottomLeft = KeyC(";"),
96 | left = KeyC("#"),
97 | ),
98 | BACKSPACE_KEY_ITEM,
99 | ),
100 | listOf(
101 | KeyItemC(
102 | center = KeyC("0", size = LARGE),
103 | widthMultiplier = 2,
104 | ),
105 | SPACEBAR_SKINNY_KEY_ITEM,
106 | RETURN_KEY_ITEM,
107 | ),
108 | ),
109 | )
110 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericDual.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val NUMERIC_KEYBOARD_DUAL =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | EMOJI_KEY_ITEM,
16 | KeyItemC(
17 | center = KeyC("1", size = LARGE),
18 | bottomLeft = KeyC("$"),
19 | bottomRight =
20 | getLocalCurrency()?.let {
21 | if (it !in setOf("$", "£", "€")) {
22 | KeyC(it)
23 | } else {
24 | null
25 | }
26 | },
27 | ),
28 | KeyItemC(
29 | center = KeyC("2", size = LARGE),
30 | topLeft = KeyC("`"),
31 | top = KeyC("^"),
32 | topRight = KeyC("´"),
33 | right = KeyC("!"),
34 | bottomRight = KeyC("\\"),
35 | bottomLeft = KeyC("/"),
36 | left = KeyC("+"),
37 | ),
38 | KeyItemC(
39 | center = KeyC("3", size = LARGE),
40 | left = KeyC("?"),
41 | bottomRight = KeyC("€"),
42 | bottomLeft = KeyC("£"),
43 | bottom = KeyC("="),
44 | ),
45 | EMOJI_KEY_ITEM,
46 | ),
47 | listOf(
48 | ABC_KEY_ITEM,
49 | KeyItemC(
50 | center = KeyC("4", size = LARGE),
51 | topLeft = KeyC("{"),
52 | topRight = KeyC("%"),
53 | bottomRight = KeyC("_"),
54 | bottomLeft = KeyC("["),
55 | left = KeyC("("),
56 | ),
57 | KeyItemC(
58 | center = KeyC("5", size = LARGE),
59 | ),
60 | KeyItemC(
61 | center = KeyC("6", size = LARGE),
62 | topLeft = KeyC("|"),
63 | topRight = KeyC("}"),
64 | right = KeyC(")"),
65 | bottomRight = KeyC("]"),
66 | bottomLeft = KeyC("@"),
67 | ),
68 | ABC_KEY_ITEM,
69 | ),
70 | listOf(
71 | BACKSPACE_KEY_ITEM,
72 | KeyItemC(
73 | center = KeyC("7", size = LARGE),
74 | topLeft = KeyC("~"),
75 | bottomRight = KeyC(":"),
76 | bottomLeft = KeyC("<"),
77 | ),
78 | KeyItemC(
79 | center = KeyC("8", size = LARGE),
80 | topLeft = KeyC("\""),
81 | topRight = KeyC("'"),
82 | bottomRight = KeyC("-"),
83 | bottom = KeyC("."),
84 | bottomLeft = KeyC("*"),
85 | left = KeyC(","),
86 | ),
87 | KeyItemC(
88 | center = KeyC("9", size = LARGE),
89 | top = KeyC("&"),
90 | topRight = KeyC("°"),
91 | bottomRight = KeyC(">"),
92 | bottomLeft = KeyC(";"),
93 | left = KeyC("#"),
94 | ),
95 | BACKSPACE_KEY_ITEM,
96 | ),
97 | listOf(
98 | RETURN_KEY_ITEM,
99 | KeyItemC(
100 | center = KeyC("0", size = LARGE),
101 | widthMultiplier = 2,
102 | ),
103 | SPACEBAR_SKINNY_KEY_ITEM,
104 | RETURN_KEY_ITEM,
105 | ),
106 | ),
107 | )
108 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericFrench.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val FRENCH_NUMERIC_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("1", size = LARGE),
17 | bottomLeft = KeyC("$"),
18 | bottomRight =
19 | getLocalCurrency()?.let {
20 | if (it !in setOf("$", "£", "€")) {
21 | KeyC(it)
22 | } else {
23 | null
24 | }
25 | },
26 | ),
27 | KeyItemC(
28 | center = KeyC("2", size = LARGE),
29 | topLeft = KeyC("`"),
30 | top = KeyC("^"),
31 | topRight = KeyC("´"),
32 | right = KeyC("!"),
33 | bottomRight = KeyC("\\"),
34 | bottomLeft = KeyC("/", swipeReturnAction = CommitText("\\")),
35 | left = KeyC("+", swipeReturnAction = CommitText("±")),
36 | ),
37 | KeyItemC(
38 | center = KeyC("3", size = LARGE),
39 | left = KeyC("?", swipeReturnAction = CommitText("!")),
40 | bottomRight = KeyC("€"),
41 | bottomLeft = KeyC("£"),
42 | bottom = KeyC("="),
43 | ),
44 | EMOJI_KEY_ITEM,
45 | ),
46 | listOf(
47 | KeyItemC(
48 | center = KeyC("4", size = LARGE),
49 | topLeft = KeyC("{"),
50 | topRight = KeyC("%"),
51 | bottomRight = KeyC("_"),
52 | bottomLeft = KeyC("["),
53 | left = KeyC("("),
54 | ),
55 | KeyItemC(
56 | center = KeyC("5", size = LARGE),
57 | ),
58 | KeyItemC(
59 | center = KeyC("6", size = LARGE),
60 | topLeft = KeyC("|"),
61 | topRight = KeyC("}"),
62 | right = KeyC(")"),
63 | bottomRight = KeyC("]"),
64 | bottomLeft = KeyC("@"),
65 | ),
66 | ABC_KEY_ITEM,
67 | ),
68 | listOf(
69 | KeyItemC(
70 | center = KeyC("7", size = LARGE),
71 | topLeft = KeyC("~"),
72 | bottomRight = KeyC(":"),
73 | bottomLeft = KeyC("<"),
74 | ),
75 | KeyItemC(
76 | center = KeyC("8", size = LARGE),
77 | topLeft = KeyC("\""),
78 | topRight = KeyC("'", swipeReturnAction = CommitText("\"")),
79 | bottomRight = KeyC("-"),
80 | bottom = KeyC("."),
81 | bottomLeft = KeyC("*"),
82 | left = KeyC(","),
83 | ),
84 | KeyItemC(
85 | center = KeyC("9", size = LARGE),
86 | top = KeyC("&"),
87 | topRight = KeyC("°"),
88 | bottomRight = KeyC(">"),
89 | bottomLeft = KeyC(";"),
90 | left = KeyC("#"),
91 | ),
92 | BACKSPACE_KEY_ITEM,
93 | ),
94 | listOf(
95 | KeyItemC(
96 | center = KeyC("0", size = LARGE),
97 | widthMultiplier = 2,
98 | ),
99 | SPACEBAR_FRENCH_SKINNY_KEY_ITEM,
100 | RETURN_KEY_ITEM,
101 | ),
102 | ),
103 | )
104 |
--------------------------------------------------------------------------------
/app/src/main/res/values-zh-rCN/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Thumb-Key
4 | 设置
5 | 系统
6 | 亮色
7 | 暗色
8 | 动态(跟随系统)
9 | 绿
10 | 粉
11 | AMOLED
12 | Srcery
13 | 蓝色
14 | Dracula
15 | Twilight
16 | 高对比度
17 | 带颜色的高对比度
18 | 安康色
19 | 居中
20 | 靠右
21 | 靠左
22 | 关于
23 | 更新内容
24 | 版本 %1$s
25 | 正式版
26 | 支持
27 | 问题聚焦
28 | 开发者Matrix聊天室
29 | 捐赠
30 | 社交媒体
31 | 加入 c/thumbkey
32 | 在Mastodon上关注我
33 | 开源
34 | 源码
35 | Thumb-Key是一个自由开源软件, 使用GNU Affero General Public License v3.0协议传播
36 | 外观和体验
37 | 行为
38 | 布局
39 | 主题
40 | 主题色
41 | 位置
42 | 按键震动
43 | 需要在系统设置中把触摸反馈打开
44 | 按键音
45 | 自动大写
46 | 按键大小: %1$s
47 | 非方正按键
48 | 按键高度: %1$s
49 | 按键宽度: %1$s
50 | 底部上移: %1$s
51 | 滑动判定长度: %1$s
52 | 动画速度: %1$s
53 | 提示动画速度: %1$s
54 | 滑动速度
55 | 光标移动模式
56 | 滑动灵敏度: %1$s
57 | 匀速
58 | 线性加速
59 | 成倍加速
60 | 阈值加速
61 | 空格键: 允许正常滑动与滑动手势配合使用
62 | 退格键: 允许正常滑动与滑动手势配合使用
63 | 重置为默认值
64 | 确认重置所有设置
65 | 重置
66 | 取消
67 | 点我测试键盘效果
68 | 设置
69 | 用户手册
70 | 设置Thumb-Key
71 | 启用输入法
72 | 选择输入法
73 | 完成设置
74 | 选中文本已复制
75 | 隐藏字符
76 | 隐藏标点
77 | 连击空格键
78 | 完成
79 | 键盘背景同步变色
80 | 按键填充: %1$s
81 | 按键边缘厚度: %1$s
82 | 按键圆角半径: %1$s
83 |
84 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericFarsi.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val FARSI_NUMERIC_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("۱", size = LARGE),
17 | right = KeyC("ّ", displayText = "ـّ"),
18 | bottom = KeyC("٫"),
19 | bottomLeft = KeyC("﷼"),
20 | ),
21 | KeyItemC(
22 | center = KeyC("۲", size = LARGE),
23 | topLeft = KeyC("`"),
24 | top = KeyC("^"),
25 | topRight = KeyC("´"),
26 | right = KeyC("!"),
27 | bottomRight = KeyC("\\"),
28 | bottomLeft = KeyC("/"),
29 | left = KeyC("+"),
30 | ),
31 | KeyItemC(
32 | center = KeyC("۳", size = LARGE),
33 | left = KeyC("؟"),
34 | bottomRight = KeyC("$"),
35 | bottom = KeyC("="),
36 | ),
37 | EMOJI_KEY_ITEM,
38 | ),
39 | listOf(
40 | KeyItemC(
41 | center = KeyC("۴", size = LARGE),
42 | topLeft = KeyC("}", displayText = "{"),
43 | topRight = KeyC("٪"),
44 | bottomRight = KeyC("_"),
45 | bottomLeft = KeyC("]", displayText = "["),
46 | left = KeyC(")", displayText = "("),
47 | ),
48 | KeyItemC(
49 | center = KeyC("۵", size = LARGE),
50 | topLeft = KeyC("ُ", displayText = "ـُ"),
51 | topRight = KeyC("َ", displayText = "ـَ"),
52 | bottom = KeyC("ِ", displayText = "ـِ"),
53 | ),
54 | KeyItemC(
55 | center = KeyC("۶", size = LARGE),
56 | topLeft = KeyC("|"),
57 | topRight = KeyC("{", displayText = "}"),
58 | right = KeyC("(", displayText = ")"),
59 | bottomRight = KeyC("[", displayText = "]"),
60 | bottomLeft = KeyC("@"),
61 | ),
62 | ABC_KEY_ITEM,
63 | ),
64 | listOf(
65 | KeyItemC(
66 | center = KeyC("۷", size = LARGE),
67 | topLeft = KeyC("~"),
68 | topRight = KeyC("ً", displayText = "ـً"),
69 | bottomRight = KeyC(":"),
70 | bottomLeft = KeyC(">", displayText = "<"),
71 | left = KeyC("»", displayText = "«"),
72 | ),
73 | KeyItemC(
74 | center = KeyC("۸", size = LARGE),
75 | topLeft = KeyC("\""),
76 | topRight = KeyC("'"),
77 | bottomRight = KeyC("-"),
78 | bottom = KeyC("."),
79 | bottomLeft = KeyC("*"),
80 | left = KeyC("،"),
81 | ),
82 | KeyItemC(
83 | center = KeyC("۹", size = LARGE),
84 | top = KeyC("&"),
85 | topRight = KeyC("°"),
86 | right = KeyC("«", displayText = "»"),
87 | bottomRight = KeyC("<", displayText = ">"),
88 | bottomLeft = KeyC("؛"),
89 | left = KeyC("#"),
90 | ),
91 | BACKSPACE_KEY_ITEM,
92 | ),
93 | listOf(
94 | KeyItemC(
95 | center = KeyC("۰", size = LARGE),
96 | widthMultiplier = 2,
97 | ),
98 | SPACEBAR_FARSI_SKINNY_KEY_ITEM,
99 | RETURN_KEY_ITEM,
100 | ),
101 | ),
102 | )
103 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/FAThumbKey.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_FA_THUMBKEY_MAIN =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("د", size = LARGE),
17 | bottomRight = KeyC("ص"),
18 | bottom = KeyC("ض"),
19 | ),
20 | KeyItemC(
21 | center = KeyC("ر", size = LARGE),
22 | right = KeyC("ژ"),
23 | bottomRight = KeyC("ف"),
24 | bottom = KeyC("ز"),
25 | bottomLeft = KeyC("ق"),
26 | ),
27 | KeyItemC(
28 | center = KeyC("و", size = LARGE),
29 | topRight =
30 | KeyC(
31 | display = KeyDisplay.TextDisplay("‹"),
32 | action = CommitText("\u200F"), // Right-to-Left Mark (RLM)
33 | color = MUTED,
34 | ),
35 | bottom = KeyC("ء"),
36 | bottomLeft = KeyC("ع"),
37 | ),
38 | EMOJI_KEY_ITEM,
39 | ),
40 | listOf(
41 | KeyItemC(
42 | center = KeyC("ن", size = LARGE),
43 | right = KeyC("ج"),
44 | topRight = KeyC("ح"),
45 | bottomRight = KeyC("چ"),
46 | ),
47 | KeyItemC(
48 | center = KeyC("ا", size = LARGE),
49 | topLeft = KeyC("ذ"),
50 | top = KeyC("ب"),
51 | topRight = KeyC("پ"),
52 | right = KeyC("س"),
53 | bottomRight = KeyC("ش"),
54 | bottom = KeyC("ل"),
55 | bottomLeft = KeyC("آ"),
56 | left = KeyC("خ"),
57 | ),
58 | KeyItemC(
59 | center = KeyC("م", size = LARGE),
60 | bottomLeft = KeyC("گ"),
61 | left = KeyC("ک"),
62 | topLeft = KeyC("غ"),
63 | ),
64 | NUMERIC_KEY_ITEM,
65 | ),
66 | listOf(
67 | KeyItemC(
68 | center = KeyC("ت", size = LARGE),
69 | topRight = KeyC("ث"),
70 | ),
71 | KeyItemC(
72 | center = KeyC("ی", size = LARGE),
73 | top =
74 | KeyC(
75 | display = KeyDisplay.TextDisplay("‹›"),
76 | action = CommitText("\u200C"), // Zero Width Non-Joiner (ZWNJ)
77 | color = MUTED,
78 | ),
79 | right = KeyC("ئ"),
80 | bottomRight = KeyC("ـ", color = MUTED),
81 | bottom = KeyC(".", color = MUTED),
82 | left = KeyC("؟", color = MUTED),
83 | bottomLeft = KeyC("*", color = MUTED),
84 | ),
85 | KeyItemC(
86 | center = KeyC("ه", size = LARGE),
87 | topLeft = KeyC("ط"),
88 | top = KeyC("ظ"),
89 | left = KeyC("ۀ"),
90 | ),
91 | BACKSPACE_KEY_ITEM,
92 | ),
93 | listOf(
94 | SPACEBAR_FARSI_KEY_ITEM,
95 | RETURN_KEY_ITEM,
96 | ),
97 | ),
98 | )
99 |
100 | val KB_FA_THUMBKEY: KeyboardDefinition =
101 | KeyboardDefinition(
102 | title = "فارسی thumb-key",
103 | modes =
104 | KeyboardDefinitionModes(
105 | main = KB_FA_THUMBKEY_MAIN,
106 | shifted = KB_FA_THUMBKEY_MAIN,
107 | numeric = FARSI_NUMERIC_KEYBOARD,
108 | ),
109 | )
110 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericPTEN.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val NUMERIC_PT_EN_KEYBOARD =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("1", size = LARGE),
17 | bottomLeft = KeyC("$"),
18 | bottomRight =
19 | getLocalCurrency()?.let {
20 | if (it !in setOf("$", "£", "€")) {
21 | KeyC(it)
22 | } else {
23 | null
24 | }
25 | },
26 | ),
27 | KeyItemC(
28 | center = KeyC("2", size = LARGE),
29 | topLeft = KeyC("`"),
30 | top = KeyC("^"),
31 | topRight = KeyC("´"),
32 | right = KeyC("!"),
33 | bottomRight = KeyC("\\"),
34 | bottomLeft = KeyC("/"),
35 | left = KeyC("+"),
36 | ),
37 | KeyItemC(
38 | center = KeyC("3", size = LARGE),
39 | topLeft = KeyC("ù", color = MUTED),
40 | top = KeyC("ü", color = MUTED),
41 | topRight = KeyC("ũ", color = MUTED),
42 | left = KeyC("?"),
43 | right = KeyC("ò", color = MUTED),
44 | bottomLeft = KeyC("£"),
45 | bottom = KeyC("="),
46 | bottomRight = KeyC("€"),
47 | ),
48 | EMOJI_KEY_ITEM,
49 | ),
50 | listOf(
51 | KeyItemC(
52 | center = KeyC("4", size = LARGE),
53 | topLeft = KeyC("{"),
54 | topRight = KeyC("%"),
55 | left = KeyC("("),
56 | bottomLeft = KeyC("["),
57 | bottom = KeyC("@", color = MUTED),
58 | bottomRight = KeyC("_"),
59 | ),
60 | KeyItemC(
61 | center = KeyC("5", size = LARGE),
62 | ),
63 | KeyItemC(
64 | center = KeyC("6", size = LARGE),
65 | topLeft = KeyC("|"),
66 | topRight = KeyC("}"),
67 | right = KeyC(")"),
68 | bottomLeft = KeyC("@"),
69 | bottomRight = KeyC("]"),
70 | ),
71 | ABC_KEY_ITEM,
72 | ),
73 | listOf(
74 | KeyItemC(
75 | center = KeyC("7", size = LARGE),
76 | topLeft = KeyC("~"),
77 | bottomRight = KeyC(":"),
78 | bottomLeft = KeyC("<"),
79 | ),
80 | KeyItemC(
81 | center = KeyC("8", size = LARGE),
82 | topLeft = KeyC("\""),
83 | top = KeyC("ì", color = MUTED),
84 | topRight = KeyC("'"),
85 | left = KeyC(","),
86 | right = KeyC("î", color = MUTED),
87 | bottomLeft = KeyC("*"),
88 | bottom = KeyC("."),
89 | bottomRight = KeyC("-"),
90 | ),
91 | KeyItemC(
92 | center = KeyC("9", size = LARGE),
93 | topLeft = KeyC("è", color = MUTED),
94 | top = KeyC("&"),
95 | topRight = KeyC("°"),
96 | bottomRight = KeyC(">"),
97 | bottomLeft = KeyC(";"),
98 | left = KeyC("#"),
99 | ),
100 | BACKSPACE_KEY_ITEM,
101 | ),
102 | listOf(
103 | KeyItemC(
104 | center = KeyC("0", size = LARGE),
105 | widthMultiplier = 2,
106 | ),
107 | SPACEBAR_SKINNY_KEY_ITEM,
108 | RETURN_KEY_ITEM,
109 | ),
110 | ),
111 | )
112 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/ui/components/common/Dialogs.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey.ui.components.common
2 |
3 | import androidx.compose.foundation.layout.Column
4 | import androidx.compose.foundation.layout.fillMaxSize
5 | import androidx.compose.foundation.layout.fillMaxWidth
6 | import androidx.compose.foundation.rememberScrollState
7 | import androidx.compose.foundation.verticalScroll
8 | import androidx.compose.material3.AlertDialog
9 | import androidx.compose.material3.Button
10 | import androidx.compose.material3.MaterialTheme
11 | import androidx.compose.material3.Text
12 | import androidx.compose.runtime.Composable
13 | import androidx.compose.runtime.LaunchedEffect
14 | import androidx.compose.runtime.collectAsState
15 | import androidx.compose.runtime.getValue
16 | import androidx.compose.runtime.livedata.observeAsState
17 | import androidx.compose.runtime.mutableStateOf
18 | import androidx.compose.runtime.remember
19 | import androidx.compose.runtime.setValue
20 | import androidx.compose.ui.ExperimentalComposeUiApi
21 | import androidx.compose.ui.Modifier
22 | import androidx.compose.ui.platform.LocalContext
23 | import androidx.compose.ui.res.stringResource
24 | import androidx.compose.ui.semantics.semantics
25 | import androidx.compose.ui.semantics.testTagsAsResourceId
26 | import com.dessalines.thumbkey.R
27 | import com.dessalines.thumbkey.db.AppSettingsViewModel
28 | import com.dessalines.thumbkey.utils.getVersionCode
29 | import dev.jeziellago.compose.markdowntext.MarkdownText
30 |
31 | val DONATION_MARKDOWN =
32 | """
33 | ### Support Thumb-Key
34 | [Thumb-Key](https://github.com/dessalines/thumb-key) is free, open-source software, meaning no spying, keylogging, or advertising, ever.
35 |
36 | No one likes recurring donations, but they've proven to be the only way open-source software like Thumb-Key can stay alive. If you find yourself using Thumb-Key every day, please consider donating:
37 | - [Support on Liberapay](https://liberapay.com/dessalines).
38 | - [Support on Patreon](https://www.patreon.com/dessalines).
39 | ---
40 |
41 | """.trimIndent()
42 |
43 | @OptIn(ExperimentalComposeUiApi::class)
44 | @Composable
45 | fun ShowChangelog(appSettingsViewModel: AppSettingsViewModel) {
46 | val ctx = LocalContext.current
47 | val lastVersionCodeViewed =
48 | appSettingsViewModel.appSettings
49 | .observeAsState()
50 | .value
51 | ?.lastVersionCodeViewed
52 |
53 | // Make sure its initialized
54 | lastVersionCodeViewed?.also { lastViewed ->
55 | val currentVersionCode = ctx.getVersionCode()
56 | val viewed = lastViewed == currentVersionCode
57 |
58 | var whatsChangedDialogOpen by remember { mutableStateOf(!viewed) }
59 |
60 | if (whatsChangedDialogOpen) {
61 | val scrollState = rememberScrollState()
62 | val markdown by appSettingsViewModel.changelog.collectAsState()
63 | LaunchedEffect(appSettingsViewModel) {
64 | appSettingsViewModel.updateChangelog(ctx)
65 | }
66 |
67 | AlertDialog(
68 | text = {
69 | Column(
70 | modifier =
71 | Modifier
72 | .fillMaxSize()
73 | .verticalScroll(scrollState),
74 | ) {
75 | val markdownText = DONATION_MARKDOWN + markdown
76 | MarkdownText(
77 | markdown = markdownText,
78 | linkColor = MaterialTheme.colorScheme.primary,
79 | )
80 | }
81 | },
82 | confirmButton = {
83 | Button(
84 | onClick = {
85 | whatsChangedDialogOpen = false
86 | appSettingsViewModel.updateLastVersionCodeViewed(currentVersionCode)
87 | },
88 | modifier = Modifier.fillMaxWidth(),
89 | ) {
90 | Text(stringResource(R.string.done))
91 | }
92 | },
93 | onDismissRequest = {
94 | whatsChangedDialogOpen = false
95 | appSettingsViewModel.updateLastVersionCodeViewed(currentVersionCode)
96 | },
97 | modifier = Modifier.semantics { testTagsAsResourceId = true },
98 | )
99 | }
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/DEMessagEaseInvertedNumpad.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.FontSizeVariant.LARGE
6 | import com.dessalines.thumbkey.utils.KeyC
7 | import com.dessalines.thumbkey.utils.KeyItemC
8 | import com.dessalines.thumbkey.utils.KeyboardC
9 | import com.dessalines.thumbkey.utils.KeyboardDefinition
10 | import com.dessalines.thumbkey.utils.KeyboardDefinitionModes
11 | import com.dessalines.thumbkey.utils.getLocalCurrency
12 |
13 | val KB_DE_MESSAGEASE_INVERTED_NUMPAD_NUMERIC =
14 | KeyboardC(
15 | listOf(
16 | listOf(
17 | KeyItemC(
18 | center = KeyC("7", size = LARGE),
19 | bottomLeft = KeyC("$"),
20 | right = KeyC("-"),
21 | bottomRight =
22 | getLocalCurrency()?.let {
23 | if (it !in setOf("$", "£", "€")) {
24 | KeyC(it)
25 | } else {
26 | null
27 | }
28 | },
29 | ),
30 | KeyItemC(
31 | center = KeyC("8", size = LARGE),
32 | topLeft = KeyC("`"),
33 | top = KeyC("^"),
34 | topRight = KeyC("´"),
35 | right = KeyC("!"),
36 | bottomRight = KeyC("\\"),
37 | bottomLeft = KeyC("/"),
38 | left = KeyC("+"),
39 | ),
40 | KeyItemC(
41 | center = KeyC("9", size = LARGE),
42 | left = KeyC("?"),
43 | bottomRight = KeyC("€"),
44 | bottomLeft = KeyC("£"),
45 | bottom = KeyC("="),
46 | ),
47 | EMOJI_KEY_ITEM,
48 | ),
49 | listOf(
50 | KeyItemC(
51 | center = KeyC("4", size = LARGE),
52 | topLeft = KeyC("{"),
53 | topRight = KeyC("%"),
54 | bottomRight = KeyC("_"),
55 | bottomLeft = KeyC("["),
56 | left = KeyC("("),
57 | ),
58 | KeyItemC(
59 | center = KeyC("5", size = LARGE),
60 | top = KeyC("¬"),
61 | ),
62 | KeyItemC(
63 | center = KeyC("6", size = LARGE),
64 | topLeft = KeyC("|"),
65 | topRight = KeyC("}"),
66 | right = KeyC(")"),
67 | bottomRight = KeyC("]"),
68 | bottomLeft = KeyC("@"),
69 | ),
70 | ABC_KEY_ITEM,
71 | ),
72 | listOf(
73 | KeyItemC(
74 | center = KeyC("1", size = LARGE),
75 | topLeft = KeyC("~"),
76 | left = KeyC("<"),
77 | right = KeyC("*"),
78 | bottomRight = KeyC("\t", displayText = "⇥"),
79 | ),
80 | KeyItemC(
81 | center = KeyC("2", size = LARGE),
82 | topLeft = KeyC("\""),
83 | topRight = KeyC("'"),
84 | bottomRight = KeyC(":"),
85 | bottom = KeyC("."),
86 | bottomLeft = KeyC(","),
87 | ),
88 | KeyItemC(
89 | center = KeyC("3", size = LARGE),
90 | top = KeyC("&"),
91 | topRight = KeyC("°"),
92 | right = KeyC(">"),
93 | bottomLeft = KeyC(";"),
94 | left = KeyC("#"),
95 | ),
96 | BACKSPACE_KEY_ITEM,
97 | ),
98 | listOf(
99 | KeyItemC(
100 | center = KeyC("0", size = LARGE),
101 | widthMultiplier = 2,
102 | ),
103 | SPACEBAR_SKINNY_KEY_ITEM,
104 | RETURN_KEY_ITEM,
105 | ),
106 | ),
107 | )
108 |
109 | val KB_DE_MESSAGEASE_INVERTED_NUMPAD: KeyboardDefinition =
110 | KeyboardDefinition(
111 | title = "deutsch messagease, inverted numpad",
112 | modes =
113 | KeyboardDefinitionModes(
114 | main = KB_DE_MESSAGEASE_MAIN,
115 | shifted = KB_DE_MESSAGEASE_SHIFTED,
116 | numeric = KB_DE_MESSAGEASE_INVERTED_NUMPAD_NUMERIC,
117 | ),
118 | )
119 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/NumericNordicMessagEase.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import androidx.compose.material.icons.Icons
6 | import androidx.compose.material.icons.automirrored.outlined.*
7 | import com.dessalines.thumbkey.utils.*
8 | import com.dessalines.thumbkey.utils.ColorVariant.*
9 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
10 | import com.dessalines.thumbkey.utils.KeyAction.*
11 | import com.dessalines.thumbkey.utils.SwipeNWay.*
12 |
13 | val KB_NORDIC_MESSAGEASE_NUMERIC =
14 | KeyboardC(
15 | listOf(
16 | listOf(
17 | KeyItemC(
18 | center = KeyC("1", size = LARGE),
19 | bottomLeft = KeyC("$", color = MUTED),
20 | right = KeyC("-", color = MUTED),
21 | bottomRight =
22 | getLocalCurrency()?.let {
23 | if (it !in setOf("$", "£", "€")) {
24 | KeyC(it, color = MUTED)
25 | } else {
26 | null
27 | }
28 | },
29 | ),
30 | KeyItemC(
31 | center = KeyC("2", size = LARGE),
32 | topLeft = KeyC("`", color = MUTED),
33 | top = KeyC("^", color = MUTED),
34 | topRight = KeyC("´", color = MUTED),
35 | right = KeyC("!", color = MUTED),
36 | bottomRight = KeyC("\\", color = MUTED),
37 | bottomLeft = KeyC("/", color = MUTED),
38 | left = KeyC("+", color = MUTED),
39 | ),
40 | KeyItemC(
41 | center = KeyC("3", size = LARGE),
42 | left = KeyC("?", color = MUTED),
43 | bottomRight = KeyC("€", color = MUTED),
44 | bottomLeft = KeyC("£", color = MUTED),
45 | bottom = KeyC("=", color = MUTED),
46 | ),
47 | EMOJI_KEY_ITEM,
48 | ),
49 | listOf(
50 | KeyItemC(
51 | center = KeyC("4", size = LARGE),
52 | topLeft = KeyC("{", color = MUTED),
53 | topRight = KeyC("%", color = MUTED),
54 | bottomRight = KeyC("_", color = MUTED),
55 | bottomLeft = KeyC("[", color = MUTED),
56 | left = KeyC("(", color = MUTED),
57 | ),
58 | KeyItemC(
59 | center = KeyC("5", size = LARGE),
60 | ),
61 | KeyItemC(
62 | center = KeyC("6", size = LARGE),
63 | topLeft = KeyC("|", color = MUTED),
64 | topRight = KeyC("}", color = MUTED),
65 | right = KeyC(")", color = MUTED),
66 | bottomRight = KeyC("]", color = MUTED),
67 | bottomLeft = KeyC("@", color = MUTED),
68 | ),
69 | ABC_KEY_ITEM,
70 | ),
71 | listOf(
72 | KeyItemC(
73 | center = KeyC("7", size = LARGE),
74 | topLeft = KeyC("~", color = MUTED),
75 | bottomRight =
76 | KeyC(
77 | display = KeyDisplay.IconDisplay(Icons.AutoMirrored.Outlined.KeyboardTab),
78 | action = CommitText("\t"),
79 | color = MUTED,
80 | ),
81 | left = KeyC("<", color = MUTED),
82 | top = KeyC("\u0308", displayText = "¨", color = MUTED),
83 | right = KeyC("*", color = MUTED),
84 | ),
85 | KeyItemC(
86 | center = KeyC("8", size = LARGE),
87 | topLeft = KeyC("\"", color = MUTED),
88 | topRight = KeyC("'", color = SECONDARY),
89 | bottomRight = KeyC(":", color = SECONDARY),
90 | bottom = KeyC(".", color = SECONDARY),
91 | bottomLeft = KeyC(",", color = SECONDARY),
92 | ),
93 | KeyItemC(
94 | center = KeyC("9", size = LARGE),
95 | top = KeyC("&", color = MUTED),
96 | topRight = KeyC("°", color = MUTED),
97 | right = KeyC(">", color = MUTED),
98 | bottomLeft = KeyC(";", color = MUTED),
99 | left = KeyC("#", color = MUTED),
100 | ),
101 | BACKSPACE_KEY_ITEM,
102 | ),
103 | listOf(
104 | KeyItemC(
105 | center = KeyC("0", size = LARGE),
106 | widthMultiplier = 2,
107 | ),
108 | SPACEBAR_SKINNY_KEY_ITEM,
109 | RETURN_KEY_ITEM,
110 | ),
111 | ),
112 | )
113 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/ComposeKeyboardView.kt:
--------------------------------------------------------------------------------
1 | package com.dessalines.thumbkey
2 |
3 | import android.annotation.SuppressLint
4 | import android.content.Context
5 | import android.widget.Toast
6 | import androidx.compose.runtime.Composable
7 | import androidx.compose.runtime.CompositionLocalProvider
8 | import androidx.compose.runtime.getValue
9 | import androidx.compose.runtime.livedata.observeAsState
10 | import androidx.compose.ui.platform.AbstractComposeView
11 | import androidx.compose.ui.platform.LocalLayoutDirection
12 | import androidx.compose.ui.unit.LayoutDirection
13 | import androidx.lifecycle.lifecycleScope
14 | import com.dessalines.thumbkey.db.AppSettingsRepository
15 | import com.dessalines.thumbkey.ui.components.keyboard.KeyboardScreen
16 | import com.dessalines.thumbkey.ui.theme.ThumbkeyTheme
17 | import com.dessalines.thumbkey.utils.KeyboardPosition
18 | import com.dessalines.thumbkey.utils.keyboardLayoutsSetFromDbIndexString
19 | import com.dessalines.thumbkey.utils.toBool
20 | import com.dessalines.thumbkey.utils.toInt
21 | import kotlinx.coroutines.launch
22 |
23 | @SuppressLint("ViewConstructor")
24 | class ComposeKeyboardView(
25 | context: Context,
26 | private val settingsRepo: AppSettingsRepository,
27 | ) : AbstractComposeView(context) {
28 | @Composable
29 | override fun Content() {
30 | val settingsState = settingsRepo.appSettings.observeAsState()
31 | val settings by settingsState
32 | val ctx = context as IMEService
33 |
34 | ThumbkeyTheme(
35 | settings = settings,
36 | ) {
37 | CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {
38 | KeyboardScreen(
39 | settings = settings,
40 | onSwitchLanguage = {
41 | ctx.lifecycleScope.launch {
42 | // Cycle to the next keyboard
43 | val state = settingsState.value
44 | state?.let { s ->
45 |
46 | val layouts =
47 | keyboardLayoutsSetFromDbIndexString(s.keyboardLayouts).toList()
48 | val currentLayout = s.keyboardLayout
49 | val index = layouts.map { it.ordinal }.indexOf(currentLayout)
50 | val nextIndex = (index + 1).mod(layouts.size)
51 | val nextLayout = layouts.getOrNull(nextIndex)
52 | nextLayout?.let { layout ->
53 | val s2 = s.copy(keyboardLayout = layout.ordinal)
54 | settingsRepo.update(s2)
55 |
56 | ctx.currentKeyboardDefinition
57 | ?.settings
58 | ?.textProcessor
59 | ?.handleFinishInput(ctx)
60 | ctx.currentKeyboardDefinition = (layouts[nextIndex].keyboardDefinition)
61 | ctx.currentKeyboardDefinition
62 | ?.settings
63 | ?.textProcessor
64 | ?.updateCursorPosition(ctx)
65 |
66 | // Display the new layout's name on the screen
67 | if (s.showToastOnLayoutSwitch.toBool()) {
68 | val layoutName = layout.keyboardDefinition.title
69 | Toast
70 | .makeText(context, layoutName, Toast.LENGTH_SHORT)
71 | .show()
72 | }
73 | }
74 | }
75 | }
76 | },
77 | onChangePosition = { f ->
78 | ctx.lifecycleScope.launch {
79 | val state = settingsState.value
80 | state?.let { s ->
81 | val nextPosition = f(KeyboardPosition.entries[s.position]).ordinal
82 | val s2 = s.copy(position = nextPosition)
83 | settingsRepo.update(s2)
84 | }
85 | }
86 | },
87 | onToggleHideLetters = {
88 | ctx.lifecycleScope.launch {
89 | val state = settingsState.value
90 | state?.let { s ->
91 | val newHideLetters = (!s.hideLetters.toBool()).toInt()
92 | val s2 = s.copy(hideLetters = newHideLetters)
93 | settingsRepo.update(s2)
94 | }
95 | }
96 | },
97 | )
98 | }
99 | }
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dessalines/thumbkey/keyboards/HEMessagEaseSymbols.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("ktlint:standard:no-wildcard-imports")
2 |
3 | package com.dessalines.thumbkey.keyboards
4 |
5 | import com.dessalines.thumbkey.utils.*
6 | import com.dessalines.thumbkey.utils.ColorVariant.*
7 | import com.dessalines.thumbkey.utils.FontSizeVariant.*
8 | import com.dessalines.thumbkey.utils.KeyAction.*
9 | import com.dessalines.thumbkey.utils.SwipeNWay.*
10 |
11 | val KB_HE_MESSAGEASE_SYMBOLS_MAIN =
12 | KeyboardC(
13 | listOf(
14 | listOf(
15 | KeyItemC(
16 | center = KeyC("ר", size = LARGE),
17 | bottomRight = KeyC("ן", swipeReturnAction = CommitText("נ")),
18 | right = KeyC("-", color = MUTED),
19 | bottomLeft = KeyC("$", color = MUTED),
20 | ),
21 | KeyItemC(
22 | center = KeyC("ב", size = LARGE),
23 | bottom = KeyC("ג"),
24 | topLeft = KeyC("`", color = MUTED),
25 | top = KeyC("^", color = MUTED),
26 | topRight = KeyC("´", color = MUTED),
27 | right = KeyC("!", color = MUTED),
28 | bottomRight = KeyC("\\", color = MUTED),
29 | bottomLeft = KeyC("/", color = MUTED),
30 | left = KeyC("+", color = MUTED),
31 | ),
32 | KeyItemC(
33 | center = KeyC("א", size = LARGE),
34 | bottomLeft = KeyC("צ", swipeReturnAction = CommitText("ץ")),
35 | left = KeyC("?"),
36 | bottom = KeyC("=", color = MUTED),
37 | ),
38 | EMOJI_KEY_ITEM,
39 | ),
40 | listOf(
41 | KeyItemC(
42 | center = KeyC("מ", size = LARGE),
43 | right = KeyC("ם", swipeReturnAction = CommitText("מ")),
44 | topLeft = KeyC("}", displayText = "{", color = MUTED),
45 | topRight = KeyC("%", color = MUTED),
46 | bottomRight = KeyC("ך"),
47 | bottomLeft = KeyC("]", displayText = "[", color = MUTED),
48 | left = KeyC(")", displayText = "(", color = MUTED),
49 | ),
50 | KeyItemC(
51 | center = KeyC("י", size = LARGE),
52 | topLeft = KeyC("ק"),
53 | top = KeyC("ח"),
54 | topRight = KeyC("פ", swipeReturnAction = CommitText("ף")),
55 | right = KeyC("ד"),
56 | bottomRight = KeyC("ש"),
57 | bottom = KeyC("נ", swipeReturnAction = CommitText("ן")),
58 | bottomLeft = KeyC("כ", swipeReturnAction = CommitText("ך")),
59 | left = KeyC("ע"),
60 | ),
61 | KeyItemC(
62 | center = KeyC("ו", size = LARGE),
63 | topRight = KeyC("{", displayText = "}", color = MUTED),
64 | right = KeyC("(", displayText = ")", color = MUTED),
65 | bottomRight = KeyC("[", displayText = "]", color = MUTED),
66 | bottomLeft = KeyC("@", color = MUTED),
67 | ),
68 | NUMERIC_KEY_ITEM,
69 | ),
70 | listOf(
71 | KeyItemC(
72 | center = KeyC("ת", size = LARGE),
73 | topRight = KeyC("ז"),
74 | topLeft = KeyC("~", color = MUTED),
75 | right = KeyC("*", color = MUTED),
76 | bottomRight = KeyC("\t", displayText = "⇥", color = MUTED),
77 | left = KeyC("<", color = MUTED),
78 | ),
79 | KeyItemC(
80 | center = KeyC("ה", size = LARGE),
81 | topLeft = KeyC("\"", color = MUTED),
82 | top = KeyC("ס"),
83 | topRight = KeyC("'", color = MUTED),
84 | bottomRight = KeyC(":", color = MUTED),
85 | bottom = KeyC(".", color = MUTED),
86 | bottomLeft = KeyC(",", color = MUTED),
87 | ),
88 | KeyItemC(
89 | center = KeyC("ל", size = LARGE),
90 | topLeft = KeyC("ט"),
91 | top = KeyC("&", color = MUTED),
92 | topRight = KeyC("°", color = MUTED),
93 | right = KeyC(">", color = MUTED),
94 | bottomLeft = KeyC(";", color = MUTED),
95 | left = KeyC("#", color = MUTED),
96 | ),
97 | BACKSPACE_KEY_ITEM,
98 | ),
99 | listOf(
100 | SPACEBAR_KEY_ITEM,
101 | RETURN_KEY_ITEM,
102 | ),
103 | ),
104 | )
105 |
106 | val KB_HE_MESSAGEASE_SYMBOLS: KeyboardDefinition =
107 | KeyboardDefinition(
108 | title = "עברית messagease symbols",
109 | modes =
110 | KeyboardDefinitionModes(
111 | main = KB_HE_MESSAGEASE_SYMBOLS_MAIN,
112 | shifted = KB_HE_MESSAGEASE_SYMBOLS_MAIN,
113 | numeric = KB_EN_MESSAGEASE_NUMERIC,
114 | ),
115 | )
116 |
--------------------------------------------------------------------------------