mirror of
https://github.com/Julow/Unexpected-Keyboard.git
synced 2025-08-18 00:29:55 +02:00
Compare commits
48 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
167c63ee25 | ||
|
f56b926857 | ||
|
75df3afda6 | ||
|
7fb5c992b6 | ||
|
158a3577be | ||
|
138e59f13a | ||
|
db347c665c | ||
|
8be80eecd4 | ||
|
d9a8688237 | ||
|
7f51cf001a | ||
|
1909f2fcb4 | ||
|
fc8bb3a539 | ||
|
dda8f0314d | ||
|
5873b7315d | ||
|
64e263a1af | ||
|
90b9b0e399 | ||
|
5169472dfc | ||
|
3081af5190 | ||
|
c778b4e8a2 | ||
|
65210fb14f | ||
|
d8882c87ae | ||
|
2fc40512c6 | ||
|
5811643562 | ||
|
a365fdc6a3 | ||
|
9fc1565065 | ||
|
b0a2298899 | ||
|
81f07b427f | ||
|
0b388b93c7 | ||
|
25a6e71ee8 | ||
|
617f0878bc | ||
|
773194ca4a | ||
|
bc8bcce82a | ||
|
4f5ce66347 | ||
|
85d798299e | ||
|
dec0a7471b | ||
|
53b9afa973 | ||
|
081e9a6e53 | ||
|
bfde31da6e | ||
|
324756535e | ||
|
2d8ed2d858 | ||
|
929b30f723 | ||
|
3033091f9d | ||
|
fdd640ef09 | ||
|
13a13ecbb6 | ||
|
d5836ebb97 | ||
|
db8ebc2f4d | ||
|
1d406e948f | ||
|
1ddd089166 |
15
.github/workflows/make-apk.yml
vendored
15
.github/workflows/make-apk.yml
vendored
@@ -9,14 +9,14 @@ jobs:
|
||||
Build-Apk:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/setup-java@v2
|
||||
- uses: actions/setup-java@v3
|
||||
with:
|
||||
distribution: 'zulu' # See 'Supported distributions' for available options
|
||||
java-version: '11'
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
- name: Cache debug certificate
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: _build/debug.keystore
|
||||
key: debug-keystore
|
||||
@@ -35,8 +35,13 @@ jobs:
|
||||
fi
|
||||
- name: Build
|
||||
run: make
|
||||
- name: Artifact naming
|
||||
run: |
|
||||
artifact="${{github.repository_owner}} ${{github.ref_name}}"
|
||||
artifact="${artifact//\//-}" # replace slashes
|
||||
echo "artifact=${artifact}" >> $GITHUB_ENV
|
||||
- name: Save debug apk
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: debug apk
|
||||
name: "${{env.artifact}} debug_apk"
|
||||
path: _build/*.apk
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="24" android:versionName="1.16.1" android:hardwareAccelerated="false">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="26" android:versionName="1.18.0" android:hardwareAccelerated="false">
|
||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="30"/>
|
||||
<application android:label="@string/app_name" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:hardwareAccelerated="false">
|
||||
<service android:name="juloo.keyboard2.Keyboard2" android:label="@string/app_name" android:permission="android.permission.BIND_INPUT_METHOD">
|
||||
|
@@ -78,17 +78,22 @@ make installd
|
||||
|
||||
## Guidelines
|
||||
|
||||
### Adding a programming layout
|
||||
### Adding a layout
|
||||
|
||||
A programming layout must contains every ASCII characters.
|
||||
The current programming layouts are: QWERTY, Dvorak.
|
||||
Layouts are defined in XML, see `res/xml/qwerty.xml`.
|
||||
|
||||
An entry must be added to the layout option in `res/values/arrays.xml`, to both
|
||||
`pref_layout_values` (correspond to the file name) and `pref_layout_entries`
|
||||
(display name).
|
||||
|
||||
Layouts are defined in XML, see `res/xml/qwerty.xml`. An entry must be added to
|
||||
the layout option in `res/values/arrays.xml`, to both `pref_layout_values`
|
||||
(correspond to the file name) and `pref_layout_entries` (display name).
|
||||
The layout must also be referenced in `srcs/juloo.keyboard2/Config.java` in
|
||||
`layoutId_of_string`.
|
||||
|
||||
#### Adding a programming layout
|
||||
|
||||
A programming layout must contains every ASCII characters.
|
||||
The current programming layouts are: QWERTY, Dvorak and Colemak.
|
||||
|
||||
Keys with a name starting in `loc ` are hidden unless they are configured for
|
||||
the user's installed languages in `res/xml/method.xml`. These keys are optional
|
||||
and will be added automatically when necessary.
|
||||
@@ -97,7 +102,7 @@ Some users cannot easily type the characters close the the edges of the screen
|
||||
due to a bulky phone case. It is best to avoid placing important characters
|
||||
there (such as the digits or punctuation).
|
||||
|
||||
### Adding a localized layout
|
||||
#### Adding a localized layout
|
||||
|
||||
Localized layouts (a layout specific to a language) are gladly accepted.
|
||||
See for example: 4333575 (Bulgarian), 88e2175 (Latvian), 133b6ec (German).
|
||||
|
18
metadata/android/cs-CZ/full_description.txt
Normal file
18
metadata/android/cs-CZ/full_description.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
Tato aplikace je virtuální klávesnící pro Android. Umožňuje rychlejší a plynulejší psaní písmen i symbolů (vč. diakritiky), a to ve vícero jazycích a vlastních rozloženích. To vše zdarma, bez reklam a bez plýtvání vašeho uložiště. Můžete psát libovolné znaky pomocí gest (ASCII i Unicode), používat mrtvé (univerzální) klávesy pro diakritická znaménka a mnohem více.
|
||||
|
||||
Klávesnice zobrazuje až 4 další znaky v rozích každé klávesy. Tyto znaky jsou vyvolány přejetím prstu do vybraného rohu.
|
||||
|
||||
No zkrátka...:
|
||||
|
||||
- Obsahuje každý znak a speciální klávesu, která je běžnou součástí počítačové klávesnice. To přijde vhod obzvláště při používání aplikací jako např. Termux
|
||||
|
||||
- Můžete používat modifikační klávesy, obohaceny o speciální klávesy (např. Tab, Esc, šipky, F klávesy, ale také Ctrl nebo Alt !)
|
||||
|
||||
- Můžete psát vícero jazyky rychleji a bez chyb. Diakritická znaménka mohou být vyvolána i za pomocí mrtvých kláves. Nejdříve zvolte diakritické znaménko a pak znak, který chcete obohatit o toto znaménko.
|
||||
|
||||
- Je vysoce nenáročná a rychlá. Zabere 500x méně místa než klávesnice od Googlu (Gboard) a 15x méně než výchozí klávesnice systému. Bez reklam, bez sledování.
|
||||
|
||||
- Má vícero rozložení: QWERTY, QWERTZ, AZERTY. Motivy: Bílá, Tmavá, OLED Černá. A mnoho dalších které si s drobnou znalostí programování můžete upravovat dle libosti.
|
||||
|
||||
Nezapomeňte... Jako každá virtuální klávesnice, i tato musí být aktivována v nastavení systému (zařízení). Otevřte (Systémové) Nastavení a přejděte na:
|
||||
(Další nastavení NEBO Nastavení systému) > Jazyk & způsob zadávání > Spravovat klávesnice.
|
1
metadata/android/cs-CZ/short_description.txt
Normal file
1
metadata/android/cs-CZ/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Nenáročná virtuální klávesnice pro vývojáře.
|
1
metadata/android/cs-CZ/title.txt
Normal file
1
metadata/android/cs-CZ/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Klávesnice Unexpected
|
12
metadata/android/en-US/changelogs/25.txt
Normal file
12
metadata/android/en-US/changelogs/25.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
New supported languages: Polish, Ukrainian, Bengali, Norwegian
|
||||
New layouts: Ukrainian, Bengali, Norwegian, Bone, Czech
|
||||
New translations: Brazilian Portuguese, Italian, Russian, Czech
|
||||
|
||||
Hold modifiers to lock, double tap on shift disabled by default.
|
||||
Option to add more keys to the keyboard.
|
||||
Automatic capitalisation at beginning of sentences.
|
||||
Added e-ink oriented theme.
|
||||
New pane for greek letters and mathematical symbols.
|
||||
Improvements to the layouts and various bug fixes.
|
||||
|
||||
Thanks to the contributors: @nanno, @Quantenzitrone, @eandersons, @iamrasel, @ChristianGynnild, @igorSilCar, @CastixGitHub, @94KONG, @ptrm, @Validbit
|
7
metadata/android/en-US/changelogs/26.txt
Normal file
7
metadata/android/en-US/changelogs/26.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
New supported languages: Hindi, Greek
|
||||
|
||||
Disable fullscreen mode.
|
||||
Improvements to layouts and translations.
|
||||
Various fixes and improvements.
|
||||
|
||||
Thanks to the contributors: @sdrapha, @lpv11, @Raj9039852537, @polyctena
|
1
metadata/android/it-IT/short_description.txt
Normal file
1
metadata/android/it-IT/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Una Tastiera Virtuale Leggera Per La Programmazione
|
1
metadata/android/it-IT/title.txt
Normal file
1
metadata/android/it-IT/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Unexpected Keyboard
|
55
res/values-cs/strings.xml
Normal file
55
res/values-cs/strings.xml
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" product="debug">Klávesnice Unexpected (pro ladění)</string>
|
||||
<string name="app_name" product="default">Klávesnice Unexpected</string>
|
||||
<string name="settings_activity_label">Nastavení Klávesnice Unexpected</string>
|
||||
<string name="pref_category_layout">Rozvržení</string>
|
||||
<string name="pref_layout_title">Změnit rozvržení klávesnice</string>
|
||||
<string name="pref_layout_e_system">V nastavení systému</string>
|
||||
<string name="pref_accents_title">(Univerzální) Diakritická znaménka</string>
|
||||
<string name="pref_accents_e_all_installed">Zobrazovat znaménka pro všechny instalované systémové jazyky</string>
|
||||
<string name="pref_accents_e_selected">Zobrazovat znaménka pouze pro současně zvolený jazyk</string>
|
||||
<string name="pref_accents_e_none">Skrýt (univerzální) diakritická znaménka</string>
|
||||
<string name="pref_autocapitalisation_title">Automatická kapitalizace</string>
|
||||
<string name="pref_autocapitalisation_summary">Stiskne Shift na začátku věty</string>
|
||||
<string name="pref_programming_layout_title">Rozložení klávesnice pro programování</string>
|
||||
<string name="pref_programming_layout_none">Žádné</string>
|
||||
<string name="pref_category_typing">Psaní</string>
|
||||
<string name="pref_swipe_dist_title">Vzdálenost posunutí prstem</string>
|
||||
<string name="pref_swipe_dist_summary">Jak daleko je třeba posunout prst pro napsaní znaku/diakritiky v rozích klávey (%s)</string>
|
||||
<string name="pref_long_timeout_title">Časová prodleva opakování znaků</string>
|
||||
<string name="pref_long_interval_title">Interval opakování znaků</string>
|
||||
<string name="pref_vibrate_title">Vibrace</string>
|
||||
<string name="pref_vibrate_summary">Zapnout/Vypnout vibrace při stisku klávesy</string>
|
||||
<string name="pref_precise_repeat_title">Precizní posun kurzoru</string>
|
||||
<string name="pref_precise_repeat_summary">Zda-li posun prstem ovlivňuje rychlost kurzoru</string>
|
||||
<string name="pref_lockable_keys_title">Zastaralé: Zamykatelné modifikační klávesy</string>
|
||||
<string name="pref_lockable_keys_summary">Tato možnost bude v budoucnu odebrána</string>
|
||||
<string name="pref_lock_double_tap_title">Dvojklik pro aktivaci caps lock(u)</string>
|
||||
<string name="pref_lock_double_tap_summary">Dvojklik namísto držení modifikačních kláves po nějakou dobu</string>
|
||||
<string name="pref_category_style">Styl</string>
|
||||
<string name="pref_margin_bottom_title">Spodní odsazení</string>
|
||||
<string name="pref_keyboard_height_title">Výška klávesnice</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Výška klávesnice v režimu na šířku</string>
|
||||
<string name="pref_horizontal_margin_title">Boční odsazení</string>
|
||||
<string name="pref_character_size_title">Velikost znaků</string>
|
||||
<string name="pref_character_size_summary">Velikost znaků zobrazených na klávesnici (%.2fx)</string>
|
||||
<string name="pref_theme">Motiv</string>
|
||||
<string name="pref_theme_e_system">Dle systému</string>
|
||||
<string name="pref_theme_e_dark">Tmavý</string>
|
||||
<string name="pref_theme_e_light">Světlý</string>
|
||||
<string name="pref_theme_e_black">Černý</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Velmi krátká</string>
|
||||
<string name="pref_swipe_dist_e_short">Krátká</string>
|
||||
<string name="pref_swipe_dist_e_default">Běžná</string>
|
||||
<string name="pref_swipe_dist_e_far">Dlouhá</string>
|
||||
<string name="pref_swipe_dist_e_very_far">Velmi dlouhá</string>
|
||||
<string name="pref_key_horizontal_space">Horizontální mezery mezi klávesami</string>
|
||||
<string name="pref_key_vertical_space">Vertikální mezery mezi klávesami</string>
|
||||
<string name="key_action_next">Další</string>
|
||||
<string name="key_action_done">Dokončit</string>
|
||||
<string name="key_action_go">Spustit</string>
|
||||
<string name="key_action_prev">Předchozí</string>
|
||||
<string name="key_action_search">Hledat</string>
|
||||
<string name="key_action_send">Odeslat</string>
|
||||
</resources>
|
@@ -1,5 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (Debug)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Unexpected Keyboard - Einstellungen</string>
|
||||
<string name="pref_category_layout">Layout</string>
|
||||
<string name="pref_layout_title">Tastaturlayout ändern</string>
|
||||
@@ -8,6 +10,9 @@
|
||||
<string name="pref_accents_e_all_installed">Akzente für alle installierten Sprachen anzeigen</string>
|
||||
<string name="pref_accents_e_selected">Akzente nur für die gewählte Sprache anzeigen</string>
|
||||
<string name="pref_accents_e_none">Akzente verbergen</string>
|
||||
<string name="pref_autocapitalisation_title">Automatische Großschreibung</string>
|
||||
<string name="pref_autocapitalisation_summary">Umschalttaste am Satzanfang aktivieren</string>
|
||||
<string name="pref_extra_keys_title">Tasten hinzufügen</string>
|
||||
<string name="pref_programming_layout_title">Tastaturlayout zum Programmieren</string>
|
||||
<string name="pref_programming_layout_none">Keines</string>
|
||||
<string name="pref_category_typing">Tippen</string>
|
||||
@@ -19,11 +24,14 @@
|
||||
<string name="pref_vibrate_summary">Vibration bei Tastendruck ein-/ausschalten</string>
|
||||
<string name="pref_precise_repeat_title">Präzise Cursorsteuerung</string>
|
||||
<string name="pref_precise_repeat_summary">Geschwindigkeit der Tastenwiederholung durch weniger oder mehr Wischen anpassen</string>
|
||||
<string name="pref_lockable_keys_title">Sperrbare Hilfstasten</string>
|
||||
<string name="pref_lockable_keys_summary">Hilfstasten, die durch zweimaliges Tippen gesperrt (eingerastet) werden können</string>
|
||||
<string name="pref_lockable_keys_title">Veraltet: Sperrbare Hilfstasten</string>
|
||||
<string name="pref_lockable_keys_summary">Wird entfernt. (Hilfstasten, die durch zweimaliges Tippen gesperrt (eingerastet) werden können)</string>
|
||||
<string name="pref_lock_double_tap_title">Umschalttaste mit Doppeltippen einrasten</string>
|
||||
<string name="pref_lock_double_tap_summary">Anstatt Taste längere Zeit gedrückt zu halten</string>
|
||||
<string name="pref_category_style">Design</string>
|
||||
<string name="pref_margin_bottom_title">Unterer Abstand</string>
|
||||
<string name="pref_keyboard_height_title">Höhe der Tastatur</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Höhe der Tastatur im Querformat</string>
|
||||
<string name="pref_horizontal_margin_title">Horizontaler Abstand</string>
|
||||
<string name="pref_character_size_title">Größe der Beschriftung</string>
|
||||
<string name="pref_character_size_summary">Größe der Buchstaben auf den Tasten (%.2fx)</string>
|
||||
@@ -32,6 +40,7 @@
|
||||
<string name="pref_theme_e_dark">Dunkel</string>
|
||||
<string name="pref_theme_e_light">Hell</string>
|
||||
<string name="pref_theme_e_black">Schwarz</string>
|
||||
<string name="pref_theme_e_white">Weiß</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Sehr kurz</string>
|
||||
<string name="pref_swipe_dist_e_short">Kurz</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
|
@@ -17,8 +17,6 @@
|
||||
<string name="pref_vibrate_summary">Habilitar/deshabilitar vibración al presionar una tecla</string>
|
||||
<string name="pref_precise_repeat_title">Movimientos de cursor preciso</string>
|
||||
<string name="pref_precise_repeat_summary">Modular la velocidad de repetición de teclas según si se desliza más o menos</string>
|
||||
<string name="pref_lockable_keys_title">Bloqueo de teclas modificadoras</string>
|
||||
<string name="pref_lockable_keys_summary">Teclas modificadoras que se pueden bloquear pulsándolas dos veces</string>
|
||||
<string name="pref_category_style">Estilo</string>
|
||||
<string name="pref_margin_bottom_title">Margen del pie</string>
|
||||
<string name="pref_keyboard_height_title">Altura del teclado</string>
|
||||
|
@@ -8,6 +8,8 @@
|
||||
<string name="pref_accents_e_all_installed">Afficher les accents pour les langues installées</string>
|
||||
<string name="pref_accents_e_selected">Afficher les accents pour la langue sélectionnée</string>
|
||||
<string name="pref_accents_e_none">Cacher les accents</string>
|
||||
<string name="pref_autocapitalisation_title">Majuscule automatique</string>
|
||||
<string name="pref_autocapitalisation_summary">Active Shift au début des phrases</string>
|
||||
<string name="pref_category_typing">Saisie</string>
|
||||
<string name="pref_swipe_dist_title">Distance de swipe</string>
|
||||
<string name="pref_swipe_dist_summary">La distance des caractères dans les coins (%s)</string>
|
||||
@@ -29,6 +31,7 @@
|
||||
<string name="pref_theme_e_dark">Sombre</string>
|
||||
<string name="pref_theme_e_light">Clair</string>
|
||||
<string name="pref_theme_e_black">Noir</string>
|
||||
<string name="pref_theme_e_white">Blanc</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Très courte</string>
|
||||
<string name="pref_swipe_dist_e_short">Courte</string>
|
||||
<string name="pref_swipe_dist_e_default">Normale</string>
|
||||
|
54
res/values-it/strings.xml
Normal file
54
res/values-it/strings.xml
Normal file
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Impostazioni di Unexpected Keyboard</string>
|
||||
<string name="pref_category_layout">Layout</string>
|
||||
<string name="pref_layout_title">Cambia layout tastiera</string>
|
||||
<string name="pref_layout_e_system">Impostazioni di sistema</string>
|
||||
<string name="pref_accents_title">Accenti</string>
|
||||
<string name="pref_accents_e_all_installed">Mostra accenti per tutte le lingue installate</string>
|
||||
<string name="pref_accents_e_selected">Mostra accenti solo per le lingue selezionate</string>
|
||||
<string name="pref_accents_e_none">Nascondi accenti</string>
|
||||
<string name="pref_autocapitalisation_title">Maiuscole Automatiche</string>
|
||||
<string name="pref_autocapitalisation_summary">Premi Shift all\'inizio di una frase</string>
|
||||
<string name="pref_programming_layout_title">Layout tastiera per programmare</string>
|
||||
<string name="pref_programming_layout_none">Nessuno</string>
|
||||
<string name="pref_category_typing">Digitando</string>
|
||||
<string name="pref_swipe_dist_title">Distanza swipe</string>
|
||||
<string name="pref_swipe_dist_summary">Distanza dei caratteri negli angoli dei tasti (%s)</string>
|
||||
<string name="pref_long_timeout_title">Timeout ripetizione tasto</string>
|
||||
<string name="pref_long_interval_title">Intervallo ripetizione tasto</string>
|
||||
<string name="pref_vibrate_title">Vibrazione</string>
|
||||
<string name="pref_vibrate_summary">Abilita/Disabilita Vibrazione alla pressione dei tasti</string>
|
||||
<string name="pref_precise_repeat_title">Movimento puntatore preciso</string>
|
||||
<string name="pref_precise_repeat_summary">Modula la veocità della ripetizione con lo swipe</string>
|
||||
<string name="pref_lockable_keys_title">Deprecato: Modificatori bloccabili</string>
|
||||
<string name="pref_lock_double_tap_title">Doppio tocco su Shift per attivare CapsLock</string>
|
||||
<string name="pref_lock_double_tap_summary">Invece di premere i modificatori a lungo</string>
|
||||
<string name="pref_category_style">Stile</string>
|
||||
<string name="pref_margin_bottom_title">Margine inferiore</string>
|
||||
<string name="pref_keyboard_height_title">Altezza tastiera</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Altezza tastiera in modalità orizzontale</string>
|
||||
<string name="pref_horizontal_margin_title">Margine orizzontale</string>
|
||||
<string name="pref_character_size_title">Dimensione Caratteri</string>
|
||||
<string name="pref_character_size_summary">Dimensione dei caratteri mostrati sulla tastiera (%.2fx)</string>
|
||||
<string name="pref_theme">Tema</string>
|
||||
<string name="pref_theme_e_system">Impostazioni di sistema</string>
|
||||
<string name="pref_theme_e_dark">Scuro</string>
|
||||
<string name="pref_theme_e_light">Chiaro</string>
|
||||
<string name="pref_theme_e_black">Nero</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Veramente breve</string>
|
||||
<string name="pref_swipe_dist_e_short">Breve</string>
|
||||
<string name="pref_swipe_dist_e_default">Normale</string>
|
||||
<string name="pref_swipe_dist_e_far">Distante</string>
|
||||
<string name="pref_swipe_dist_e_very_far">Molto distante</string>
|
||||
<string name="pref_key_horizontal_space">Spazio orizzontale tra i tasti</string>
|
||||
<string name="pref_key_vertical_space">Spazio verticale tra i tasti</string>
|
||||
<string name="key_action_next">Prossimo</string>
|
||||
<string name="key_action_done">Fatto</string>
|
||||
<string name="key_action_go">Vai</string>
|
||||
<string name="key_action_prev">Precedente</string>
|
||||
<string name="key_action_search">Cerca</string>
|
||||
<string name="key_action_send">Invia</string>
|
||||
</resources>
|
@@ -10,6 +10,9 @@
|
||||
<string name="pref_accents_e_all_installed">Rādīt uzsvara zīmes visām uzstādītajām valodām</string>
|
||||
<string name="pref_accents_e_selected">Rādīt uzsvara zīmes tikai atlasītajām valodām</string>
|
||||
<string name="pref_accents_e_none">Paslēpt uzsvara zīmes</string>
|
||||
<string name="pref_autocapitalisation_title">Automātiski lielie burti</string>
|
||||
<string name="pref_autocapitalisation_summary">Piespiest Shift teikuma sākumā</string>
|
||||
<string name="pref_extra_keys_title">Pievienot tastatūrai taustiņus</string>
|
||||
<string name="pref_programming_layout_title">Tastatūras izkārtojums programmēšanai</string>
|
||||
<string name="pref_programming_layout_none">Neviens</string>
|
||||
<string name="pref_category_typing">Rakstīšana</string>
|
||||
@@ -21,11 +24,14 @@
|
||||
<string name="pref_vibrate_summary">Iespējot/atspējot taustiņa piespiešanas trīcēšanu</string>
|
||||
<string name="pref_precise_repeat_title">Pielāgojama kursora kustība</string>
|
||||
<string name="pref_precise_repeat_summary">Mainīt taustiņa atkārtošanās ātrumu ar pavilkšanas attālumu</string>
|
||||
<string name="pref_lockable_keys_title">Slēdzami pārveidotājtaustiņi</string>
|
||||
<string name="pref_lockable_keys_summary">Pārveidotātjtaustiņi, kas var tikt slēgti ar divkāršu piesitienu</string>
|
||||
<string name="pref_lockable_keys_title">Novecojis: Slēdzami pārveidotāji</string>
|
||||
<string name="pref_lockable_keys_summary">Šī iespēja tiks noņemta</string>
|
||||
<string name="pref_lock_double_tap_title">Divkāršs piesitiens burtslēgam</string>
|
||||
<string name="pref_lock_double_tap_summary">Tā vietā, lai ilstoši piespiestu pārveidotāju</string>
|
||||
<string name="pref_category_style">Izskata pielāgojumi</string>
|
||||
<string name="pref_margin_bottom_title">Apakšējā apmale</string>
|
||||
<string name="pref_keyboard_height_title">Tastatūras augstums</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Tastatūras augstums guleniski</string>
|
||||
<string name="pref_horizontal_margin_title">Līmeniskā apmale</string>
|
||||
<string name="pref_character_size_title">Iezīmes izmērs</string>
|
||||
<string name="pref_character_size_summary">Tastatūrā attēloto rakstzīmju izmērs (%.2fx)</string>
|
||||
|
@@ -10,6 +10,8 @@
|
||||
<string name="pref_accents_e_all_installed">Mostrar acentos para todos os idiomas instalados</string>
|
||||
<string name="pref_accents_e_selected">Mostrar acentos só para o idioma selecionado</string>
|
||||
<string name="pref_accents_e_none">Ocultar acentos</string>
|
||||
<string name="pref_autocapitalisation_title">Maiusculização automática</string>
|
||||
<string name="pref_autocapitalisation_summary">Aciona o shift no início de cada frase</string>
|
||||
<string name="pref_programming_layout_title">Layout do teclado para programação</string>
|
||||
<string name="pref_programming_layout_none">Nenhum</string>
|
||||
<string name="pref_category_typing">Digitação</string>
|
||||
@@ -21,11 +23,14 @@
|
||||
<string name="pref_vibrate_summary">Ativar/desativar vibração ao digitar</string>
|
||||
<string name="pref_precise_repeat_title">Precisão nos movimentos do cursor</string>
|
||||
<string name="pref_precise_repeat_summary">Varia a velocidade de repetição a depender do quanto deslizar</string>
|
||||
<string name="pref_lockable_keys_title">Teclas traváveis</string>
|
||||
<string name="pref_lockable_keys_summary">Teclas que podem ficar seguradas ao teclar duas vezes</string>
|
||||
<string name="pref_lockable_keys_title">Descontinuado: Modificadores fixáveis</string>
|
||||
<string name="pref_lockable_keys_summary">Essa opção será removida</string>
|
||||
<string name="pref_lock_double_tap_title">Tecle duas vezes no shift para caixa alta</string>
|
||||
<string name="pref_lock_double_tap_summary">Ao invés de apertar e segurar por um tempo</string>
|
||||
<string name="pref_category_style">Estilo</string>
|
||||
<string name="pref_margin_bottom_title">Margem inferior</string>
|
||||
<string name="pref_keyboard_height_title">Altura do teclado</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Altura do teclado em modo paisagem</string>
|
||||
<string name="pref_horizontal_margin_title">Margem horizontal</string>
|
||||
<string name="pref_character_size_title">Tamanho dos indicadores</string>
|
||||
<string name="pref_character_size_summary">Tamanho dos caracteres visíveis no teclado (%.2fx)</string>
|
||||
|
50
res/values-ru/strings.xml
Normal file
50
res/values-ru/strings.xml
Normal file
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Unexpected Keyboard Настройки</string>
|
||||
<string name="pref_category_layout">Расположение</string>
|
||||
<string name="pref_layout_title">Изменить раскладку клавиатуры</string>
|
||||
<string name="pref_layout_e_system">Системные настройки</string>
|
||||
<string name="pref_accents_title">Акцент</string>
|
||||
<string name="pref_accents_e_all_installed">Показывать акценты для всех установленных языков</string>
|
||||
<string name="pref_accents_e_selected">Показывать акценты только для выбранного языка</string>
|
||||
<string name="pref_accents_e_none">Скрыть акценты</string>
|
||||
<string name="pref_programming_layout_title">Раскладка клавиатуры для программирования</string>
|
||||
<string name="pref_programming_layout_none">Нету</string>
|
||||
<string name="pref_category_typing">Печатание</string>
|
||||
<string name="pref_swipe_dist_title">Расстояние пролистывания</string>
|
||||
<string name="pref_swipe_dist_summary">Расстояние между символами в углах клавиш (%s)</string>
|
||||
<string name="pref_long_timeout_title">Тайм-аут повтора ключа</string>
|
||||
<string name="pref_long_interval_title">Интервал повторения клавиш</string>
|
||||
<string name="pref_vibrate_title">Вибрация</string>
|
||||
<string name="pref_vibrate_summary">Включение/выключение вибрации при нажатии клавиши</string>
|
||||
<string name="pref_precise_repeat_title">Точные перемещения курсора</string>
|
||||
<string name="pref_precise_repeat_summary">Модулируйте скорость повторения клавиш, проводя пальцем больше или меньше</string>
|
||||
<string name="pref_lockable_keys_title">Запираемые модификаторы</string>
|
||||
<string name="pref_lockable_keys_summary">Модификаторы, которые можно заблокировать, введя их дважды</string>
|
||||
<string name="pref_category_style">Стиль</string>
|
||||
<string name="pref_margin_bottom_title">Нижняя граница поля</string>
|
||||
<string name="pref_keyboard_height_title">Высота клавиатуры</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Высота клавиатуры в ландшафтном режиме</string>
|
||||
<string name="pref_horizontal_margin_title">Горизонтальное поле</string>
|
||||
<string name="pref_character_size_title">Размер этикетки</string>
|
||||
<string name="pref_character_size_summary">Размер символов, отображаемых на клавиатуре (%.2fx)</string>
|
||||
<string name="pref_theme">Тема</string>
|
||||
<string name="pref_theme_e_system">Системные настройки</string>
|
||||
<string name="pref_theme_e_dark">Темный</string>
|
||||
<string name="pref_theme_e_light">Светлый</string>
|
||||
<string name="pref_theme_e_black">Черный</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Очень короткий</string>
|
||||
<string name="pref_swipe_dist_e_short">Короткий</string>
|
||||
<string name="pref_swipe_dist_e_default">Обычный</string>
|
||||
<string name="pref_swipe_dist_e_far">Far</string>
|
||||
<string name="pref_swipe_dist_e_very_far">Очень далеко</string>
|
||||
<string name="pref_key_horizontal_space">Горизонтальное расстояние между клавишами</string>
|
||||
<string name="pref_key_vertical_space">Расстояние по вертикали между клавишами</string>
|
||||
<string name="key_action_next">Next</string>
|
||||
<string name="key_action_done">Ввод</string>
|
||||
<string name="key_action_go">Go</string>
|
||||
<string name="key_action_prev">Предыдущий</string>
|
||||
<string name="key_action_search">Поиск</string>
|
||||
<string name="key_action_send">Отправить</string>
|
||||
</resources>
|
@@ -21,8 +21,6 @@
|
||||
<string name="pref_vibrate_summary">Tuşa basıldığında titreşimi etkinleştir</string>
|
||||
<string name="pref_precise_repeat_title">İmleç hareketini ayarla</string>
|
||||
<string name="pref_precise_repeat_summary">Tuş tekrar hızını az ya da çok kaydırarak ayarla</string>
|
||||
<string name="pref_lockable_keys_title">Sabitlenebilir değiştiriciler</string>
|
||||
<string name="pref_lockable_keys_summary">Çift vuruşla sabitlenebilecek değiştirici tuşlar</string>
|
||||
<string name="pref_category_style">Stil</string>
|
||||
<string name="pref_margin_bottom_title">Alt boşluk</string>
|
||||
<string name="pref_keyboard_height_title">Klavye yüksekliği</string>
|
||||
|
@@ -19,8 +19,6 @@
|
||||
<string name="pref_vibrate_summary">启用或者禁用按下按键时振动</string>
|
||||
<string name="pref_precise_repeat_title">精确控制光标移速</string>
|
||||
<string name="pref_precise_repeat_summary">按键重复按下速度由手指滑动的距离决定</string>
|
||||
<string name="pref_lockable_keys_title">组合键锁定</string>
|
||||
<string name="pref_lockable_keys_summary">可以通过输入两次锁定任何组合键(Ctrl, Alt, Fn, 声调符号等)</string>
|
||||
<string name="pref_category_style">样式</string>
|
||||
<string name="pref_margin_bottom_title">键盘下边距</string>
|
||||
<string name="pref_keyboard_height_title">键盘高度</string>
|
||||
|
@@ -6,8 +6,10 @@
|
||||
<item>qwerty</item>
|
||||
<item>qwerty_pt</item>
|
||||
<item>qwerty_es</item>
|
||||
<item>qwerty_el</item>
|
||||
<item>qwerty_ko</item>
|
||||
<item>qwerty_lv</item>
|
||||
<item>qwerty_no</item>
|
||||
<item>qwerty_sv_se</item>
|
||||
<item>qwerty_hu</item>
|
||||
<item>qwerty_tr</item>
|
||||
@@ -18,6 +20,10 @@
|
||||
<item>dvorak</item>
|
||||
<item>colemak</item>
|
||||
<item>neo2</item>
|
||||
<item>bone</item>
|
||||
<item>jcuken_ua</item>
|
||||
<item>bangla</item>
|
||||
<item>hindi</item>
|
||||
</string-array>
|
||||
<string-array name="pref_layout_entries">
|
||||
<item>@string/pref_layout_e_system</item>
|
||||
@@ -25,8 +31,10 @@
|
||||
<item>QWERTY</item>
|
||||
<item>QWERTY (Brasileiro)</item>
|
||||
<item>QWERTY (Español)</item>
|
||||
<item>QWERTY (Greek)</item>
|
||||
<item>QWERTY (Korean)</item>
|
||||
<item>QWERTY (Latvian)</item>
|
||||
<item>QWERTY (Norwegian)</item>
|
||||
<item>QWERTY (Swedish)</item>
|
||||
<item>QWERTY (Hungarian)</item>
|
||||
<item>QWERTY (Türkçe)</item>
|
||||
@@ -37,6 +45,10 @@
|
||||
<item>Dvorak</item>
|
||||
<item>Colemak</item>
|
||||
<item>Neo 2</item>
|
||||
<item>Bone</item>
|
||||
<item>ЙЦУКЕН (Українська)</item>
|
||||
<item>বাংলা</item>
|
||||
<item>हिन्दी</item>
|
||||
</string-array>
|
||||
<string-array name="pref_programming_layout_values">
|
||||
<item>none</item>
|
||||
@@ -65,12 +77,14 @@
|
||||
<item>@string/pref_theme_e_dark</item>
|
||||
<item>@string/pref_theme_e_light</item>
|
||||
<item>@string/pref_theme_e_black</item>
|
||||
<item>@string/pref_theme_e_white</item>
|
||||
</string-array>
|
||||
<string-array name="pref_theme_values">
|
||||
<item>system</item>
|
||||
<item>dark</item>
|
||||
<item>light</item>
|
||||
<item>black</item>
|
||||
<item>white</item>
|
||||
</string-array>
|
||||
<string-array name="pref_swipe_dist_entries">
|
||||
<item>@string/pref_swipe_dist_e_very_short</item>
|
||||
|
6
res/values/attrs.xml
Normal file
6
res/values/attrs.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<declare-styleable name="ExtraKeyCheckBoxPreference">
|
||||
<attr name="index" format="integer"/>
|
||||
</declare-styleable>
|
||||
</resources>
|
@@ -10,6 +10,9 @@
|
||||
<string name="pref_accents_e_all_installed">Show accents for all installed languages</string>
|
||||
<string name="pref_accents_e_selected">Only show accents for the selected language</string>
|
||||
<string name="pref_accents_e_none">Hide accents</string>
|
||||
<string name="pref_autocapitalisation_title">Automatic capitalisation</string>
|
||||
<string name="pref_autocapitalisation_summary">Press Shift at the beginning of a sentence</string>
|
||||
<string name="pref_extra_keys_title">Add keys to the keyboard</string>
|
||||
<string name="pref_programming_layout_title">Keyboard layout for programming</string>
|
||||
<string name="pref_programming_layout_none">None</string>
|
||||
<string name="pref_category_typing">Typing</string>
|
||||
@@ -21,8 +24,10 @@
|
||||
<string name="pref_vibrate_summary">Enable/disable vibration on keypress</string>
|
||||
<string name="pref_precise_repeat_title">Precise cursor movements</string>
|
||||
<string name="pref_precise_repeat_summary">Modulate key repeat speed by swiping more or less</string>
|
||||
<string name="pref_lockable_keys_title">Lockable modifiers</string>
|
||||
<string name="pref_lockable_keys_summary">Modifiers that can be locked by typing them twice</string>
|
||||
<string name="pref_lockable_keys_title">Deprecated: Lockable modifiers</string>
|
||||
<string name="pref_lockable_keys_summary">Every modifiers can be locked with a long press</string>
|
||||
<string name="pref_lock_double_tap_title">Double tap on shift for caps lock</string>
|
||||
<string name="pref_lock_double_tap_summary">Instead of holding modifiers for a time</string>
|
||||
<string name="pref_category_style">Style</string>
|
||||
<string name="pref_margin_bottom_title">Margin bottom</string>
|
||||
<string name="pref_keyboard_height_title">Keyboard height</string>
|
||||
@@ -35,6 +40,7 @@
|
||||
<string name="pref_theme_e_dark">Dark</string>
|
||||
<string name="pref_theme_e_light">Light</string>
|
||||
<string name="pref_theme_e_black">Black</string>
|
||||
<string name="pref_theme_e_white">White</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Very short</string>
|
||||
<string name="pref_swipe_dist_e_short">Short</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
|
@@ -69,4 +69,16 @@
|
||||
<item name="emoji_button_bg">#000000</item>
|
||||
<item name="emoji_color">#ffffff</item>
|
||||
</style>
|
||||
<style name="White" parent="BaseTheme">
|
||||
<item name="android:isLightTheme">true</item>
|
||||
<item name="colorKeyboard">#ffffff</item>
|
||||
<item name="colorKey">#ffffff</item>
|
||||
<item name="colorKeyActivated">#cccccc</item>
|
||||
<item name="colorLabel">#000000</item>
|
||||
<item name="colorLabelActivated">#0066cc</item>
|
||||
<item name="colorLabelLocked">#33cc33</item>
|
||||
<item name="colorSubLabel">#333333</item>
|
||||
<item name="emoji_button_bg">#ffffff</item>
|
||||
<item name="emoji_color">#000000</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
37
res/xml/bangla.xml
Normal file
37
res/xml/bangla.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="ঙ" key2="ং" key3="esc" key4="১"/>
|
||||
<key key0="য" key2="য়" key3="¶" key4="২"/>
|
||||
<key key0="ড" key2="ঢ" key3="π" key4="৩"/>
|
||||
<key key0="প" key2="ফ" key3="√" key4="৪"/>
|
||||
<key key0="ট" key2="ঠ" key3="^" key4="৫"/>
|
||||
<key key0="চ" key2="ছ" key3="÷" key4="৬"/>
|
||||
<key key0="জ" key2="ঝ" key3="×" key4="৭"/>
|
||||
<key key0="হ" key2="ঞ" key3="=" key4="৮"/>
|
||||
<key key0="গ" key2="ঘ" key3="+" key4="৯"/>
|
||||
<key key0="ড়" key2="ঢ়" key3="-" key4="০"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="ৃ" key1="ৠ" key2="ঋ" key3="tab" key4="র্"/>
|
||||
<key key0="ু" key1="ঊ" key2="উ" key3="~" key4="ূ"/>
|
||||
<key key0="ি" key1="ঈ" key2="ই" key3="•" key4="ী"/>
|
||||
<key key0="া" key1="ৄ" key2="আ" key3="°" key4="অ"/>
|
||||
<key key0="্" key1="ৗ" key2="ঁ" key3="\\" key4="/"/>
|
||||
<key key0="ব" key1="`" key2="ভ" key3="<" key4=">"/>
|
||||
<key key0="ক" key1="|" key2="খ" key3="[" key4="]"/>
|
||||
<key key0="ত" key1="ৎ" key2="থ" key3="{" key4="}"/>
|
||||
<key key0="দ" key1="_" key2="ধ" key3="(" key4=")"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.4" key0="shift"/>
|
||||
<key shift="0.1" key0="্র" key2="্য" key3="\#" key4="*"/>
|
||||
<key key0="ো" key1="ৌ" key2="ও" key3="ঔ" key4="\@"/>
|
||||
<key key0="ে" key1="ৈ" key2="এ" key3="ঐ" key4="%"/>
|
||||
<key key0="র" key1="ঃ" key2="ল" key3=":" key4="&"/>
|
||||
<key key0="ন" key1="৳" key2="ণ" key3=";" key4="."/>
|
||||
<key key0="স" key1=""" key2="ষ" key3="!" key4=","/>
|
||||
<key key0="ম" key1="'" key2="শ" key3="\?" key4="।"/>
|
||||
<key shift="0.1" width="1.4" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
45
res/xml/bone.xml
Normal file
45
res/xml/bone.xml
Normal file
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard bottom_row="false">
|
||||
<row>
|
||||
<key key0="j" key2="esc" key4="…"/>
|
||||
<key key0="d" key2="°" key4="_"/>
|
||||
<key key0="u" key2="§" key4="["/>
|
||||
<key key0="a" key4="]"/>
|
||||
<key key0="x" key4="^"/>
|
||||
<key key0="p" key3="!" key4="7"/>
|
||||
<key key0="h" key3="<" key4="8"/>
|
||||
<key key0="l" key1="ℓ" key3=">" key4="9"/>
|
||||
<key key0="m" key1="≠" key3="=" key4="f11_placeholder"/>
|
||||
<key key0="w" key3="&" key4="f12_placeholder"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="c" key2="tab" key4="\\"/>
|
||||
<key key0="t" key1="accent_circonflexe" key2="accent_caron" key4="/"/>
|
||||
<key key0="i" key1="accent_aigu" key2="accent_grave" key4="{"/>
|
||||
<key key0="e" key1="accent_cedille" key2="accent_ogonek" key4="}"/>
|
||||
<key key0="o" key1="accent_ring" key2="accent_dot_above" key4="*"/>
|
||||
<key key0="b" key2="accent_macron" key3="\?" key4="4"/>
|
||||
<key key0="n" key2="accent_tilde" key3="(" key4="5"/>
|
||||
<key key0="r" key2="accent_trema" key3=")" key4="6"/>
|
||||
<key key0="s" key2="accent_slash" key3="-"/>
|
||||
<key key0="g" key1="\@" key3=":"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift" key4="\#"/>
|
||||
<key key0="f" key4="|"/>
|
||||
<key key0="v" key4="~"/>
|
||||
<key key0="ß" key4="`"/>
|
||||
<key key0="y" key3="%" key4="1"/>
|
||||
<key key0="z" key1=""" key3="+" key4="2"/>
|
||||
<key key0="q" key1="'" key3="," key4="3"/>
|
||||
<key key0="k" key3="."/>
|
||||
<key width="1.5" key0="backspace" key1="delete" key3=";"/>
|
||||
</row>
|
||||
<row height="0.95">
|
||||
<key width="1.8" key0="ctrl" key2="loc meta" key4="switch_numeric"/>
|
||||
<key width="1.2" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.0" key0="space" key1="switch_programming" key2="0" edgekeys="true"/>
|
||||
<key width="1.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key width="1.8" key0="enter" key3="action"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<row height="0.95">
|
||||
<key width="1.8" key0="ctrl" key2="meta" key4="switch_numeric"/>
|
||||
<key width="1.2" key0="fn" key1="alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="1.8" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key4="switch_numeric"/>
|
||||
<key width="1.2" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.0" key0="space" key1="switch_programming" edgekeys="true"/>
|
||||
<key width="1.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key width="1.8" key0="enter" key2="action"/>
|
||||
|
47
res/xml/greekmath.xml
Normal file
47
res/xml/greekmath.xml
Normal file
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard bottom_row="false" extra_keys="false">
|
||||
<row>
|
||||
<key key0="θ" key2="^"/>
|
||||
<key key0="δ" key1="⌊" key2="∨" key3="↔" key4="⊂"/>
|
||||
<key key0="ϛ" key1="⌋" key2="∧" key3="↑" key4="⊃"/>
|
||||
<key key0="α" key1="⌈" key2="⊥" key3="↕" key4="∀"/>
|
||||
<key key0="ξ" key1="⌉" key2="∡" key4="⊷"/>
|
||||
<key key0="π" key1="∥" key3="≪" key4="7"/>
|
||||
<key key0="ψ" key1="⌀" key2="⟨" key3="≡" key4="8"/>
|
||||
<key key0="λ" key1="∞" key2="⟩" key3="≫" key4="9"/>
|
||||
<key key0="μ" key1="∝" key3="□" key4="f11_placeholder"/>
|
||||
<key key0="ω" key1="∅" key3="∘" key4="f12_placeholder"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="χ" key4="ℂ"/>
|
||||
<key key0="τ" key3="←" key4="∂"/>
|
||||
<key key0="ι" key3="↓" key4="∫"/>
|
||||
<key key0="ε" key3="→" key4="∃"/>
|
||||
<key key0="ο" key4="∈"/>
|
||||
<key key0="β" key1="⊕" key4="4"/>
|
||||
<key key0="ν" key1="⊖" key3="ℕ" key4="5"/>
|
||||
<key key0="ρ" key1="⊙" key3="ℝ" key4="6"/>
|
||||
<key key0="σ" key1="⊗"/>
|
||||
<key key0="γ" key1="⌀"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
<key key0="φ" key3="⇌" key4="√"/>
|
||||
<key key0="η" key3="accent_arrow_right" key4="∪"/>
|
||||
<key key0="ϡ" key4="∩"/>
|
||||
<key key0="υ" key3="∇" key4="ℵ"/>
|
||||
<key key0="ζ" key1="≤" key3="ℤ" key4="1"/>
|
||||
<key key0="Ϟ" key1="≠" key3="ℚ" key4="2"/>
|
||||
<key key0="κ" key1="≥" key3="×" key4="3"/>
|
||||
<key width="1.5" key0="backspace" key3="delete"/>
|
||||
</row>
|
||||
<row height="0.95">
|
||||
<key width="1.2" key0="switch_text" key2="esc"/>
|
||||
<key width="1.2" key0="switch_numeric" key2="tab"/>
|
||||
<key width="1.2" key0="fn"/>
|
||||
<key width="2.8" key0="space" key1="superscript" key3="subscript"/>
|
||||
<key width="1.2" key0="0" key2="."/>
|
||||
<key width="1.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key width="1.2" key0="enter" key1="=" key2="action"/>
|
||||
</row>
|
||||
</keyboard>
|
37
res/xml/hindi.xml
Normal file
37
res/xml/hindi.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="ौ" key1="औ" key2="₨" key3="esc" key4="१"/>
|
||||
<key key0="ै" key1="ऐ" key2="ऍ" key3="¶" key4="२"/>
|
||||
<key key0="ा" key1="आ" key2="ॅ" key3="ग़" key4="३"/>
|
||||
<key key0="ी" key1="ई" key2="ज्ञ" key3="ज़" key4="४"/>
|
||||
<key key0="ू" key1="ऊ" key2="त्र" key3="ऩ" key4="५"/>
|
||||
<key key0="ब" key1="भ" key2="क्ष" key3="÷" key4="६"/>
|
||||
<key key0="ह" key1="ङ" key2="श्र" key3="×" key4="७"/>
|
||||
<key key0="ग" key1="घ" key2="ः" key3="=" key4="८"/>
|
||||
<key key0="द" key1="ध" key2="ऋ" key3="+" key4="९"/>
|
||||
<key key0="ज" key1="झ" key2="ृ" key3="-" key4="०"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="ो" key1="ओ" key2="ॉ" key3="tab" key4="ऑ"/>
|
||||
<key key0="े" key1="ए" key2="ञ" key3="~" key4="॰"/>
|
||||
<key key0="्" key1="अ" key2="़" key3="ऽ" key4="ऺ"/>
|
||||
<key key0="ि" key1="इ" key2="ढ" key3="॥" key4="ॄ"/>
|
||||
<key key0="ु" key1="उ" key2="ड" key3="\\" key4="/"/>
|
||||
<key key0="प" key1="फ" key2="छ" key3="<" key4=">"/>
|
||||
<key key0="र" key1="ऱ" key2="च" key3="[" key4="]"/>
|
||||
<key key0="क" key1="ख" key2="क़" key3="{" key4="}"/>
|
||||
<key key0="त" key1="थ" key2="ख़" key3="(" key4=")"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.4" key0="shift"/>
|
||||
<key shift="0.1" key0="ट" key1="ठ" key2="ड़" key3="\#" key4="*"/>
|
||||
<key key0="ं" key1="ँ" key2="।" key3="ॐ" key4="\@"/>
|
||||
<key key0="म" key1="ण" key2="य" key3="य़" key4="%"/>
|
||||
<key key0="न" key1="" key2="।" key3=":" key4="&"/>
|
||||
<key key0="व" key1="" key2="ढ़" key3=";" key4="."/>
|
||||
<key key0="ल" key1="ळ" key2="फ़" key3="!" key4=","/>
|
||||
<key key0="स" key1="श" key2="ष" key3="\?" key4="।"/>
|
||||
<key shift="0.1" width="1.4" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
42
res/xml/jcuken_ua.xml
Normal file
42
res/xml/jcuken_ua.xml
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key shift="0.1 " key0="й" key2="1" key4="esc"/>
|
||||
<key key0="ц" key1="~" key2="2" key3="\@"/>
|
||||
<key key0="у" key1="!" key2="3" key3="\#" key4="loc €"/>
|
||||
<key key0="к" key2="4" key3="$"/>
|
||||
<key key0="е" key2="5" key3="%"/>
|
||||
<key key0="н" key2="6" key3="^"/>
|
||||
<key key0="г" key1="ґ" key2="7" key3="&"/>
|
||||
<key key0="ш" key2="8" key3="*"/>
|
||||
<key key0="щ" key2="9" key3="(" key4=")"/>
|
||||
<key key0="з" key2="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
<key key0="х"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.1" key0="ф" key1="tab" key2="`"/>
|
||||
<key key0="і" key2="ї"/>
|
||||
<key key0="в" />
|
||||
<key key0="а" />
|
||||
<key key0="п" />
|
||||
<key key0="р" />
|
||||
<key key0="о" key2="-" key3="_"/>
|
||||
<key key0="л" key2="=" key3="+"/>
|
||||
<key key0="д" key4="}" key3="{"/>
|
||||
<key key0="ж" key3="[" key4="]"/>
|
||||
<key key0="є" key2="|" key3="\\"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.1" key0="shift"/>
|
||||
<key key0="я"/>
|
||||
<key key0="ч" />
|
||||
<key key0="с" />
|
||||
<key key0="м" key2="<" key3="."/>
|
||||
<key key0="и" key2=">" key3=","/>
|
||||
<key key0="т" key2="\?" key3="/"/>
|
||||
<key key0="ь" key2=":" key3=";"/>
|
||||
<key key0="б" key2=""" key3="'"/>
|
||||
<key key0="ю" key1="«" key2="»"/>
|
||||
<key width="1.1" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -1,6 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<input-method xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="juloo.keyboard2.SettingsActivity" android:supportsSwitchingToNextInputMethod="true">
|
||||
<subtype android:label="%s" android:languageTag="bg" android:imeSubtypeLocale="bg_BG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=bgph1,extra_keys=€"/>
|
||||
<subtype android:label="%s" android:languageTag="bn" android:imeSubtypeLocale="bn_BD" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty,extra_keys=৳"/>
|
||||
<subtype android:label="%s" android:languageTag="hi" android:imeSubtypeLocale="hi_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=hindi,extra_keys=₹"/>
|
||||
<subtype android:label="%s" android:languageTag="de" android:imeSubtypeLocale="de_DE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwertz,extra_keys=accent_trema|ß|€"/>
|
||||
<subtype android:label="%s" android:languageTag="en-GB" android:imeSubtypeLocale="en_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty,extra_keys=£|€"/>
|
||||
<subtype android:label="%s" android:languageTag="en-US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty"/>
|
||||
@@ -12,8 +14,13 @@
|
||||
<subtype android:label="%s" android:languageTag="lt" android:imeSubtypeLocale="lt_LT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty,extra_keys=accent_ogonek|accent_caron|accent_dot_above|accent_macron|€"/>
|
||||
<subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_lv,extra_keys=accent_caron|accent_cedille|accent_macron|€"/>
|
||||
<subtype android:label="%s" android:languageTag="nl-BE" android:imeSubtypeLocale="nl_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=azerty,extra_keys=accent_grave|accent_aigu|accent_circonflexe|accent_cedille|accent_trema|€"/>
|
||||
<subtype android:label="%s" android:languageTag="no" android:imeSubtypeLocale="no_NO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_no,extra_keys=accent_aigu|€"/>
|
||||
<subtype android:label="%s" android:languageTag="pl" android:imeSubtypeLocale="pl_PL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty,extra_keys=accent_aigu|accent_ogonek|accent_dot_above|ł"/>
|
||||
<subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_pt,extra_keys=accent_aigu|accent_cedille|accent_circonflexe|accent_grave|accent_tilde|€"/>
|
||||
<subtype android:label="%s" android:languageTag="ru" android:imeSubtypeLocale="ru_RU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=ru_jcuken"/>
|
||||
<subtype android:label="%s" android:languageTag="sv" android:imeSubtypeLocale="sv_SE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_sv_se,extra_keys=accent_aigu|accent_trema|accent_ring|€"/>
|
||||
<subtype android:label="%s" android:languageTag="tr" android:imeSubtypeLocale="tr_TR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_tr,extra_keys=accent_cedille|accent_trema|₺|ı|ğ"/>
|
||||
<subtype android:label="%s" android:languageTag="uk" android:imeSubtypeLocale="uk_UA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=jcuken_ua"/>
|
||||
<subtype android:label="%s" android:languageTag="cs" android:imeSubtypeLocale="cs_CZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwertz_cs,extra_keys=a|accent_cedille|accent_circonflexe"/>
|
||||
<subtype android:label="%s" android:languageTag="el" android:imeSubtypeLocale="el" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_el,extra_keys=£|€"/>
|
||||
</input-method>
|
||||
|
@@ -39,8 +39,8 @@
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
<row height="0.95">
|
||||
<key width="1.8" key0="ctrl" key2="meta" key4="switch_numeric"/>
|
||||
<key width="1.2" key0="fn" key1="alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="1.8" key0="ctrl" key2="loc meta" key4="switch_numeric"/>
|
||||
<key width="1.2" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.0" key0="space" key1="switch_programming" edgekeys="true"/>
|
||||
<key width="1.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key key0="j" key4=";"/>
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<key key0="7" key1="<" key2=">"/>
|
||||
<key key0="8" key2="∞"/>
|
||||
<key key0="9" key2="π"/>
|
||||
<key width="0.75" key0="*" key1="√" key2="×"/>
|
||||
<key width="0.75" key0="*" key1="√" key2="×" key3="\#"/>
|
||||
<key width="0.75" key0="/" key1="%" key3="÷"/>
|
||||
</row>
|
||||
<row>
|
||||
@@ -19,11 +19,12 @@
|
||||
<key width="0.75" key0="-" key1="^"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.35" width="1.15" key0="shift" key2="fn" key4="alt"/>
|
||||
<key width="0.75" key0="switch_greekmath"/>
|
||||
<key width="0.75" key0="shift" key2="fn" key4="loc alt"/>
|
||||
<key key0="1" key1="superscript" key2="ordinal" key3="subscript"/>
|
||||
<key key0="2"/>
|
||||
<key key0="3"/>
|
||||
<key width="1.15" key0="backspace" key2="delete"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
<row height="0.95">
|
||||
<key width="1.5" key0="switch_text" key2="ctrl"/>
|
||||
|
37
res/xml/qwerty_el.xml
Normal file
37
res/xml/qwerty_el.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0=";" key2="1" key4="esc"/>
|
||||
<key key0="ς" key1="~" key2="2" key3="\@"/>
|
||||
<key key0="ε" key1="!" key2="3" key3="\#" key4="loc €"/>
|
||||
<key key0="ρ" key2="4" key3="$"/>
|
||||
<key key0="τ" key2="5" key3="%"/>
|
||||
<key key0="υ" key2="6" key3="^"/>
|
||||
<key key0="θ" key2="7" key3="&"/>
|
||||
<key key0="ι" key1="accent_trema" key2="8" key3="*"/>
|
||||
<key key0="ο" key2="9" key3="(" key4=")"/>
|
||||
<key key0="π" key2="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="α" key1="tab" key2="`"/>
|
||||
<key key0="σ"/>
|
||||
<key key0="δ" key2="loc £"/>
|
||||
<key key0="φ"/>
|
||||
<key key0="γ" key2="-" key3="_"/>
|
||||
<key key0="η" key2="=" key3="+"/>
|
||||
<key key0="ξ" key2="accent_aigu" key3="{" key4="}"/>
|
||||
<key key0="κ" key2="accent_grave" key3="[" key4="]"/>
|
||||
<key key0="λ" key2="|" key3="\\"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
<key key0="ζ"/>
|
||||
<key key0="χ"/>
|
||||
<key key0="ψ" key2="<" key3="."/>
|
||||
<key key0="ω" key2=">" key3=","/>
|
||||
<key key0="β" key2="\?" key3="/"/>
|
||||
<key key0="ν" key2=":" key3=";"/>
|
||||
<key key0="μ" key2=""" key3="'"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -2,7 +2,7 @@
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="0" key4="esc"/>
|
||||
<key key0="w" key1="'" key2="1" key4="|"/>
|
||||
<key key0="w" key1="'" key2="1" key3="~" key4="|"/>
|
||||
<key key0="e" key1=""" key2="2" key4="é"/>
|
||||
<key key0="r" key2="3" key4="^"/>
|
||||
<key key0="t" key1="!" key2="4" key4="f11_placeholder"/>
|
||||
@@ -21,7 +21,7 @@
|
||||
<key key0="h"/>
|
||||
<key key0="j"/>
|
||||
<key key0="k" key3="(" key4=")"/>
|
||||
<key key0="l" key3="/"/>
|
||||
<key key0="l" key1="$" key3="/"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
|
37
res/xml/qwerty_no.xml
Normal file
37
res/xml/qwerty_no.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="1" key4="esc"/>
|
||||
<key key0="w" key1="~" key2="2" key3="\@"/>
|
||||
<key key0="e" key1="!" key2="3" key3="\#" key4="loc €"/>
|
||||
<key key0="r" key2="4" key3="$"/>
|
||||
<key key0="t" key2="5" key3="%"/>
|
||||
<key key0="y" key2="6" key3="^"/>
|
||||
<key key0="u" key2="7" key3="&"/>
|
||||
<key key0="i" key2="8" key3="*"/>
|
||||
<key key0="o" key1="ø" key2="9" key3="(" key4=")"/>
|
||||
<key key0="p" key2="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="a" key1="tab" key2="`" key3="æ" key4="å"/>
|
||||
<key key0="s" key1="loc accent_ring" key3="loc ß" key4="loc accent_ogonek"/>
|
||||
<key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/>
|
||||
<key key0="f" key1="loc accent_dot_above"/>
|
||||
<key key0="g" key1="loc accent_caron" key2="-" key3="_"/>
|
||||
<key key0="h" key2="=" key3="+"/>
|
||||
<key key0="j" key1="loc accent_trema" key2="loc accent_circonflexe" key4="}" key3="{"/>
|
||||
<key key0="k" key1="loc accent_double_aigu" key3="[" key4="]"/>
|
||||
<key key0="l" key2="|" key3="\\"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
<key key0="z"/>
|
||||
<key key0="x"/>
|
||||
<key key0="c" key1="loc accent_cedille" key2="<" key3="."/>
|
||||
<key key0="v" key2=">" key3=","/>
|
||||
<key key0="b" key2="\?" key3="/"/>
|
||||
<key key0="n" key1="loc accent_tilde" key2=":" key3=";"/>
|
||||
<key key0="m" key2=""" key3="'"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
37
res/xml/qwertz_cs.xml
Normal file
37
res/xml/qwertz_cs.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key1="1" key4="esc"/>
|
||||
<key key0="w" key1="2" key3="~"/>
|
||||
<key key0="e" key1="3" key2="é" key3="ë" key4="ě"/>
|
||||
<key key0="r" key1="4" key2="ŕ" key3="°" key4="ř"/>
|
||||
<key key0="t" key1="5" key3="%" key4="ť"/>
|
||||
<key key0="z" key1="6" key3="^" key4="ž"/>
|
||||
<key key0="u" key1="7" key2="ú" key3="ü" key4="ů"/>
|
||||
<key key0="i" key1="8" key2="í" key3="ï" key4="*"/>
|
||||
<key key0="o" key1="9" key2="ó" key3="ö" key4="ô"/>
|
||||
<key key0="p" key1="0" key2="=" key3="/" key4="π"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="a" key1="tab" key2="á" key3="ä" key4="α"/>
|
||||
<key key0="s" key1="{" key2="<" key3="§" key4="š"/>
|
||||
<key key0="d" key1="$" key2="δ" key3="Δ" key4="ď"/>
|
||||
<key key0="f" key1=">" key2="}" key3="ѳ" key4="φ"/>
|
||||
<key key0="g" key1="»" key2="«" key3="–" key4="_"/>
|
||||
<key key0="h" key1="[" key2="("/>
|
||||
<key key0="j" key1="+" key2="\?" key3="!" key4="-"/>
|
||||
<key key0="k" key1=")" key2="]"/>
|
||||
<key key0="l" key2="ľ" key3="\\" key4="ĺ"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
<key key0="y" key1="÷" key2="ý"/>
|
||||
<key key0="x" key1="∙" key3="×"/>
|
||||
<key key0="c" key1="\#" key2="γ" key3="&" key4="č"/>
|
||||
<key key0="v" key1="|" key3="\@"/>
|
||||
<key key0="b" key1=";" key2="♭" key3=":" key4="β"/>
|
||||
<key key0="n" key1="," key3="." key4="ň"/>
|
||||
<key key0="m" key1=""" key3="\'"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -2,7 +2,7 @@
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="0" key4="esc"/>
|
||||
<key key0="w" key1="'" key2="1" key4="|"/>
|
||||
<key key0="w" key1="'" key2="1" key3="~" key4="|"/>
|
||||
<key key0="e" key1=""" key2="2" key4="é"/>
|
||||
<key key0="r" key2="3" key4="^"/>
|
||||
<key key0="t" key1="!" key2="4" key4="f11_placeholder"/>
|
||||
@@ -21,7 +21,7 @@
|
||||
<key key0="h"/>
|
||||
<key key0="j"/>
|
||||
<key key0="k" key3="(" key4=")"/>
|
||||
<key key0="l" key3="/"/>
|
||||
<key key0="l" key1="$" key3="/"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
@@ -35,3 +35,4 @@
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
||||
|
||||
|
@@ -1,17 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceCategory android:title="@string/pref_category_layout">
|
||||
<ListPreference android:key="layout" android:title="@string/pref_layout_title" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_layout_entries" android:entryValues="@array/pref_layout_values"/>
|
||||
<ListPreference android:key="accents" android:title="@string/pref_accents_title" android:summary="%s" android:defaultValue="1" android:entries="@array/pref_accents_entries" android:entryValues="@array/pref_accents_values"/>
|
||||
<ListPreference android:key="programming_layout" android:title="@string/pref_programming_layout_title" android:summary="%s" android:defaultValue="none" android:entries="@array/pref_programming_layout_entries" android:entryValues="@array/pref_programming_layout_values"/>
|
||||
<PreferenceScreen android:title="@string/pref_extra_keys_title">
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="0"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="1"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="2"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="3"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="4"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="5"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="6"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="7"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="8"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="9"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="10"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="11"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="12"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="13"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="14"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="15"/>
|
||||
</PreferenceScreen>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_typing">
|
||||
<CheckBoxPreference android:key="autocapitalisation" android:title="@string/pref_autocapitalisation_title" android:summary="@string/pref_autocapitalisation_summary" android:defaultValue="true"/>
|
||||
<ListPreference android:key="swipe_dist" android:title="@string/pref_swipe_dist_title" android:summary="@string/pref_swipe_dist_summary" android:defaultValue="15" android:entries="@array/pref_swipe_dist_entries" android:entryValues="@array/pref_swipe_dist_values"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="longpress_timeout" android:title="@string/pref_long_timeout_title" android:summary="%sms" android:defaultValue="600" min="50" max="2000"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="longpress_interval" android:title="@string/pref_long_interval_title" android:summary="%sms" android:defaultValue="25" min="5" max="100"/>
|
||||
<CheckBoxPreference android:key="precise_repeat" android:title="@string/pref_precise_repeat_title" android:summary="@string/pref_precise_repeat_summary" android:defaultValue="true"/>
|
||||
<CheckBoxPreference android:key="lock_double_tap" android:title="@string/pref_lock_double_tap_title" android:summary="@string/pref_lock_double_tap_summary" android:defaultValue="false"/>
|
||||
<PreferenceScreen android:title="@string/pref_lockable_keys_title" android:summary="@string/pref_lockable_keys_summary">
|
||||
<CheckBoxPreference android:key="lockable_shift" android:title="Shift" android:defaultValue="true"/>
|
||||
<CheckBoxPreference android:key="lockable_ctrl" android:title="Ctrl" android:defaultValue="false"/>
|
||||
<CheckBoxPreference android:key="lockable_alt" android:title="Alt" android:defaultValue="false"/>
|
||||
<CheckBoxPreference android:key="lockable_fn" android:title="Fn" android:defaultValue="false"/>
|
||||
|
148
srcs/juloo.keyboard2/Autocapitalisation.java
Normal file
148
srcs/juloo.keyboard2/Autocapitalisation.java
Normal file
@@ -0,0 +1,148 @@
|
||||
package juloo.keyboard2;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.text.InputType;
|
||||
import android.text.TextUtils;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputConnection;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
final class Autocapitalisation
|
||||
{
|
||||
boolean _enabled = false;
|
||||
boolean _should_enable_shift = false;
|
||||
boolean _should_disable_shift = false;
|
||||
boolean _should_update_caps_mode = false;
|
||||
|
||||
Handler _handler;
|
||||
InputConnection _ic;
|
||||
Callback _callback;
|
||||
int _caps_mode;
|
||||
|
||||
/** Keep track of the cursor to recognize cursor movements from typing. */
|
||||
int _cursor;
|
||||
|
||||
static int SUPPORTED_CAPS_MODES =
|
||||
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES |
|
||||
InputType.TYPE_TEXT_FLAG_CAP_WORDS;
|
||||
|
||||
public Autocapitalisation(Looper looper, Callback cb)
|
||||
{
|
||||
_handler = new Handler(looper);
|
||||
_callback = cb;
|
||||
}
|
||||
|
||||
/**
|
||||
* The events are: started, typed, event sent, selection updated
|
||||
* [started] does initialisation work and must be called before any other
|
||||
* event.
|
||||
*/
|
||||
public void started(EditorInfo info, InputConnection ic)
|
||||
{
|
||||
_ic = ic;
|
||||
_caps_mode = info.inputType & TextUtils.CAP_MODE_SENTENCES;
|
||||
if (!Config.globalConfig().autocapitalisation || _caps_mode == 0)
|
||||
{
|
||||
_enabled = false;
|
||||
return;
|
||||
}
|
||||
_enabled = true;
|
||||
_should_enable_shift = (info.initialCapsMode != 0);
|
||||
_callback.update_shift_state(_should_enable_shift, true);
|
||||
}
|
||||
|
||||
public void typed(CharSequence c)
|
||||
{
|
||||
for (int i = 0; i < c.length(); i++)
|
||||
type_one_char(c.charAt(i));
|
||||
callback(false);
|
||||
}
|
||||
|
||||
public void typed(char c)
|
||||
{
|
||||
type_one_char(c);
|
||||
callback(false);
|
||||
}
|
||||
|
||||
public void event_sent(int code, int meta)
|
||||
{
|
||||
if (meta != 0)
|
||||
{
|
||||
_should_enable_shift = false;
|
||||
_should_update_caps_mode = false;
|
||||
return;
|
||||
}
|
||||
switch (code)
|
||||
{
|
||||
case KeyEvent.KEYCODE_DEL:
|
||||
if (_cursor > 0) _cursor--;
|
||||
_should_update_caps_mode = true;
|
||||
break;
|
||||
}
|
||||
callback(true);
|
||||
}
|
||||
|
||||
public static interface Callback
|
||||
{
|
||||
public void update_shift_state(boolean should_enable, boolean should_disable);
|
||||
}
|
||||
|
||||
/** Returns [true] if shift might be disabled. */
|
||||
public void selection_updated(int old_cursor, int new_cursor)
|
||||
{
|
||||
if (new_cursor == _cursor) // Just typing
|
||||
return;
|
||||
if (new_cursor == 0 && _ic != null)
|
||||
{
|
||||
// Detect whether the input box has been cleared
|
||||
CharSequence t = _ic.getTextAfterCursor(1, 0);
|
||||
if (t != null && t.equals(""))
|
||||
_should_update_caps_mode = true;
|
||||
}
|
||||
_cursor = new_cursor;
|
||||
_should_enable_shift = false;
|
||||
callback(true);
|
||||
}
|
||||
|
||||
Runnable delayed_callback = new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
if (_should_update_caps_mode && _ic != null)
|
||||
{
|
||||
_should_enable_shift = _enabled && (_ic.getCursorCapsMode(_caps_mode) != 0);
|
||||
_should_update_caps_mode = false;
|
||||
}
|
||||
_callback.update_shift_state(_should_enable_shift, _should_disable_shift);
|
||||
}
|
||||
};
|
||||
|
||||
void callback(final boolean might_disable)
|
||||
{
|
||||
_should_disable_shift = might_disable;
|
||||
// The callback must be delayed because [getCursorCapsMode] would sometimes
|
||||
// be called before the editor finished handling the previous event.
|
||||
_handler.postDelayed(delayed_callback, 1);
|
||||
}
|
||||
|
||||
void type_one_char(char c)
|
||||
{
|
||||
_cursor++;
|
||||
if (is_trigger_character(c))
|
||||
_should_update_caps_mode = true;
|
||||
else
|
||||
_should_enable_shift = false;
|
||||
}
|
||||
|
||||
boolean is_trigger_character(char c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case ' ':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@@ -39,6 +39,7 @@ final class Config
|
||||
public float characterSize; // Ratio
|
||||
public int accents; // Values are R.values.pref_accents_v_*
|
||||
public int theme; // Values are R.style.*
|
||||
public boolean autocapitalisation;
|
||||
|
||||
// Dynamically set
|
||||
public boolean shouldOfferSwitchingToNextInputMethod;
|
||||
@@ -46,7 +47,8 @@ final class Config
|
||||
public String actionLabel; // Might be 'null'
|
||||
public int actionId; // Meaningful only when 'actionLabel' isn't 'null'
|
||||
public boolean swapEnterActionKey; // Swap the "enter" and "action" keys
|
||||
public Set<KeyValue> extra_keys; // 'null' means all the keys
|
||||
public Set<KeyValue> extra_keys_subtype;
|
||||
public Set<KeyValue> extra_keys_param;
|
||||
|
||||
public final IKeyEventHandler handler;
|
||||
|
||||
@@ -80,7 +82,7 @@ final class Config
|
||||
actionLabel = null;
|
||||
actionId = 0;
|
||||
swapEnterActionKey = false;
|
||||
extra_keys = null;
|
||||
extra_keys_subtype = null;
|
||||
handler = h;
|
||||
}
|
||||
|
||||
@@ -133,7 +135,8 @@ final class Config
|
||||
+ res.getDimension(R.dimen.extra_horizontal_margin);
|
||||
preciseRepeat = prefs.getBoolean("precise_repeat", preciseRepeat);
|
||||
lockable_modifiers.clear();
|
||||
if (prefs.getBoolean("lockable_shift", true)) lockable_modifiers.add(KeyValue.Modifier.SHIFT);
|
||||
if (prefs.getBoolean("lock_double_tap", false))
|
||||
lockable_modifiers.add(KeyValue.Modifier.SHIFT);
|
||||
if (prefs.getBoolean("lockable_ctrl", false)) lockable_modifiers.add(KeyValue.Modifier.CTRL);
|
||||
if (prefs.getBoolean("lockable_alt", false)) lockable_modifiers.add(KeyValue.Modifier.ALT);
|
||||
if (prefs.getBoolean("lockable_fn", false)) lockable_modifiers.add(KeyValue.Modifier.FN);
|
||||
@@ -146,6 +149,8 @@ final class Config
|
||||
* characterSizeScale;
|
||||
accents = Integer.valueOf(prefs.getString("accents", "1"));
|
||||
theme = getThemeId(res, prefs.getString("theme", ""));
|
||||
autocapitalisation = prefs.getBoolean("autocapitalisation", true);
|
||||
extra_keys_param = ExtraKeyCheckBoxPreference.get_extra_keys(prefs);
|
||||
}
|
||||
|
||||
/** Update the layout according to the configuration.
|
||||
@@ -161,7 +166,9 @@ final class Config
|
||||
KeyValue.getKeyByName("action").withSymbol(actionLabel);
|
||||
// Extra keys are removed from the set as they are encountered during the
|
||||
// first iteration then automatically added.
|
||||
final Set<KeyValue> extra_keys = new HashSet<KeyValue>(this.extra_keys);
|
||||
final Set<KeyValue> extra_keys = new HashSet<KeyValue>();
|
||||
extra_keys.addAll(extra_keys_subtype);
|
||||
extra_keys.addAll(extra_keys_param);
|
||||
KeyboardData kw = original_kw.mapKeys(new KeyboardData.MapKeyValues() {
|
||||
public KeyValue apply(KeyValue key, boolean localized)
|
||||
{
|
||||
@@ -221,6 +228,7 @@ final class Config
|
||||
case "light": return R.style.Light;
|
||||
case "black": return R.style.Black;
|
||||
case "dark": return R.style.Dark;
|
||||
case "white": return R.style.White;
|
||||
default:
|
||||
case "system":
|
||||
if (Build.VERSION.SDK_INT >= 8)
|
||||
@@ -238,35 +246,32 @@ final class Config
|
||||
switch (name)
|
||||
{
|
||||
case "azerty": return R.xml.azerty;
|
||||
case "bangla": return R.xml.bangla;
|
||||
case "hindi": return R.xml.hindi;
|
||||
case "bgph1": return R.xml.local_bgph1;
|
||||
case "bone": return R.xml.bone;
|
||||
case "colemak": return R.xml.colemak;
|
||||
case "dvorak": return R.xml.dvorak;
|
||||
case "neo2": return R.xml.neo2;
|
||||
case "qwerty_es": return R.xml.qwerty_es;
|
||||
case "qwerty_el": return R.xml.qwerty_el;
|
||||
case "qwerty_hu": return R.xml.qwerty_hu;
|
||||
case "qwerty_ko": return R.xml.qwerty_ko;
|
||||
case "qwerty_lv": return R.xml.qwerty_lv;
|
||||
case "qwerty_pt": return R.xml.qwerty_pt;
|
||||
case "qwerty_tr": return R.xml.qwerty_tr;
|
||||
case "qwerty": return R.xml.qwerty;
|
||||
case "qwerty_no": return R.xml.qwerty_no;
|
||||
case "qwerty_sv_se": return R.xml.qwerty_sv_se;
|
||||
case "qwertz_hu": return R.xml.qwertz_hu;
|
||||
case "qwertz_cs": return R.xml.qwertz_cs;
|
||||
case "qwertz": return R.xml.qwertz;
|
||||
case "ru_jcuken": return R.xml.local_ru_jcuken;
|
||||
case "jcuken_ua": return R.xml.jcuken_ua;
|
||||
default: return R.xml.qwerty; // The config might store an invalid layout, don't crash
|
||||
}
|
||||
}
|
||||
|
||||
public static int themeId_of_string(String name)
|
||||
{
|
||||
switch (name)
|
||||
{
|
||||
case "light": return R.style.Light;
|
||||
case "black": return R.style.Black;
|
||||
default: case "dark": return R.style.Dark;
|
||||
}
|
||||
}
|
||||
|
||||
private static Config _globalConfig = null;
|
||||
|
||||
public static void initGlobalConfig(Context context, IKeyEventHandler handler)
|
||||
|
@@ -18,7 +18,7 @@ public class EmojiKeyButton extends Button
|
||||
_key = (key_name == null) ? null : KeyValue.getKeyByName(key_name);
|
||||
setText(_key.getString());
|
||||
if (_key.hasFlags(KeyValue.FLAG_KEY_FONT))
|
||||
setTypeface(Theme.getSpecialKeyFont(context));
|
||||
setTypeface(Theme.getKeyFont(context));
|
||||
}
|
||||
|
||||
public void onClick(View v)
|
||||
|
89
srcs/juloo.keyboard2/ExtraKeyCheckBoxPreference.java
Normal file
89
srcs/juloo.keyboard2/ExtraKeyCheckBoxPreference.java
Normal file
@@ -0,0 +1,89 @@
|
||||
package juloo.keyboard2;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class ExtraKeyCheckBoxPreference extends CheckBoxPreference
|
||||
{
|
||||
public static String[] extra_keys = new String[]
|
||||
{
|
||||
"alt",
|
||||
"meta",
|
||||
"accent_aigu",
|
||||
"accent_grave",
|
||||
"accent_double_aigu",
|
||||
"accent_dot_above",
|
||||
"accent_circonflexe",
|
||||
"accent_tilde",
|
||||
"accent_cedille",
|
||||
"accent_trema",
|
||||
"accent_ring",
|
||||
"accent_caron",
|
||||
"accent_macron",
|
||||
"accent_ogonek",
|
||||
"accent_breve",
|
||||
"€",
|
||||
"ß",
|
||||
"£",
|
||||
"switch_greekmath",
|
||||
};
|
||||
|
||||
public static boolean default_checked(String name)
|
||||
{
|
||||
switch (name)
|
||||
{
|
||||
case "alt":
|
||||
case "meta":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
boolean _key_font;
|
||||
|
||||
public ExtraKeyCheckBoxPreference(Context context, AttributeSet attrs)
|
||||
{
|
||||
super(context, attrs);
|
||||
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ExtraKeyCheckBoxPreference);
|
||||
int index = a.getInteger(R.styleable.ExtraKeyCheckBoxPreference_index, 0);
|
||||
a.recycle();
|
||||
String key_name = extra_keys[index];
|
||||
setKey(pref_key_of_key_name(key_name));
|
||||
setDefaultValue(default_checked(key_name));
|
||||
KeyValue kv = KeyValue.getKeyByName(key_name);
|
||||
setTitle(kv.getString());
|
||||
_key_font = kv.hasFlags(KeyValue.FLAG_KEY_FONT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBindView(View view)
|
||||
{
|
||||
super.onBindView(view);
|
||||
TextView title = (TextView)view.findViewById(android.R.id.title);
|
||||
title.setTypeface(_key_font ? Theme.getKeyFont(getContext()) : null);
|
||||
}
|
||||
|
||||
static String pref_key_of_key_name(String key_name)
|
||||
{
|
||||
return "extra_key_" + key_name;
|
||||
}
|
||||
|
||||
public static Set<KeyValue> get_extra_keys(SharedPreferences prefs)
|
||||
{
|
||||
HashSet<KeyValue> ks = new HashSet<KeyValue>();
|
||||
for (String key_name : extra_keys)
|
||||
{
|
||||
if (prefs.getBoolean(pref_key_of_key_name(key_name), default_checked(key_name)))
|
||||
ks.add(KeyValue.getKeyByName(key_name));
|
||||
}
|
||||
return ks;
|
||||
}
|
||||
}
|
@@ -34,6 +34,7 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
case CHANGE_METHOD: _recv.switchToNextInputMethod(); break;
|
||||
case ACTION: _recv.performAction(); break;
|
||||
case SWITCH_PROGRAMMING: _recv.switchProgramming(); break;
|
||||
case SWITCH_GREEKMATH: _recv.switchGreekmath(); break;
|
||||
}
|
||||
break;
|
||||
case Keyevent:
|
||||
@@ -105,6 +106,7 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
public void switchMain();
|
||||
public void switchNumeric();
|
||||
public void switchProgramming();
|
||||
public void switchGreekmath();
|
||||
|
||||
public void sendKeyEvent(int eventAction, int eventCode, int meta);
|
||||
|
||||
|
@@ -50,6 +50,7 @@ class KeyModifier
|
||||
case MACRON: return apply_dead_char(k, '\u00AF');
|
||||
case OGONEK: return apply_dead_char(k, '\u02DB');
|
||||
case DOT_ABOVE: return apply_dead_char(k, '\u02D9');
|
||||
case BREVE: return apply_dead_char(k, '\u02D8');
|
||||
case DOUBLE_AIGU: return apply_map_char(k, map_char_double_aigu);
|
||||
case ORDINAL: return apply_map_char(k, map_char_ordinal);
|
||||
case SUPERSCRIPT: return apply_map_char(k, map_char_superscript);
|
||||
@@ -119,6 +120,7 @@ class KeyModifier
|
||||
{
|
||||
case Char: name = apply_fn_char(k.getChar()); break;
|
||||
case Keyevent: name = apply_fn_keyevent(k.getKeyevent()); break;
|
||||
case Event: name = apply_fn_event(k.getEvent()); break;
|
||||
case String:
|
||||
switch (k.getString())
|
||||
{
|
||||
@@ -143,6 +145,16 @@ class KeyModifier
|
||||
case KeyEvent.KEYCODE_DPAD_LEFT: return "home";
|
||||
case KeyEvent.KEYCODE_DPAD_RIGHT: return "end";
|
||||
case KeyEvent.KEYCODE_ESCAPE: return "insert";
|
||||
case KeyEvent.KEYCODE_TAB: return "\\t";
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static String apply_fn_event(KeyValue.Event ev)
|
||||
{
|
||||
switch (ev)
|
||||
{
|
||||
case SWITCH_NUMERIC: return "switch_greekmath";
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
@@ -185,6 +197,7 @@ class KeyModifier
|
||||
case ',': return "·";
|
||||
case '!': return "¡";
|
||||
case '?': return "¿";
|
||||
// arrows
|
||||
case '↖': return "⇖";
|
||||
case '↑': return "⇑";
|
||||
case '↗': return "⇗";
|
||||
@@ -193,6 +206,8 @@ class KeyModifier
|
||||
case '↙': return "⇙";
|
||||
case '↓': return "⇓";
|
||||
case '↘': return "⇘";
|
||||
case '↔': return "⇔";
|
||||
case '↕': return "⇕";
|
||||
// Currency symbols
|
||||
case 'e': return "€";
|
||||
case 'l': return "£";
|
||||
@@ -201,7 +216,33 @@ class KeyModifier
|
||||
case 'c': return "¢";
|
||||
case 'p': return "₱";
|
||||
case '€': case '£': return "removed"; // Avoid showing these twice
|
||||
case '\t': return "\\t";
|
||||
// alternating greek letters
|
||||
case 'π': return "ϖ";
|
||||
case 'θ': return "ϑ";
|
||||
case 'Θ': return "ϴ";
|
||||
case 'ε': return "ϵ";
|
||||
case 'β': return "ϐ";
|
||||
case 'ρ': return "ϱ";
|
||||
case 'σ': return "ς";
|
||||
case 'γ': return "ɣ";
|
||||
case 'φ': return "ϕ";
|
||||
case 'υ': return "ϒ";
|
||||
case 'κ': return "ϰ";
|
||||
// alternating math characters
|
||||
case '∪': return "⋃";
|
||||
case '∩': return "⋂";
|
||||
case '∃': return "∄";
|
||||
case '∈': return "∉";
|
||||
case '∫': return "∮";
|
||||
case 'Π': return "∏";
|
||||
case 'Σ': return "∑";
|
||||
case '∨': return "⋁";
|
||||
case '∧': return "⋀";
|
||||
case '⊷': return "⊶";
|
||||
case '⊂': return "⊆";
|
||||
case '⊃': return "⊇";
|
||||
case '±': return "∓";
|
||||
// other
|
||||
case ' ': return "nbsp";
|
||||
default: return null;
|
||||
}
|
||||
@@ -313,6 +354,11 @@ class KeyModifier
|
||||
case '┐': return '╗';
|
||||
case '─': return '═';
|
||||
case '│': return '║';
|
||||
case 'ß': return 'ẞ';
|
||||
/* In Turkish, upper case of 'iı' is 'İI' but Java's toUpperCase will
|
||||
return 'II'. To make 'İ' accessible, make it the shift of 'ı'. This
|
||||
has the inconvenient of swapping i and ı on the keyboard. */
|
||||
case 'ı': return 'İ';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
|
@@ -15,7 +15,8 @@ final class KeyValue
|
||||
SWITCH_BACK_EMOJI,
|
||||
CHANGE_METHOD,
|
||||
ACTION,
|
||||
SWITCH_PROGRAMMING
|
||||
SWITCH_PROGRAMMING,
|
||||
SWITCH_GREEKMATH
|
||||
}
|
||||
|
||||
// Must be evaluated in the reverse order of their values.
|
||||
@@ -44,7 +45,8 @@ final class KeyValue
|
||||
BOX,
|
||||
OGONEK,
|
||||
SLASH,
|
||||
ARROW_RIGHT
|
||||
ARROW_RIGHT,
|
||||
BREVE
|
||||
}
|
||||
|
||||
// Behavior flags.
|
||||
@@ -58,6 +60,7 @@ final class KeyValue
|
||||
public static final int FLAG_SMALLER_FONT = (1 << 25);
|
||||
// Used by [Pointers].
|
||||
public static final int FLAG_LOCKED = (1 << 26);
|
||||
public static final int FLAG_FAKE_PTR = (1 << 27);
|
||||
|
||||
// Kinds
|
||||
public static final int KIND_CHAR = (0 << 29);
|
||||
@@ -221,6 +224,11 @@ final class KeyValue
|
||||
FLAG_LATCH | FLAG_SPECIAL | extra_flags);
|
||||
}
|
||||
|
||||
private static void addDiacritic(String name, int special_font_symbol, Modifier m)
|
||||
{
|
||||
addModifierKey(name, String.valueOf((char)special_font_symbol), m, FLAG_KEY_FONT);
|
||||
}
|
||||
|
||||
private static void addEventKey(String name, String symbol, Event e, int flags)
|
||||
{
|
||||
addKey(name, symbol, KIND_EVENT, e.ordinal(), flags | FLAG_SPECIAL);
|
||||
@@ -247,21 +255,21 @@ final class KeyValue
|
||||
Modifier.SHIFT, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addModifierKey("ctrl", "Ctrl", Modifier.CTRL, FLAG_SMALLER_FONT);
|
||||
addModifierKey("alt", "Alt", Modifier.ALT, FLAG_SMALLER_FONT);
|
||||
addModifierKey("accent_aigu", "\u0050", Modifier.AIGU, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_caron", "\u0051", Modifier.CARON, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_cedille", "\u0052", Modifier.CEDILLE, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_circonflexe", "\u0053", Modifier.CIRCONFLEXE, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_grave", "\u0054", Modifier.GRAVE, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_macron", "\u0055", Modifier.MACRON, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_ring", "\u0056", Modifier.RING, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_tilde", "\u0057", Modifier.TILDE, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_trema", "\u0058", Modifier.TREMA, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_ogonek", "\u0059", Modifier.OGONEK, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_dot_above", "\u005a", Modifier.DOT_ABOVE, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_double_aigu", "\u005b", Modifier.DOUBLE_AIGU, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_slash", "\134", // Can't write u005c
|
||||
Modifier.SLASH, FLAG_KEY_FONT);
|
||||
addModifierKey("accent_arrow_right", "\u005d", Modifier.ARROW_RIGHT, FLAG_KEY_FONT);
|
||||
addDiacritic("accent_aigu", 0x50, Modifier.AIGU);
|
||||
addDiacritic("accent_caron", 0x51, Modifier.CARON);
|
||||
addDiacritic("accent_cedille", 0x52, Modifier.CEDILLE);
|
||||
addDiacritic("accent_circonflexe", 0x53, Modifier.CIRCONFLEXE);
|
||||
addDiacritic("accent_grave", 0x54, Modifier.GRAVE);
|
||||
addDiacritic("accent_macron", 0x55, Modifier.MACRON);
|
||||
addDiacritic("accent_ring", 0x56, Modifier.RING);
|
||||
addDiacritic("accent_tilde", 0x57, Modifier.TILDE);
|
||||
addDiacritic("accent_trema", 0x58, Modifier.TREMA);
|
||||
addDiacritic("accent_ogonek", 0x59, Modifier.OGONEK);
|
||||
addDiacritic("accent_dot_above", 0x5A, Modifier.DOT_ABOVE);
|
||||
addDiacritic("accent_double_aigu", 0x5B, Modifier.DOUBLE_AIGU);
|
||||
addDiacritic("accent_slash", 0x5C, Modifier.SLASH);
|
||||
addDiacritic("accent_arrow_right", 0x5D, Modifier.ARROW_RIGHT);
|
||||
addDiacritic("accent_breve", 0x5E, Modifier.BREVE);
|
||||
addModifierKey("superscript", "Sup", Modifier.SUPERSCRIPT, FLAG_SMALLER_FONT);
|
||||
addModifierKey("subscript", "Sub", Modifier.SUBSCRIPT, FLAG_SMALLER_FONT);
|
||||
addModifierKey("ordinal", "Ord", Modifier.ORDINAL, FLAG_SMALLER_FONT);
|
||||
@@ -276,6 +284,7 @@ final class KeyValue
|
||||
addEventKey("switch_emoji", "\u0001" , Event.SWITCH_EMOJI, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addEventKey("switch_back_emoji", "ABC", Event.SWITCH_BACK_EMOJI, 0);
|
||||
addEventKey("switch_programming", "Prog", Event.SWITCH_PROGRAMMING, FLAG_SMALLER_FONT);
|
||||
addEventKey("switch_greekmath", "πλ∇¬", Event.SWITCH_GREEKMATH, FLAG_SMALLER_FONT);
|
||||
addEventKey("change_method", "\u0009", Event.CHANGE_METHOD, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addEventKey("action", "Action", Event.ACTION, FLAG_SMALLER_FONT); // Will always be replaced
|
||||
|
||||
|
@@ -26,7 +26,8 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class Keyboard2 extends InputMethodService
|
||||
implements SharedPreferences.OnSharedPreferenceChangeListener
|
||||
implements SharedPreferences.OnSharedPreferenceChangeListener,
|
||||
Autocapitalisation.Callback
|
||||
{
|
||||
static private final String TAG = "Keyboard2";
|
||||
|
||||
@@ -35,6 +36,7 @@ public class Keyboard2 extends InputMethodService
|
||||
private ViewGroup _emojiPane = null;
|
||||
|
||||
private Config _config;
|
||||
private Autocapitalisation _autocap;
|
||||
|
||||
private boolean _debug_logs = false;
|
||||
|
||||
@@ -55,6 +57,15 @@ public class Keyboard2 extends InputMethodService
|
||||
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
|
||||
_keyboardView.reset();
|
||||
_debug_logs = getResources().getBoolean(R.bool.debug_logs);
|
||||
_autocap = new Autocapitalisation(getMainLooper(), this);
|
||||
}
|
||||
|
||||
public void update_shift_state(boolean should_enable, boolean should_disable)
|
||||
{
|
||||
if (should_enable)
|
||||
_keyboardView.set_shift_state(true);
|
||||
else if (should_disable)
|
||||
_keyboardView.set_shift_state(false);
|
||||
}
|
||||
|
||||
private List<InputMethodSubtype> getEnabledSubtypes(InputMethodManager imm)
|
||||
@@ -108,7 +119,7 @@ public class Keyboard2 extends InputMethodService
|
||||
case 4: break;
|
||||
default: throw new IllegalArgumentException();
|
||||
}
|
||||
_config.extra_keys = extra_keys;
|
||||
_config.extra_keys_subtype = extra_keys;
|
||||
if (enabled_subtypes.size() > 1)
|
||||
_config.shouldOfferSwitchingToNextInputMethod = true;
|
||||
}
|
||||
@@ -118,8 +129,8 @@ public class Keyboard2 extends InputMethodService
|
||||
// Fallback for the accents option: Only respect the "None" case
|
||||
switch (_config.accents)
|
||||
{
|
||||
case 1: case 2: case 3: _config.extra_keys = null; break;
|
||||
case 4: _config.extra_keys = new HashSet<KeyValue>(); break;
|
||||
case 1: case 2: case 3: _config.extra_keys_subtype = null; break;
|
||||
case 4: _config.extra_keys_subtype = new HashSet<KeyValue>(); break;
|
||||
}
|
||||
// Fallback for the layout option: Use qwerty in the "system settings" case
|
||||
_currentTextLayout = (_config.layout == -1) ? R.xml.qwerty : _config.layout;
|
||||
@@ -137,8 +148,16 @@ public class Keyboard2 extends InputMethodService
|
||||
else
|
||||
{
|
||||
InputMethodSubtype subtype = imm.getCurrentInputMethodSubtype();
|
||||
refreshSubtypeLayout(subtype);
|
||||
refreshAccentsOption(imm, subtype);
|
||||
if (subtype == null)
|
||||
{
|
||||
// On some rare cases, [subtype] is null.
|
||||
refreshSubtypeLegacyFallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
refreshSubtypeLayout(subtype);
|
||||
refreshAccentsOption(imm, subtype);
|
||||
}
|
||||
}
|
||||
_config.shouldOfferSwitchingToProgramming =
|
||||
_config.programming_layout != -1 &&
|
||||
@@ -163,7 +182,7 @@ public class Keyboard2 extends InputMethodService
|
||||
return getResources().getString(res);
|
||||
}
|
||||
|
||||
private void refreshEditorInfo(EditorInfo info)
|
||||
private void refresh_action_label(EditorInfo info)
|
||||
{
|
||||
// First try to look at 'info.actionLabel', if it isn't set, look at
|
||||
// 'imeOptions'.
|
||||
@@ -210,11 +229,12 @@ public class Keyboard2 extends InputMethodService
|
||||
public void onStartInputView(EditorInfo info, boolean restarting)
|
||||
{
|
||||
refreshConfig();
|
||||
refreshEditorInfo(info);
|
||||
refresh_action_label(info);
|
||||
if ((info.inputType & InputType.TYPE_CLASS_NUMBER) != 0)
|
||||
_keyboardView.setKeyboard(getLayout(R.xml.numeric));
|
||||
else
|
||||
_keyboardView.setKeyboard(getLayout(_currentTextLayout));
|
||||
_autocap.started(info, getCurrentInputConnection());
|
||||
setInputView(_keyboardView);
|
||||
if (_debug_logs)
|
||||
log_editor_info(info);
|
||||
@@ -236,6 +256,13 @@ public class Keyboard2 extends InputMethodService
|
||||
_keyboardView.setKeyboard(getLayout(_currentTextLayout));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd)
|
||||
{
|
||||
super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd, candidatesStart, candidatesEnd);
|
||||
_autocap.selection_updated(oldSelStart, newSelStart);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinishInputView(boolean finishingInput)
|
||||
{
|
||||
@@ -249,6 +276,13 @@ public class Keyboard2 extends InputMethodService
|
||||
refreshConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onEvaluateFullscreenMode()
|
||||
{
|
||||
/* Entirely disable fullscreen mode. */
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Not static */
|
||||
public class Receiver implements KeyEventHandler.IReceiver
|
||||
{
|
||||
@@ -290,6 +324,11 @@ public class Keyboard2 extends InputMethodService
|
||||
_keyboardView.setKeyboard(getLayout(R.xml.numeric));
|
||||
}
|
||||
|
||||
public void switchGreekmath()
|
||||
{
|
||||
_keyboardView.setKeyboard(getLayout(R.xml.greekmath));
|
||||
}
|
||||
|
||||
public void switchProgramming()
|
||||
{
|
||||
if (_config.programming_layout == -1)
|
||||
@@ -313,6 +352,8 @@ public class Keyboard2 extends InputMethodService
|
||||
if (conn == null)
|
||||
return;
|
||||
conn.sendKeyEvent(new KeyEvent(1, 1, eventAction, eventCode, 0, meta));
|
||||
if (eventAction == KeyEvent.ACTION_UP)
|
||||
_autocap.event_sent(eventCode, meta);
|
||||
}
|
||||
|
||||
public void showKeyboardConfig()
|
||||
@@ -325,11 +366,13 @@ public class Keyboard2 extends InputMethodService
|
||||
public void commitText(String text)
|
||||
{
|
||||
getCurrentInputConnection().commitText(text, 1);
|
||||
_autocap.typed(text);
|
||||
}
|
||||
|
||||
public void commitChar(char c)
|
||||
{
|
||||
sendKeyChar(c);
|
||||
_autocap.typed(c);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -19,6 +19,8 @@ public class Keyboard2View extends View
|
||||
implements View.OnTouchListener, Pointers.IPointerEventHandler
|
||||
{
|
||||
private KeyboardData _keyboard;
|
||||
private KeyValue _shift_kv;
|
||||
private KeyboardData.Key _shift_key;
|
||||
|
||||
private Pointers _pointers;
|
||||
|
||||
@@ -79,6 +81,13 @@ public class Keyboard2View extends View
|
||||
public void setKeyboard(KeyboardData kw)
|
||||
{
|
||||
_keyboard = _config.modify_layout(kw);
|
||||
_shift_kv = KeyValue.getKeyByName("shift");
|
||||
_shift_key = _keyboard.findKeyWithValue(_shift_kv);
|
||||
if (_shift_key == null)
|
||||
{
|
||||
_shift_kv = _shift_kv.withFlags(_shift_kv.getFlags() | KeyValue.FLAG_LOCK);
|
||||
_shift_key = _keyboard.findKeyWithValue(_shift_kv);
|
||||
}
|
||||
reset();
|
||||
}
|
||||
|
||||
@@ -90,6 +99,18 @@ public class Keyboard2View extends View
|
||||
invalidate();
|
||||
}
|
||||
|
||||
/** Called by auto-capitalisation. */
|
||||
public void set_shift_state(boolean state)
|
||||
{
|
||||
if (_keyboard == null || _shift_key == null)
|
||||
return;
|
||||
if (state)
|
||||
_pointers.add_fake_pointer(_shift_kv, _shift_key);
|
||||
else
|
||||
_pointers.remove_fake_pointer(_shift_kv, _shift_key);
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public KeyValue modifyKey(KeyValue k, Pointers.Modifiers mods)
|
||||
{
|
||||
return KeyModifier.modify(k, mods);
|
||||
@@ -112,9 +133,11 @@ public class Keyboard2View extends View
|
||||
_config.handler.handleKeyUp(k, mods);
|
||||
}
|
||||
|
||||
public void onPointerFlagsChanged()
|
||||
public void onPointerFlagsChanged(boolean shouldVibrate)
|
||||
{
|
||||
invalidate();
|
||||
if (shouldVibrate)
|
||||
vibrate();
|
||||
}
|
||||
|
||||
private void updateFlags()
|
||||
|
@@ -40,9 +40,26 @@ class KeyboardData
|
||||
addExtraKeys_to_row(rows, k, 1, 3);
|
||||
addExtraKeys_to_row(rows, k, 2, 2);
|
||||
addExtraKeys_to_row(rows, k, 2, 1);
|
||||
if (k.hasNext())
|
||||
{
|
||||
for (int r = 0; r < rows.size(); r++)
|
||||
for (int c = 1; c <= 4; c++)
|
||||
addExtraKeys_to_row(rows, k, r, c);
|
||||
}
|
||||
return new KeyboardData(rows, keysWidth, extra_keys);
|
||||
}
|
||||
|
||||
public Key findKeyWithValue(KeyValue kv)
|
||||
{
|
||||
for (Row r : rows)
|
||||
{
|
||||
Key k = r.findKeyWithValue(kv);
|
||||
if (k != null)
|
||||
return k;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void addExtraKeys_to_row(ArrayList<Row> rows, final Iterator<KeyValue> extra_keys, int row_i, final int d)
|
||||
{
|
||||
if (!extra_keys.hasNext())
|
||||
@@ -168,6 +185,14 @@ class KeyboardData
|
||||
public Key apply(Key k) { return k.scaleWidth(s); }
|
||||
});
|
||||
}
|
||||
|
||||
public Key findKeyWithValue(KeyValue kv)
|
||||
{
|
||||
for (Key k : keys)
|
||||
if (k.hasValue(kv))
|
||||
return k;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Key
|
||||
@@ -291,6 +316,17 @@ class KeyboardData
|
||||
}
|
||||
return (c == null) ? null : c.kv;
|
||||
}
|
||||
|
||||
public boolean hasValue(KeyValue kv)
|
||||
{
|
||||
return (hasValue(key0, kv) || hasValue(key1, kv) || hasValue(key2, kv) ||
|
||||
hasValue(key3, kv) || hasValue(key4, kv));
|
||||
}
|
||||
|
||||
private static boolean hasValue(Corner c, KeyValue kv)
|
||||
{
|
||||
return (c != null && c.kv.equals(kv));
|
||||
}
|
||||
}
|
||||
|
||||
public static final class Corner
|
||||
|
@@ -74,6 +74,24 @@ public final class Pointers implements Handler.Callback
|
||||
return -1;
|
||||
}
|
||||
|
||||
/** Fake pointers are latched and not lockable. */
|
||||
public void add_fake_pointer(KeyValue kv, KeyboardData.Key key)
|
||||
{
|
||||
// Avoid adding a fake pointer to a key that is already down.
|
||||
if (isKeyDown(key))
|
||||
return;
|
||||
Pointer ptr = new Pointer(-1, key, kv, 0.f, 0.f, Modifiers.EMPTY);
|
||||
ptr.flags = ptr.flags & ~(KeyValue.FLAG_LATCH | KeyValue.FLAG_LOCK | KeyValue.FLAG_FAKE_PTR);
|
||||
_ptrs.add(ptr);
|
||||
}
|
||||
|
||||
public void remove_fake_pointer(KeyValue kv, KeyboardData.Key key)
|
||||
{
|
||||
Pointer ptr = getLatched(key, kv);
|
||||
if (ptr != null && (ptr.flags & KeyValue.FLAG_FAKE_PTR) != 0)
|
||||
removePtr(ptr);
|
||||
}
|
||||
|
||||
// Receiving events
|
||||
|
||||
public void onTouchUp(int pointerId)
|
||||
@@ -86,11 +104,8 @@ public final class Pointers implements Handler.Callback
|
||||
if (latched != null) // Already latched
|
||||
{
|
||||
removePtr(ptr); // Remove dupplicate
|
||||
if ((latched.flags & KeyValue.FLAG_LOCK) != 0) // Locking key, toggle lock
|
||||
{
|
||||
latched.flags = (latched.flags & ~KeyValue.FLAG_LOCK) | KeyValue.FLAG_LOCKED;
|
||||
_handler.onPointerFlagsChanged();
|
||||
}
|
||||
if ((latched.flags & KeyValue.FLAG_LOCK) != 0) // Toggle lockable key
|
||||
lockPointer(latched, false);
|
||||
else // Otherwise, unlatch
|
||||
{
|
||||
removePtr(latched);
|
||||
@@ -101,7 +116,7 @@ public final class Pointers implements Handler.Callback
|
||||
{
|
||||
ptr.flags &= ~KeyValue.FLAG_LATCH;
|
||||
ptr.pointerId = -1; // Latch
|
||||
_handler.onPointerFlagsChanged();
|
||||
_handler.onPointerFlagsChanged(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -118,7 +133,7 @@ public final class Pointers implements Handler.Callback
|
||||
return;
|
||||
stopKeyRepeat(ptr);
|
||||
removePtr(ptr);
|
||||
_handler.onPointerFlagsChanged();
|
||||
_handler.onPointerFlagsChanged(true);
|
||||
}
|
||||
|
||||
/* Whether an other pointer is down on a non-special key. */
|
||||
@@ -143,8 +158,7 @@ public final class Pointers implements Handler.Callback
|
||||
KeyValue value = handleKV(key.key0, mods);
|
||||
Pointer ptr = new Pointer(pointerId, key, value, x, y, mods);
|
||||
_ptrs.add(ptr);
|
||||
if (value != null && !value.hasFlags(KeyValue.FLAG_SPECIAL))
|
||||
startKeyRepeat(ptr);
|
||||
startKeyRepeat(ptr);
|
||||
_handler.onPointerDown(false);
|
||||
}
|
||||
|
||||
@@ -163,7 +177,7 @@ public final class Pointers implements Handler.Callback
|
||||
KeyValue k;
|
||||
for (int i = 0; i > -3; i = (~i>>31) - i)
|
||||
{
|
||||
int d = Math.floorMod(direction + i - 1, 8) + 1;
|
||||
int d = (direction + i + 8 - 1) % 8 + 1;
|
||||
// Don't make the difference between a key that doesn't exist and a key
|
||||
// that is removed by [_handler]. Triggers side effects.
|
||||
k = _handler.modifyKey(ptr.key.getAtDirection(d), ptr.modifiers);
|
||||
@@ -227,8 +241,7 @@ public final class Pointers implements Handler.Callback
|
||||
if ((old_flags & ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) == 0)
|
||||
{
|
||||
stopKeyRepeat(ptr);
|
||||
if ((ptr.flags & KeyValue.FLAG_SPECIAL) == 0)
|
||||
startKeyRepeat(ptr);
|
||||
startKeyRepeat(ptr);
|
||||
}
|
||||
_handler.onPointerDown(true);
|
||||
}
|
||||
@@ -252,8 +265,11 @@ public final class Pointers implements Handler.Callback
|
||||
|
||||
private Pointer getLatched(Pointer target)
|
||||
{
|
||||
KeyboardData.Key k = target.key;
|
||||
KeyValue v = target.value;
|
||||
return getLatched(target.key, target.value);
|
||||
}
|
||||
|
||||
private Pointer getLatched(KeyboardData.Key k, KeyValue v)
|
||||
{
|
||||
if (v == null)
|
||||
return null;
|
||||
for (Pointer p : _ptrs)
|
||||
@@ -270,12 +286,19 @@ public final class Pointers implements Handler.Callback
|
||||
// Latched and not locked, remove
|
||||
if (ptr.pointerId == -1 && (ptr.flags & KeyValue.FLAG_LOCKED) == 0)
|
||||
_ptrs.remove(i);
|
||||
// Not latched but pressed, don't latch once released
|
||||
// Not latched but pressed, don't latch once released and stop long press.
|
||||
else if ((ptr.flags & KeyValue.FLAG_LATCH) != 0)
|
||||
ptr.flags &= ~KeyValue.FLAG_LATCH;
|
||||
}
|
||||
}
|
||||
|
||||
/** Make a pointer into the locked state. */
|
||||
private void lockPointer(Pointer ptr, boolean shouldVibrate)
|
||||
{
|
||||
ptr.flags = (ptr.flags & ~KeyValue.FLAG_LOCK) | KeyValue.FLAG_LOCKED;
|
||||
_handler.onPointerFlagsChanged(shouldVibrate);
|
||||
}
|
||||
|
||||
private boolean isModulatedKeyPressed()
|
||||
{
|
||||
for (Pointer ptr : _ptrs)
|
||||
@@ -296,26 +319,33 @@ public final class Pointers implements Handler.Callback
|
||||
{
|
||||
if (ptr.timeoutWhat == msg.what)
|
||||
{
|
||||
long nextInterval = _config.longPressInterval;
|
||||
if (_config.preciseRepeat && (ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
|
||||
{
|
||||
// Slower repeat for modulated keys
|
||||
nextInterval *= 2;
|
||||
// Modulate repeat interval depending on the distance of the pointer
|
||||
nextInterval = (long)((float)nextInterval / modulatePreciseRepeat(ptr));
|
||||
}
|
||||
_keyrepeat_handler.sendEmptyMessageDelayed(msg.what, nextInterval);
|
||||
_handler.onPointerHold(ptr.value, ptr.modifiers);
|
||||
return (true);
|
||||
if (handleKeyRepeat(ptr))
|
||||
_keyrepeat_handler.sendEmptyMessageDelayed(msg.what, nextRepeatInterval(ptr));
|
||||
else
|
||||
ptr.timeoutWhat = -1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return (false);
|
||||
return false;
|
||||
}
|
||||
|
||||
private long nextRepeatInterval(Pointer ptr)
|
||||
{
|
||||
long t = _config.longPressInterval;
|
||||
if (_config.preciseRepeat && (ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
|
||||
{
|
||||
// Modulate repeat interval depending on the distance of the pointer
|
||||
t = (long)((float)t * 2.f / modulatePreciseRepeat(ptr));
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
private static int uniqueTimeoutWhat = 0;
|
||||
|
||||
private void startKeyRepeat(Pointer ptr)
|
||||
{
|
||||
if (ptr.value == null)
|
||||
return;
|
||||
int what = (uniqueTimeoutWhat++);
|
||||
ptr.timeoutWhat = what;
|
||||
long timeout = _config.longPressTimeout;
|
||||
@@ -335,6 +365,22 @@ public final class Pointers implements Handler.Callback
|
||||
}
|
||||
}
|
||||
|
||||
/** A pointer is repeating. Returns [true] if repeat should continue. */
|
||||
private boolean handleKeyRepeat(Pointer ptr)
|
||||
{
|
||||
// Long press toggle lock on modifiers
|
||||
if ((ptr.flags & KeyValue.FLAG_LATCH) != 0)
|
||||
{
|
||||
lockPointer(ptr, true);
|
||||
return false;
|
||||
}
|
||||
// Stop repeating: Latched key, special keys
|
||||
if (ptr.pointerId == -1 || (ptr.flags & KeyValue.FLAG_SPECIAL) != 0)
|
||||
return false;
|
||||
_handler.onPointerHold(ptr.value, ptr.modifiers);
|
||||
return true;
|
||||
}
|
||||
|
||||
private float modulatePreciseRepeat(Pointer ptr)
|
||||
{
|
||||
if (ptr.repeatingPtrDist < 0.f)
|
||||
@@ -447,7 +493,7 @@ public final class Pointers implements Handler.Callback
|
||||
public void onPointerUp(KeyValue k, Modifiers flags);
|
||||
|
||||
/** Flags changed because latched or locked keys or cancelled pointers. */
|
||||
public void onPointerFlagsChanged();
|
||||
public void onPointerFlagsChanged(boolean shouldVibrate);
|
||||
|
||||
/** Key is repeating. */
|
||||
public void onPointerHold(KeyValue k, Modifiers flags);
|
||||
|
@@ -42,7 +42,7 @@ public class Theme
|
||||
s.recycle();
|
||||
_keyLabelPaint = initLabelPaint(Paint.Align.CENTER, null);
|
||||
_keySubLabelPaint = initLabelPaint(Paint.Align.LEFT, null);
|
||||
Typeface specialKeyFont = getSpecialKeyFont(context);
|
||||
Typeface specialKeyFont = getKeyFont(context);
|
||||
_specialKeyLabelPaint = initLabelPaint(Paint.Align.CENTER, specialKeyFont);
|
||||
_specialKeySubLabelPaint = initLabelPaint(Paint.Align.LEFT, specialKeyFont);
|
||||
}
|
||||
@@ -69,14 +69,12 @@ public class Theme
|
||||
return (paint);
|
||||
}
|
||||
|
||||
private static Typeface _specialKeyFont = null;
|
||||
private static Typeface _key_font = null;
|
||||
|
||||
static public Typeface getSpecialKeyFont(Context context)
|
||||
static public Typeface getKeyFont(Context context)
|
||||
{
|
||||
if (_specialKeyFont == null)
|
||||
{
|
||||
_specialKeyFont = Typeface.createFromAsset(context.getAssets(), "special_font.ttf");
|
||||
}
|
||||
return _specialKeyFont;
|
||||
if (_key_font == null)
|
||||
_key_font = Typeface.createFromAsset(context.getAssets(), "special_font.ttf");
|
||||
return _key_font;
|
||||
}
|
||||
}
|
||||
|
13
srcs/special_font/5E.svg
Normal file
13
srcs/special_font/5E.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3154 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166v0zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30859 -71.9297 74.5449l2.61523 -2.61523q142.554 116.396 319.106 128.166v-99.3945
|
||||
v0zM197.572 860.229q-90.2393 -103.316 -107.24 -245.867h-99.3936q17.001 181.786 137.32 319.104l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3867 30.0791 -32.6953v0zM1137.89 614.361h-99.3936q-17.001 141.242 -107.239 248.483
|
||||
l69.3135 70.6211q120.318 -137.319 137.319 -319.104v0zM1137.89 517.583q-14.3857 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3154 111.164 99.3936 256.331h99.3936v0zM189.726 263.867h0.000976562q-86.3154 107.239 -99.3936 253.716h-99.3945
|
||||
q13.0781 -189.633 128.165 -326.953l-3.92285 -3.92383q-1.30762 0 74.5449 77.1611zM939.103 121.315q-146.476 -124.242 -326.952 -136.014v99.3945q139.935 11.7705 257.639 105.934zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145
|
||||
q117.703 -90.2383 257.64 -105.933v-99.3945h-0.000976562zM881 1496q0 -121 -82.5 -194.5t-216.5 -73.5t-217 74t-83 194h151q0 -70 38 -109.5t111 -39.5q70 0 109.5 39t39.5 110h150z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
Reference in New Issue
Block a user