mirror of
https://github.com/Julow/Unexpected-Keyboard.git
synced 2025-08-18 00:10:00 +02:00
Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
2ca7b4427d | ||
|
0f62b3044c | ||
|
c46e3b6c61 | ||
|
5fac3459aa | ||
|
b54f9c5797 | ||
|
72249b8a42 | ||
|
82b2bf6dfb | ||
|
0fe27ef486 | ||
|
51ce2ccdf1 | ||
|
eb0df72ba1 | ||
|
540384bb0a | ||
|
c7184303e9 | ||
|
78a461f740 | ||
|
90b7944129 | ||
|
2539feadcd | ||
|
5f283cd0cd | ||
|
fecc4dd70a | ||
|
7bc93c470e | ||
|
854eff211d | ||
|
f4032e3be9 | ||
|
f7f4d4d6aa |
@@ -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="31" android:versionName="1.20.2" android:hardwareAccelerated="false">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="32" android:versionName="1.21.0" android:hardwareAccelerated="false">
|
||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="31"/>
|
||||
<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" android:exported="true" android:directBootAware="true">
|
||||
|
10
metadata/android/en-US/changelogs/32.txt
Normal file
10
metadata/android/en-US/changelogs/32.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
New translations: Vietnamese
|
||||
New layouts: Hebrew, Vietnamese
|
||||
|
||||
Move the cursor by sliding on the space bar.
|
||||
New ePaper theme.
|
||||
Added number row.
|
||||
Option to switch to the previous keyboard.
|
||||
Updated translations.
|
||||
|
||||
Thanks to the contributors: @K4zoku, @rVnPower, @RamKromberg, @MAKI1LOVE
|
16
metadata/android/vi-VN/full_description.txt
Normal file
16
metadata/android/vi-VN/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Chức năng chính là dễ dàng gõ nhiều ký tự bằng cách kéo phím về góc của nó.
|
||||
|
||||
Các chức năng tiêu biểu:
|
||||
|
||||
- Chứa tất cả ký tự và phím cơ bản lẫn đặc biệt của một cái bàn phím máy tính. Hoàn hảo cho các ứng dụng như Termux.
|
||||
|
||||
- Bao gồm Tab, Esc, các phím mũi tên và phím chức năng, còn có thêm Ctrl và Alt.
|
||||
|
||||
- Các phím có dấu phụ có thể được sử dụng qua phím liệt. Đầu tiên là bật dấu phụ, sau đó thì gõ.
|
||||
|
||||
- Rất nhẹ và nhanh. Nhẹ hơn bàn phím của Google 500 lần và 15 lần bàn phím mặc định. Không quảng cáo, không theo dõi.
|
||||
|
||||
- Nhiều bố cục phím: QWERTY, QWERTZ, AZERTY. Nhiều chủ đề: Sáng, tối, đen OLED. Với nhiều lựa chọn khác.
|
||||
|
||||
Như các bàn phím ảo khác, nó phải được bật trong cài đặt. Đầu tiên là vào cài đặt hệ thống và đi đến:
|
||||
Hệ thống -> Ngôn ngữ và nhập liệu -> Bàn phím ảo -> Quản lý bàn phím ảo
|
1
metadata/android/vi-VN/short_description.txt
Normal file
1
metadata/android/vi-VN/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Bàn phím ảo gọn nhẹ cho các nhà phát triển.
|
@@ -21,11 +21,11 @@
|
||||
<!-- <string name="pref_show_numpad_never">Never</string> -->
|
||||
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
|
||||
<!-- <string name="pref_show_numpad_always">Always</string> -->
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</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_extra_keys_title">Add keys to the keyboard</string> -->
|
||||
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
|
||||
<string name="pref_second_layout_none">Žádné</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<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_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_behavior">Behavior</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_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</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_category_style">Styl</string>
|
||||
<string name="pref_margin_bottom_title">Spodní odsazení</string>
|
||||
<string name="pref_keyboard_height_title">Výška klávesnice</string>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">Světlý</string>
|
||||
<string name="pref_theme_e_black">Černý</string>
|
||||
<!-- <string name="pref_theme_e_white">White</string> -->
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</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>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<string name="pref_show_numpad_never">Nie</string>
|
||||
<string name="pref_show_numpad_landscape">Nur im Querformat</string>
|
||||
<string name="pref_show_numpad_always">Immer</string>
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
|
||||
<string name="pref_autocapitalisation_title">Automatische Großschreibung</string>
|
||||
<string name="pref_autocapitalisation_summary">Shift-Taste am Satzanfang aktivieren</string>
|
||||
<string name="pref_extra_keys_title">Zusätzliche Zeichen zur Tastatur hinzufügen</string>
|
||||
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
|
||||
<string name="pref_second_layout_none">Keines</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<string name="pref_swipe_dist_summary">Abstand der Zeichen in den Ecken der Tasten (%s)</string>
|
||||
<string name="pref_long_timeout_title">Zeitüberschreitung bei Tastenwiederholung</string>
|
||||
<string name="pref_long_interval_title">Intervall der Tastenwiederholung</string>
|
||||
<string name="pref_vibrate_title">Vibration</string>
|
||||
<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_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_behavior">Behavior</string> -->
|
||||
<string name="pref_autocapitalisation_title">Automatische Großschreibung</string>
|
||||
<string name="pref_autocapitalisation_summary">Shift-Taste am Satzanfang aktivieren</string>
|
||||
<!-- <string name="pref_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Vibration</string>
|
||||
<string name="pref_vibrate_summary">Vibration bei Tastendruck ein-/ausschalten</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>
|
||||
@@ -52,6 +55,7 @@
|
||||
<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_theme_e_epaper">ePaper</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>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<!-- <string name="pref_show_numpad_never">Never</string> -->
|
||||
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
|
||||
<!-- <string name="pref_show_numpad_always">Always</string> -->
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</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_second_layout_title">Secondary layout</string> -->
|
||||
<!-- <string name="pref_second_layout_none">None</string> -->
|
||||
@@ -34,12 +34,15 @@
|
||||
<string name="pref_swipe_dist_summary">Distancia de caracteres en las esquinas de las letras (%s)</string>
|
||||
<string name="pref_long_timeout_title">Tiempo de espera de repetición de tecla</string>
|
||||
<string name="pref_long_interval_title">Intervalo de repetición de tecla</string>
|
||||
<string name="pref_vibrate_title">Vibración</string>
|
||||
<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_lock_double_tap_title">Double tap on shift for caps lock</string> -->
|
||||
<!-- <string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string> -->
|
||||
<!-- <string name="pref_category_behavior">Behavior</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_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Vibración</string>
|
||||
<string name="pref_vibrate_summary">Habilitar/deshabilitar vibración al presionar una tecla</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>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">Claro</string>
|
||||
<string name="pref_theme_e_black">Negro</string>
|
||||
<!-- <string name="pref_theme_e_white">White</string> -->
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Muy corto</string>
|
||||
<string name="pref_swipe_dist_e_short">Corto</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
|
@@ -1,15 +1,15 @@
|
||||
<?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="app_name" product="debug">Unexpected Keyboard (debug)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Unexpected Keyboard Paramètres</string>
|
||||
<string name="pref_portrait">En mode portrait</string>
|
||||
<string name="pref_landscape">En mode landscape</string>
|
||||
<string name="pref_category_layout">Disposition</string>
|
||||
<string name="pref_label_brightness">Luminosité des symboles</string>
|
||||
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
|
||||
<!-- <string name="pref_key_opacity">Adjust key opacity</string> -->
|
||||
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> -->
|
||||
<string name="pref_keyboard_opacity">Transparence du clavier</string>
|
||||
<string name="pref_key_opacity">Transparence des touches</string>
|
||||
<string name="pref_key_activated_opacity">Transparence des touches pressées</string>
|
||||
<string name="pref_layout_title">Disposition des touches</string>
|
||||
<string name="pref_layout_e_system">Paramètre système</string>
|
||||
<string name="pref_layout_e_custom">Disposition personnalisée</string>
|
||||
@@ -21,11 +21,11 @@
|
||||
<string name="pref_show_numpad_never">Jamais</string>
|
||||
<string name="pref_show_numpad_landscape">Seulement en mode paysage</string>
|
||||
<string name="pref_show_numpad_always">Toujour</string>
|
||||
<string name="pref_number_row_title">Rangée de nombres</string>
|
||||
<string name="pref_number_row_summary">Ajoute une rangée de nombres en haut du clavier quand le pavé numérique est caché</string>
|
||||
<string name="pref_numpad_layout">Disposition du pavé numérique</string>
|
||||
<string name="pref_numpad_layout_e_high_first">Du plus haut au plus bas</string>
|
||||
<string name="pref_numpad_layout_e_low_first">Du plus bas au plus haut</string>
|
||||
<string name="pref_autocapitalisation_title">Majuscule automatique</string>
|
||||
<string name="pref_autocapitalisation_summary">Activer Shift au début des phrases</string>
|
||||
<string name="pref_extra_keys_title">Ajouter des touches au clavier</string>
|
||||
<string name="pref_second_layout_title">Disposition secondaire</string>
|
||||
<string name="pref_second_layout_none">Aucune</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<string name="pref_swipe_dist_summary">La distance des caractères dans les coins (%s)</string>
|
||||
<string name="pref_long_timeout_title">Délai avant répétition</string>
|
||||
<string name="pref_long_interval_title">Écart entre les répétitions</string>
|
||||
<string name="pref_vibrate_title">Vibreur</string>
|
||||
<string name="pref_vibrate_summary">Vibration a chaque touche</string>
|
||||
<string name="pref_precise_repeat_title">Mouvement précis du curseur</string>
|
||||
<string name="pref_precise_repeat_summary">Modifier la vitesse de répétition en bougeant le doigt</string>
|
||||
<string name="pref_lock_double_tap_title">Appuyer deux fois pour bloquer la majuscule</string>
|
||||
<string name="pref_lock_double_tap_summary">Un appui long bloque la majuscule</string>
|
||||
<string name="pref_category_behavior">Comportement</string>
|
||||
<string name="pref_autocapitalisation_title">Majuscule automatique</string>
|
||||
<string name="pref_autocapitalisation_summary">Activer Shift au début des phrases</string>
|
||||
<string name="pref_switch_input_immediate_title">Changer vers le clavier utilisé en dernier</string>
|
||||
<string name="pref_switch_input_immediate_summary">Comportement de la touche de changement de clavier</string>
|
||||
<string name="pref_vibrate_title">Vibreur</string>
|
||||
<string name="pref_vibrate_summary">Vibration a chaque touche</string>
|
||||
<string name="pref_category_style">Style</string>
|
||||
<string name="pref_margin_bottom_title">Marge du bas</string>
|
||||
<string name="pref_keyboard_height_title">Hauteur du clavier</string>
|
||||
@@ -52,6 +55,7 @@
|
||||
<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_theme_e_epaper">ePaper</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>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<!-- <string name="pref_show_numpad_never">Never</string> -->
|
||||
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
|
||||
<!-- <string name="pref_show_numpad_always">Always</string> -->
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</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_extra_keys_title">Add keys to the keyboard</string> -->
|
||||
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
|
||||
<string name="pref_second_layout_none">Nessuno</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<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_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_behavior">Behavior</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_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Vibrazione</string>
|
||||
<string name="pref_vibrate_summary">Abilita/Disabilita Vibrazione alla pressione dei tasti</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>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">Chiaro</string>
|
||||
<string name="pref_theme_e_black">Nero</string>
|
||||
<!-- <string name="pref_theme_e_white">White</string> -->
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</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>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<!-- <string name="pref_show_numpad_never">Never</string> -->
|
||||
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
|
||||
<!-- <string name="pref_show_numpad_always">Always</string> -->
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</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_second_layout_title">Secondary layout</string> -->
|
||||
<!-- <string name="pref_second_layout_none">None</string> -->
|
||||
@@ -34,12 +34,15 @@
|
||||
<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_lock_double_tap_title">Double tap on shift for caps lock</string> -->
|
||||
<!-- <string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string> -->
|
||||
<!-- <string name="pref_category_behavior">Behavior</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_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">진동</string>
|
||||
<string name="pref_vibrate_summary">키 누를 때 진동 키거/끄기</string>
|
||||
<string name="pref_category_style">스타일</string>
|
||||
<string name="pref_margin_bottom_title">아래 넓이</string>
|
||||
<string name="pref_keyboard_height_title">키보드 높이</string>
|
||||
@@ -52,6 +55,7 @@
|
||||
<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_theme_e_epaper">ePaper</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>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<string name="pref_show_numpad_never">Nekad</string>
|
||||
<string name="pref_show_numpad_landscape">Tikai guleniskajā skatā</string>
|
||||
<string name="pref_show_numpad_always">Vienmēr</string>
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</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_second_layout_title">Secondary layout</string> -->
|
||||
<string name="pref_second_layout_none">Neviens</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<string name="pref_swipe_dist_summary">Taustiņu stūros esošo rakstzīmju attālums (%s)</string>
|
||||
<string name="pref_long_timeout_title">Taustiņa atkārtošanās ātrums</string>
|
||||
<string name="pref_long_interval_title">Taustiņa atkārtošanās aizture</string>
|
||||
<string name="pref_vibrate_title">Trīcēšana</string>
|
||||
<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_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_behavior">Behavior</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_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Trīcēšana</string>
|
||||
<string name="pref_vibrate_summary">Iespējot/atspējot taustiņa piespiešanas trīcēšanu</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>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">Gaišs</string>
|
||||
<string name="pref_theme_e_black">Melns</string>
|
||||
<string name="pref_theme_e_white">Balts</string>
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Ļoti tuvs</string>
|
||||
<string name="pref_swipe_dist_e_short">Tuvs</string>
|
||||
<string name="pref_swipe_dist_e_default">Vidējs</string>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<string name="pref_show_numpad_never">Nigdy</string>
|
||||
<string name="pref_show_numpad_landscape">Tylko w orientacji poziomej</string>
|
||||
<string name="pref_show_numpad_always">Zawsze</string>
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<string name="pref_numpad_layout">Układ klawiatury numerycznej</string>
|
||||
<string name="pref_numpad_layout_e_high_first">Od największej cyfry</string>
|
||||
<string name="pref_numpad_layout_e_low_first">Od najmniejszej cyfry</string>
|
||||
<string name="pref_autocapitalisation_title">Automatyczne wielkie litery</string>
|
||||
<string name="pref_autocapitalisation_summary">Naciśnij Shift na początku zdania</string>
|
||||
<string name="pref_extra_keys_title">Dodaj klawisze do klawiatury</string>
|
||||
<string name="pref_second_layout_title">Drugi układ</string>
|
||||
<string name="pref_second_layout_none">Żaden</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<string name="pref_swipe_dist_summary">Odległość znaków od rogów klawiszy (%s)</string>
|
||||
<string name="pref_long_timeout_title">Opóźnienie powtarzania naciśnięć klawisza</string>
|
||||
<string name="pref_long_interval_title">Czas pomiędzy powtórzeniami</string>
|
||||
<string name="pref_vibrate_title">Wibracja</string>
|
||||
<string name="pref_vibrate_summary">Wł./wył. wibrację przy naciśnięciu klawisza</string>
|
||||
<string name="pref_precise_repeat_title">Dokładne poruszanie kursorem</string>
|
||||
<string name="pref_precise_repeat_summary">Reguluj prędkość powtarzania naciśnięć klawisza poprzez przesunięcie dalej lub bliżej</string>
|
||||
<string name="pref_lock_double_tap_title">Naciśnij Shift podwójnie, aby włączyć caps lock</string>
|
||||
<string name="pref_lock_double_tap_summary">Możesz zablokować modyfikator poprzez jego długie naciśnięcie</string>
|
||||
<!-- <string name="pref_category_behavior">Behavior</string> -->
|
||||
<string name="pref_autocapitalisation_title">Automatyczne wielkie litery</string>
|
||||
<string name="pref_autocapitalisation_summary">Naciśnij Shift na początku zdania</string>
|
||||
<!-- <string name="pref_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Wibracja</string>
|
||||
<string name="pref_vibrate_summary">Wł./wył. wibrację przy naciśnięciu klawisza</string>
|
||||
<string name="pref_category_style">Styl</string>
|
||||
<string name="pref_margin_bottom_title">Margines dolny</string>
|
||||
<string name="pref_keyboard_height_title">Wysokość klawiatury</string>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">Jasny</string>
|
||||
<string name="pref_theme_e_black">Czarny</string>
|
||||
<string name="pref_theme_e_white">Biały</string>
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Bardzo mała</string>
|
||||
<string name="pref_swipe_dist_e_short">Mała</string>
|
||||
<string name="pref_swipe_dist_e_default">Normalna</string>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<!-- <string name="pref_show_numpad_never">Never</string> -->
|
||||
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
|
||||
<!-- <string name="pref_show_numpad_always">Always</string> -->
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</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_extra_keys_title">Add keys to the keyboard</string> -->
|
||||
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
|
||||
<string name="pref_second_layout_none">Nenhum</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<string name="pref_swipe_dist_summary">Distância até acionar os cantos das teclas (%s)</string>
|
||||
<string name="pref_long_timeout_title">Tempo até repetir tecla</string>
|
||||
<string name="pref_long_interval_title">Intervalo de repetição de tecla</string>
|
||||
<string name="pref_vibrate_title">Vibração</string>
|
||||
<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_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_behavior">Behavior</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_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Vibração</string>
|
||||
<string name="pref_vibrate_summary">Ativar/desativar vibração ao digitar</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>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">Claro</string>
|
||||
<string name="pref_theme_e_black">Preto</string>
|
||||
<!-- <string name="pref_theme_e_white">White</string> -->
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Muito curto</string>
|
||||
<string name="pref_swipe_dist_e_short">Curto</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
|
@@ -3,8 +3,8 @@
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (отладка)</string>
|
||||
<!-- <string name="app_name" product="default">Unexpected Keyboard</string> -->
|
||||
<string name="settings_activity_label">Unexpected Keyboard Настройки</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_portrait">В портретном режиме</string>
|
||||
<string name="pref_landscape">В ландшафтном режиме</string>
|
||||
<string name="pref_category_layout">Расположение</string>
|
||||
<string name="pref_label_brightness">Изменить яркость клавиатуры</string>
|
||||
<string name="pref_keyboard_opacity">Изменить прозрачность фона</string>
|
||||
@@ -21,11 +21,11 @@
|
||||
<string name="pref_show_numpad_never">Никогда</string>
|
||||
<string name="pref_show_numpad_landscape">Только в ландшафтном режиме</string>
|
||||
<string name="pref_show_numpad_always">Всегда</string>
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<string name="pref_numpad_layout">NumPad раскладка</string>
|
||||
<string name="pref_numpad_layout_e_high_first">Старшие цифры сверху</string>
|
||||
<string name="pref_numpad_layout_e_low_first">Младшие цифры сверху</string>
|
||||
<string name="pref_autocapitalisation_title">Автоматическая смена регистра</string>
|
||||
<string name="pref_autocapitalisation_summary">Автонажатие Shift в начале каждого предложения</string>
|
||||
<string name="pref_extra_keys_title">Добавить клавиши на клавиатуру</string>
|
||||
<string name="pref_second_layout_title">Дополнительная раскладка</string>
|
||||
<string name="pref_second_layout_none">Нет</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<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_lock_double_tap_title">Двойное нажатие на Shift активирует Caps lock</string>
|
||||
<string name="pref_lock_double_tap_summary">Вы можете активировать модификатор, удерживая клавишу</string>
|
||||
<!-- <string name="pref_category_behavior">Behavior</string> -->
|
||||
<string name="pref_autocapitalisation_title">Автоматическая смена регистра</string>
|
||||
<string name="pref_autocapitalisation_summary">Автонажатие Shift в начале каждого предложения</string>
|
||||
<!-- <string name="pref_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Вибрация</string>
|
||||
<string name="pref_vibrate_summary">Включение/выключение вибрации при нажатии клавиши</string>
|
||||
<string name="pref_category_style">Стиль</string>
|
||||
<string name="pref_margin_bottom_title">Нижняя граница поля</string>
|
||||
<string name="pref_keyboard_height_title">Высота клавиатуры</string>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">Светлая</string>
|
||||
<string name="pref_theme_e_black">Черная</string>
|
||||
<string name="pref_theme_e_white">Белая</string>
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</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>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<!-- <string name="pref_show_numpad_never">Never</string> -->
|
||||
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
|
||||
<!-- <string name="pref_show_numpad_always">Always</string> -->
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</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_second_layout_title">Secondary layout</string> -->
|
||||
<string name="pref_second_layout_none">Hiçbiri</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<string name="pref_swipe_dist_summary">Tuşların köşelerindeki karakterlerin uzaklıkları (%s)</string>
|
||||
<string name="pref_long_timeout_title">Tuş tekrarlama beklemesi</string>
|
||||
<string name="pref_long_interval_title">Tuş tekrarlama aralığı</string>
|
||||
<string name="pref_vibrate_title">Titreşim</string>
|
||||
<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_lock_double_tap_title">Double tap on shift for caps lock</string> -->
|
||||
<!-- <string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string> -->
|
||||
<!-- <string name="pref_category_behavior">Behavior</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_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Titreşim</string>
|
||||
<string name="pref_vibrate_summary">Tuşa basıldığında titreşimi etkinleştir</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>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">Açık</string>
|
||||
<string name="pref_theme_e_black">Siyah</string>
|
||||
<!-- <string name="pref_theme_e_white">White</string> -->
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Çok kısa</string>
|
||||
<string name="pref_swipe_dist_e_short">Kısa</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
|
77
res/values-vi/strings.xml
Normal file
77
res/values-vi/strings.xml
Normal file
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (gỡ lỗi)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Cài đặt Unexpected Keyboard</string>
|
||||
<string name="pref_portrait">Trong chế độ chân dung</string>
|
||||
<string name="pref_landscape">Trong chế độ phong cảnh</string>
|
||||
<string name="pref_category_layout">Bố cục</string>
|
||||
<string name="pref_label_brightness">Tùy chỉnh độ sáng của phím</string>
|
||||
<string name="pref_keyboard_opacity">Tùy chỉnh độ trong suốt của bàn phím</string>
|
||||
<string name="pref_key_opacity">Tùy chỉnh độ trong suốt của phím</string>
|
||||
<string name="pref_key_activated_opacity">Tùy chỉnh độ trong suốt của phím khi nhấn</string>
|
||||
<string name="pref_layout_title">Thay đổi bố cục bàn phím</string>
|
||||
<string name="pref_layout_e_system">Hệ thống</string>
|
||||
<string name="pref_layout_e_custom">Tùy chỉnh bố cục</string>
|
||||
<string name="pref_accents_title">Dấu phụ</string>
|
||||
<string name="pref_accents_e_all_installed">Hiển thị cho các ngôn ngữ đã cài đặt</string>
|
||||
<string name="pref_accents_e_selected">Chỉ hiển thị cho các ngôn ngữ đã chọn</string>
|
||||
<string name="pref_accents_e_none">
|
||||
Ẩn dấu phụ
|
||||
</string>
|
||||
<string name="pref_show_numpad_title">Hiện NumPad</string>
|
||||
<string name="pref_show_numpad_never">Không bao giờ</string>
|
||||
<string name="pref_show_numpad_landscape">Chỉ trong chế độ phong cảnh</string>
|
||||
<string name="pref_show_numpad_always">Luôn luôn</string>
|
||||
<string name="pref_number_row_title">Hiện số dòng</string>
|
||||
<string name="pref_number_row_summary">Hiện số dòng trên đầu bàn phím khi NumPad ẩn</string>
|
||||
<string name="pref_numpad_layout">Bố cục NumPad</string>
|
||||
<string name="pref_numpad_layout_e_high_first">Số lớn nhất trước</string>
|
||||
<string name="pref_numpad_layout_e_low_first">Số nhỏ nhất trước</string>
|
||||
<string name="pref_extra_keys_title">Thêm phím vào bàn phím</string>
|
||||
<string name="pref_second_layout_title">Bố cục phụ</string>
|
||||
<string name="pref_second_layout_none">Không</string>
|
||||
<string name="pref_category_typing">Gõ</string>
|
||||
<string name="pref_swipe_dist_title">Khoảng cách vuốt</string>
|
||||
<string name="pref_swipe_dist_summary">Khoảng cách giữa các ký tự ở góc phím (%s)</string>
|
||||
<string name="pref_long_timeout_title">Thời hạn lặp phím</string>
|
||||
<string name="pref_long_interval_title">Khoảng thời gian lặp phím</string>
|
||||
<string name="pref_lock_double_tap_title">Nhấn hai lần Shift để bật Caps Lock</string>
|
||||
<string name="pref_lock_double_tap_summary">Bạn có thể khóa phím hỗ trợ bằng cách giữ vào nó</string>
|
||||
<!-- <string name="pref_category_behavior">Behavior</string> -->
|
||||
<string name="pref_autocapitalisation_title">Tự động viết hoa</string>
|
||||
<string name="pref_autocapitalisation_summary">Nhấn Shift ở đầu câu</string>
|
||||
<!-- <string name="pref_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">Sự rung</string>
|
||||
<string name="pref_vibrate_summary">Bật/tắt rung khi nhấn</string>
|
||||
<string name="pref_category_style">Kiểu cách</string>
|
||||
<string name="pref_margin_bottom_title">Căn lề dưới</string>
|
||||
<string name="pref_keyboard_height_title">Chiều cao bàn phím</string>
|
||||
<string name="pref_horizontal_margin_title">Căn lề chiều ngang</string>
|
||||
<string name="pref_character_size_title">Kích cỡ ký tự phím</string>
|
||||
<string name="pref_character_size_summary">Kích cỡ các ký tự hiển thị trên bàn phím (%.2fx)</string>
|
||||
<string name="pref_theme">Chủ đề</string>
|
||||
<string name="pref_theme_e_system">Hệ thống</string>
|
||||
<string name="pref_theme_e_dark">Tối</string>
|
||||
<string name="pref_theme_e_light">Sáng</string>
|
||||
<string name="pref_theme_e_black">Đen</string>
|
||||
<string name="pref_theme_e_white">Trắng</string>
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Rất gần</string>
|
||||
<string name="pref_swipe_dist_e_short">Gần</string>
|
||||
<string name="pref_swipe_dist_e_default">Trungbình</string>
|
||||
<string name="pref_swipe_dist_e_far">Xa</string>
|
||||
<string name="pref_swipe_dist_e_very_far">Rất xa</string>
|
||||
<string name="pref_key_horizontal_space">Khoảng cách giữa các phím theo chiều ngang</string>
|
||||
<string name="pref_key_vertical_space">Khoảng cách giữa các phím theo chiều dọc</string>
|
||||
<string name="pref_category_advanced">Nâng cao</string>
|
||||
<string name="pref_custom_layout_title">Tùy chỉnh bố cục</string>
|
||||
<string name="pref_custom_layout_summary">Hãy xem mã nguồn. Lựa chọn này không có mục đích sử dụng.</string>
|
||||
<string name="key_action_next">Tiếp</string>
|
||||
<string name="key_action_done">Xong</string>
|
||||
<string name="key_action_go">Đi</string>
|
||||
<string name="key_action_prev">Trước</string>
|
||||
<string name="key_action_search">Tìm</string>
|
||||
<string name="key_action_send">Gửi</string>
|
||||
</resources>
|
@@ -21,11 +21,11 @@
|
||||
<string name="pref_show_numpad_never">从不</string>
|
||||
<string name="pref_show_numpad_landscape">只在横屏显示</string>
|
||||
<string name="pref_show_numpad_always">一直显示</string>
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
|
||||
<string name="pref_autocapitalisation_title">句首自动大写</string>
|
||||
<string name="pref_autocapitalisation_summary">在句子的开头自动按下Shift</string>
|
||||
<string name="pref_extra_keys_title">选择要显示的按键</string>
|
||||
<string name="pref_second_layout_title">第二键盘布局</string>
|
||||
<string name="pref_second_layout_none">无</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<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_lock_double_tap_title">双击Shift键锁定大写</string>
|
||||
<string name="pref_lock_double_tap_summary">任何时候都可以长按修改键以锁定</string>
|
||||
<!-- <string name="pref_category_behavior">Behavior</string> -->
|
||||
<string name="pref_autocapitalisation_title">句首自动大写</string>
|
||||
<string name="pref_autocapitalisation_summary">在句子的开头自动按下Shift</string>
|
||||
<!-- <string name="pref_switch_input_immediate_title">Switch to the next keyboard immediately</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<string name="pref_vibrate_title">振动</string>
|
||||
<string name="pref_vibrate_summary">启用或者禁用按下按键时振动</string>
|
||||
<string name="pref_category_style">样式</string>
|
||||
<string name="pref_margin_bottom_title">键盘下边距</string>
|
||||
<string name="pref_keyboard_height_title">键盘高度</string>
|
||||
@@ -52,6 +55,7 @@
|
||||
<string name="pref_theme_e_light">亮色</string>
|
||||
<string name="pref_theme_e_black">黑色</string>
|
||||
<string name="pref_theme_e_white">白色</string>
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</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>
|
||||
|
@@ -14,6 +14,7 @@
|
||||
<item>qwerty_hu</item>
|
||||
<item>qwerty_tr</item>
|
||||
<item>qwerty_pl</item>
|
||||
<item>qwerty_vi</item>
|
||||
<item>ru_jcuken</item>
|
||||
<item>qwertz</item>
|
||||
<item>qwertz_cs</item>
|
||||
@@ -28,6 +29,8 @@
|
||||
<item>jcuken_ua</item>
|
||||
<item>bangla</item>
|
||||
<item>hindi</item>
|
||||
<item>he_il_1452_1</item>
|
||||
<item>he_il_1452_2</item>
|
||||
<item>custom</item>
|
||||
</string-array>
|
||||
<string-array name="pref_layout_entries">
|
||||
@@ -44,6 +47,7 @@
|
||||
<item>QWERTY (Hungarian)</item>
|
||||
<item>QWERTY (Türkçe)</item>
|
||||
<item>QWERTY (Polski)</item>
|
||||
<item>QWERTY (Vietnamese)</item>
|
||||
<item>ЙЦУКЕН (Русский)</item>
|
||||
<item>QWERTZ</item>
|
||||
<item>QWERTZ (Czech)</item>
|
||||
@@ -58,6 +62,8 @@
|
||||
<item>ЙЦУКЕН (Українська)</item>
|
||||
<item>বাংলা</item>
|
||||
<item>हिन्दी</item>
|
||||
<item>Hebrew SI-1452-1</item>
|
||||
<item>Hebrew SI-1452-2</item>
|
||||
<item>@string/pref_layout_e_custom</item>
|
||||
</string-array>
|
||||
<string-array name="pref_accents_entries">
|
||||
@@ -94,6 +100,7 @@
|
||||
<item>@string/pref_theme_e_light</item>
|
||||
<item>@string/pref_theme_e_black</item>
|
||||
<item>@string/pref_theme_e_white</item>
|
||||
<item>@string/pref_theme_e_epaper</item>
|
||||
</string-array>
|
||||
<string-array name="pref_theme_values">
|
||||
<item>system</item>
|
||||
@@ -101,6 +108,7 @@
|
||||
<item>light</item>
|
||||
<item>black</item>
|
||||
<item>white</item>
|
||||
<item>epaper</item>
|
||||
</string-array>
|
||||
<string-array name="pref_swipe_dist_entries">
|
||||
<item>@string/pref_swipe_dist_e_very_short</item>
|
||||
|
@@ -21,11 +21,11 @@
|
||||
<string name="pref_show_numpad_never">Never</string>
|
||||
<string name="pref_show_numpad_landscape">Only in landscape mode</string>
|
||||
<string name="pref_show_numpad_always">Always</string>
|
||||
<string name="pref_number_row_title">Show number row</string>
|
||||
<string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string>
|
||||
<string name="pref_numpad_layout">NumPad layout</string>
|
||||
<string name="pref_numpad_layout_e_high_first">High digits first</string>
|
||||
<string name="pref_numpad_layout_e_low_first">Low digits first</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_second_layout_title">Secondary layout</string>
|
||||
<string name="pref_second_layout_none">None</string>
|
||||
@@ -34,12 +34,15 @@
|
||||
<string name="pref_swipe_dist_summary">Distance of characters in the corners of the keys (%s)</string>
|
||||
<string name="pref_long_timeout_title">Key repeat timeout</string>
|
||||
<string name="pref_long_interval_title">Key repeat interval</string>
|
||||
<string name="pref_vibrate_title">Vibration</string>
|
||||
<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_lock_double_tap_title">Double tap on shift for caps lock</string>
|
||||
<string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string>
|
||||
<string name="pref_category_behavior">Behavior</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_switch_input_immediate_title">Switch to the last used keyboard</string>
|
||||
<string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string>
|
||||
<string name="pref_vibrate_title">Vibration</string>
|
||||
<string name="pref_vibrate_summary">Enable/disable vibration on keypress</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>
|
||||
@@ -52,6 +55,7 @@
|
||||
<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_theme_e_epaper">ePaper</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>
|
||||
|
@@ -115,4 +115,23 @@
|
||||
<item name="emoji_button_bg">#ffffff</item>
|
||||
<item name="emoji_color">#000000</item>
|
||||
</style>
|
||||
<style name="ePaper" parent="BaseTheme">
|
||||
<item name="android:isLightTheme">true</item>
|
||||
<item name="colorKeyboard">#ffffff</item>
|
||||
<item name="colorKey">#ffffff</item>
|
||||
<item name="keyBorderWidth">2dp</item>
|
||||
<item name="keyBorderWidthActivated">5dp</item>
|
||||
<item name="keyBorderColorLeft">#000000</item>
|
||||
<item name="keyBorderColorTop">#000000</item>
|
||||
<item name="keyBorderColorRight">#000000</item>
|
||||
<item name="keyBorderColorBottom">#000000</item>
|
||||
<item name="colorKeyActivated">#ffffff</item>
|
||||
<item name="colorLabel">#000000</item>
|
||||
<item name="colorLabelActivated">#000000</item>
|
||||
<item name="colorLabelLocked">#33cc33</item>
|
||||
<item name="colorSubLabel">#333333</item>
|
||||
<item name="secondaryLightOffset">+0.35</item>
|
||||
<item name="emoji_button_bg">#ffffff</item>
|
||||
<item name="emoji_color">#000000</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<row height="0.95">
|
||||
<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_second" edgekeys="true"/>
|
||||
<key width="1.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key width="1.8" key0="enter" key2="action"/>
|
||||
<key width="1.7" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key4="switch_numeric"/>
|
||||
<key width="1.1" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.4" key0="space" key1="switch_second" key3="left" key2="right" edgekeys="true" slider="true"/>
|
||||
<key width="1.1" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key width="1.7" key0="enter" key2="action"/>
|
||||
</row>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard bottom_row="false" extra_keys="false">
|
||||
<keyboard bottom_row="false">
|
||||
<row>
|
||||
<key key0="θ" key2="^"/>
|
||||
<key key0="δ" key1="⌊" key2="∨" key3="↔" key4="⊂"/>
|
||||
|
41
res/xml/he_il_1452_1.xml
Normal file
41
res/xml/he_il_1452_1.xml
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="/" key2="1" key3="!" key4="esc"/>
|
||||
<key key0="'" key2="2" key3="\@" key1=";"/>
|
||||
<key key0="ק" key2="3" key3="\#" key1="€"/>
|
||||
<key key0="ר" key2="4" key3="$" key1="₪"/>
|
||||
<key key0="א" key2="5" key3="%"/>
|
||||
<key key0="ט" key2="6" key3="^" key4="ole_placeholder"/>
|
||||
<key key0="ו" key2="7" key3="&" key4="meteg_placeholder"/>
|
||||
<key key0="ן" key2="8" key3="*"/>
|
||||
<key key0="ם" key2="9" key3="b(" key4="lrm"/>
|
||||
<key key0="פ" key2="0" key3="b)" key4="rlm"/>
|
||||
<key key0="backspace" key2="delete" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="ש" key2="`" key1="tab" key3="sindot_placeholder" key4="shindot_placeholder" width="1.333"/>
|
||||
<key key0="ד" key1="~" width="1.0333"/>
|
||||
<key key0="ג" key1="geresh" key2="gershayim" width="1.0333"/>
|
||||
<key key0="כ" width="1.0333"/>
|
||||
<key key0="ע" width="1.0333"/>
|
||||
<key key0="י" key2="-" key3="_" key4="maqaf" width="1.0333"/>
|
||||
<key key0="ח" key2="=" key3="+" width="1.0333"/>
|
||||
<key key0="ל" key2="b[" key3="b{" width="1.0333"/>
|
||||
<key key0="ך" key2="b]" key3="b}" width="1.0333"/>
|
||||
<key key0="ף" key2="," key3=""" key1=":" width="1.4006"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="\\" key1="|" key2="shift" key3="loc capslock"/>
|
||||
<key key0="ז"/>
|
||||
<key key0="ס"/>
|
||||
<key key0="ב"/>
|
||||
<key key0="ה"/>
|
||||
<key key0="נ"/>
|
||||
<key key0="מ"/>
|
||||
<key key0="צ"/>
|
||||
<key key0="ת" key1="blt"/>
|
||||
<key key0="ץ" key1="bgt"/>
|
||||
<key key0="." key1="\?"/>
|
||||
</row>
|
||||
</keyboard>
|
39
res/xml/he_il_1452_2.xml
Normal file
39
res/xml/he_il_1452_2.xml
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="ץ" key2="1" key3="!" key4="esc"/>
|
||||
<key key0="ן" key2="2" key3="\@" key1=";"/>
|
||||
<key key0="ק" key2="3" key3="\#" key1="€"/>
|
||||
<key key0="ר" key2="4" key3="$" key1="₪"/>
|
||||
<key key0="א" key2="5" key3="%"/>
|
||||
<key key0="ט" key2="6" key3="^" key4="ole_placeholder"/>
|
||||
<key key0="ו" key2="7" key3="&" key4="meteg_placeholder"/>
|
||||
<key key0="ת" key2="8" key3="*"/>
|
||||
<key key0="ם" key2="9" key3="b(" key4="lrm"/>
|
||||
<key key0="פ" key2="0" key3="b)" key4="rlm" width="1.333"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="ש" key2="`" key1="tab" key3="sindot_placeholder" key4="shindot_placeholder" width="1.333"/>
|
||||
<key key0="ד" key1="~"/>
|
||||
<key key0="ג" key1="geresh" key2="gershayim"/>
|
||||
<key key0="כ"/>
|
||||
<key key0="ע"/>
|
||||
<key key0="י" key2="-" key3="_" key4="maqaf"/>
|
||||
<key key0="ח" key2="=" key3="+"/>
|
||||
<key key0="ל" key2="b[" key3="b{"/>
|
||||
<key key0="ך" key2="b]" key3="b}"/>
|
||||
<key key0="ף" key2="'" key3=""" key1=":"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="\\" key1="|" key2="shift" key3="loc capslock"/>
|
||||
<key key0="ז"/>
|
||||
<key key0="ס"/>
|
||||
<key key0="ב"/>
|
||||
<key key0="ה" />
|
||||
<key key0="נ"/>
|
||||
<key key0="מ" key1="blt" key2=","/>
|
||||
<key key0="צ" key1="bgt" key2="."/>
|
||||
<key key0="/" key1="\?"/>
|
||||
<key key0="backspace" key2="delete" key3="f11_placeholder" key4="f12_placeholder" width="1.333"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -9,6 +9,7 @@
|
||||
<subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_es,extra_keys=accent_grave|accent_aigu|accent_tilde|accent_trema|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fr" android:imeSubtypeLocale="fr_FR" 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="hu" android:imeSubtypeLocale="hu_HU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwertz_hu,extra_keys=accent_aigu|accent_trema|accent_ogonek|€"/>
|
||||
<subtype android:label="%s" android:languageTag="he" android:imeSubtypeLocale="he_IL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=he_il_1452_1,extra_keys=₪|€"/>
|
||||
<subtype android:label="%s" android:languageTag="it" android:imeSubtypeLocale="it_IT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty,extra_keys=accent_grave|accent_aigu|€"/>
|
||||
<subtype android:label="%s" android:languageTag="ko" android:imeSubtypeLocale="ko_KR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_ko"/>
|
||||
<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|€"/>
|
||||
@@ -24,4 +25,5 @@
|
||||
<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=£|€"/>
|
||||
<subtype android:label="%s" android:languageTag="sk" android:imeSubtypeLocale="sk_SK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwertz_sk,extra_keys=é|ě|ŕ|ř|ť|ž|ü|ú|ů|í|ö|ó|ô|á|ä|ś|š|ď|ĺ|ľ|ý|č|ň"/>
|
||||
<subtype android:label="%s" android:languageTag="vi" android:imeSubtypeLocale="vi_VN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_vi"/>
|
||||
</input-method>
|
||||
|
13
res/xml/number_row.xml
Normal file
13
res/xml/number_row.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<row height="0.75">
|
||||
<key key0="1"/>
|
||||
<key key0="2"/>
|
||||
<key key0="3"/>
|
||||
<key key0="4"/>
|
||||
<key key0="5"/>
|
||||
<key key0="6"/>
|
||||
<key key0="7"/>
|
||||
<key key0="8"/>
|
||||
<key key0="9"/>
|
||||
<key key0="0"/>
|
||||
</row>
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard bottom_row="false" extra_keys="false" num_pad="false">
|
||||
<keyboard bottom_row="false">
|
||||
<row>
|
||||
<key width="0.75" key0="esc" key2="~" key4="!"/>
|
||||
<key width="0.75" key0="(" key2="[" key4="{"/>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard width="6.0" bottom_row="false" extra_keys="false" num_pad="false">
|
||||
<keyboard width="6.0" bottom_row="false">
|
||||
<row>
|
||||
<key shift="1.0" key0="1"/>
|
||||
<key key0="2" indication="ABC"/>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<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="r" key2="4" key3="$" key1="loc ₪"/>
|
||||
<key key0="t" key2="5" key3="%"/>
|
||||
<key key0="y" key2="6" key3="^"/>
|
||||
<key key0="u" key2="7" key3="&"/>
|
||||
|
37
res/xml/qwerty_vi.xml
Normal file
37
res/xml/qwerty_vi.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key1="~" key2="1" key3="`" key4="esc"/>
|
||||
<key key0="w" key1="accent_horn" key2="2" key3="\@"/>
|
||||
<key key0="e" key1="!" key2="3" key3="\#" key4="ê"/>
|
||||
<key key0="r" key2="4" key3="$" key1="accent_hook_above"/>
|
||||
<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="â"/>
|
||||
<key key0="s" key1="accent_aigu"/>
|
||||
<key key0="d" key1="accent_bar" key2="₫" key3="đ"/>
|
||||
<key key0="f" key1="accent_grave"/>
|
||||
<key key0="g" key2="-" key3="_"/>
|
||||
<key key0="h" key2="=" key3="+"/>
|
||||
<key key0="j" key1="accent_dot_below" key3="{" key4="}"/>
|
||||
<key key0="k" key3="[" key4="]"/>
|
||||
<key key0="l" key2="|" key3="\"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift" key2="loc capslock"/>
|
||||
<key key0="z"/>
|
||||
<key key0="x" key1="accent_tilde"/>
|
||||
<key key0="c" key2="<" key3="."/>
|
||||
<key key0="v" key2=">" key3=","/>
|
||||
<key key0="b" key2="\?" key3="/"/>
|
||||
<key key0="n" key2=":" key3=";"/>
|
||||
<key key0="m" key2=""" key3="'"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -5,6 +5,7 @@
|
||||
<juloo.keyboard2.LayoutListPreference android:key="second_layout" android:title="@string/pref_second_layout_title" app:defaultString="@string/pref_second_layout_none"/>
|
||||
<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="show_numpad" android:title="@string/pref_show_numpad_title" android:summary="%s" android:defaultValue="1" android:entries="@array/pref_show_numpad_entries" android:entryValues="@array/pref_show_numpad_values"/>
|
||||
<CheckBoxPreference android:key="number_row" android:title="@string/pref_number_row_title" android:summary="@string/pref_number_row_summary" android:defaultValue="false"/>
|
||||
<PreferenceScreen android:title="@string/pref_extra_keys_title">
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="0"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="1"/>
|
||||
@@ -39,16 +40,21 @@
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="30"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="31"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="32"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="33"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="34"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="35"/>
|
||||
</PreferenceScreen>
|
||||
<ListPreference android:key="numpad_layout" android:title="@string/pref_numpad_layout" android:summary="%s" android:defaultValue="high_first" android:entries="@array/pref_numpad_layout_entries" android:entryValues="@array/pref_numpad_layout_values"/>
|
||||
</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"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_behavior">
|
||||
<CheckBoxPreference android:key="autocapitalisation" android:title="@string/pref_autocapitalisation_title" android:summary="@string/pref_autocapitalisation_summary" android:defaultValue="true"/>
|
||||
<CheckBoxPreference android:key="switch_input_immediate" android:title="@string/pref_switch_input_immediate_title" android:summary="@string/pref_switch_input_immediate_summary" android:defaultValue="false"/>
|
||||
<CheckBoxPreference android:key="vibrate_enabled" android:title="@string/pref_vibrate_title" android:summary="@string/pref_vibrate_summary" android:defaultValue="true"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_style">
|
||||
|
@@ -28,7 +28,9 @@ final class Config
|
||||
public boolean show_numpad = false;
|
||||
// From the 'numpad_layout' option, also apply to the numeric pane.
|
||||
public boolean inverse_numpad = false;
|
||||
public boolean number_row;
|
||||
public float swipe_dist_px;
|
||||
public float slide_step_px;
|
||||
public boolean vibrateEnabled;
|
||||
public long longPressTimeout;
|
||||
public long longPressInterval;
|
||||
@@ -41,12 +43,12 @@ final class Config
|
||||
public int keyboardOpacity; // 0 - 255
|
||||
public int keyOpacity; // 0 - 255
|
||||
public int keyActivatedOpacity; // 0 - 255
|
||||
public boolean preciseRepeat;
|
||||
public boolean double_tap_lock_shift;
|
||||
public float characterSize; // Ratio
|
||||
public int accents; // Values are R.values.pref_accents_v_*
|
||||
public int theme; // Values are R.style.*
|
||||
public boolean autocapitalisation;
|
||||
public boolean switch_input_immediate;
|
||||
|
||||
// Dynamically set
|
||||
public boolean shouldOfferSwitchingToNextInputMethod;
|
||||
@@ -111,6 +113,7 @@ final class Config
|
||||
second_layout = tweak_secondary_layout(layout_of_string(res, _prefs.getString("second_layout", "none")));
|
||||
custom_layout = KeyboardData.load_string(_prefs.getString("custom_layout", ""));
|
||||
inverse_numpad = _prefs.getString("numpad_layout", "default").equals("low_first");
|
||||
number_row = _prefs.getBoolean("number_row", false);
|
||||
// The baseline for the swipe distance correspond to approximately the
|
||||
// width of a key in portrait mode, as most layouts have 10 columns.
|
||||
// Multipled by the DPI ratio because most swipes are made in the diagonals.
|
||||
@@ -119,6 +122,7 @@ final class Config
|
||||
float swipe_scaling = Math.min(dm.widthPixels, dm.heightPixels) / 10.f * dpi_ratio;
|
||||
float swipe_dist_value = Float.valueOf(_prefs.getString("swipe_dist", "15"));
|
||||
swipe_dist_px = swipe_dist_value / 25.f * swipe_scaling;
|
||||
slide_step_px = swipe_dist_px / 4.f;
|
||||
vibrateEnabled = _prefs.getBoolean("vibrate_enabled", true);
|
||||
longPressTimeout = _prefs.getInt("longpress_timeout", 600);
|
||||
longPressInterval = _prefs.getInt("longpress_interval", 65);
|
||||
@@ -142,7 +146,6 @@ final class Config
|
||||
horizontal_margin =
|
||||
get_dip_pref(dm, oriented_pref("horizontal_margin"),
|
||||
res.getDimension(R.dimen.horizontal_margin));
|
||||
preciseRepeat = _prefs.getBoolean("precise_repeat", true);
|
||||
double_tap_lock_shift = _prefs.getBoolean("lock_double_tap", false);
|
||||
characterSize =
|
||||
_prefs.getFloat("character_size", 1.f)
|
||||
@@ -150,48 +153,40 @@ final class Config
|
||||
accents = Integer.valueOf(_prefs.getString("accents", "1"));
|
||||
theme = getThemeId(res, _prefs.getString("theme", ""));
|
||||
autocapitalisation = _prefs.getBoolean("autocapitalisation", true);
|
||||
switch_input_immediate = _prefs.getBoolean("switch_input_immediate", false);
|
||||
extra_keys_param = ExtraKeyCheckBoxPreference.get_extra_keys(_prefs);
|
||||
}
|
||||
|
||||
KeyValue action_key()
|
||||
{
|
||||
// Update the name to avoid caching in KeyModifier
|
||||
return (actionLabel == null) ? null :
|
||||
KeyValue.getKeyByName("action").withSymbol(actionLabel);
|
||||
}
|
||||
|
||||
/** Update the layout according to the configuration.
|
||||
* - Remove the switching key if it isn't needed
|
||||
* - Remove "localized" keys from other locales (not in 'extra_keys')
|
||||
* - Replace the action key to show the right label
|
||||
* - Swap the enter and action keys
|
||||
* - Add the optional numpad and number row
|
||||
*/
|
||||
public KeyboardData modify_layout(KeyboardData kw)
|
||||
{
|
||||
// Update the name to avoid caching in KeyModifier
|
||||
final KeyValue action_key = (actionLabel == null) ? null :
|
||||
KeyValue.getKeyByName("action").withSymbol(actionLabel);
|
||||
final KeyValue action_key = action_key();
|
||||
// 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>();
|
||||
final Set<KeyValue> remove_keys = new HashSet<KeyValue>();
|
||||
if (extra_keys_subtype != null)
|
||||
extra_keys.addAll(extra_keys_subtype);
|
||||
extra_keys.addAll(extra_keys_param);
|
||||
if (kw.num_pad && show_numpad)
|
||||
kw = kw.addNumPad();
|
||||
boolean number_row = this.number_row && !show_numpad;
|
||||
if (show_numpad)
|
||||
KeyboardData.num_pad.getKeys(remove_keys);
|
||||
if (number_row)
|
||||
KeyboardData.number_row.getKeys(remove_keys);
|
||||
kw = kw.mapKeys(new KeyboardData.MapKeyValues() {
|
||||
/** Apply to the center value only. Partial match, fallback to [apply]. */
|
||||
public KeyboardData.Corner apply_key0(KeyboardData.Corner corner)
|
||||
{
|
||||
if (corner == null)
|
||||
return null;
|
||||
KeyValue kv = corner.kv;
|
||||
switch (kv.getKind())
|
||||
{
|
||||
case Char:
|
||||
char c = kv.getChar();
|
||||
if (inverse_numpad)
|
||||
c = inverse_numpad_char(c);
|
||||
if (c != kv.getChar())
|
||||
return KeyboardData.Corner.of_kv(kv.withChar(c));
|
||||
break;
|
||||
}
|
||||
return super.apply(corner);
|
||||
}
|
||||
|
||||
public KeyValue apply(KeyValue key, boolean localized)
|
||||
{
|
||||
boolean is_extra_key = extra_keys.contains(key);
|
||||
@@ -199,13 +194,19 @@ final class Config
|
||||
extra_keys.remove(key);
|
||||
if (localized && !is_extra_key)
|
||||
return null;
|
||||
if (remove_keys.contains(key))
|
||||
return null;
|
||||
switch (key.getKind())
|
||||
{
|
||||
case Event:
|
||||
switch (key.getEvent())
|
||||
{
|
||||
case CHANGE_METHOD:
|
||||
return shouldOfferSwitchingToNextInputMethod ? key : null;
|
||||
if (!shouldOfferSwitchingToNextInputMethod)
|
||||
return null;
|
||||
if (switch_input_immediate)
|
||||
return KeyValue.getKeyByName("change_method_prev");
|
||||
return key;
|
||||
case ACTION:
|
||||
return (swapEnterActionKey && action_key != null) ?
|
||||
KeyValue.getKeyByName("enter") : action_key;
|
||||
@@ -232,11 +233,54 @@ final class Config
|
||||
return key;
|
||||
}
|
||||
});
|
||||
if (show_numpad)
|
||||
kw = kw.addNumPad();
|
||||
if (number_row)
|
||||
kw = kw.addNumberRow();
|
||||
if (extra_keys.size() > 0)
|
||||
kw = kw.addExtraKeys(extra_keys.iterator());
|
||||
return kw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the numpad layout.
|
||||
*/
|
||||
public KeyboardData modify_numpad(KeyboardData kw)
|
||||
{
|
||||
final KeyValue action_key = action_key();
|
||||
return kw.mapKeys(new KeyboardData.MapKeyValues() {
|
||||
public KeyValue apply(KeyValue key, boolean localized)
|
||||
{
|
||||
switch (key.getKind())
|
||||
{
|
||||
case Event:
|
||||
switch (key.getEvent())
|
||||
{
|
||||
case ACTION:
|
||||
return (swapEnterActionKey && action_key != null) ?
|
||||
KeyValue.getKeyByName("enter") : action_key;
|
||||
}
|
||||
break;
|
||||
case Keyevent:
|
||||
switch (key.getKeyevent())
|
||||
{
|
||||
case KeyEvent.KEYCODE_ENTER:
|
||||
return (swapEnterActionKey && action_key != null) ? action_key : key;
|
||||
}
|
||||
break;
|
||||
case Char:
|
||||
char a = key.getChar(), b = a;
|
||||
if (inverse_numpad)
|
||||
b = inverse_numpad_char(a);
|
||||
if (a != b)
|
||||
return key.withChar(b);
|
||||
break;
|
||||
}
|
||||
return key;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** Modify a layout to turn it into a secondary layout by changing the
|
||||
"switch_second" key. */
|
||||
KeyboardData tweak_secondary_layout(KeyboardData layout)
|
||||
@@ -279,6 +323,7 @@ final class Config
|
||||
case "black": return R.style.Black;
|
||||
case "dark": return R.style.Dark;
|
||||
case "white": return R.style.White;
|
||||
case "epaper": return R.style.ePaper;
|
||||
default:
|
||||
case "system":
|
||||
if (Build.VERSION.SDK_INT >= 8)
|
||||
@@ -318,12 +363,15 @@ final class Config
|
||||
case "qwerty_sv_se": id = R.xml.qwerty_sv_se; break;
|
||||
case "qwerty_tr": id = R.xml.qwerty_tr; break;
|
||||
case "qwerty_pl": id = R.xml.qwerty_pl; break;
|
||||
case "qwerty_vi": id = R.xml.qwerty_vi; break;
|
||||
case "qwertz": id = R.xml.qwertz; break;
|
||||
case "qwertz_cs": id = R.xml.qwertz_cs; break;
|
||||
case "qwertz_de": id = R.xml.qwertz_de; break;
|
||||
case "qwertz_hu": id = R.xml.qwertz_hu; break;
|
||||
case "qwertz_sk": id = R.xml.qwertz_sk; break;
|
||||
case "ru_jcuken": id = R.xml.local_ru_jcuken; break;
|
||||
case "he_il_1452_1": id = R.xml.he_il_1452_1; break;
|
||||
case "he_il_1452_2": id = R.xml.he_il_1452_2; break;
|
||||
}
|
||||
return KeyboardData.load(res, id);
|
||||
}
|
||||
|
@@ -31,6 +31,9 @@ public class ExtraKeyCheckBoxPreference extends CheckBoxPreference
|
||||
"accent_breve",
|
||||
"accent_slash",
|
||||
"accent_bar",
|
||||
"accent_dot_below",
|
||||
"accent_hook_above",
|
||||
"accent_horn",
|
||||
"€",
|
||||
"ß",
|
||||
"£",
|
||||
|
@@ -44,19 +44,20 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
switch (key.getEvent())
|
||||
{
|
||||
case CONFIG: _recv.showKeyboardConfig(); break;
|
||||
case SWITCH_TEXT: _recv.switch_text(); break;
|
||||
case SWITCH_NUMERIC: _recv.switch_layout(R.xml.numeric); break;
|
||||
case SWITCH_TEXT: _recv.set_layout(Layout.Current); break;
|
||||
case SWITCH_NUMERIC: _recv.set_layout(Layout.Numeric); break;
|
||||
case SWITCH_EMOJI: _recv.setPane_emoji(); break;
|
||||
case SWITCH_BACK_EMOJI: _recv.setPane_normal(); break;
|
||||
case CHANGE_METHOD: _recv.switchToNextInputMethod(); break;
|
||||
case CHANGE_METHOD: _recv.switchInputMethod(); break;
|
||||
case CHANGE_METHOD_PREV: _recv.switchToPrevInputMethod(); break;
|
||||
case ACTION:
|
||||
InputConnection conn = _recv.getCurrentInputConnection();
|
||||
if (conn != null)
|
||||
conn.performEditorAction(actionId);
|
||||
break;
|
||||
case SWITCH_SECOND: _recv.switch_second(); break;
|
||||
case SWITCH_SECOND_BACK: _recv.switch_primary(); break;
|
||||
case SWITCH_GREEKMATH: _recv.switch_layout(R.xml.greekmath); break;
|
||||
case SWITCH_SECOND: _recv.set_layout(Layout.Secondary); break;
|
||||
case SWITCH_SECOND_BACK: _recv.set_layout(Layout.Primary); break;
|
||||
case SWITCH_GREEKMATH: _recv.set_layout(Layout.Greekmath); break;
|
||||
case CAPS_LOCK: _recv.set_shift_state(true, true); break;
|
||||
}
|
||||
break;
|
||||
@@ -168,20 +169,24 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
conn.performContextMenuAction(id);
|
||||
}
|
||||
|
||||
public enum Layout
|
||||
{
|
||||
Current, // The primary or secondary layout
|
||||
Primary,
|
||||
Secondary,
|
||||
Numeric,
|
||||
Greekmath
|
||||
}
|
||||
|
||||
public static interface IReceiver
|
||||
{
|
||||
public void switchToNextInputMethod();
|
||||
public void switchInputMethod();
|
||||
public void switchToPrevInputMethod();
|
||||
public void setPane_emoji();
|
||||
public void setPane_normal();
|
||||
public void showKeyboardConfig();
|
||||
|
||||
public void switch_text();
|
||||
public void switch_primary();
|
||||
public void switch_second();
|
||||
public void switch_layout(int layout_id);
|
||||
|
||||
public void set_layout(Layout l);
|
||||
public void set_shift_state(boolean state, boolean lock);
|
||||
|
||||
public InputConnection getCurrentInputConnection();
|
||||
}
|
||||
|
||||
|
@@ -60,10 +60,29 @@ class KeyModifier
|
||||
case SLASH: return apply_map_char(k, map_char_slash);
|
||||
case BAR: return apply_map_char(k, map_char_bar);
|
||||
case ARROW_RIGHT: return apply_combining(k, "\u20D7");
|
||||
case DOT_BELOW: return apply_map_char(k, map_char_dot_below);
|
||||
case HORN: return apply_map_char(k, map_char_horn);
|
||||
case HOOK_ABOVE: return apply_map_char(k, map_char_hook_above);
|
||||
default: return k;
|
||||
}
|
||||
}
|
||||
|
||||
/** Modify a key after a long press. */
|
||||
public static KeyValue modify_long_press(KeyValue k)
|
||||
{
|
||||
switch (k.getKind())
|
||||
{
|
||||
case Event:
|
||||
switch (k.getEvent())
|
||||
{
|
||||
case CHANGE_METHOD_PREV:
|
||||
return KeyValue.getKeyByName("change_method");
|
||||
}
|
||||
break;
|
||||
}
|
||||
return k;
|
||||
}
|
||||
|
||||
private static KeyValue apply_map_char(KeyValue k, Map_char map)
|
||||
{
|
||||
switch (k.getKind())
|
||||
@@ -122,17 +141,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())
|
||||
{
|
||||
case "":
|
||||
if (k == KeyValue.getKeyByName("f11_placeholder"))
|
||||
name = "f11";
|
||||
else if (k == KeyValue.getKeyByName("f12_placeholder"))
|
||||
name = "f12";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Placeholder: name = apply_fn_placeholder(k.getPlaceholder()); break;
|
||||
}
|
||||
return (name == null) ? k : KeyValue.getKeyByName(name);
|
||||
}
|
||||
@@ -160,6 +169,20 @@ class KeyModifier
|
||||
}
|
||||
}
|
||||
|
||||
private static String apply_fn_placeholder(KeyValue.Placeholder p)
|
||||
{
|
||||
switch (p)
|
||||
{
|
||||
case F11: return "f11";
|
||||
case F12: return "f12";
|
||||
case SHINDOT: return "shindot";
|
||||
case SINDOT: return "sindot";
|
||||
case OLE: return "ole";
|
||||
case METEG: return "meteg";
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
/** Return the name of modified key, or [null]. */
|
||||
private static String apply_fn_char(char c)
|
||||
{
|
||||
@@ -198,6 +221,7 @@ class KeyModifier
|
||||
case ',': return "·";
|
||||
case '!': return "¡";
|
||||
case '?': return "¿";
|
||||
case '|': return "¦";
|
||||
// arrows
|
||||
case '↖': return "⇖";
|
||||
case '↑': return "⇑";
|
||||
@@ -243,6 +267,20 @@ class KeyModifier
|
||||
case '⊂': return "⊆";
|
||||
case '⊃': return "⊇";
|
||||
case '±': return "∓";
|
||||
// hebrew niqqud
|
||||
case 'ק': return "qamats"; // kamatz
|
||||
case 'ר': return "hataf_qamats"; // reduced kamatz
|
||||
case 'ו': return "holam";
|
||||
case 'ם': return "rafe";
|
||||
case 'פ': return "patah"; // patach
|
||||
case 'ש': return "sheva";
|
||||
case 'ד': return "dagesh"; // or mapiq
|
||||
case 'ח': return "hiriq";
|
||||
case 'ף': return "hataf_patah"; // reduced patach
|
||||
case 'ז': return "qubuts"; // kubuts
|
||||
case 'ס': return "segol";
|
||||
case 'ב': return "hataf_segol"; // reduced segol
|
||||
case 'צ': return "tsere";
|
||||
// other
|
||||
case ' ': return "nbsp";
|
||||
default: return null;
|
||||
@@ -551,4 +589,72 @@ class KeyModifier
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private static final Map_char map_char_dot_below =
|
||||
new Map_char() {
|
||||
public char apply(char c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'a': return 'ạ';
|
||||
case 'ă': return 'ặ';
|
||||
case 'â': return 'ậ';
|
||||
case 'e': return 'ẹ';
|
||||
case 'ê': return 'ệ';
|
||||
case 'i': return 'ị';
|
||||
case 'o': return 'ọ';
|
||||
case 'ô': return 'ộ';
|
||||
case 'ơ': return 'ợ';
|
||||
case 'u': return 'ụ';
|
||||
case 'ư': return 'ự';
|
||||
case 'y': return 'ỵ';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
};
|
||||
private static final Map_char map_char_horn =
|
||||
new Map_char() {
|
||||
public char apply(char c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'o': return 'ơ';
|
||||
case 'ó': return 'ớ';
|
||||
case 'ò': return 'ờ';
|
||||
case 'ỏ': return 'ở';
|
||||
case 'õ': return 'ỡ';
|
||||
case 'ọ': return 'ợ';
|
||||
case 'u': return 'ư';
|
||||
case 'ú': return 'ứ';
|
||||
case 'ù': return 'ừ';
|
||||
case 'ủ': return 'ử';
|
||||
case 'ũ': return 'ữ';
|
||||
case 'ụ': return 'ự';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private static final Map_char map_char_hook_above =
|
||||
new Map_char() {
|
||||
public char apply(char c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'a': return 'ả';
|
||||
case 'ă': return 'ẳ';
|
||||
case 'â': return 'ẩ';
|
||||
case 'e': return 'ẻ';
|
||||
case 'ê': return 'ể';
|
||||
case 'i': return 'ỉ';
|
||||
case 'o': return 'ỏ';
|
||||
case 'ô': return 'ổ';
|
||||
case 'ơ': return 'ở';
|
||||
case 'u': return 'ủ';
|
||||
case 'ư': return 'ử';
|
||||
case 'y': return 'ỷ';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@@ -1,6 +1,5 @@
|
||||
package juloo.keyboard2;
|
||||
|
||||
import android.view.KeyCharacterMap;
|
||||
import android.view.KeyEvent;
|
||||
import java.util.HashMap;
|
||||
|
||||
@@ -14,6 +13,7 @@ final class KeyValue
|
||||
SWITCH_EMOJI,
|
||||
SWITCH_BACK_EMOJI,
|
||||
CHANGE_METHOD,
|
||||
CHANGE_METHOD_PREV,
|
||||
ACTION,
|
||||
SWITCH_SECOND,
|
||||
SWITCH_SECOND_BACK,
|
||||
@@ -30,12 +30,15 @@ final class KeyValue
|
||||
META,
|
||||
DOUBLE_AIGU,
|
||||
DOT_ABOVE,
|
||||
DOT_BELOW,
|
||||
GRAVE,
|
||||
AIGU,
|
||||
CIRCONFLEXE,
|
||||
TILDE,
|
||||
CEDILLE,
|
||||
TREMA,
|
||||
HORN,
|
||||
HOOK_ABOVE,
|
||||
SUPERSCRIPT,
|
||||
SUBSCRIPT,
|
||||
RING,
|
||||
@@ -68,9 +71,20 @@ final class KeyValue
|
||||
AUTOFILL,
|
||||
}
|
||||
|
||||
public static enum Placeholder
|
||||
{
|
||||
REMOVED,
|
||||
F11,
|
||||
F12,
|
||||
SHINDOT,
|
||||
SINDOT,
|
||||
OLE,
|
||||
METEG
|
||||
}
|
||||
|
||||
public static enum Kind
|
||||
{
|
||||
Char, String, Keyevent, Event, Modifier, Editing
|
||||
Char, String, Keyevent, Event, Modifier, Editing, Placeholder
|
||||
}
|
||||
|
||||
// Behavior flags.
|
||||
@@ -78,7 +92,7 @@ final class KeyValue
|
||||
public static final int FLAG_LOCK = (1 << 21);
|
||||
// Special keys are not repeated and don't clear latched modifiers.
|
||||
public static final int FLAG_SPECIAL = (1 << 22);
|
||||
public static final int FLAG_PRECISE_REPEAT = (1 << 23);
|
||||
// Free flag: (1 << 23);
|
||||
// Rendering flags.
|
||||
public static final int FLAG_KEY_FONT = (1 << 24); // special font file
|
||||
public static final int FLAG_SMALLER_FONT = (1 << 25); // 25% smaller symbols
|
||||
@@ -154,6 +168,11 @@ final class KeyValue
|
||||
return Editing.values()[(_code & VALUE_BITS)];
|
||||
}
|
||||
|
||||
public Placeholder getPlaceholder()
|
||||
{
|
||||
return Placeholder.values()[(_code & VALUE_BITS)];
|
||||
}
|
||||
|
||||
/* Update the char and the symbol. */
|
||||
public KeyValue withChar(char c)
|
||||
{
|
||||
@@ -193,8 +212,6 @@ final class KeyValue
|
||||
return _symbol.hashCode() + _code;
|
||||
}
|
||||
|
||||
private static HashMap<String, KeyValue> keys = new HashMap<String, KeyValue>();
|
||||
|
||||
public KeyValue(String s, int kind, int value, int flags)
|
||||
{
|
||||
check((kind & ~KIND_BITS) == 0);
|
||||
@@ -209,169 +226,205 @@ final class KeyValue
|
||||
this(s, (k.ordinal() << 29), v, f);
|
||||
}
|
||||
|
||||
public static KeyValue getKeyByName(String name)
|
||||
private static KeyValue charKey(String symbol, char c, int flags)
|
||||
{
|
||||
return new KeyValue(symbol, Kind.Char, c, flags);
|
||||
}
|
||||
|
||||
private static KeyValue modifierKey(String symbol, Modifier m, int flags)
|
||||
{
|
||||
if (symbol.length() > 1)
|
||||
flags |= FLAG_SMALLER_FONT;
|
||||
return new KeyValue(symbol, Kind.Modifier, m.ordinal(),
|
||||
FLAG_LATCH | FLAG_SPECIAL | FLAG_SECONDARY | flags);
|
||||
}
|
||||
|
||||
private static KeyValue modifierKey(int symbol, Modifier m, int flags)
|
||||
{
|
||||
return modifierKey(String.valueOf((char)symbol), m, flags | FLAG_KEY_FONT);
|
||||
}
|
||||
|
||||
private static KeyValue diacritic(int symbol, Modifier m)
|
||||
{
|
||||
return new KeyValue(String.valueOf((char)symbol), Kind.Modifier, m.ordinal(),
|
||||
FLAG_LATCH | FLAG_SPECIAL | FLAG_KEY_FONT);
|
||||
}
|
||||
|
||||
private static KeyValue eventKey(String symbol, Event e, int flags)
|
||||
{
|
||||
return new KeyValue(symbol, Kind.Event, e.ordinal(), flags | FLAG_SPECIAL | FLAG_SECONDARY);
|
||||
}
|
||||
|
||||
private static KeyValue eventKey(int symbol, Event e, int flags)
|
||||
{
|
||||
return eventKey(String.valueOf((char)symbol), e, flags | FLAG_KEY_FONT);
|
||||
}
|
||||
|
||||
private static KeyValue keyeventKey(String symbol, int code, int flags)
|
||||
{
|
||||
return new KeyValue(symbol, Kind.Keyevent, code, flags | FLAG_SECONDARY);
|
||||
}
|
||||
|
||||
private static KeyValue keyeventKey(int symbol, int code, int flags)
|
||||
{
|
||||
return keyeventKey(String.valueOf((char)symbol), code, flags | FLAG_KEY_FONT);
|
||||
}
|
||||
|
||||
private static KeyValue editingKey(String symbol, Editing action)
|
||||
{
|
||||
return new KeyValue(symbol, Kind.Editing, action.ordinal(),
|
||||
FLAG_SPECIAL | FLAG_SECONDARY | FLAG_SMALLER_FONT);
|
||||
}
|
||||
|
||||
/** A key that do nothing but has a unique ID. */
|
||||
private static KeyValue placeholderKey(Placeholder id)
|
||||
{
|
||||
return new KeyValue("", Kind.Placeholder, id.ordinal(), 0);
|
||||
}
|
||||
|
||||
private static KeyValue fallbackMakeKey(String name)
|
||||
{
|
||||
KeyValue kv = keys.get(name);
|
||||
if (kv != null)
|
||||
return kv;
|
||||
if (name.length() == 1)
|
||||
return new KeyValue(name, Kind.Char, name.charAt(0), 0);
|
||||
else
|
||||
return new KeyValue(name, Kind.String, 0, 0);
|
||||
}
|
||||
|
||||
private static void addKey(String name, String symbol, Kind kind, int code, int flags)
|
||||
public static KeyValue getKeyByName(String name)
|
||||
{
|
||||
keys.put(name, new KeyValue(symbol, kind, code, flags));
|
||||
}
|
||||
switch (name)
|
||||
{
|
||||
case "shift": return modifierKey(0x0A, Modifier.SHIFT, 0);
|
||||
case "ctrl": return modifierKey("Ctrl", Modifier.CTRL, 0);
|
||||
case "alt": return modifierKey("Alt", Modifier.ALT, 0);
|
||||
case "accent_aigu": return diacritic(0x50, Modifier.AIGU);
|
||||
case "accent_caron": return diacritic(0x51, Modifier.CARON);
|
||||
case "accent_cedille": return diacritic(0x52, Modifier.CEDILLE);
|
||||
case "accent_circonflexe": return diacritic(0x53, Modifier.CIRCONFLEXE);
|
||||
case "accent_grave": return diacritic(0x54, Modifier.GRAVE);
|
||||
case "accent_macron": return diacritic(0x55, Modifier.MACRON);
|
||||
case "accent_ring": return diacritic(0x56, Modifier.RING);
|
||||
case "accent_tilde": return diacritic(0x57, Modifier.TILDE);
|
||||
case "accent_trema": return diacritic(0x58, Modifier.TREMA);
|
||||
case "accent_ogonek": return diacritic(0x59, Modifier.OGONEK);
|
||||
case "accent_dot_above": return diacritic(0x5A, Modifier.DOT_ABOVE);
|
||||
case "accent_double_aigu": return diacritic(0x5B, Modifier.DOUBLE_AIGU);
|
||||
case "accent_slash": return diacritic(0x5C, Modifier.SLASH);
|
||||
case "accent_arrow_right": return diacritic(0x5D, Modifier.ARROW_RIGHT);
|
||||
case "accent_breve": return diacritic(0x5E, Modifier.BREVE);
|
||||
case "accent_bar": return diacritic(0x5F, Modifier.BAR);
|
||||
case "accent_dot_below": return diacritic(0x60, Modifier.DOT_BELOW);
|
||||
case "accent_horn": return diacritic(0x61, Modifier.HORN);
|
||||
case "accent_hook_above": return diacritic(0x62, Modifier.HOOK_ABOVE);
|
||||
case "superscript": return modifierKey("Sup", Modifier.SUPERSCRIPT, 0);
|
||||
case "subscript": return modifierKey("Sub", Modifier.SUBSCRIPT, 0);
|
||||
case "ordinal": return modifierKey("Ord", Modifier.ORDINAL, 0);
|
||||
case "arrows": return modifierKey("Arr", Modifier.ARROWS, 0);
|
||||
case "box": return modifierKey("Box", Modifier.BOX, 0);
|
||||
case "fn": return modifierKey("Fn", Modifier.FN, 0);
|
||||
case "meta": return modifierKey("Meta", Modifier.META, 0);
|
||||
|
||||
private static void addCharKey(String name, String symbol, char c, int flags)
|
||||
{
|
||||
addKey(name, symbol, Kind.Char, c, flags);
|
||||
}
|
||||
case "config": return eventKey(0x04, Event.CONFIG, FLAG_SMALLER_FONT);
|
||||
case "switch_text": return eventKey("ABC", Event.SWITCH_TEXT, FLAG_SMALLER_FONT);
|
||||
case "switch_numeric": return eventKey("123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT);
|
||||
case "switch_emoji": return eventKey(0x01, Event.SWITCH_EMOJI, FLAG_SMALLER_FONT);
|
||||
case "switch_back_emoji": return eventKey("ABC", Event.SWITCH_BACK_EMOJI, 0);
|
||||
case "switch_second": return eventKey(0x13, Event.SWITCH_SECOND, FLAG_SMALLER_FONT);
|
||||
case "switch_second_back": return eventKey(0x14, Event.SWITCH_SECOND_BACK, FLAG_SMALLER_FONT);
|
||||
case "switch_greekmath": return eventKey("πλ∇¬", Event.SWITCH_GREEKMATH, FLAG_SMALLER_FONT);
|
||||
case "change_method": return eventKey(0x09, Event.CHANGE_METHOD, FLAG_SMALLER_FONT);
|
||||
case "change_method_prev": return eventKey(0x09, Event.CHANGE_METHOD_PREV, FLAG_SMALLER_FONT);
|
||||
case "action": return eventKey("Action", Event.ACTION, FLAG_SMALLER_FONT); // Will always be replaced
|
||||
case "capslock": return eventKey(0x12, Event.CAPS_LOCK, 0);
|
||||
|
||||
private static void addModifierKey(String name, String symbol, Modifier m, int flags)
|
||||
{
|
||||
if (symbol.length() > 1)
|
||||
flags |= FLAG_SMALLER_FONT;
|
||||
addKey(name, symbol, Kind.Modifier, m.ordinal(),
|
||||
FLAG_LATCH | FLAG_SPECIAL | FLAG_SECONDARY | flags);
|
||||
}
|
||||
case "esc": return keyeventKey("Esc", KeyEvent.KEYCODE_ESCAPE, FLAG_SMALLER_FONT);
|
||||
case "enter": return keyeventKey(0x0E, KeyEvent.KEYCODE_ENTER, 0);
|
||||
case "up": return keyeventKey(0x05, KeyEvent.KEYCODE_DPAD_UP, 0);
|
||||
case "right": return keyeventKey(0x06, KeyEvent.KEYCODE_DPAD_RIGHT, 0);
|
||||
case "down": return keyeventKey(0x07, KeyEvent.KEYCODE_DPAD_DOWN, 0);
|
||||
case "left": return keyeventKey(0x08, KeyEvent.KEYCODE_DPAD_LEFT, 0);
|
||||
case "page_up": return keyeventKey(0x02, KeyEvent.KEYCODE_PAGE_UP, 0);
|
||||
case "page_down": return keyeventKey(0x03, KeyEvent.KEYCODE_PAGE_DOWN, 0);
|
||||
case "home": return keyeventKey(0x0B, KeyEvent.KEYCODE_MOVE_HOME, 0);
|
||||
case "end": return keyeventKey(0x0C, KeyEvent.KEYCODE_MOVE_END, 0);
|
||||
case "backspace": return keyeventKey(0x11, KeyEvent.KEYCODE_DEL, 0);
|
||||
case "delete": return keyeventKey(0x10, KeyEvent.KEYCODE_FORWARD_DEL, 0);
|
||||
case "insert": return keyeventKey("Ins", KeyEvent.KEYCODE_INSERT, FLAG_SMALLER_FONT);
|
||||
case "f1": return keyeventKey("F1", KeyEvent.KEYCODE_F1, 0);
|
||||
case "f2": return keyeventKey("F2", KeyEvent.KEYCODE_F2, 0);
|
||||
case "f3": return keyeventKey("F3", KeyEvent.KEYCODE_F3, 0);
|
||||
case "f4": return keyeventKey("F4", KeyEvent.KEYCODE_F4, 0);
|
||||
case "f5": return keyeventKey("F5", KeyEvent.KEYCODE_F5, 0);
|
||||
case "f6": return keyeventKey("F6", KeyEvent.KEYCODE_F6, 0);
|
||||
case "f7": return keyeventKey("F7", KeyEvent.KEYCODE_F7, 0);
|
||||
case "f8": return keyeventKey("F8", KeyEvent.KEYCODE_F8, 0);
|
||||
case "f9": return keyeventKey("F9", KeyEvent.KEYCODE_F9, 0);
|
||||
case "f10": return keyeventKey("F10", KeyEvent.KEYCODE_F10, 0);
|
||||
case "f11": return keyeventKey("F11", KeyEvent.KEYCODE_F11, FLAG_SMALLER_FONT);
|
||||
case "f12": return keyeventKey("F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT);
|
||||
case "tab": return keyeventKey(0x0F, KeyEvent.KEYCODE_TAB, FLAG_SMALLER_FONT);
|
||||
|
||||
private static void addModifierKey(String name, int symbol, Modifier m, int flags)
|
||||
{
|
||||
addModifierKey(name, String.valueOf((char)symbol), m, flags | FLAG_KEY_FONT);
|
||||
}
|
||||
case "\\t": return charKey("\\t", '\t', 0); // Send the tab character
|
||||
case "space": return charKey("\r", ' ', FLAG_KEY_FONT | FLAG_SECONDARY);
|
||||
case "nbsp": return charKey("\u237d", '\u00a0', FLAG_SMALLER_FONT);
|
||||
|
||||
private static void addDiacritic(String name, int symbol, Modifier m)
|
||||
{
|
||||
addKey(name, String.valueOf((char)symbol), Kind.Modifier, m.ordinal(),
|
||||
FLAG_LATCH | FLAG_SPECIAL | FLAG_KEY_FONT);
|
||||
}
|
||||
/* bidi */
|
||||
case "lrm": return charKey("↱", '\u200e', 0); // Send left-to-right mark
|
||||
case "rlm": return charKey("↰", '\u200f', 0); // Send right-to-left mark
|
||||
case "b(": return charKey("(", ')', 0);
|
||||
case "b)": return charKey(")", '(', 0);
|
||||
case "b[": return charKey("[", ']', 0);
|
||||
case "b]": return charKey("]", '[', 0);
|
||||
case "b{": return charKey("{", '}', 0);
|
||||
case "b}": return charKey("}", '{', 0);
|
||||
case "blt": return charKey("<", '>', 0);
|
||||
case "bgt": return charKey(">", '<', 0);
|
||||
|
||||
private static void addEventKey(String name, String symbol, Event e, int flags)
|
||||
{
|
||||
addKey(name, symbol, Kind.Event, e.ordinal(), flags | FLAG_SPECIAL | FLAG_SECONDARY);
|
||||
}
|
||||
case "removed": return placeholderKey(Placeholder.REMOVED);
|
||||
case "f11_placeholder": return placeholderKey(Placeholder.F11);
|
||||
case "f12_placeholder": return placeholderKey(Placeholder.F12);
|
||||
|
||||
private static void addEventKey(String name, int symbol, Event e, int flags)
|
||||
{
|
||||
addEventKey(name, String.valueOf((char)symbol), e, flags | FLAG_KEY_FONT);
|
||||
}
|
||||
/* hebrew niqqud */
|
||||
case "qamats": return charKey("\u05E7\u05B8", '\u05B8', 0); // kamatz
|
||||
case "patah": return charKey("\u05E4\u05B7", '\u05B7', 0); // patach
|
||||
case "sheva": return charKey("\u05E9\u05B0", '\u05B0', 0);
|
||||
case "dagesh": return charKey("\u05D3\u05BC", '\u05BC', 0); // or mapiq
|
||||
case "hiriq": return charKey("\u05D7\u05B4", '\u05B4', 0);
|
||||
case "segol": return charKey("\u05E1\u05B6", '\u05B6', 0);
|
||||
case "tsere": return charKey("\u05E6\u05B5", '\u05B5', 0);
|
||||
case "holam": return charKey("\u05D5\u05B9", '\u05B9', 0);
|
||||
case "qubuts": return charKey("\u05E7\u05BB", '\u05BB', 0); // kubuts
|
||||
case "hataf_patah": return charKey("\u05D7\u05B2\u05E4\u05B7", '\u05B2', 0); // reduced patach
|
||||
case "hataf_qamats": return charKey("\u05D7\u05B3\u05E7\u05B8", '\u05B3', 0); // reduced kamatz
|
||||
case "hataf_segol": return charKey("\u05D7\u05B1\u05E1\u05B6", '\u05B1', 0); // reduced segol
|
||||
case "shindot": return charKey("\u05E9\u05C1", '\u05C1', 0);
|
||||
case "shindot_placeholder": return placeholderKey(Placeholder.SHINDOT);
|
||||
case "sindot": return charKey("\u05E9\u05C2", '\u05C2', 0);
|
||||
case "sindot_placeholder": return placeholderKey(Placeholder.SINDOT);
|
||||
/* hebrew punctuation */
|
||||
case "geresh": return charKey("\u05F3", '\u05F3', 0);
|
||||
case "gershayim": return charKey("\u05F4", '\u05F4', 0);
|
||||
case "maqaf": return charKey("\u05BE", '\u05BE', 0);
|
||||
/* hebrew biblical */
|
||||
case "rafe": return charKey("\u05E4\u05BF", '\u05BF', 0);
|
||||
case "ole": return charKey("\u05E2\u05AB", '\u05AB', 0);
|
||||
case "ole_placeholder": return placeholderKey(Placeholder.OLE);
|
||||
case "meteg": return charKey("\u05DE\u05BD", '\u05BD', 0); // or siluq or sof-pasuq
|
||||
case "meteg_placeholder": return placeholderKey(Placeholder.METEG);
|
||||
|
||||
private static void addKeyeventKey(String name, String symbol, int code, int flags)
|
||||
{
|
||||
addKey(name, symbol, Kind.Keyevent, code, flags | FLAG_SECONDARY);
|
||||
}
|
||||
|
||||
private static void addKeyeventKey(String name, int symbol, int code, int flags)
|
||||
{
|
||||
addKeyeventKey(name, String.valueOf((char)symbol), code, flags | FLAG_KEY_FONT);
|
||||
}
|
||||
|
||||
private static void addEditingKey(String name, String symbol, Editing action)
|
||||
{
|
||||
addKey(name, symbol, Kind.Editing, action.ordinal(),
|
||||
FLAG_SPECIAL | FLAG_SECONDARY | FLAG_SMALLER_FONT);
|
||||
}
|
||||
|
||||
// Within VALUE_BITS
|
||||
private static int placeholder_unique_id = 0;
|
||||
|
||||
/** Use a unique id as the value because the symbol is shared between every
|
||||
placeholders (it is the empty string). */
|
||||
private static void addPlaceholderKey(String name)
|
||||
{
|
||||
addKey(name, "", Kind.String, placeholder_unique_id++, 0);
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
addModifierKey("shift", 0x0A, Modifier.SHIFT, 0);
|
||||
addModifierKey("ctrl", "Ctrl", Modifier.CTRL, 0);
|
||||
addModifierKey("alt", "Alt", Modifier.ALT, 0);
|
||||
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);
|
||||
addDiacritic("accent_bar", 0x5F, Modifier.BAR);
|
||||
addModifierKey("superscript", "Sup", Modifier.SUPERSCRIPT, 0);
|
||||
addModifierKey("subscript", "Sub", Modifier.SUBSCRIPT, 0);
|
||||
addModifierKey("ordinal", "Ord", Modifier.ORDINAL, 0);
|
||||
addModifierKey("arrows", "Arr", Modifier.ARROWS, 0);
|
||||
addModifierKey("box", "Box", Modifier.BOX, 0);
|
||||
addModifierKey("fn", "Fn", Modifier.FN, 0);
|
||||
addModifierKey("meta", "Meta", Modifier.META, 0);
|
||||
|
||||
addEventKey("config", 0x04, Event.CONFIG, FLAG_SMALLER_FONT);
|
||||
addEventKey("switch_text", "ABC", Event.SWITCH_TEXT, FLAG_SMALLER_FONT);
|
||||
addEventKey("switch_numeric", "123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT);
|
||||
addEventKey("switch_emoji", 0x01, Event.SWITCH_EMOJI, FLAG_SMALLER_FONT);
|
||||
addEventKey("switch_back_emoji", "ABC", Event.SWITCH_BACK_EMOJI, 0);
|
||||
addEventKey("switch_second", 0x13, Event.SWITCH_SECOND, FLAG_SMALLER_FONT);
|
||||
addEventKey("switch_second_back", 0x14, Event.SWITCH_SECOND_BACK, FLAG_SMALLER_FONT);
|
||||
addEventKey("switch_greekmath", "πλ∇¬", Event.SWITCH_GREEKMATH, FLAG_SMALLER_FONT);
|
||||
addEventKey("change_method", 0x09, Event.CHANGE_METHOD, FLAG_SMALLER_FONT);
|
||||
addEventKey("action", "Action", Event.ACTION, FLAG_SMALLER_FONT); // Will always be replaced
|
||||
addEventKey("capslock", 0x12, Event.CAPS_LOCK, 0);
|
||||
|
||||
addKeyeventKey("esc", "Esc", KeyEvent.KEYCODE_ESCAPE, FLAG_SMALLER_FONT);
|
||||
addKeyeventKey("enter", 0x0E, KeyEvent.KEYCODE_ENTER, 0);
|
||||
addKeyeventKey("up", 0x05, KeyEvent.KEYCODE_DPAD_UP, FLAG_PRECISE_REPEAT);
|
||||
addKeyeventKey("right", 0x06, KeyEvent.KEYCODE_DPAD_RIGHT, FLAG_PRECISE_REPEAT);
|
||||
addKeyeventKey("down", 0x07, KeyEvent.KEYCODE_DPAD_DOWN, FLAG_PRECISE_REPEAT);
|
||||
addKeyeventKey("left", 0x08, KeyEvent.KEYCODE_DPAD_LEFT, FLAG_PRECISE_REPEAT);
|
||||
addKeyeventKey("page_up", 0x02, KeyEvent.KEYCODE_PAGE_UP, 0);
|
||||
addKeyeventKey("page_down", 0x03, KeyEvent.KEYCODE_PAGE_DOWN, 0);
|
||||
addKeyeventKey("home", 0x0B, KeyEvent.KEYCODE_MOVE_HOME, 0);
|
||||
addKeyeventKey("end", 0x0C, KeyEvent.KEYCODE_MOVE_END, 0);
|
||||
addKeyeventKey("backspace", 0x11, KeyEvent.KEYCODE_DEL, 0);
|
||||
addKeyeventKey("delete", 0x10, KeyEvent.KEYCODE_FORWARD_DEL, 0);
|
||||
addKeyeventKey("insert", "Ins", KeyEvent.KEYCODE_INSERT, FLAG_SMALLER_FONT);
|
||||
addKeyeventKey("f1", "F1", KeyEvent.KEYCODE_F1, 0);
|
||||
addKeyeventKey("f2", "F2", KeyEvent.KEYCODE_F2, 0);
|
||||
addKeyeventKey("f3", "F3", KeyEvent.KEYCODE_F3, 0);
|
||||
addKeyeventKey("f4", "F4", KeyEvent.KEYCODE_F4, 0);
|
||||
addKeyeventKey("f5", "F5", KeyEvent.KEYCODE_F5, 0);
|
||||
addKeyeventKey("f6", "F6", KeyEvent.KEYCODE_F6, 0);
|
||||
addKeyeventKey("f7", "F7", KeyEvent.KEYCODE_F7, 0);
|
||||
addKeyeventKey("f8", "F8", KeyEvent.KEYCODE_F8, 0);
|
||||
addKeyeventKey("f9", "F9", KeyEvent.KEYCODE_F9, 0);
|
||||
addKeyeventKey("f10", "F10", KeyEvent.KEYCODE_F10, 0);
|
||||
addKeyeventKey("f11", "F11", KeyEvent.KEYCODE_F11, FLAG_SMALLER_FONT);
|
||||
addKeyeventKey("f12", "F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT);
|
||||
addKeyeventKey("tab", 0x0F, KeyEvent.KEYCODE_TAB, FLAG_SMALLER_FONT);
|
||||
|
||||
addCharKey("\\t", "\\t", '\t', 0); // Send the tab character
|
||||
addCharKey("space", "\r", ' ', FLAG_KEY_FONT | FLAG_SECONDARY);
|
||||
addCharKey("nbsp", "\u237d", '\u00a0', FLAG_SMALLER_FONT);
|
||||
|
||||
addPlaceholderKey("removed");
|
||||
addPlaceholderKey("f11_placeholder");
|
||||
addPlaceholderKey("f12_placeholder");
|
||||
|
||||
addEditingKey("copy", "copy", Editing.COPY);
|
||||
addEditingKey("paste", "paste", Editing.PASTE);
|
||||
addEditingKey("cut", "cut", Editing.CUT);
|
||||
addEditingKey("selectAll", "s. all", Editing.SELECT_ALL);
|
||||
addEditingKey("shareText", "share", Editing.SHARE);
|
||||
addEditingKey("pasteAsPlainText", "<paste>", Editing.PASTE_PLAIN);
|
||||
addEditingKey("undo", "undo", Editing.UNDO);
|
||||
addEditingKey("redo", "redo", Editing.REDO);
|
||||
addEditingKey("replaceText", "repl.", Editing.REPLACE);
|
||||
addEditingKey("textAssist", "assist", Editing.ASSIST);
|
||||
addEditingKey("autofill", "auto.", Editing.AUTOFILL);
|
||||
case "copy": return editingKey("copy", Editing.COPY);
|
||||
case "paste": return editingKey("paste", Editing.PASTE);
|
||||
case "cut": return editingKey("cut", Editing.CUT);
|
||||
case "selectAll": return editingKey("s. all", Editing.SELECT_ALL);
|
||||
case "shareText": return editingKey("share", Editing.SHARE);
|
||||
case "pasteAsPlainText": return editingKey("<paste>", Editing.PASTE_PLAIN);
|
||||
case "undo": return editingKey("undo", Editing.UNDO);
|
||||
case "redo": return editingKey("redo", Editing.REDO);
|
||||
case "replaceText": return editingKey("repl.", Editing.REPLACE);
|
||||
case "textAssist": return editingKey("assist", Editing.ASSIST);
|
||||
case "autofill": return editingKey("auto.", Editing.AUTOFILL);
|
||||
default: return fallbackMakeKey(name);
|
||||
}
|
||||
}
|
||||
|
||||
static final HashMap<String, String> keys_descr = new HashMap<String, String>();
|
||||
|
@@ -47,9 +47,14 @@ public class Keyboard2 extends InputMethodService
|
||||
{
|
||||
if (_currentSpecialLayout != null)
|
||||
return _currentSpecialLayout;
|
||||
KeyboardData layout;
|
||||
if (_currentTextLayout == Current_text_layout.SECONDARY)
|
||||
return _config.second_layout;
|
||||
return (_config.layout == null) ? _localeTextLayout : _config.layout;
|
||||
layout = _config.second_layout;
|
||||
else if (_config.layout == null)
|
||||
layout = _localeTextLayout;
|
||||
else
|
||||
layout = _config.layout;
|
||||
return _config.modify_layout(layout);
|
||||
}
|
||||
|
||||
void setTextLayout(Current_text_layout layout)
|
||||
@@ -59,6 +64,17 @@ public class Keyboard2 extends InputMethodService
|
||||
_keyboardView.setKeyboard(current_layout());
|
||||
}
|
||||
|
||||
void setSpecialLayout(KeyboardData l)
|
||||
{
|
||||
_currentSpecialLayout = l;
|
||||
_keyboardView.setKeyboard(l);
|
||||
}
|
||||
|
||||
KeyboardData loadLayout(int layout_id)
|
||||
{
|
||||
return KeyboardData.load(getResources(), layout_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate()
|
||||
{
|
||||
@@ -243,7 +259,8 @@ public class Keyboard2 extends InputMethodService
|
||||
case InputType.TYPE_CLASS_NUMBER:
|
||||
case InputType.TYPE_CLASS_PHONE:
|
||||
case InputType.TYPE_CLASS_DATETIME:
|
||||
_currentSpecialLayout = KeyboardData.load_pin_entry(getResources());
|
||||
_currentSpecialLayout =
|
||||
_config.modify_numpad(KeyboardData.load_pin_entry(getResources()));
|
||||
break;
|
||||
default:
|
||||
_currentSpecialLayout = null;
|
||||
@@ -312,12 +329,21 @@ public class Keyboard2 extends InputMethodService
|
||||
/** Not static */
|
||||
public class Receiver implements KeyEventHandler.IReceiver
|
||||
{
|
||||
public void switchToNextInputMethod()
|
||||
public void switchInputMethod()
|
||||
{
|
||||
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
|
||||
imm.showInputMethodPicker();
|
||||
// deprecated in version 28: imm.switchToNextInputMethod(getConnectionToken(), false);
|
||||
// added in version 28: switchToNextInputMethod(false);
|
||||
}
|
||||
|
||||
public void switchToPrevInputMethod()
|
||||
{
|
||||
if (VERSION.SDK_INT < 28)
|
||||
{
|
||||
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
|
||||
imm.switchToLastInputMethod(getConnectionToken());
|
||||
}
|
||||
else
|
||||
Keyboard2.this.switchToPreviousInputMethod();
|
||||
}
|
||||
|
||||
public void setPane_emoji()
|
||||
@@ -337,26 +363,28 @@ public class Keyboard2 extends InputMethodService
|
||||
_keyboardView.set_shift_state(state, lock);
|
||||
}
|
||||
|
||||
public void switch_text()
|
||||
public void set_layout(KeyEventHandler.Layout l)
|
||||
{
|
||||
_currentSpecialLayout = null;
|
||||
_keyboardView.setKeyboard(current_layout());
|
||||
}
|
||||
|
||||
public void switch_layout(int layout_id)
|
||||
{
|
||||
_keyboardView.setKeyboard(KeyboardData.load(getResources(), layout_id));
|
||||
}
|
||||
|
||||
public void switch_second()
|
||||
{
|
||||
if (_config.second_layout != null)
|
||||
setTextLayout(Current_text_layout.SECONDARY);
|
||||
}
|
||||
|
||||
public void switch_primary()
|
||||
{
|
||||
setTextLayout(Current_text_layout.PRIMARY);
|
||||
switch (l)
|
||||
{
|
||||
case Current:
|
||||
_currentSpecialLayout = null;
|
||||
_keyboardView.setKeyboard(current_layout());
|
||||
break;
|
||||
case Primary:
|
||||
setTextLayout(Current_text_layout.PRIMARY);
|
||||
break;
|
||||
case Secondary:
|
||||
if (_config.second_layout != null)
|
||||
setTextLayout(Current_text_layout.SECONDARY);
|
||||
break;
|
||||
case Numeric:
|
||||
setSpecialLayout(_config.modify_numpad(loadLayout(R.xml.numeric)));
|
||||
break;
|
||||
case Greekmath:
|
||||
setSpecialLayout(_config.modify_numpad(loadLayout(R.xml.greekmath)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void showKeyboardConfig()
|
||||
|
@@ -81,7 +81,7 @@ public class Keyboard2View extends View
|
||||
|
||||
public void setKeyboard(KeyboardData kw)
|
||||
{
|
||||
_keyboard = _config.modify_layout(kw);
|
||||
_keyboard = kw;
|
||||
_shift_kv = KeyValue.getKeyByName("shift");
|
||||
_shift_key = _keyboard.findKeyWithValue(_shift_kv);
|
||||
if (_shift_key == null)
|
||||
|
@@ -9,6 +9,7 @@ import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
||||
@@ -19,17 +20,13 @@ class KeyboardData
|
||||
public final float keysWidth;
|
||||
/** Total height of the keyboard. */
|
||||
public final float keysHeight;
|
||||
/** Whether to add extra keys. */
|
||||
public final boolean extra_keys;
|
||||
/** Whether to possibly add NumPad. */
|
||||
public final boolean num_pad;
|
||||
|
||||
public KeyboardData mapKeys(MapKey f)
|
||||
{
|
||||
ArrayList<Row> rows_ = new ArrayList<Row>();
|
||||
for (Row r : rows)
|
||||
rows_.add(r.mapKeys(f));
|
||||
return new KeyboardData(rows_, keysWidth, extra_keys, num_pad);
|
||||
return new KeyboardData(rows_, keysWidth);
|
||||
}
|
||||
|
||||
/** Add keys from the given iterator into the keyboard. Extra keys are added
|
||||
@@ -38,8 +35,6 @@ class KeyboardData
|
||||
* third row. */
|
||||
public KeyboardData addExtraKeys(Iterator<KeyValue> k)
|
||||
{
|
||||
if (!extra_keys)
|
||||
return this;
|
||||
ArrayList<Row> rows = new ArrayList<Row>(this.rows);
|
||||
addExtraKeys_to_row(rows, k, 1, 4);
|
||||
addExtraKeys_to_row(rows, k, 1, 3);
|
||||
@@ -51,15 +46,13 @@ class KeyboardData
|
||||
for (int c = 1; c <= 4; c++)
|
||||
addExtraKeys_to_row(rows, k, r, c);
|
||||
}
|
||||
return new KeyboardData(rows, keysWidth, extra_keys, num_pad);
|
||||
return new KeyboardData(rows, keysWidth);
|
||||
}
|
||||
|
||||
public KeyboardData addNumPad()
|
||||
{
|
||||
if (!num_pad)
|
||||
return this;
|
||||
ArrayList<Row> extendedRows = new ArrayList<Row>();
|
||||
Iterator<Row> iterNumPadRows = _num_pad.rows.iterator();
|
||||
Iterator<Row> iterNumPadRows = num_pad.rows.iterator();
|
||||
for (Row row : rows)
|
||||
{
|
||||
ArrayList<KeyboardData.Key> keys = new ArrayList<Key>(row.keys);
|
||||
@@ -76,7 +69,13 @@ class KeyboardData
|
||||
}
|
||||
extendedRows.add(new Row(keys, row.height, row.shift));
|
||||
}
|
||||
return new KeyboardData(extendedRows, compute_max_width(extendedRows), extra_keys, num_pad);
|
||||
return new KeyboardData(extendedRows, compute_max_width(extendedRows));
|
||||
}
|
||||
|
||||
public KeyboardData addNumberRow()
|
||||
{
|
||||
rows.add(0, number_row.updateWidth(keysWidth));
|
||||
return this;
|
||||
}
|
||||
|
||||
public Key findKeyWithValue(KeyValue kv)
|
||||
@@ -90,6 +89,12 @@ class KeyboardData
|
||||
return null;
|
||||
}
|
||||
|
||||
public void getKeys(Set<KeyValue> dst)
|
||||
{
|
||||
for (Row r : rows)
|
||||
r.getKeys(dst);
|
||||
}
|
||||
|
||||
private static void addExtraKeys_to_row(ArrayList<Row> rows, final Iterator<KeyValue> extra_keys, int row_i, final int d)
|
||||
{
|
||||
if (!extra_keys.hasNext())
|
||||
@@ -104,17 +109,19 @@ class KeyboardData
|
||||
}));
|
||||
}
|
||||
|
||||
private static Row _bottom_row;
|
||||
private static KeyboardData _num_pad;
|
||||
private static KeyboardData _pin_entry;
|
||||
public static Row bottom_row;
|
||||
public static Row number_row;
|
||||
public static KeyboardData num_pad;
|
||||
public static KeyboardData pin_entry;
|
||||
private static Map<Integer, KeyboardData> _layoutCache = new HashMap<Integer, KeyboardData>();
|
||||
|
||||
public static void init(Resources res)
|
||||
{
|
||||
try
|
||||
{
|
||||
_bottom_row = parse_bottom_row(res.getXml(R.xml.bottom_row));
|
||||
_num_pad = parse_keyboard(res.getXml(R.xml.numpad));
|
||||
bottom_row = parse_row(res.getXml(R.xml.bottom_row));
|
||||
number_row = parse_row(res.getXml(R.xml.number_row));
|
||||
num_pad = parse_keyboard(res.getXml(R.xml.numpad));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -124,9 +131,9 @@ class KeyboardData
|
||||
|
||||
public static KeyboardData load_pin_entry(Resources res)
|
||||
{
|
||||
if (_pin_entry == null)
|
||||
_pin_entry = load(res, R.xml.pin);
|
||||
return _pin_entry;
|
||||
if (pin_entry == null)
|
||||
pin_entry = load(res, R.xml.pin);
|
||||
return pin_entry;
|
||||
}
|
||||
|
||||
/** Load a layout from a resource ID. Returns [null] on error. */
|
||||
@@ -169,17 +176,15 @@ class KeyboardData
|
||||
{
|
||||
if (!expect_tag(parser, "keyboard"))
|
||||
throw new Exception("Empty layout file");
|
||||
boolean bottom_row = attribute_bool(parser, "bottom_row", true);
|
||||
boolean extra_keys = attribute_bool(parser, "extra_keys", true);
|
||||
boolean num_pad = attribute_bool(parser, "num_pad", true);
|
||||
boolean add_bottom_row = attribute_bool(parser, "bottom_row", true);
|
||||
float specified_kw = attribute_float(parser, "width", 0f);
|
||||
ArrayList<Row> rows = new ArrayList<Row>();
|
||||
while (expect_tag(parser, "row"))
|
||||
rows.add(Row.parse(parser));
|
||||
float kw = (specified_kw != 0f) ? specified_kw : compute_max_width(rows);
|
||||
if (bottom_row)
|
||||
rows.add(_bottom_row.updateWidth(kw));
|
||||
return new KeyboardData(rows, kw, extra_keys, num_pad);
|
||||
if (add_bottom_row)
|
||||
rows.add(bottom_row.updateWidth(kw));
|
||||
return new KeyboardData(rows, kw);
|
||||
}
|
||||
|
||||
private static float compute_max_width(List<Row> rows)
|
||||
@@ -190,14 +195,14 @@ class KeyboardData
|
||||
return w;
|
||||
}
|
||||
|
||||
private static Row parse_bottom_row(XmlPullParser parser) throws Exception
|
||||
private static Row parse_row(XmlPullParser parser) throws Exception
|
||||
{
|
||||
if (!expect_tag(parser, "row"))
|
||||
throw new Exception("Failed to parse bottom row");
|
||||
throw new Exception("Failed to parse row");
|
||||
return Row.parse(parser);
|
||||
}
|
||||
|
||||
protected KeyboardData(List<Row> rows_, float kw, boolean xk, boolean np)
|
||||
protected KeyboardData(List<Row> rows_, float kw)
|
||||
{
|
||||
float kh = 0.f;
|
||||
for (Row r : rows_)
|
||||
@@ -205,8 +210,6 @@ class KeyboardData
|
||||
rows = rows_;
|
||||
keysWidth = kw;
|
||||
keysHeight = kh;
|
||||
extra_keys = xk;
|
||||
num_pad = np;
|
||||
}
|
||||
|
||||
public static class Row
|
||||
@@ -240,6 +243,12 @@ class KeyboardData
|
||||
return new Row(keys, h, shift);
|
||||
}
|
||||
|
||||
public void getKeys(Set<KeyValue> dst)
|
||||
{
|
||||
for (Key k : keys)
|
||||
k.getKeys(dst);
|
||||
}
|
||||
|
||||
public Row mapKeys(MapKey f)
|
||||
{
|
||||
ArrayList<Key> keys_ = new ArrayList<Key>();
|
||||
@@ -285,9 +294,13 @@ class KeyboardData
|
||||
public final float shift;
|
||||
/** Put keys 1 to 4 on the edges instead of the corners. */
|
||||
public final boolean edgekeys;
|
||||
/** Keys 2 and 3 are repeated as the finger moves laterally on the key.
|
||||
Used for the left and right arrow keys on the space bar. */
|
||||
public final boolean slider;
|
||||
/** String printed on the keys. It has no other effect. */
|
||||
public final String indication;
|
||||
|
||||
protected Key(Corner k0, Corner k1, Corner k2, Corner k3, Corner k4, float w, float s, boolean e, String i)
|
||||
protected Key(Corner k0, Corner k1, Corner k2, Corner k3, Corner k4, float w, float s, boolean e, boolean sl, String i)
|
||||
{
|
||||
key0 = k0;
|
||||
key1 = k1;
|
||||
@@ -297,6 +310,7 @@ class KeyboardData
|
||||
width = w;
|
||||
shift = s;
|
||||
edgekeys = e;
|
||||
slider = sl;
|
||||
indication = i;
|
||||
}
|
||||
|
||||
@@ -310,19 +324,31 @@ class KeyboardData
|
||||
float width = attribute_float(parser, "width", 1f);
|
||||
float shift = attribute_float(parser, "shift", 0.f);
|
||||
boolean edgekeys = attribute_bool(parser, "edgekeys", false);
|
||||
boolean slider = attribute_bool(parser, "slider", false);
|
||||
String indication = parser.getAttributeValue(null, "indication");
|
||||
while (parser.next() != XmlPullParser.END_TAG)
|
||||
continue ;
|
||||
return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys, indication);
|
||||
return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys, slider, indication);
|
||||
}
|
||||
|
||||
/** New key with the width multiplied by 's'. */
|
||||
public Key scaleWidth(float s)
|
||||
{
|
||||
return new Key(key0, key1, key2, key3, key4, width * s, shift, edgekeys,
|
||||
indication);
|
||||
slider, indication);
|
||||
}
|
||||
|
||||
public void getKeys(Set<KeyValue> dst)
|
||||
{
|
||||
getCorner(dst, key0);
|
||||
getCorner(dst, key1);
|
||||
getCorner(dst, key2);
|
||||
getCorner(dst, key3);
|
||||
getCorner(dst, key4);
|
||||
}
|
||||
|
||||
void getCorner(Set<KeyValue> dst, Corner k) { if (k != null) dst.add(k.kv); }
|
||||
|
||||
public KeyValue getKeyValue(int i)
|
||||
{
|
||||
Corner c;
|
||||
@@ -350,12 +376,14 @@ class KeyboardData
|
||||
case 3: k3 = k; break;
|
||||
case 4: k4 = k; break;
|
||||
}
|
||||
return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys, indication);
|
||||
return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys, slider,
|
||||
indication);
|
||||
}
|
||||
|
||||
public Key withShift(float s)
|
||||
{
|
||||
return new Key(key0, key1, key2, key3, key4, width, s, edgekeys, indication);
|
||||
return new Key(key0, key1, key2, key3, key4, width, s, edgekeys, slider,
|
||||
indication);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -462,14 +490,9 @@ class KeyboardData
|
||||
|
||||
public Key apply(Key k)
|
||||
{
|
||||
return new Key(apply_key0(k.key0), apply(k.key1), apply(k.key2),
|
||||
return new Key(apply(k.key0), apply(k.key1), apply(k.key2),
|
||||
apply(k.key3), apply(k.key4), k.width, k.shift, k.edgekeys,
|
||||
k.indication);
|
||||
}
|
||||
|
||||
protected Corner apply_key0(Corner c)
|
||||
{
|
||||
return apply(c);
|
||||
k.slider, k.indication);
|
||||
}
|
||||
|
||||
protected Corner apply(Corner c)
|
||||
|
@@ -103,6 +103,11 @@ public final class Pointers implements Handler.Callback
|
||||
Pointer ptr = getPtr(pointerId);
|
||||
if (ptr == null)
|
||||
return;
|
||||
if (ptr.sliding)
|
||||
{
|
||||
onTouchUp_sliding(ptr);
|
||||
return;
|
||||
}
|
||||
stopKeyRepeat(ptr);
|
||||
Pointer latched = getLatched(ptr);
|
||||
if (latched != null) // Already latched
|
||||
@@ -147,10 +152,9 @@ public final class Pointers implements Handler.Callback
|
||||
|
||||
public void onTouchDown(float x, float y, int pointerId, KeyboardData.Key key)
|
||||
{
|
||||
// Ignore new presses while a modulated key is active. On some devices,
|
||||
// ghost touch events can happen while the pointer travels on top of other
|
||||
// keys.
|
||||
if (isModulatedKeyPressed())
|
||||
// Ignore new presses while a sliding key is active. On some devices, ghost
|
||||
// touch events can happen while the pointer travels on top of other keys.
|
||||
if (isSliding())
|
||||
return;
|
||||
// Don't take latched modifiers into account if an other key is pressed.
|
||||
// The other key already "own" the latched modifiers and will clear them.
|
||||
@@ -203,12 +207,16 @@ public final class Pointers implements Handler.Callback
|
||||
// The position in a IME windows is clampled to view.
|
||||
// For a better up swipe behaviour, set the y position to a negative value when clamped.
|
||||
if (y == 0.0) y = -400;
|
||||
|
||||
float dx = x - ptr.downX;
|
||||
float dy = y - ptr.downY;
|
||||
float dist = Math.abs(dx) + Math.abs(dy);
|
||||
ptr.ptrDist = dist;
|
||||
|
||||
if (ptr.sliding)
|
||||
{
|
||||
onTouchMove_sliding(ptr, dx);
|
||||
return;
|
||||
}
|
||||
|
||||
float dist = Math.abs(dx) + Math.abs(dy);
|
||||
int direction;
|
||||
if (dist < _config.swipe_dist_px)
|
||||
{
|
||||
@@ -234,14 +242,20 @@ public final class Pointers implements Handler.Callback
|
||||
KeyValue newValue = getKeyAtDirection(ptr, direction);
|
||||
if (newValue != null && (ptr.value == null || !newValue.equals(ptr.value)))
|
||||
{
|
||||
int old_flags = ptr.flags;
|
||||
ptr.value = newValue;
|
||||
ptr.flags = newValue.getFlags();
|
||||
// Keep the keyrepeat going between modulated keys.
|
||||
if ((old_flags & ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) == 0)
|
||||
// Sliding mode is entered when key2 or key3 is down on a slider key.
|
||||
if (ptr.key.slider)
|
||||
{
|
||||
stopKeyRepeat(ptr);
|
||||
startKeyRepeat(ptr);
|
||||
switch (direction)
|
||||
{
|
||||
case 1:
|
||||
case 8:
|
||||
case 4:
|
||||
case 5:
|
||||
startSliding(ptr, dy);
|
||||
break;
|
||||
}
|
||||
}
|
||||
_handler.onPointerDown(true);
|
||||
}
|
||||
@@ -299,13 +313,11 @@ public final class Pointers implements Handler.Callback
|
||||
_handler.onPointerFlagsChanged(shouldVibrate);
|
||||
}
|
||||
|
||||
private boolean isModulatedKeyPressed()
|
||||
boolean isSliding()
|
||||
{
|
||||
for (Pointer ptr : _ptrs)
|
||||
{
|
||||
if ((ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
|
||||
if (ptr.sliding)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -320,7 +332,8 @@ public final class Pointers implements Handler.Callback
|
||||
if (ptr.timeoutWhat == msg.what)
|
||||
{
|
||||
if (handleKeyRepeat(ptr))
|
||||
_keyrepeat_handler.sendEmptyMessageDelayed(msg.what, nextRepeatInterval(ptr));
|
||||
_keyrepeat_handler.sendEmptyMessageDelayed(msg.what,
|
||||
_config.longPressInterval);
|
||||
else
|
||||
ptr.timeoutWhat = -1;
|
||||
return true;
|
||||
@@ -329,30 +342,13 @@ public final class Pointers implements Handler.Callback
|
||||
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;
|
||||
// Faster repeat timeout for modulated keys
|
||||
if ((ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
|
||||
timeout /= 2;
|
||||
_keyrepeat_handler.sendEmptyMessageDelayed(what, timeout);
|
||||
_keyrepeat_handler.sendEmptyMessageDelayed(what, _config.longPressTimeout);
|
||||
}
|
||||
|
||||
private void stopKeyRepeat(Pointer ptr)
|
||||
@@ -361,7 +357,6 @@ public final class Pointers implements Handler.Callback
|
||||
{
|
||||
_keyrepeat_handler.removeMessages(ptr.timeoutWhat);
|
||||
ptr.timeoutWhat = -1;
|
||||
ptr.repeatingPtrDist = -1.f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -374,22 +369,55 @@ public final class Pointers implements Handler.Callback
|
||||
lockPointer(ptr, true);
|
||||
return false;
|
||||
}
|
||||
// Stop repeating: Latched key, special keys
|
||||
if (ptr.pointerId == -1 || (ptr.flags & KeyValue.FLAG_SPECIAL) != 0)
|
||||
// Stop repeating: Latched key, no key
|
||||
if (ptr.pointerId == -1 || ptr.value == null)
|
||||
return false;
|
||||
_handler.onPointerHold(ptr.value, ptr.modifiers);
|
||||
KeyValue kv = KeyModifier.modify_long_press(ptr.value);
|
||||
if (!kv.equals(ptr.value))
|
||||
{
|
||||
ptr.value = kv;
|
||||
ptr.flags = kv.getFlags();
|
||||
_handler.onPointerDown(true);
|
||||
return true;
|
||||
}
|
||||
// Stop repeating: Special keys
|
||||
if (kv.hasFlags(KeyValue.FLAG_SPECIAL))
|
||||
return false;
|
||||
_handler.onPointerHold(kv, ptr.modifiers);
|
||||
return true;
|
||||
}
|
||||
|
||||
private float modulatePreciseRepeat(Pointer ptr)
|
||||
// Sliding
|
||||
|
||||
void startSliding(Pointer ptr, float initial_dy)
|
||||
{
|
||||
if (ptr.repeatingPtrDist < 0.f)
|
||||
ptr.repeatingPtrDist = ptr.ptrDist; // First repeat
|
||||
if (ptr.ptrDist > ptr.repeatingPtrDist * 2.f)
|
||||
ptr.repeatingPtrDist = ptr.ptrDist / 2.f; // Large swipe, move the middle point
|
||||
float left = ptr.repeatingPtrDist / 2.f;
|
||||
float accel = (ptr.ptrDist - left) / (ptr.repeatingPtrDist - left);
|
||||
return Math.min(8.f, Math.max(0.1f, accel));
|
||||
stopKeyRepeat(ptr);
|
||||
ptr.sliding = true;
|
||||
ptr.sliding_count = (int)(initial_dy / _config.slide_step_px);
|
||||
}
|
||||
|
||||
/** Handle a sliding pointer going up. Latched modifiers are not cleared to
|
||||
allow easy adjustments to the cursors. The pointer is cancelled. */
|
||||
void onTouchUp_sliding(Pointer ptr)
|
||||
{
|
||||
removePtr(ptr);
|
||||
_handler.onPointerFlagsChanged(false);
|
||||
}
|
||||
|
||||
/** Handle move events for sliding pointers. [dx] is distance travelled from
|
||||
[downX]. */
|
||||
void onTouchMove_sliding(Pointer ptr, float dx)
|
||||
{
|
||||
int count = (int)(dx / _config.slide_step_px);
|
||||
if (count == ptr.sliding_count)
|
||||
return;
|
||||
KeyValue newValue = handleKV(
|
||||
(count < ptr.sliding_count) ? ptr.key.key3 : ptr.key.key2,
|
||||
ptr.modifiers);
|
||||
ptr.sliding_count = count;
|
||||
ptr.value = newValue;
|
||||
if (newValue != null)
|
||||
_handler.onPointerHold(newValue, ptr.modifiers);
|
||||
}
|
||||
|
||||
private static final class Pointer
|
||||
@@ -404,16 +432,16 @@ public final class Pointers implements Handler.Callback
|
||||
public KeyValue value;
|
||||
public float downX;
|
||||
public float downY;
|
||||
/** Distance of the pointer to the initial press. */
|
||||
public float ptrDist;
|
||||
/** Modifier flags at the time the key was pressed. */
|
||||
public Modifiers modifiers;
|
||||
/** Flags of the value. Latch, lock and locked flags are updated. */
|
||||
public int flags;
|
||||
/** Identify timeout messages. */
|
||||
public int timeoutWhat;
|
||||
/** ptrDist at the first repeat, -1 otherwise. */
|
||||
public float repeatingPtrDist;
|
||||
/** Whether the pointer is "sliding" laterally on a key. */
|
||||
public boolean sliding;
|
||||
/** Number of event already caused by sliding. */
|
||||
public int sliding_count;
|
||||
|
||||
public Pointer(int p, KeyboardData.Key k, KeyValue v, float x, float y, Modifiers m)
|
||||
{
|
||||
@@ -423,11 +451,11 @@ public final class Pointers implements Handler.Callback
|
||||
value = v;
|
||||
downX = x;
|
||||
downY = y;
|
||||
ptrDist = 0.f;
|
||||
modifiers = m;
|
||||
flags = (v == null) ? 0 : v.getFlags();
|
||||
timeoutWhat = -1;
|
||||
repeatingPtrDist = -1.f;
|
||||
sliding = false;
|
||||
sliding_count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
1
srcs/special_font/60.svg
Normal file
1
srcs/special_font/60.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 1168 2048"><path fill="currentColor" d="m931.256 1557.78-69.314-69.314Q749.47 1574.78 612.15 1586.55v99.395q176.555-11.772 319.106-128.166zm-414.577 28.77q-133.396-10.462-249.792-100.701 0 1.309-71.93 74.545l2.616-2.615q142.554 116.396 319.106 128.166zm-319.107-171.321q-90.24-103.316-107.24-245.867H-9.062q17.002 181.786 137.32 319.104l-6.539 5.23 3.923-2.614 41.85-43.158q30.08-31.387 30.08-32.695zm940.318-245.868h-99.394q-17 141.242-107.239 248.483l69.314 70.62q120.318-137.318 137.319-319.103zm0-96.778q-14.386-189.633-129.474-326.953l-69.314 70.622q86.316 111.164 99.394 256.33zM189.726 818.867h.001q-86.315 107.239-99.394 253.716H-9.06Q4.017 882.95 119.104 745.63l-3.923-3.924q-1.308 0 74.545 77.16zm749.377-142.552Q792.627 552.073 612.151 540.3v99.394q139.935 11.77 257.639 105.935zM516.679 540.303q-180.478 11.77-326.953 136.013l69.314 69.314q117.703-90.238 257.64-105.933v-99.394zM648 1838H430v201h218z"/></svg>
|
After Width: | Height: | Size: 976 B |
1
srcs/special_font/61.svg
Normal file
1
srcs/special_font/61.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1168 2048"><path d="m931.256 1839.834-69.314-69.314q-112.472 86.315-249.792 98.086V1968q176.555-11.771 319.106-128.166zm-414.577 28.77q-133.396-10.462-249.792-100.7 0 1.308-71.93 74.544l2.616-2.615q142.554 116.396 319.106 128.166v-99.395zm-319.107-171.32q-90.24-103.317-107.24-245.868H-9.062q17.001 181.786 137.32 319.104l-6.539 5.232 3.923-2.616 41.85-43.158q30.08-31.387 30.08-32.695zm940.318-245.869h-99.394q-17 141.242-107.239 248.483l69.314 70.621q120.318-137.319 137.319-319.104zm0-96.778q-14.386-189.633-129.474-326.953l-69.314 70.622q86.316 111.164 99.394 256.331h99.394zm-948.164-253.716h.001q-86.315 107.24-99.394 253.716H-9.06q13.078-189.633 128.165-326.953l-3.923-3.924q-1.308 0 74.545 77.161zM939.103 958.37Q792.627 834.127 612.151 822.355v99.395q139.935 11.77 257.639 105.934ZM516.679 822.357Q336.201 834.128 189.726 958.37l69.314 69.314q117.703-90.238 257.64-105.933v-99.394zM792 831.054q70-52 109.5-99.5t39.5-101.5q0-42-22.5-66t-73.5-24q-27 0-50 7.5t-49 18.5l-33-123q36-19 79.5-31.5t103.5-12.5q95 0 155.5 55t60.5 154q0 80-60.5 152t-187.5 128Z"/></svg>
|
After Width: | Height: | Size: 1.1 KiB |
1
srcs/special_font/62.svg
Normal file
1
srcs/special_font/62.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 0 1168 2048"><path fill="currentColor" d="m931.256 1851.834-69.314-69.314q-112.472 86.315-249.792 98.086V1980q176.555-11.771 319.106-128.166zm-414.577 28.77q-133.396-10.462-249.792-100.7 0 1.308-71.93 74.544l2.616-2.615q142.554 116.396 319.106 128.166v-99.395zm-319.107-171.32q-90.24-103.317-107.24-245.868H-9.062q17.001 181.786 137.32 319.104l-6.539 5.232 3.923-2.616 41.85-43.158q30.08-31.387 30.08-32.695zm940.318-245.869h-99.394q-17 141.242-107.239 248.483l69.314 70.621q120.318-137.319 137.319-319.104zm0-96.778q-14.386-189.633-129.474-326.953l-69.314 70.622q86.316 111.164 99.394 256.331h99.394zm-948.164-253.716h.001q-86.315 107.24-99.394 253.716H-9.06q13.078-189.633 128.165-326.953l-3.923-3.924q-1.308 0 74.545 77.161zM939.103 970.37Q792.627 846.127 612.151 834.355v99.395q139.935 11.77 257.639 105.934ZM516.679 834.357Q336.201 846.128 189.726 970.37l69.314 69.314q117.703-90.238 257.64-105.933v-99.394zM623 840.054l-12-52q65-11 108-52t43-121q0-96-79-153t-226-57l-7 109q72 0 116 24.5t44 73.5q0 48-36 67t-123 26l32 135z"/></svg>
|
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
Reference in New Issue
Block a user