mirror of
https://github.com/Julow/Unexpected-Keyboard.git
synced 2025-08-18 12:01:07 +02:00
Compare commits
50 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
de5571d428 | ||
|
6126578111 | ||
|
046416389a | ||
|
fd0f0d5476 | ||
|
a199962117 | ||
|
8a3c0566e7 | ||
|
e190394b47 | ||
|
dcc4a640f7 | ||
|
c5f5a23d75 | ||
|
73ef7c6765 | ||
|
e333eb06fd | ||
|
764cd882d2 | ||
|
a891a3a99b | ||
|
8f972113ca | ||
|
c61b31168c | ||
|
c182f3d829 | ||
|
7d6306fbc9 | ||
|
cb2ea83f8a | ||
|
90cad963ec | ||
|
bf31872955 | ||
|
199ca5cf03 | ||
|
87d21685ca | ||
|
8665d002bf | ||
|
f0fcd791ec | ||
|
cd2c2357ed | ||
|
c17b53ce7f | ||
|
940fc81193 | ||
|
523de040be | ||
|
804ea84981 | ||
|
aaf3d8b630 | ||
|
19c38ca6a2 | ||
|
e745c81269 | ||
|
09d984a1ab | ||
|
69994a55c5 | ||
|
ebdacbc2b2 | ||
|
122a9c23d0 | ||
|
6fb15b3f16 | ||
|
9a0e03f644 | ||
|
f7e16c0345 | ||
|
64c7c8ce20 | ||
|
c1751578ef | ||
|
2aa98de7aa | ||
|
078dbcd5ff | ||
|
22a7df6632 | ||
|
e213834f67 | ||
|
b102ad9078 | ||
|
51b330c616 | ||
|
815e30a505 | ||
|
4d99bd4f4b | ||
|
d644d2bf0e |
16
.github/workflows/check-translations.yml
vendored
Normal file
16
.github/workflows/check-translations.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
name: Check translations
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
check-translations:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v3
|
||||
- run: python3 sync_translations.py
|
||||
- name: Check that strings files are uptodate, run python3 sync_translations.py otherwise
|
||||
run: git diff --exit-code
|
@@ -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="28" android:versionName="1.19.1" android:hardwareAccelerated="false">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="31" android:versionName="1.20.2" 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">
|
||||
|
@@ -5,15 +5,13 @@ A lightweight virtual keyboard for developers.
|
||||
| --- | --- | --- |
|
||||
| <img src="/metadata/android/en-US/images/phoneScreenshots/4.png" alt="Screenshot-4" /> | <img src="/metadata/android/en-US/images/phoneScreenshots/5.png" alt="Screenshot-5" /> | <img src="/metadata/android/en-US/images/phoneScreenshots/6.png" alt="Screenshot-6" /> |
|
||||
|
||||
This app is a virtual keyboard for Android. The main features are easy typing of every ASCII character using the swipe gesture, dead keys for accents and modifier keys and the presence of special keys (tab, esc, arrows, etc..).
|
||||
|
||||
The keyboard shows up to 4 extra characters in the corners of each key. These extra characters are hit by swiping the finger on the key.
|
||||
The main feature is easy typing of more characters by swiping the keys toward the corners.
|
||||
|
||||
Highlight of some of the features:
|
||||
|
||||
- Every character and special keys that are also available on a PC keyboard. This is perfect for using applications like Termux.
|
||||
- Every character and special keys of a PC keyboard. This is perfect for using applications like Termux.
|
||||
|
||||
- This includes Tab, Esc, the arrows and function keys, but also Ctrl and Alt !
|
||||
- This includes Tab, Esc, the arrows and function keys, but also Ctrl and Alt.
|
||||
|
||||
- Accented keys are accessible using dead keys. First activate the accent, then type the accented letter.
|
||||
|
||||
|
10
metadata/android/en-US/changelogs/29.txt
Normal file
10
metadata/android/en-US/changelogs/29.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
New layouts: QWERTY (Polski)
|
||||
|
||||
Allow switching quickly between two layouts.
|
||||
Allow choosing opacity of the keyboard.
|
||||
Improved themes and rendering.
|
||||
Updated translations.
|
||||
Fixed key repeat bug when holding 3 keys.
|
||||
Tweaked the swipe gesture. Added some options.
|
||||
|
||||
Thanks to the contributors: @9-2-1, @ChasmSolacer
|
1
metadata/android/en-US/changelogs/30.txt
Normal file
1
metadata/android/en-US/changelogs/30.txt
Normal file
@@ -0,0 +1 @@
|
||||
Bug fix release.
|
7
metadata/android/en-US/changelogs/31.txt
Normal file
7
metadata/android/en-US/changelogs/31.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
New layouts: QWERTZ (Slovak)
|
||||
|
||||
Bugs fixed.
|
||||
Updated translations.
|
||||
Tweaked themes and settings.
|
||||
|
||||
Thanks to the contributors: Jozef Kundlak, @MAKI1LOVE
|
@@ -1,12 +1,10 @@
|
||||
This app is a virtual keyboard for Android. The main features are easy typing of every ASCII character using the swipe gesture, dead keys for accents and modifier keys and the presence of special keys (tab, esc, arrows, etc..).
|
||||
|
||||
The keyboard shows up to 4 extra characters in the corners of each key. These extra characters are hit by swiping the finger on the key.
|
||||
The main feature is easy typing of more characters by swiping the keys toward the corners.
|
||||
|
||||
Highlight of some of the features:
|
||||
|
||||
- Every character and special keys that are also available on a PC keyboard. This is perfect for using applications like Termux.
|
||||
- Every character and special keys of a PC keyboard. This is perfect for using applications like Termux.
|
||||
|
||||
- This includes Tab, Esc, the arrows and function keys, but also Ctrl and Alt !
|
||||
- This includes Tab, Esc, the arrows and function keys, but also Ctrl and Alt.
|
||||
|
||||
- Accented keys are accessible using dead keys. First activate the accent, then type the accented letter.
|
||||
|
||||
|
@@ -1,12 +1,10 @@
|
||||
Cette application est un clavier virtuel pour Android. Les fonctionnalités principales sont l'accès rapide à tous les caractères ASCII en glissant le doigt, les touches mortes pour les accents et la présence des touches spéciales (Tab, Esc, les flèches, etc..).
|
||||
|
||||
Il peut y avoir un caractère supplémentaire dans chaque coin de chaque touche. Ces caractères sont tapés en glissant le doigt sur la touche.
|
||||
La fonctionnalité principale est l'accès rapide à plus de caractères en balayant les touches vers les coins.
|
||||
|
||||
Quelques fonctionnalités:
|
||||
|
||||
- Tous les caractères et toutes les touches spéciales d'un clavier PC. Idéal pour utiliser une application comme Termux.
|
||||
|
||||
- Cela comprend les touches Tab, Esc, les flèches et les touches fonctions mais aussi Ctrl et Alt !
|
||||
- Cela comprend les touches Tab, Esc, les flèches et les touches fonctions mais aussi Ctrl et Alt.
|
||||
|
||||
- Les accents sont des touches mortes. Activez d'abord l'accent et tapez ensuite la lettre accentuée.
|
||||
|
||||
|
18
metadata/android/pl-PL/full_description.txt
Normal file
18
metadata/android/pl-PL/full_description.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
Ta aplikacja to klawiatura wirtualna dla Androida. Jej główne funkcjonalności obejmują łatwe wprowadzanie każdego znaku ASCII przy użyciu gestu przesunięcia, martwe klawisze dla znaków diakrytycznych i klawisze modyfikujące oraz obecność klawiszy specjalnych (tab, esc, strzałki, itp.).
|
||||
|
||||
Klawiatura mieści do czterech dodatkowych znaków w rogach każdego klawisza. Są one wprowadzane poprzez przesuwanie palcem po klawiszu.
|
||||
|
||||
Wyróźnione funkcjonalności:
|
||||
|
||||
- Wszystkie znaki i klawisze specjalne, które są również dostępne na klawiaturze komputerowej. Doskonałe do korzystania z aplikacji takich jak Termux.
|
||||
|
||||
- Obejmują one Tab, Esc, strzałki, klawisze funkcyjne oraz Ctrl i Alt !
|
||||
|
||||
- Znaki akcentowane uzyskuje się za pomocą martwych klawiszy. Najpierw naciśnij akcent, a następnie wpisz akcentowaną literę.
|
||||
|
||||
- Bardzo lekka i szybka. Zajmuje 500x mniej miejsca niż klawiatura Google i 15x mniej niż klawiatura domyślna. Bez reklam, bez śledzenia.
|
||||
|
||||
- Wiele układów: QWERTY, QWERTZ, AZERTY. Motywy: Biały, Ciemny, Czarny (OLED). Oraz wiele innych możliwości.
|
||||
|
||||
Tak jak każda inna klawiatura ekranowa, należy ją włączyć w ustawieniach systemowych. Otwórz Ustawienia i przejdź kolejno do:
|
||||
System > Języki i metody wprowadzania > Klawiatura ekranowa > Zarządzaj klawiaturami ekranowymi.
|
1
metadata/android/pl-PL/short_description.txt
Normal file
1
metadata/android/pl-PL/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Lekka klawiatura wirtualna dla programistów.
|
16
metadata/android/ru-RU/full_description.txt
Normal file
16
metadata/android/ru-RU/full_description.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Главная особенность клавиатуры - это возможность легко напечатать любой ASCII символ за счет свайпов в углы клавиш.
|
||||
|
||||
Основные особенности:
|
||||
|
||||
- Есть все символы и специальные клавиши компьютерной клавиатуры. Идеально подходит для таких приложений, как Termux.
|
||||
|
||||
- Включены клавиши Tab, Esc, стрелки, функциональные клавиши, Ctrl и Alt.
|
||||
|
||||
- Клавиши с акцентами доступны с помощью мёртвых клавиш. Сначала нажмите на акцент, затем нажмите на букву с акцентом.
|
||||
|
||||
- Очень легкая и быстрая. Использует в 500 раз меньше места, чем Google клавиатура и в 15 раз меньше дефолтной клавиатуры. Никакой рекламы, никаких трекеров.
|
||||
|
||||
- Множество раскладок: QWERTY, QWERTZ, AZERTY и т.д. Темы: белая, темная. Множество других опций.
|
||||
|
||||
Клавиатура, как и все виртуальные клавиатуры, должна быть активирована в настройках. Откройте Настройки и перейдите:
|
||||
Язык и ввод > Блок "Клавиатура" или "Способ ввода" > поставить галочку напротив Unexpected Keyboard
|
1
metadata/android/ru-RU/short_description.txt
Normal file
1
metadata/android/ru-RU/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Легкая виртуальная клавиатура для разработчиков.
|
1
metadata/android/ru-RU/title.txt
Normal file
1
metadata/android/ru-RU/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Unexpected Keyboard
|
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:hardwareAccelerated="false">
|
||||
<juloo.keyboard2.EmojiGroupButtonsBar android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
|
||||
<juloo.keyboard2.EmojiGridView android:id="@+id/emoji_grid" android:background="?attr/colorKeyboard" android:layout_width="fill_parent" android:layout_height="@dimen/emoji_grid_height"/>
|
||||
<juloo.keyboard2.EmojiGridView android:id="@+id/emoji_grid" android:layout_width="fill_parent" android:layout_height="@dimen/emoji_grid_height" android:orientation="vertical" android:numColumns="auto_fit" android:columnWidth="45sp" android:background="?attr/colorKeyboard"/>
|
||||
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
|
||||
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" key="switch_back_emoji"/>
|
||||
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" android:layout_weight="4" key="space"/>
|
||||
|
@@ -3,17 +3,32 @@
|
||||
<string name="app_name" product="debug">Klávesnice Unexpected (pro ladění)</string>
|
||||
<string name="app_name" product="default">Klávesnice Unexpected</string>
|
||||
<string name="settings_activity_label">Nastavení Klávesnice Unexpected</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">Rozvržení</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</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_layout_title">Změnit rozvržení klávesnice</string>
|
||||
<string name="pref_layout_e_system">V nastavení systému</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">(Univerzální) Diakritická znaménka</string>
|
||||
<string name="pref_accents_e_all_installed">Zobrazovat znaménka pro všechny instalované systémové jazyky</string>
|
||||
<string name="pref_accents_e_selected">Zobrazovat znaménka pouze pro současně zvolený jazyk</string>
|
||||
<string name="pref_accents_e_none">Skrýt (univerzální) diakritická znaménka</string>
|
||||
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
|
||||
<!-- <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_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_programming_layout_title">Rozložení klávesnice pro programování</string>
|
||||
<string name="pref_programming_layout_none">Žádné</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>
|
||||
<string name="pref_category_typing">Psaní</string>
|
||||
<string name="pref_swipe_dist_title">Vzdálenost posunutí prstem</string>
|
||||
<string name="pref_swipe_dist_summary">Jak daleko je třeba posunout prst pro napsaní znaku/diakritiky v rozích klávey (%s)</string>
|
||||
@@ -28,7 +43,6 @@
|
||||
<string name="pref_category_style">Styl</string>
|
||||
<string name="pref_margin_bottom_title">Spodní odsazení</string>
|
||||
<string name="pref_keyboard_height_title">Výška klávesnice</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Výška klávesnice v režimu na šířku</string>
|
||||
<string name="pref_horizontal_margin_title">Boční odsazení</string>
|
||||
<string name="pref_character_size_title">Velikost znaků</string>
|
||||
<string name="pref_character_size_summary">Velikost znaků zobrazených na klávesnici (%.2fx)</string>
|
||||
@@ -37,6 +51,7 @@
|
||||
<string name="pref_theme_e_dark">Tmavý</string>
|
||||
<string name="pref_theme_e_light">Světlý</string>
|
||||
<string name="pref_theme_e_black">Černý</string>
|
||||
<!-- <string name="pref_theme_e_white">White</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>
|
||||
@@ -44,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Velmi dlouhá</string>
|
||||
<string name="pref_key_horizontal_space">Horizontální mezery mezi klávesami</string>
|
||||
<string name="pref_key_vertical_space">Vertikální mezery mezi klávesami</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">Další</string>
|
||||
<string name="key_action_done">Dokončit</string>
|
||||
<string name="key_action_go">Spustit</string>
|
||||
|
@@ -3,9 +3,16 @@
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (Debug)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Unexpected Keyboard - Einstellungen</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">Layout</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</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_layout_title">Tastaturlayout ändern</string>
|
||||
<string name="pref_layout_e_system">Systemeinstellung</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">Akzente</string>
|
||||
<string name="pref_accents_e_all_installed">Akzente für alle installierten Sprachen anzeigen</string>
|
||||
<string name="pref_accents_e_selected">Akzente nur für die gewählte Sprache anzeigen</string>
|
||||
@@ -14,12 +21,15 @@
|
||||
<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_programming_layout_title">Tastaturlayout zum Programmieren</string>
|
||||
<string name="pref_extra_keys_title">Zusätzliche Zeichen zur Tastatur hinzufügen</string>
|
||||
<string name="pref_programming_layout_none">Keines</string>
|
||||
<string name="pref_category_typing">Tippen</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>
|
||||
<string name="pref_category_typing">Tippen</string>
|
||||
<string name="pref_swipe_dist_title">Länge der Wischgeste</string>
|
||||
<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>
|
||||
@@ -33,7 +43,6 @@
|
||||
<string name="pref_category_style">Design</string>
|
||||
<string name="pref_margin_bottom_title">Unterer Abstand</string>
|
||||
<string name="pref_keyboard_height_title">Höhe der Tastatur</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Höhe der Tastatur im Querformat</string>
|
||||
<string name="pref_horizontal_margin_title">Horizontaler Abstand</string>
|
||||
<string name="pref_character_size_title">Größe der Beschriftung</string>
|
||||
<string name="pref_character_size_summary">Größe der Buchstaben auf den Tasten (%.2fx)</string>
|
||||
@@ -50,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Sehr weit</string>
|
||||
<string name="pref_key_horizontal_space">Horizontaler Abstand zwischen den Tasten</string>
|
||||
<string name="pref_key_vertical_space">Vertikaler Abstand zwischen den Tasten</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">Nächstes</string>
|
||||
<string name="key_action_done">Fertig</string>
|
||||
<string name="key_action_go">Los</string>
|
||||
|
@@ -1,13 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- <string name="app_name" product="debug">Unexpected Keyboard (debug)</string> -->
|
||||
<!-- <string name="app_name" product="default">Unexpected Keyboard</string> -->
|
||||
<string name="settings_activity_label">Ajustes de Unexpected Keyboard</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">Formato</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</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_layout_title">Cambiar formato de teclado</string>
|
||||
<string name="pref_layout_e_system">Ajustes del sistema</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">Acentos</string>
|
||||
<string name="pref_accents_e_all_installed">Mostrar acentos para todos los lenguajes instalados</string>
|
||||
<string name="pref_accents_e_selected">Solo mostrar acentos para el lenguaje seleccionado</string>
|
||||
<string name="pref_accents_e_none">Ocultar acentos</string>
|
||||
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
|
||||
<!-- <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_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> -->
|
||||
<string name="pref_category_typing">Escribiendo</string>
|
||||
<string name="pref_swipe_dist_title">Distancia para deslizar</string>
|
||||
<string name="pref_swipe_dist_summary">Distancia de caracteres en las esquinas de las letras (%s)</string>
|
||||
@@ -17,6 +38,8 @@
|
||||
<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_style">Estilo</string>
|
||||
<string name="pref_margin_bottom_title">Margen del pie</string>
|
||||
<string name="pref_keyboard_height_title">Altura del teclado</string>
|
||||
@@ -28,6 +51,7 @@
|
||||
<string name="pref_theme_e_dark">Oscuro</string>
|
||||
<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_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>
|
||||
@@ -35,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Muy lejano</string>
|
||||
<string name="pref_key_horizontal_space">Espaciado horizontal entre las teclas</string>
|
||||
<string name="pref_key_vertical_space">Espaciado vertical entre las teclas</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">Siguiente</string>
|
||||
<string name="key_action_done">Hecho</string>
|
||||
<string name="key_action_go">Ir</string>
|
||||
|
@@ -1,9 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- <string name="app_name" product="debug">Unexpected Keyboard (debug)</string> -->
|
||||
<!-- <string name="app_name" product="default">Unexpected Keyboard</string> -->
|
||||
<string name="settings_activity_label">Unexpected Keyboard 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_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>
|
||||
<string name="pref_accents_title">Accents</string>
|
||||
<string name="pref_accents_e_all_installed">Afficher les accents pour les langues installées</string>
|
||||
<string name="pref_accents_e_selected">Afficher les accents pour la langue sélectionnée</string>
|
||||
@@ -12,23 +21,30 @@
|
||||
<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_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">Active Shift au début des phrases</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>
|
||||
<string name="pref_category_typing">Saisie</string>
|
||||
<string name="pref_swipe_dist_title">Distance de swipe</string>
|
||||
<string name="pref_swipe_dist_summary">La distance des caractères dans les coins (%s)</string>
|
||||
<string name="pref_long_timeout_title">Délai avant répétition</string>
|
||||
<string name="pref_long_interval_title">Écart entre répétitions</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_style">Style</string>
|
||||
<string name="pref_margin_bottom_title">Marge du bas</string>
|
||||
<string name="pref_keyboard_height_title">Hauteur du clavier</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Hauteur du clavier en mode paysage</string>
|
||||
<string name="pref_horizontal_margin_title">Marge des côtés</string>
|
||||
<string name="pref_character_size_title">Taille des labels</string>
|
||||
<string name="pref_character_size_title">Taille des symboles</string>
|
||||
<string name="pref_character_size_summary">Taille des caractères affichés sur les touches (%.2fx)</string>
|
||||
<string name="pref_theme">Thème</string>
|
||||
<string name="pref_theme_e_system">Paramètre système</string>
|
||||
@@ -43,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Très longue</string>
|
||||
<string name="pref_key_horizontal_space">Espacement horizontal entre les touches</string>
|
||||
<string name="pref_key_vertical_space">Espacement vertical entre les touches</string>
|
||||
<string name="pref_category_advanced">Avancé</string>
|
||||
<string name="pref_custom_layout_title">Disposition personnalisée</string>
|
||||
<string name="pref_custom_layout_summary">Cette option n\'est pas faite pour être utilisée.</string>
|
||||
<string name="key_action_next">Suiv.</string>
|
||||
<string name="key_action_done">Fin</string>
|
||||
<string name="key_action_go">Aller</string>
|
||||
|
@@ -3,17 +3,32 @@
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Impostazioni di Unexpected Keyboard</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">Layout</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</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_layout_title">Cambia layout tastiera</string>
|
||||
<string name="pref_layout_e_system">Impostazioni di sistema</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">Accenti</string>
|
||||
<string name="pref_accents_e_all_installed">Mostra accenti per tutte le lingue installate</string>
|
||||
<string name="pref_accents_e_selected">Mostra accenti solo per le lingue selezionate</string>
|
||||
<string name="pref_accents_e_none">Nascondi accenti</string>
|
||||
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
|
||||
<!-- <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_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_programming_layout_title">Layout tastiera per programmare</string>
|
||||
<string name="pref_programming_layout_none">Nessuno</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>
|
||||
<string name="pref_category_typing">Digitando</string>
|
||||
<string name="pref_swipe_dist_title">Distanza swipe</string>
|
||||
<string name="pref_swipe_dist_summary">Distanza dei caratteri negli angoli dei tasti (%s)</string>
|
||||
@@ -28,7 +43,6 @@
|
||||
<string name="pref_category_style">Stile</string>
|
||||
<string name="pref_margin_bottom_title">Margine inferiore</string>
|
||||
<string name="pref_keyboard_height_title">Altezza tastiera</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Altezza tastiera in modalità orizzontale</string>
|
||||
<string name="pref_horizontal_margin_title">Margine orizzontale</string>
|
||||
<string name="pref_character_size_title">Dimensione Caratteri</string>
|
||||
<string name="pref_character_size_summary">Dimensione dei caratteri mostrati sulla tastiera (%.2fx)</string>
|
||||
@@ -37,6 +51,7 @@
|
||||
<string name="pref_theme_e_dark">Scuro</string>
|
||||
<string name="pref_theme_e_light">Chiaro</string>
|
||||
<string name="pref_theme_e_black">Nero</string>
|
||||
<!-- <string name="pref_theme_e_white">White</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>
|
||||
@@ -44,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Molto distante</string>
|
||||
<string name="pref_key_horizontal_space">Spazio orizzontale tra i tasti</string>
|
||||
<string name="pref_key_vertical_space">Spazio verticale tra i tasti</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">Prossimo</string>
|
||||
<string name="key_action_done">Fatto</string>
|
||||
<string name="key_action_go">Vai</string>
|
||||
|
@@ -1,13 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- <string name="app_name" product="debug">Unexpected Keyboard (debug)</string> -->
|
||||
<!-- <string name="app_name" product="default">Unexpected Keyboard</string> -->
|
||||
<string name="settings_activity_label">Unexpected Keyboard 설정</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">레이아웃</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</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_layout_title">키보드 레이아웃 변경</string>
|
||||
<string name="pref_layout_e_system">시스템 세팅</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">악센트</string>
|
||||
<string name="pref_accents_e_all_installed">설치된 모든 언어의 악센트 표시</string>
|
||||
<string name="pref_accents_e_selected">선택한 언어의 악센트만 표시</string>
|
||||
<string name="pref_accents_e_none">모든 언어의 악센트 숨기기</string>
|
||||
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
|
||||
<!-- <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_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> -->
|
||||
<string name="pref_category_typing">타자</string>
|
||||
<string name="pref_swipe_dist_title">스와이프 범위</string>
|
||||
<string name="pref_swipe_dist_summary">키 모서리 문자의 입력 범위 (%s)</string>
|
||||
@@ -17,6 +38,8 @@
|
||||
<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_style">스타일</string>
|
||||
<string name="pref_margin_bottom_title">아래 넓이</string>
|
||||
<string name="pref_keyboard_height_title">키보드 높이</string>
|
||||
@@ -28,6 +51,7 @@
|
||||
<string name="pref_theme_e_dark">Dark</string>
|
||||
<string name="pref_theme_e_light">Light</string>
|
||||
<string name="pref_theme_e_black">Black</string>
|
||||
<!-- <string name="pref_theme_e_white">White</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">매우 짧음</string>
|
||||
<string name="pref_swipe_dist_e_short">짧음</string>
|
||||
<string name="pref_swipe_dist_e_default">보통</string>
|
||||
@@ -35,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">매우 넓음</string>
|
||||
<string name="pref_key_horizontal_space">키보드 양 옆 간격</string>
|
||||
<string name="pref_key_vertical_space">키보드 세로 간격</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">다음</string>
|
||||
<string name="key_action_done">확인</string>
|
||||
<string name="key_action_go">Go</string>
|
||||
|
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="horizontal_margin">28dp</dimen>
|
||||
<dimen name="margin_bottom">3dp</dimen>
|
||||
<dimen name="emoji_type_button_height">48dp</dimen>
|
||||
<dimen name="extra_horizontal_margin">25dp</dimen>
|
||||
</resources>
|
||||
|
@@ -3,9 +3,16 @@
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (atkļūdošana)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Unexpected Keyboard iestatījumi</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">Izkārtojums</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</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_layout_title">Mainīt tastatūras izkārtojumu</string>
|
||||
<string name="pref_layout_e_system">Ierīces iestatījumi</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">Uzsvara zīmes</string>
|
||||
<string name="pref_accents_e_all_installed">Rādīt uzsvara zīmes visām uzstādītajām valodām</string>
|
||||
<string name="pref_accents_e_selected">Rādīt uzsvara zīmes tikai atlasītajām valodām</string>
|
||||
@@ -14,11 +21,14 @@
|
||||
<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_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_programming_layout_title">Tastatūras izkārtojums programmēšanai</string>
|
||||
<string name="pref_programming_layout_none">Neviens</string>
|
||||
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
|
||||
<string name="pref_second_layout_none">Neviens</string>
|
||||
<string name="pref_category_typing">Rakstīšana</string>
|
||||
<string name="pref_swipe_dist_title">Pavilkšanas attālums</string>
|
||||
<string name="pref_swipe_dist_summary">Taustiņu stūros esošo rakstzīmju attālums (%s)</string>
|
||||
@@ -33,7 +43,6 @@
|
||||
<string name="pref_category_style">Izskata pielāgojumi</string>
|
||||
<string name="pref_margin_bottom_title">Apakšējā apmale</string>
|
||||
<string name="pref_keyboard_height_title">Tastatūras augstums</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Tastatūras augstums guleniski</string>
|
||||
<string name="pref_horizontal_margin_title">Līmeniskā apmale</string>
|
||||
<string name="pref_character_size_title">Iezīmes izmērs</string>
|
||||
<string name="pref_character_size_summary">Tastatūrā attēloto rakstzīmju izmērs (%.2fx)</string>
|
||||
@@ -50,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Ļoti tāls</string>
|
||||
<string name="pref_key_horizontal_space">Līmeniskais attālums starp taustiņiem</string>
|
||||
<string name="pref_key_vertical_space">Stateniskais attālums starp taustiņiem</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">Nākamais</string>
|
||||
<string name="key_action_done">Darīts</string>
|
||||
<string name="key_action_go">Aiziet</string>
|
||||
|
71
res/values-pl/strings.xml
Normal file
71
res/values-pl/strings.xml
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Ustawienia Unexpected Keyboard</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">Układ</string>
|
||||
<string name="pref_label_brightness">Dostosuj jasność znaków</string>
|
||||
<string name="pref_keyboard_opacity">Nieprzezroczystość tła klawiatury</string>
|
||||
<string name="pref_key_opacity">Nieprzezroczystość klawisza</string>
|
||||
<string name="pref_key_activated_opacity">Nieprzezroczystość naciśniętego klawisza</string>
|
||||
<string name="pref_layout_title">Zmień układ klawiatury</string>
|
||||
<string name="pref_layout_e_system">Systemowy</string>
|
||||
<string name="pref_layout_e_custom">Własny układ</string>
|
||||
<string name="pref_accents_title">Znaki diakrytyczne</string>
|
||||
<string name="pref_accents_e_all_installed">Pokaż znaki diakryt. dla wszystkich zainstalowanych języków</string>
|
||||
<string name="pref_accents_e_selected">Pokaż znaki diakryt. tylko dla wybranego języka</string>
|
||||
<string name="pref_accents_e_none">Ukryj znaki diakrytyczne</string>
|
||||
<string name="pref_show_numpad_title">Pokaż klawiaturę numeryczną</string>
|
||||
<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_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>
|
||||
<string name="pref_category_typing">Pisanie</string>
|
||||
<string name="pref_swipe_dist_title">Odległość przesuwania</string>
|
||||
<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_style">Styl</string>
|
||||
<string name="pref_margin_bottom_title">Margines dolny</string>
|
||||
<string name="pref_keyboard_height_title">Wysokość klawiatury</string>
|
||||
<string name="pref_horizontal_margin_title">Margines poziomy</string>
|
||||
<string name="pref_character_size_title">Wielkość znaku</string>
|
||||
<string name="pref_character_size_summary">Wielkość znaków widocznych na klawiaturze (%.2fx)</string>
|
||||
<string name="pref_theme">Motyw</string>
|
||||
<string name="pref_theme_e_system">Systemowy</string>
|
||||
<string name="pref_theme_e_dark">Ciemny</string>
|
||||
<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_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>
|
||||
<string name="pref_swipe_dist_e_far">Duża</string>
|
||||
<string name="pref_swipe_dist_e_very_far">Bardzo duża</string>
|
||||
<string name="pref_key_horizontal_space">Odległość pomiędzy klawiszami w poziomie</string>
|
||||
<string name="pref_key_vertical_space">Odległość pomiędzy klawiszami w pionie</string>
|
||||
<string name="pref_category_advanced">Zaawansowane</string>
|
||||
<string name="pref_custom_layout_title">Własny układ</string>
|
||||
<string name="pref_custom_layout_summary">Zobacz kod źródłowy. Ta opcja nie jest przeznaczona do użycia.</string>
|
||||
<string name="key_action_next">Dalej</string>
|
||||
<string name="key_action_done">OK</string>
|
||||
<string name="key_action_go">Przejdź</string>
|
||||
<string name="key_action_prev">Wstecz</string>
|
||||
<string name="key_action_search">Szukaj</string>
|
||||
<string name="key_action_send">Wyślij</string>
|
||||
</resources>
|
@@ -3,17 +3,32 @@
|
||||
<string name="app_name" product="debug">Teclado Unexpected</string>
|
||||
<string name="app_name" product="default">Teclado Unexpected</string>
|
||||
<string name="settings_activity_label">Configurar Teclado Unexpected</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">Layout</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</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_layout_title">Mudar layout do teclado</string>
|
||||
<string name="pref_layout_e_system">Mesmo do sistema</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">Acentos</string>
|
||||
<string name="pref_accents_e_all_installed">Mostrar acentos para todos os idiomas instalados</string>
|
||||
<string name="pref_accents_e_selected">Mostrar acentos só para o idioma selecionado</string>
|
||||
<string name="pref_accents_e_none">Ocultar acentos</string>
|
||||
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
|
||||
<!-- <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_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_programming_layout_title">Layout do teclado para programação</string>
|
||||
<string name="pref_programming_layout_none">Nenhum</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>
|
||||
<string name="pref_category_typing">Digitação</string>
|
||||
<string name="pref_swipe_dist_title">Distância a deslizar</string>
|
||||
<string name="pref_swipe_dist_summary">Distância até acionar os cantos das teclas (%s)</string>
|
||||
@@ -28,7 +43,6 @@
|
||||
<string name="pref_category_style">Estilo</string>
|
||||
<string name="pref_margin_bottom_title">Margem inferior</string>
|
||||
<string name="pref_keyboard_height_title">Altura do teclado</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Altura do teclado em modo paisagem</string>
|
||||
<string name="pref_horizontal_margin_title">Margem horizontal</string>
|
||||
<string name="pref_character_size_title">Tamanho dos indicadores</string>
|
||||
<string name="pref_character_size_summary">Tamanho dos caracteres visíveis no teclado (%.2fx)</string>
|
||||
@@ -37,6 +51,7 @@
|
||||
<string name="pref_theme_e_dark">Escuro</string>
|
||||
<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_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>
|
||||
@@ -44,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Muito longo</string>
|
||||
<string name="pref_key_horizontal_space">Distância horizontal entre teclas</string>
|
||||
<string name="pref_key_vertical_space">Distância vertical entre teclas</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">Próximo</string>
|
||||
<string name="key_action_done">Pronto</string>
|
||||
<string name="key_action_go">Ir</string>
|
||||
|
@@ -1,45 +1,68 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Unexpected Keyboard</string>
|
||||
<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_category_layout">Расположение</string>
|
||||
<string name="pref_label_brightness">Изменить яркость клавиатуры</string>
|
||||
<string name="pref_keyboard_opacity">Изменить прозрачность фона</string>
|
||||
<string name="pref_key_opacity">Изменить прозрачность клавиш</string>
|
||||
<string name="pref_key_activated_opacity">Изменить прозрачность нажатой клавиши</string>
|
||||
<string name="pref_layout_title">Изменить раскладку клавиатуры</string>
|
||||
<string name="pref_layout_e_system">Системные настройки</string>
|
||||
<string name="pref_layout_e_custom">Пользовательская раскладка</string>
|
||||
<string name="pref_accents_title">Акцент</string>
|
||||
<string name="pref_accents_e_all_installed">Показывать акценты для всех установленных языков</string>
|
||||
<string name="pref_accents_e_selected">Показывать акценты только для выбранного языка</string>
|
||||
<string name="pref_accents_e_none">Скрыть акценты</string>
|
||||
<string name="pref_programming_layout_title">Раскладка клавиатуры для программирования</string>
|
||||
<string name="pref_programming_layout_none">Нету</string>
|
||||
<string name="pref_category_typing">Печатание</string>
|
||||
<string name="pref_show_numpad_title">Показывать NumPad</string>
|
||||
<string name="pref_show_numpad_never">Никогда</string>
|
||||
<string name="pref_show_numpad_landscape">Только в ландшафтном режиме</string>
|
||||
<string name="pref_show_numpad_always">Всегда</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>
|
||||
<string name="pref_category_typing">Печать</string>
|
||||
<string name="pref_swipe_dist_title">Расстояние пролистывания</string>
|
||||
<string name="pref_swipe_dist_summary">Расстояние между символами в углах клавиш (%s)</string>
|
||||
<string name="pref_long_timeout_title">Тайм-аут повтора ключа</string>
|
||||
<string name="pref_long_interval_title">Интервал повторения клавиш</string>
|
||||
<string name="pref_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_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_style">Стиль</string>
|
||||
<string name="pref_margin_bottom_title">Нижняя граница поля</string>
|
||||
<string name="pref_keyboard_height_title">Высота клавиатуры</string>
|
||||
<string name="pref_keyboard_height_landscape_title">Высота клавиатуры в ландшафтном режиме</string>
|
||||
<string name="pref_horizontal_margin_title">Горизонтальное поле</string>
|
||||
<string name="pref_character_size_title">Размер этикетки</string>
|
||||
<string name="pref_character_size_title">Размер символов</string>
|
||||
<string name="pref_character_size_summary">Размер символов, отображаемых на клавиатуре (%.2fx)</string>
|
||||
<string name="pref_theme">Тема</string>
|
||||
<string name="pref_theme_e_system">Системные настройки</string>
|
||||
<string name="pref_theme_e_dark">Темный</string>
|
||||
<string name="pref_theme_e_light">Светлый</string>
|
||||
<string name="pref_theme_e_black">Черный</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Очень короткий</string>
|
||||
<string name="pref_swipe_dist_e_short">Короткий</string>
|
||||
<string name="pref_swipe_dist_e_default">Обычный</string>
|
||||
<string name="pref_swipe_dist_e_far">Far</string>
|
||||
<string name="pref_theme_e_dark">Темная</string>
|
||||
<string name="pref_theme_e_light">Светлая</string>
|
||||
<string name="pref_theme_e_black">Черная</string>
|
||||
<string name="pref_theme_e_white">Белая</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Очень близко</string>
|
||||
<string name="pref_swipe_dist_e_short">Близко</string>
|
||||
<string name="pref_swipe_dist_e_default">Нормально</string>
|
||||
<string name="pref_swipe_dist_e_far">Далеко</string>
|
||||
<string name="pref_swipe_dist_e_very_far">Очень далеко</string>
|
||||
<string name="pref_key_horizontal_space">Горизонтальное расстояние между клавишами</string>
|
||||
<string name="pref_key_vertical_space">Расстояние по вертикали между клавишами</string>
|
||||
<string name="key_action_next">Next</string>
|
||||
<string name="pref_category_advanced">Расширенные настройки</string>
|
||||
<string name="pref_custom_layout_title">Пользовательская раскладка</string>
|
||||
<string name="pref_custom_layout_summary">Откройте исходный код. Эта параметр не предназначен для использования.</string>
|
||||
<string name="key_action_next">Далее</string>
|
||||
<string name="key_action_done">Ввод</string>
|
||||
<string name="key_action_go">Go</string>
|
||||
<string name="key_action_prev">Предыдущий</string>
|
||||
|
@@ -3,15 +3,32 @@
|
||||
<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 Ayarları</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">Düzen</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</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_layout_title">Klavye Düzenini Değiştir</string>
|
||||
<string name="pref_layout_e_system">Sistem Ayarları</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">Aksanlar</string>
|
||||
<string name="pref_accents_e_all_installed">Yüklü tüm dillerin aksanlarını göster</string>
|
||||
<string name="pref_accents_e_selected">Sadece seçili dilin aksanlarını göster</string>
|
||||
<string name="pref_accents_e_none">Aksanları gizle</string>
|
||||
<string name="pref_programming_layout_title">Programlama için klavye düzeni</string>
|
||||
<string name="pref_programming_layout_none">Hiçbiri</string>
|
||||
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
|
||||
<!-- <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_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>
|
||||
<string name="pref_category_typing">Yazma</string>
|
||||
<string name="pref_swipe_dist_title">Kaydırma mesafesi</string>
|
||||
<string name="pref_swipe_dist_summary">Tuşların köşelerindeki karakterlerin uzaklıkları (%s)</string>
|
||||
@@ -21,6 +38,8 @@
|
||||
<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_style">Stil</string>
|
||||
<string name="pref_margin_bottom_title">Alt boşluk</string>
|
||||
<string name="pref_keyboard_height_title">Klavye yüksekliği</string>
|
||||
@@ -32,6 +51,7 @@
|
||||
<string name="pref_theme_e_dark">Koyu</string>
|
||||
<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_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>
|
||||
@@ -39,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Çok uzun</string>
|
||||
<string name="pref_key_horizontal_space">Tuşlar arasındaki yatay boşluk</string>
|
||||
<string name="pref_key_vertical_space">Tuşlar arasındaki dikey boşluk</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">İleri</string>
|
||||
<string name="key_action_done">Bitti</string>
|
||||
<string name="key_action_go">İlerle</string>
|
||||
|
@@ -3,13 +3,32 @@
|
||||
<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 设置</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_category_layout">布局</string>
|
||||
<string name="pref_label_brightness">调整字母亮度</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_layout_title">改变键盘布局</string>
|
||||
<string name="pref_layout_e_system">系统设置</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<string name="pref_accents_title">声调</string>
|
||||
<string name="pref_accents_e_all_installed">显示所有安装的语言的声调符号</string>
|
||||
<string name="pref_accents_e_selected">只显示选择的语言的声调符号</string>
|
||||
<string name="pref_accents_e_none">隐藏声调符号</string>
|
||||
<string name="pref_show_numpad_title">显示数字小键盘</string>
|
||||
<string name="pref_show_numpad_never">从不</string>
|
||||
<string name="pref_show_numpad_landscape">只在横屏显示</string>
|
||||
<string name="pref_show_numpad_always">一直显示</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>
|
||||
<string name="pref_category_typing">输入</string>
|
||||
<string name="pref_swipe_dist_title">滑动触发距离</string>
|
||||
<string name="pref_swipe_dist_summary">输入按键四角的符号需要滑动的距离 (%s)</string>
|
||||
@@ -19,6 +38,8 @@
|
||||
<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_style">样式</string>
|
||||
<string name="pref_margin_bottom_title">键盘下边距</string>
|
||||
<string name="pref_keyboard_height_title">键盘高度</string>
|
||||
@@ -30,13 +51,17 @@
|
||||
<string name="pref_theme_e_dark">暗色</string>
|
||||
<string name="pref_theme_e_light">亮色</string>
|
||||
<string name="pref_theme_e_black">黑色</string>
|
||||
<string name="pref_theme_e_white">白色</string>
|
||||
<string name="pref_swipe_dist_e_very_short">非常短</string>
|
||||
<string name="pref_swipe_dist_e_short">短</string>
|
||||
<string name="pref_swipe_dist_e_default">中(默认)</string>
|
||||
<string name="pref_swipe_dist_e_far">长</string>
|
||||
<string name="pref_swipe_dist_e_default">中(默认)</string>
|
||||
<string name="pref_swipe_dist_e_far">长</string>
|
||||
<string name="pref_swipe_dist_e_very_far">非常长</string>
|
||||
<string name="pref_key_horizontal_space">按键的左右边距</string>
|
||||
<string name="pref_key_vertical_space">按键的上下边距</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<string name="key_action_next">下一项</string>
|
||||
<string name="key_action_done">完成</string>
|
||||
<string name="key_action_go">前往</string>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="pref_layout_values">
|
||||
<item>system</item>
|
||||
<item>none</item>
|
||||
<item>azerty</item>
|
||||
<item>qwerty</item>
|
||||
<item>qwerty_pt</item>
|
||||
@@ -13,11 +13,13 @@
|
||||
<item>qwerty_sv_se</item>
|
||||
<item>qwerty_hu</item>
|
||||
<item>qwerty_tr</item>
|
||||
<item>qwerty_pl</item>
|
||||
<item>ru_jcuken</item>
|
||||
<item>qwertz</item>
|
||||
<item>qwertz_cs</item>
|
||||
<item>qwertz_de</item>
|
||||
<item>qwertz_hu</item>
|
||||
<item>qwertz_sk</item>
|
||||
<item>bgph1</item>
|
||||
<item>dvorak</item>
|
||||
<item>colemak</item>
|
||||
@@ -26,9 +28,10 @@
|
||||
<item>jcuken_ua</item>
|
||||
<item>bangla</item>
|
||||
<item>hindi</item>
|
||||
<item>custom</item>
|
||||
</string-array>
|
||||
<string-array name="pref_layout_entries">
|
||||
<item>@string/pref_layout_e_system</item>
|
||||
<item>None</item>
|
||||
<item>AZERTY</item>
|
||||
<item>QWERTY</item>
|
||||
<item>QWERTY (Brasileiro)</item>
|
||||
@@ -40,11 +43,13 @@
|
||||
<item>QWERTY (Swedish)</item>
|
||||
<item>QWERTY (Hungarian)</item>
|
||||
<item>QWERTY (Türkçe)</item>
|
||||
<item>QWERTY (Polski)</item>
|
||||
<item>ЙЦУКЕН (Русский)</item>
|
||||
<item>QWERTZ</item>
|
||||
<item>QWERTZ (Czech)</item>
|
||||
<item>QWERTZ (Deutsch)</item>
|
||||
<item>QWERTZ (Hungarian)</item>
|
||||
<item>QWERTZ (Slovak)</item>
|
||||
<item>Bulgarian (Phonetic Traditional)</item>
|
||||
<item>Dvorak</item>
|
||||
<item>Colemak</item>
|
||||
@@ -53,18 +58,7 @@
|
||||
<item>ЙЦУКЕН (Українська)</item>
|
||||
<item>বাংলা</item>
|
||||
<item>हिन्दी</item>
|
||||
</string-array>
|
||||
<string-array name="pref_programming_layout_values">
|
||||
<item>none</item>
|
||||
<item>qwerty</item>
|
||||
<item>dvorak</item>
|
||||
<item>colemak</item>
|
||||
</string-array>
|
||||
<string-array name="pref_programming_layout_entries">
|
||||
<item>@string/pref_programming_layout_none</item>
|
||||
<item>QWERTY</item>
|
||||
<item>Dvorak</item>
|
||||
<item>Colemak</item>
|
||||
<item>@string/pref_layout_e_custom</item>
|
||||
</string-array>
|
||||
<string-array name="pref_accents_entries">
|
||||
<item>@string/pref_accents_e_all_installed</item>
|
||||
@@ -81,6 +75,14 @@
|
||||
<item>@string/pref_show_numpad_landscape</item>
|
||||
<item>@string/pref_show_numpad_always</item>
|
||||
</string-array>
|
||||
<string-array name="pref_numpad_layout_values">
|
||||
<item>high_first</item>
|
||||
<item>low_first</item>
|
||||
</string-array>
|
||||
<string-array name="pref_numpad_layout_entries">
|
||||
<item>@string/pref_numpad_layout_e_high_first</item>
|
||||
<item>@string/pref_numpad_layout_e_low_first</item>
|
||||
</string-array>
|
||||
<string-array name="pref_accents_values">
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
|
@@ -3,4 +3,7 @@
|
||||
<declare-styleable name="ExtraKeyCheckBoxPreference">
|
||||
<attr name="index" format="integer"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="LayoutListPreference">
|
||||
<attr name="defaultString" format="string"/>
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
|
@@ -3,9 +3,16 @@
|
||||
<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 Settings</string>
|
||||
<string name="pref_portrait">In portrait mode</string>
|
||||
<string name="pref_landscape">In landscape mode</string>
|
||||
<string name="pref_category_layout">Layout</string>
|
||||
<string name="pref_label_brightness">Adjust label brightness</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_layout_title">Change keyboard layout</string>
|
||||
<string name="pref_layout_e_system">System settings</string>
|
||||
<string name="pref_layout_e_custom">Custom layout</string>
|
||||
<string name="pref_accents_title">Accents</string>
|
||||
<string name="pref_accents_e_all_installed">Show accents for all installed languages</string>
|
||||
<string name="pref_accents_e_selected">Only show accents for the selected language</string>
|
||||
@@ -14,11 +21,14 @@
|
||||
<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_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_programming_layout_title">Keyboard layout for programming</string>
|
||||
<string name="pref_programming_layout_none">None</string>
|
||||
<string name="pref_second_layout_title">Secondary layout</string>
|
||||
<string name="pref_second_layout_none">None</string>
|
||||
<string name="pref_category_typing">Typing</string>
|
||||
<string name="pref_swipe_dist_title">Swiping distance</string>
|
||||
<string name="pref_swipe_dist_summary">Distance of characters in the corners of the keys (%s)</string>
|
||||
@@ -33,7 +43,6 @@
|
||||
<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>
|
||||
<string name="pref_keyboard_height_landscape_title">Keyboard height in landscape mode</string>
|
||||
<string name="pref_horizontal_margin_title">Horizontal margin</string>
|
||||
<string name="pref_character_size_title">Label size</string>
|
||||
<string name="pref_character_size_summary">Size of characters displayed on the keyboard (%.2fx)</string>
|
||||
@@ -50,6 +59,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Very far</string>
|
||||
<string name="pref_key_horizontal_space">Horizontal spacing between the keys</string>
|
||||
<string name="pref_key_vertical_space">Vertical spacing between the keys</string>
|
||||
<string name="pref_category_advanced">Advanced</string>
|
||||
<string name="pref_custom_layout_title">Custom layout</string>
|
||||
<string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string>
|
||||
<string name="key_action_next">Next</string>
|
||||
<string name="key_action_done">Done</string>
|
||||
<string name="key_action_go">Go</string>
|
||||
|
@@ -17,8 +17,10 @@
|
||||
<item name="android:textColor">?attr/emoji_key_text</item>
|
||||
<item name="android:textSize">18dp</item>
|
||||
</style>
|
||||
<!-- Passed to TextView.setTextAppearance -->
|
||||
<style name="emojiGridButton">
|
||||
<item name="android:layout_width">fill_parent</item>
|
||||
<item name="android:layout_height">fill_parent</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:textSize">@dimen/emoji_text_size</item>
|
||||
<item name="android:textColor">?attr/emoji_color</item>
|
||||
</style>
|
||||
|
@@ -11,10 +11,17 @@
|
||||
<attr name="colorLabel" format="color"/>
|
||||
<attr name="colorLabelActivated" format="color"/>
|
||||
<attr name="colorLabelLocked" format="color"/>
|
||||
<attr name="secondaryLightOffset" format="float"/>
|
||||
<!-- Corner labels -->
|
||||
<attr name="colorSubLabel" format="color"/>
|
||||
<!-- Dimens -->
|
||||
<!-- Borders -->
|
||||
<attr name="keyBorderRadius" format="dimension"/>
|
||||
<attr name="keyBorderWidth" format="dimension"/>
|
||||
<attr name="keyBorderWidthActivated" format="dimension"/>
|
||||
<attr name="keyBorderColorLeft" format="color"/>
|
||||
<attr name="keyBorderColorTop" format="color"/>
|
||||
<attr name="keyBorderColorRight" format="color"/>
|
||||
<attr name="keyBorderColorBottom" format="color"/>
|
||||
<!-- Emoji panel -->
|
||||
<attr name="emoji_button_bg" type="color" format="color"/>
|
||||
<attr name="emoji_color" type="color" format="color"/>
|
||||
@@ -29,6 +36,8 @@
|
||||
<item name="navigationBarColor">?attr/colorKeyboard</item>
|
||||
<item name="windowLightNavigationBar">?attr/android:isLightTheme</item>
|
||||
<item name="keyBorderRadius">5dp</item>
|
||||
<item name="keyBorderWidth">0dp</item>
|
||||
<item name="keyBorderWidthActivated">0dp</item>
|
||||
<item name="emoji_key_bg" type="color">?attr/emoji_button_bg</item>
|
||||
<item name="emoji_key_text" type="color">?attr/colorLabel</item>
|
||||
</style>
|
||||
@@ -37,10 +46,14 @@
|
||||
<item name="colorKeyboard">#1b1b1b</item>
|
||||
<item name="colorKey">#333333</item>
|
||||
<item name="colorKeyActivated">#1b1b1b</item>
|
||||
<item name="keyBorderWidth">1.2dp</item>
|
||||
<item name="keyBorderWidthActivated">0dp</item>
|
||||
<item name="keyBorderColorBottom">#404040</item>
|
||||
<item name="colorLabel">#ffffff</item>
|
||||
<item name="colorLabelActivated">#3399ff</item>
|
||||
<item name="colorLabelLocked">#33cc33</item>
|
||||
<item name="colorSubLabel">#cccccc</item>
|
||||
<item name="secondaryLightOffset">-0.2</item>
|
||||
<item name="emoji_button_bg" type="color">#202020</item>
|
||||
<item name="emoji_color" type="color">#ffffff</item>
|
||||
</style>
|
||||
@@ -49,10 +62,17 @@
|
||||
<item name="colorKeyboard">#e3e3e3</item>
|
||||
<item name="colorKey">#cccccc</item>
|
||||
<item name="colorKeyActivated">#e3e3e3</item>
|
||||
<item name="keyBorderWidth">0.6dp</item>
|
||||
<item name="keyBorderWidthActivated">0dp</item>
|
||||
<item name="keyBorderColorLeft">#cccccc</item>
|
||||
<item name="keyBorderColorTop">#eeeeee</item>
|
||||
<item name="keyBorderColorRight">#cccccc</item>
|
||||
<item name="keyBorderColorBottom">#aaaaaa</item>
|
||||
<item name="colorLabel">#000000</item>
|
||||
<item name="colorLabelActivated">#0066cc</item>
|
||||
<item name="colorLabelLocked">#33cc33</item>
|
||||
<item name="colorSubLabel">#333333</item>
|
||||
<item name="secondaryLightOffset">+0.3</item>
|
||||
<item name="emoji_button_bg">#dedede</item>
|
||||
<item name="emoji_color">#000000</item>
|
||||
</style>
|
||||
@@ -61,10 +81,17 @@
|
||||
<item name="colorKeyboard">#000000</item>
|
||||
<item name="colorKey">#000000</item>
|
||||
<item name="colorKeyActivated">#333333</item>
|
||||
<item name="keyBorderWidth">0dp</item>
|
||||
<item name="keyBorderWidthActivated">1dp</item>
|
||||
<item name="keyBorderColorLeft">#2a2a2a</item>
|
||||
<item name="keyBorderColorTop">#2a2a2a</item>
|
||||
<item name="keyBorderColorRight">#2a2a2a</item>
|
||||
<item name="keyBorderColorBottom">#2a2a2a</item>
|
||||
<item name="colorLabel">#eeeeee</item>
|
||||
<item name="colorLabelActivated">#009dff</item>
|
||||
<item name="colorLabelLocked">#00ff26</item>
|
||||
<item name="colorSubLabel">#bbbbbb</item>
|
||||
<item name="secondaryLightOffset">-0.25</item>
|
||||
<item name="keyBorderRadius">1dp</item>
|
||||
<item name="emoji_button_bg">#000000</item>
|
||||
<item name="emoji_color">#ffffff</item>
|
||||
@@ -73,11 +100,18 @@
|
||||
<item name="android:isLightTheme">true</item>
|
||||
<item name="colorKeyboard">#ffffff</item>
|
||||
<item name="colorKey">#ffffff</item>
|
||||
<item name="colorKeyActivated">#cccccc</item>
|
||||
<item name="keyBorderWidth">1dp</item>
|
||||
<item name="keyBorderWidthActivated">1dp</item>
|
||||
<item name="keyBorderColorLeft">#f0f0f0</item>
|
||||
<item name="keyBorderColorTop">#f0f0f0</item>
|
||||
<item name="keyBorderColorRight">#eeeeee</item>
|
||||
<item name="keyBorderColorBottom">#eeeeee</item>
|
||||
<item name="colorKeyActivated">#ffffff</item>
|
||||
<item name="colorLabel">#000000</item>
|
||||
<item name="colorLabelActivated">#0066cc</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>
|
||||
|
@@ -6,11 +6,9 @@
|
||||
<dimen name="key_padding">2dp</dimen>
|
||||
<dimen name="key_vertical_interval">2dp</dimen>
|
||||
<dimen name="key_horizontal_interval">2dp</dimen>
|
||||
<dimen name="key_height">51dp</dimen>
|
||||
<dimen name="emoji_type_button_height">56dp</dimen>
|
||||
<dimen name="emoji_grid_height">250dp</dimen>
|
||||
<dimen name="emoji_text_size">28dp</dimen>
|
||||
<dimen name="extra_horizontal_margin">0dp</dimen>
|
||||
<bool name="debug_logs" product="debug">true</bool>
|
||||
<bool name="debug_logs" product="default">false</bool>
|
||||
</resources>
|
||||
|
@@ -38,7 +38,7 @@
|
||||
<row height="0.95">
|
||||
<key width="1.8" key0="ctrl" key2="loc meta" key4="switch_numeric"/>
|
||||
<key width="1.2" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.0" key0="space" key1="switch_programming" key2="0" edgekeys="true"/>
|
||||
<key width="4.0" key0="space" key1="switch_second" key2="0" edgekeys="true"/>
|
||||
<key width="1.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key width="1.8" key0="enter" key3="action"/>
|
||||
</row>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
<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_programming" edgekeys="true"/>
|
||||
<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"/>
|
||||
</row>
|
||||
|
@@ -15,7 +15,7 @@
|
||||
<subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_lv,extra_keys=accent_caron|accent_cedille|accent_macron|€"/>
|
||||
<subtype android:label="%s" android:languageTag="nl-BE" android:imeSubtypeLocale="nl_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=azerty,extra_keys=accent_grave|accent_aigu|accent_circonflexe|accent_cedille|accent_trema|€"/>
|
||||
<subtype android:label="%s" android:languageTag="no" android:imeSubtypeLocale="no_NO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_no,extra_keys=accent_aigu|€"/>
|
||||
<subtype android:label="%s" android:languageTag="pl" android:imeSubtypeLocale="pl_PL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty,extra_keys=accent_aigu|accent_ogonek|accent_dot_above|ł"/>
|
||||
<subtype android:label="%s" android:languageTag="pl" android:imeSubtypeLocale="pl_PL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_pl"/>
|
||||
<subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_pt,extra_keys=accent_aigu|accent_cedille|accent_circonflexe|accent_grave|accent_tilde|€"/>
|
||||
<subtype android:label="%s" android:languageTag="ru" android:imeSubtypeLocale="ru_RU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=ru_jcuken"/>
|
||||
<subtype android:label="%s" android:languageTag="sv" android:imeSubtypeLocale="sv_SE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_sv_se,extra_keys=accent_aigu|accent_trema|accent_ring|€"/>
|
||||
@@ -23,4 +23,5 @@
|
||||
<subtype android:label="%s" android:languageTag="uk" android:imeSubtypeLocale="uk_UA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=jcuken_ua"/>
|
||||
<subtype android:label="%s" android:languageTag="cs" android:imeSubtypeLocale="cs_CZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwertz_cs,extra_keys=a|accent_cedille|accent_circonflexe"/>
|
||||
<subtype android:label="%s" android:languageTag="el" android:imeSubtypeLocale="el" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_el,extra_keys=£|€"/>
|
||||
<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=é|ě|ŕ|ř|ť|ž|ü|ú|ů|í|ö|ó|ô|á|ä|ś|š|ď|ĺ|ľ|ý|č|ň"/>
|
||||
</input-method>
|
||||
|
@@ -41,7 +41,7 @@
|
||||
<row height="0.95">
|
||||
<key width="1.8" key0="ctrl" key2="loc meta" key4="switch_numeric"/>
|
||||
<key width="1.2" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.0" key0="space" key1="switch_programming" edgekeys="true"/>
|
||||
<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 key0="j" key4=";"/>
|
||||
<key width="1.8" key0="enter" key2="action"/>
|
||||
|
37
res/xml/qwerty_pl.xml
Normal file
37
res/xml/qwerty_pl.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="1" key4="esc"/>
|
||||
<key key0="w" key1="~" key2="2" key3="\@"/>
|
||||
<key key0="e" key1="!" key2="3" key3="\#" key4="ę"/>
|
||||
<key key0="r" key2="4" key3="$"/>
|
||||
<key key0="t" key2="5" key3="%"/>
|
||||
<key key0="y" key2="6" key3="^"/>
|
||||
<key key0="u" key2="7" key3="&" key4="loc €"/>
|
||||
<key key0="i" key1="loc accent_macron" 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="`" key4="ą"/>
|
||||
<key key0="s" key1="loc accent_ring" key3="loc ß" key4="ś"/>
|
||||
<key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/>
|
||||
<key key0="f" key1="loc accent_dot_above" key4="loc accent_ogonek"/>
|
||||
<key key0="g" key1="loc accent_caron" key2="-" key3="_"/>
|
||||
<key key0="h" key2="=" key3="+"/>
|
||||
<key key0="j" key1="loc accent_trema" key2="loc accent_circonflexe" key3="{" key4="}"/>
|
||||
<key key0="k" key1="loc accent_double_aigu" key3="[" key4="]"/>
|
||||
<key key0="l" key2="|" key3="\\" key4="ł"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift" key2="loc capslock"/>
|
||||
<key key0="z" key4="ż"/>
|
||||
<key key0="x" key4="ź"/>
|
||||
<key key0="c" key1="loc accent_cedille" key2="<" key3="." key4="ć"/>
|
||||
<key key0="v" key2=">" key3=","/>
|
||||
<key key0="b" key2="\?" key3="/"/>
|
||||
<key key0="n" key1="loc accent_tilde" key2=":" key3=";" key4="ń"/>
|
||||
<key key0="m" key2=""" key3="'"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
39
res/xml/qwertz_sk.xml
Normal file
39
res/xml/qwertz_sk.xml
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key1="1" key4="esc"/>
|
||||
<key key0="w" key1="2"/>
|
||||
<key key0="e" key1="3" key3="é" key4="ě"/>
|
||||
<key key0="r" key1="4" key3="ŕ" key4="ř"/>
|
||||
<key key0="t" key1="5" key4="ť"/>
|
||||
<key key0="z" key1="6" key4="ž"/>
|
||||
<key key0="u" key1="7" key2="ü" key3="ú" key4="ů"/>
|
||||
<key key0="i" key1="8" key3="í"/>
|
||||
<key key0="o" key1="9" key2="ö" key3="ó" key4="ô"/>
|
||||
<key key0="p" key1="0" key2="=" key3="\" key4="/"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="a" key1="tab" key3="á" key4="ä"/>
|
||||
<key key0="s" key3="ś" key4="š"/>
|
||||
<key key0="d" key4="ď"/>
|
||||
<key key0="f" key1="%" key2="*"/>
|
||||
<key key0="g" key2="^"/>
|
||||
<key key0="h" key1="~" key2="÷"/>
|
||||
<key key0="j" key1="{" key2="}" key3="|" key4="+"/>
|
||||
<key key0="k" key1="[" key2="]" key3="'" key4="""/>
|
||||
<key key0="l" key1="(" key2=")" key3="ĺ" key4="ľ"/>
|
||||
<key key0="backspace" key3="delete"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="shift" key2="loc capslock"/>
|
||||
<key key0="y" key1="$" key3="ý"/>
|
||||
<key key0="x"/>
|
||||
<key key0="c" key4="č"/>
|
||||
<key key0="v" key4="\@"/>
|
||||
<key key0="b" key1="\#" key2="&" key3="-" key4="_"/>
|
||||
<key key0="n" key1="«" key2="»" key4="ň"/>
|
||||
<key key0="m" key1="<" key2=">"/>
|
||||
<key key0="," key1=":" key2="\?"/>
|
||||
<key key0="." key1=";" key2="!"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceCategory android:title="@string/pref_category_layout">
|
||||
<ListPreference android:key="layout" android:title="@string/pref_layout_title" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_layout_entries" android:entryValues="@array/pref_layout_values"/>
|
||||
<juloo.keyboard2.LayoutListPreference android:key="layout" android:title="@string/pref_layout_title" app:defaultString="@string/pref_layout_e_system"/>
|
||||
<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"/>
|
||||
<ListPreference android:key="programming_layout" android:title="@string/pref_programming_layout_title" android:summary="%s" android:defaultValue="none" android:entries="@array/pref_programming_layout_entries" android:entryValues="@array/pref_programming_layout_values"/>
|
||||
<PreferenceScreen android:title="@string/pref_extra_keys_title">
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="0"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="1"/>
|
||||
@@ -28,7 +28,19 @@
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="19"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="20"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="21"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="22"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="23"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="24"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="25"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="26"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="27"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="28"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="29"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="30"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="31"/>
|
||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="32"/>
|
||||
</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"/>
|
||||
@@ -41,12 +53,27 @@
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_style">
|
||||
<ListPreference android:key="theme" android:title="@string/pref_theme" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_theme_entries" android:entryValues="@array/pref_theme_values"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="margin_bottom" android:title="@string/pref_margin_bottom_title" android:summary="%sdp" android:defaultValue="5" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="keyboard_height" android:title="@string/pref_keyboard_height_title" android:summary="%s%%" android:defaultValue="35" min="25" max="50"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="keyboard_height_landscape" android:title="@string/pref_keyboard_height_landscape_title" android:summary="%s%%" android:defaultValue="50" min="35" max="65"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="horizontal_margin" android:title="@string/pref_horizontal_margin_title" android:summary="%sdp" android:defaultValue="3" min="0" max="20"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="label_brightness" android:title="@string/pref_label_brightness" android:summary="%s%%" android:defaultValue="100" min="50" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="keyboard_opacity" android:title="@string/pref_keyboard_opacity" android:summary="%s%%" android:defaultValue="100" min="30" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="key_opacity" android:title="@string/pref_key_opacity" android:summary="%s%%" android:defaultValue="100" min="30" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="key_activated_opacity" android:title="@string/pref_key_activated_opacity" android:summary="%s%%" android:defaultValue="100" min="30" max="100"/>
|
||||
<PreferenceScreen android:title="@string/pref_margin_bottom_title">
|
||||
<juloo.common.IntSlideBarPreference android:key="margin_bottom_portrait" android:title="@string/pref_portrait" android:summary="%sdp" android:defaultValue="7" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="margin_bottom_landscape" android:title="@string/pref_landscape" android:summary="%sdp" android:defaultValue="3" min="0" max="100"/>
|
||||
</PreferenceScreen>
|
||||
<PreferenceScreen android:title="@string/pref_keyboard_height_title">
|
||||
<juloo.common.IntSlideBarPreference android:key="keyboard_height" android:title="@string/pref_portrait" android:summary="%s%%" android:defaultValue="35" min="10" max="50"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="keyboard_height_landscape" android:title="@string/pref_landscape" android:summary="%s%%" android:defaultValue="50" min="20" max="65"/>
|
||||
</PreferenceScreen>
|
||||
<PreferenceScreen android:title="@string/pref_horizontal_margin_title">
|
||||
<juloo.common.IntSlideBarPreference android:key="horizontal_margin_portrait" android:title="@string/pref_portrait" android:summary="%sdp" android:defaultValue="3" min="0" max="30"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="horizontal_margin_landscape" android:title="@string/pref_landscape" android:summary="%sdp" android:defaultValue="28" min="0" max="200"/>
|
||||
</PreferenceScreen>
|
||||
<juloo.common.SlideBarPreference android:key="character_size" android:title="@string/pref_character_size_title" android:summary="@string/pref_character_size_summary" android:defaultValue="1.0" min="0.8" max="1.2"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="key_vertical_space" android:title="@string/pref_key_vertical_space" android:summary="%sdp" android:defaultValue="2" min="0" max="8"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="key_horizontal_space" android:title="@string/pref_key_horizontal_space" android:summary="%sdp" android:defaultValue="2" min="0" max="8"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_advanced">
|
||||
<EditTextPreference android:key="custom_layout" android:title="@string/pref_custom_layout_title" android:summary="@string/pref_custom_layout_summary" android:inputType="text|textMultiLine|textLongMessage"/>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
@@ -59,12 +59,6 @@ final class Autocapitalisation
|
||||
callback(false);
|
||||
}
|
||||
|
||||
public void typed(char c)
|
||||
{
|
||||
type_one_char(c);
|
||||
callback(false);
|
||||
}
|
||||
|
||||
public void event_sent(int code, int meta)
|
||||
{
|
||||
if (meta != 0)
|
||||
|
@@ -1,16 +1,14 @@
|
||||
package juloo.keyboard2;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Build;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.TypedValue;
|
||||
import android.view.KeyEvent;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
final class Config
|
||||
{
|
||||
@@ -24,18 +22,25 @@ final class Config
|
||||
public final float sublabelTextSize;
|
||||
|
||||
// From preferences
|
||||
public int layout; // Or '-1' for the system defaults
|
||||
public int programming_layout; // Or '-1' for none
|
||||
public KeyboardData layout; // Or 'null' for the system defaults
|
||||
public KeyboardData second_layout; // Or 'null' for none
|
||||
public KeyboardData custom_layout; // Might be 'null'
|
||||
public boolean show_numpad = false;
|
||||
// From the 'numpad_layout' option, also apply to the numeric pane.
|
||||
public boolean inverse_numpad = false;
|
||||
public float swipe_dist_px;
|
||||
public boolean vibrateEnabled;
|
||||
public long longPressTimeout;
|
||||
public long longPressInterval;
|
||||
public float marginBottom;
|
||||
public float margin_bottom;
|
||||
public float keyHeight;
|
||||
public float horizontalMargin;
|
||||
public float horizontal_margin;
|
||||
public float keyVerticalInterval;
|
||||
public float keyHorizontalInterval;
|
||||
public int labelBrightness; // 0 - 255
|
||||
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
|
||||
@@ -45,7 +50,7 @@ final class Config
|
||||
|
||||
// Dynamically set
|
||||
public boolean shouldOfferSwitchingToNextInputMethod;
|
||||
public boolean shouldOfferSwitchingToProgramming;
|
||||
public boolean shouldOfferSwitchingToSecond;
|
||||
public String actionLabel; // Might be 'null'
|
||||
public int actionId; // Meaningful only when 'actionLabel' isn't 'null'
|
||||
public boolean swapEnterActionKey; // Swap the "enter" and "action" keys
|
||||
@@ -53,6 +58,7 @@ final class Config
|
||||
public Set<KeyValue> extra_keys_param;
|
||||
|
||||
public final IKeyEventHandler handler;
|
||||
public boolean orientation_landscape = false;
|
||||
|
||||
private Config(SharedPreferences prefs, Resources res, IKeyEventHandler h)
|
||||
{
|
||||
@@ -62,25 +68,11 @@ final class Config
|
||||
keyPadding = res.getDimension(R.dimen.key_padding);
|
||||
labelTextSize = 0.33f;
|
||||
sublabelTextSize = 0.22f;
|
||||
// default values
|
||||
layout = -1;
|
||||
programming_layout = -1;
|
||||
vibrateEnabled = true;
|
||||
longPressTimeout = 600;
|
||||
longPressInterval = 65;
|
||||
marginBottom = res.getDimension(R.dimen.margin_bottom);
|
||||
keyHeight = res.getDimension(R.dimen.key_height);
|
||||
horizontalMargin = res.getDimension(R.dimen.horizontal_margin);
|
||||
keyVerticalInterval = res.getDimension(R.dimen.key_vertical_interval);
|
||||
keyHorizontalInterval = res.getDimension(R.dimen.key_horizontal_interval);
|
||||
preciseRepeat = true;
|
||||
characterSize = 1.f;
|
||||
accents = 1;
|
||||
// from prefs
|
||||
refresh(res);
|
||||
// initialized later
|
||||
shouldOfferSwitchingToNextInputMethod = false;
|
||||
shouldOfferSwitchingToProgramming = false;
|
||||
shouldOfferSwitchingToSecond = false;
|
||||
actionLabel = null;
|
||||
actionId = 0;
|
||||
swapEnterActionKey = false;
|
||||
@@ -94,6 +86,7 @@ final class Config
|
||||
public void refresh(Resources res)
|
||||
{
|
||||
DisplayMetrics dm = res.getDisplayMetrics();
|
||||
orientation_landscape = res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
|
||||
// The height of the keyboard is relative to the height of the screen.
|
||||
// This is the height of the keyboard if it have 4 rows.
|
||||
int keyboardHeightPercent;
|
||||
@@ -102,7 +95,7 @@ final class Config
|
||||
float characterSizeScale = 1.f;
|
||||
String show_numpad_s = _prefs.getString("show_numpad", "never");
|
||||
show_numpad = "always".equals(show_numpad_s);
|
||||
if (res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) // Landscape mode
|
||||
if (orientation_landscape)
|
||||
{
|
||||
if ("landscape".equals(show_numpad_s))
|
||||
show_numpad = true;
|
||||
@@ -114,33 +107,45 @@ final class Config
|
||||
{
|
||||
keyboardHeightPercent = _prefs.getInt("keyboard_height", 35);
|
||||
}
|
||||
String layout_s = _prefs.getString("layout", "system");
|
||||
layout = layout_s.equals("system") ? -1 : layoutId_of_string(layout_s);
|
||||
String prog_layout_s = _prefs.getString("programming_layout", "none");
|
||||
programming_layout = prog_layout_s.equals("none") ? -1 : layoutId_of_string(prog_layout_s);
|
||||
// The swipe distance is defined relatively to the "exact physical pixels
|
||||
// per inch of the screen", which isn't affected by the scaling settings.
|
||||
// Take the mean of both dimensions as an approximation of the diagonal.
|
||||
float physical_scaling = (dm.widthPixels + dm.heightPixels) / (dm.xdpi + dm.ydpi);
|
||||
swipe_dist_px = Float.valueOf(_prefs.getString("swipe_dist", "15")) * physical_scaling;;
|
||||
vibrateEnabled = _prefs.getBoolean("vibrate_enabled", vibrateEnabled);
|
||||
longPressTimeout = _prefs.getInt("longpress_timeout", (int)longPressTimeout);
|
||||
longPressInterval = _prefs.getInt("longpress_interval", (int)longPressInterval);
|
||||
marginBottom = getDipPref(dm, _prefs, "margin_bottom", marginBottom);
|
||||
keyVerticalInterval = getDipPref(dm, _prefs, "key_vertical_space", keyVerticalInterval);
|
||||
layout = layout_of_string(res, _prefs.getString("layout", "none"));
|
||||
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");
|
||||
// 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.
|
||||
// The option value uses an unnamed scale where the baseline is around 25.
|
||||
float dpi_ratio = Math.max(dm.xdpi, dm.ydpi) / Math.min(dm.xdpi, dm.ydpi);
|
||||
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;
|
||||
vibrateEnabled = _prefs.getBoolean("vibrate_enabled", true);
|
||||
longPressTimeout = _prefs.getInt("longpress_timeout", 600);
|
||||
longPressInterval = _prefs.getInt("longpress_interval", 65);
|
||||
margin_bottom = get_dip_pref(dm, oriented_pref("margin_bottom"),
|
||||
res.getDimension(R.dimen.margin_bottom));
|
||||
keyVerticalInterval = get_dip_pref(dm, "key_vertical_space",
|
||||
res.getDimension(R.dimen.key_vertical_interval));
|
||||
keyHorizontalInterval =
|
||||
getDipPref(dm, _prefs, "key_horizontal_space", keyHorizontalInterval)
|
||||
get_dip_pref(dm, "key_horizontal_space",
|
||||
res.getDimension(R.dimen.key_horizontal_interval))
|
||||
* horizontalIntervalScale;
|
||||
// Label brightness is used as the alpha channel
|
||||
labelBrightness = _prefs.getInt("label_brightness", 100) * 255 / 100;
|
||||
// Keyboard opacity
|
||||
keyboardOpacity = _prefs.getInt("keyboard_opacity", 100) * 255 / 100;
|
||||
keyOpacity = _prefs.getInt("key_opacity", 100) * 255 / 100;
|
||||
keyActivatedOpacity = _prefs.getInt("key_activated_opacity", 100) * 255 / 100;
|
||||
// Do not substract keyVerticalInterval from keyHeight because this is done
|
||||
// during rendered.
|
||||
keyHeight = dm.heightPixels * keyboardHeightPercent / 100 / 4;
|
||||
horizontalMargin =
|
||||
getDipPref(dm, _prefs, "horizontal_margin", horizontalMargin)
|
||||
+ res.getDimension(R.dimen.extra_horizontal_margin);
|
||||
preciseRepeat = _prefs.getBoolean("precise_repeat", preciseRepeat);
|
||||
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", characterSize)
|
||||
_prefs.getFloat("character_size", 1.f)
|
||||
* characterSizeScale;
|
||||
accents = Integer.valueOf(_prefs.getString("accents", "1"));
|
||||
theme = getThemeId(res, _prefs.getString("theme", ""));
|
||||
@@ -154,7 +159,7 @@ final class Config
|
||||
* - Replace the action key to show the right label
|
||||
* - Swap the enter and action keys
|
||||
*/
|
||||
public KeyboardData modify_layout(KeyboardData original_kw)
|
||||
public KeyboardData modify_layout(KeyboardData kw)
|
||||
{
|
||||
// Update the name to avoid caching in KeyModifier
|
||||
final KeyValue action_key = (actionLabel == null) ? null :
|
||||
@@ -162,9 +167,31 @@ final class Config
|
||||
// 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>();
|
||||
extra_keys.addAll(extra_keys_subtype);
|
||||
if (extra_keys_subtype != null)
|
||||
extra_keys.addAll(extra_keys_subtype);
|
||||
extra_keys.addAll(extra_keys_param);
|
||||
KeyboardData kw = original_kw.mapKeys(new KeyboardData.MapKeyValues() {
|
||||
if (kw.num_pad && show_numpad)
|
||||
kw = kw.addNumPad();
|
||||
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);
|
||||
@@ -182,8 +209,8 @@ final class Config
|
||||
case ACTION:
|
||||
return (swapEnterActionKey && action_key != null) ?
|
||||
KeyValue.getKeyByName("enter") : action_key;
|
||||
case SWITCH_PROGRAMMING:
|
||||
return shouldOfferSwitchingToProgramming ? key : null;
|
||||
case SWITCH_SECOND:
|
||||
return shouldOfferSwitchingToSecond ? key : null;
|
||||
}
|
||||
break;
|
||||
case Keyevent:
|
||||
@@ -207,21 +234,43 @@ final class Config
|
||||
});
|
||||
if (extra_keys.size() > 0)
|
||||
kw = kw.addExtraKeys(extra_keys.iterator());
|
||||
if (original_kw.num_pad && show_numpad)
|
||||
kw = kw.addNumPad();
|
||||
return kw;
|
||||
}
|
||||
|
||||
private float getDipPref(DisplayMetrics dm, SharedPreferences prefs, String pref_name, float def)
|
||||
/** Modify a layout to turn it into a secondary layout by changing the
|
||||
"switch_second" key. */
|
||||
KeyboardData tweak_secondary_layout(KeyboardData layout)
|
||||
{
|
||||
if (layout == null)
|
||||
return null;
|
||||
return layout.mapKeys(new KeyboardData.MapKeyValues() {
|
||||
public KeyValue apply(KeyValue key, boolean localized)
|
||||
{
|
||||
if (key.getKind() == KeyValue.Kind.Event
|
||||
&& key.getEvent() == KeyValue.Event.SWITCH_SECOND)
|
||||
return KeyValue.getKeyByName("switch_second_back");
|
||||
return key;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private float get_dip_pref(DisplayMetrics dm, String pref_name, float def)
|
||||
{
|
||||
float value;
|
||||
try { value = prefs.getInt(pref_name, -1); }
|
||||
catch (Exception e) { value = prefs.getFloat(pref_name, -1f); }
|
||||
try { value = _prefs.getInt(pref_name, -1); }
|
||||
catch (Exception e) { value = _prefs.getFloat(pref_name, -1f); }
|
||||
if (value < 0f)
|
||||
return (def);
|
||||
return (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, dm));
|
||||
}
|
||||
|
||||
/** Returns preference name from a prefix depending on orientation. */
|
||||
private String oriented_pref(String base_name)
|
||||
{
|
||||
String suffix = orientation_landscape ? "_landscape" : "_portrait";
|
||||
return base_name + suffix;
|
||||
}
|
||||
|
||||
private int getThemeId(Resources res, String theme_name)
|
||||
{
|
||||
switch (theme_name)
|
||||
@@ -242,35 +291,54 @@ final class Config
|
||||
}
|
||||
}
|
||||
|
||||
public static int layoutId_of_string(String name)
|
||||
public KeyboardData layout_of_string(Resources res, String name)
|
||||
{
|
||||
int id = R.xml.qwerty; // The config might store an invalid layout, don't crash
|
||||
switch (name)
|
||||
{
|
||||
case "azerty": return R.xml.azerty;
|
||||
case "bangla": return R.xml.bangla;
|
||||
case "bgph1": return R.xml.local_bgph1;
|
||||
case "bone": return R.xml.bone;
|
||||
case "colemak": return R.xml.colemak;
|
||||
case "dvorak": return R.xml.dvorak;
|
||||
case "hindi": return R.xml.hindi;
|
||||
case "jcuken_ua": return R.xml.jcuken_ua;
|
||||
case "neo2": return R.xml.neo2;
|
||||
case "qwerty": return R.xml.qwerty;
|
||||
case "qwerty_el": return R.xml.qwerty_el;
|
||||
case "qwerty_es": return R.xml.qwerty_es;
|
||||
case "qwerty_hu": return R.xml.qwerty_hu;
|
||||
case "qwerty_ko": return R.xml.qwerty_ko;
|
||||
case "qwerty_lv": return R.xml.qwerty_lv;
|
||||
case "qwerty_no": return R.xml.qwerty_no;
|
||||
case "qwerty_pt": return R.xml.qwerty_pt;
|
||||
case "qwerty_sv_se": return R.xml.qwerty_sv_se;
|
||||
case "qwerty_tr": return R.xml.qwerty_tr;
|
||||
case "qwertz": return R.xml.qwertz;
|
||||
case "qwertz_cs": return R.xml.qwertz_cs;
|
||||
case "qwertz_de": return R.xml.qwertz_de;
|
||||
case "qwertz_hu": return R.xml.qwertz_hu;
|
||||
case "ru_jcuken": return R.xml.local_ru_jcuken;
|
||||
default: return R.xml.qwerty; // The config might store an invalid layout, don't crash
|
||||
case "system": case "none": return null;
|
||||
case "custom": if (custom_layout != null) return custom_layout; break;
|
||||
case "azerty": id = R.xml.azerty; break;
|
||||
case "bangla": id = R.xml.bangla; break;
|
||||
case "bgph1": id = R.xml.local_bgph1; break;
|
||||
case "bone": id = R.xml.bone; break;
|
||||
case "colemak": id = R.xml.colemak; break;
|
||||
case "dvorak": id = R.xml.dvorak; break;
|
||||
case "hindi": id = R.xml.hindi; break;
|
||||
case "jcuken_ua": id = R.xml.jcuken_ua; break;
|
||||
case "neo2": id = R.xml.neo2; break;
|
||||
case "qwerty": id = R.xml.qwerty; break;
|
||||
case "qwerty_el": id = R.xml.qwerty_el; break;
|
||||
case "qwerty_es": id = R.xml.qwerty_es; break;
|
||||
case "qwerty_hu": id = R.xml.qwerty_hu; break;
|
||||
case "qwerty_ko": id = R.xml.qwerty_ko; break;
|
||||
case "qwerty_lv": id = R.xml.qwerty_lv; break;
|
||||
case "qwerty_no": id = R.xml.qwerty_no; break;
|
||||
case "qwerty_pt": id = R.xml.qwerty_pt; break;
|
||||
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 "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;
|
||||
}
|
||||
return KeyboardData.load(res, id);
|
||||
}
|
||||
|
||||
char inverse_numpad_char(char c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '7': return '1';
|
||||
case '8': return '2';
|
||||
case '9': return '3';
|
||||
case '1': return '7';
|
||||
case '2': return '8';
|
||||
case '3': return '9';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -289,6 +357,6 @@ final class Config
|
||||
|
||||
public static interface IKeyEventHandler
|
||||
{
|
||||
public void handleKeyUp(KeyValue value, Pointers.Modifiers flags);
|
||||
public void key_up(KeyValue value, Pointers.Modifiers flags);
|
||||
}
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@ public class Emoji
|
||||
protected Emoji(String name, String bytecode, String desc)
|
||||
{
|
||||
_name = name;
|
||||
_kv = new KeyValue(bytecode, KeyValue.KIND_STRING, 0, 0);
|
||||
_kv = new KeyValue(bytecode, KeyValue.Kind.String, 0, 0);
|
||||
_desc = desc;
|
||||
emojis_by_name.put(name, this);
|
||||
}
|
||||
|
@@ -2,9 +2,8 @@ package juloo.keyboard2;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Typeface;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.Gravity;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
@@ -14,16 +13,14 @@ import android.widget.TextView;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class EmojiGridView extends GridView
|
||||
implements GridView.OnItemClickListener
|
||||
{
|
||||
public static final int GROUP_LAST_USE = -1;
|
||||
|
||||
public static final int COLUMN_WIDTH = 192;
|
||||
|
||||
private static final String LAST_USE_PREF = "emoji_last_use";
|
||||
|
||||
private Emoji[] _emojiArray;
|
||||
@@ -38,7 +35,6 @@ public class EmojiGridView extends GridView
|
||||
super(context, attrs);
|
||||
Emoji.init(context.getResources());
|
||||
setOnItemClickListener(this);
|
||||
setColumnWidth(COLUMN_WIDTH);
|
||||
loadLastUsed();
|
||||
setEmojiGroup((_lastUsed.size() == 0) ? 0 : GROUP_LAST_USE);
|
||||
}
|
||||
@@ -54,17 +50,10 @@ public class EmojiGridView extends GridView
|
||||
Config config = Config.globalConfig();
|
||||
Integer used = _lastUsed.get(_emojiArray[pos]);
|
||||
_lastUsed.put(_emojiArray[pos], (used == null) ? 1 : used.intValue() + 1);
|
||||
config.handler.handleKeyUp(_emojiArray[pos].kv(), Pointers.Modifiers.EMPTY);
|
||||
config.handler.key_up(_emojiArray[pos].kv(), Pointers.Modifiers.EMPTY);
|
||||
saveLastUsed(); // TODO: opti
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMeasure(int wSpec, int hSpec)
|
||||
{
|
||||
super.onMeasure(wSpec, hSpec);
|
||||
setNumColumns(getMeasuredWidth() / COLUMN_WIDTH);
|
||||
}
|
||||
|
||||
private Emoji[] getLastEmojis()
|
||||
{
|
||||
final HashMap<Emoji, Integer> map = _lastUsed;
|
||||
@@ -121,14 +110,11 @@ public class EmojiGridView extends GridView
|
||||
return getContext().getSharedPreferences("emoji_last_use", Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
private static class EmojiView extends TextView
|
||||
static class EmojiView extends TextView
|
||||
{
|
||||
public EmojiView(Context context)
|
||||
{
|
||||
super(context);
|
||||
setTextAppearance(context, R.style.emojiGridButton);
|
||||
setGravity(Gravity.CENTER);
|
||||
setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT, GridView.LayoutParams.WRAP_CONTENT));
|
||||
}
|
||||
|
||||
public void setEmoji(Emoji emoji)
|
||||
@@ -137,15 +123,15 @@ public class EmojiGridView extends GridView
|
||||
}
|
||||
}
|
||||
|
||||
private static class EmojiViewAdpater extends BaseAdapter
|
||||
static class EmojiViewAdpater extends BaseAdapter
|
||||
{
|
||||
private Context _context;
|
||||
Context _button_context;
|
||||
|
||||
private Emoji[] _emojiArray;
|
||||
Emoji[] _emojiArray;
|
||||
|
||||
public EmojiViewAdpater(Context context, Emoji[] emojiArray)
|
||||
{
|
||||
_context = context;
|
||||
_button_context = new ContextThemeWrapper(context, R.style.emojiGridButton);
|
||||
_emojiArray = emojiArray;
|
||||
}
|
||||
|
||||
@@ -171,9 +157,9 @@ public class EmojiGridView extends GridView
|
||||
EmojiView view = (EmojiView)convertView;
|
||||
|
||||
if (view == null)
|
||||
view = new EmojiView(_context);
|
||||
view = new EmojiView(_button_context);
|
||||
view.setEmoji(_emojiArray[pos]);
|
||||
return (view);
|
||||
return view;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -2,11 +2,18 @@ package juloo.keyboard2;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.LinearLayout;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.LinearLayout.LayoutParams;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
public class EmojiGroupButtonsBar extends LinearLayout
|
||||
{
|
||||
private EmojiGridView _emoji_grid = null;
|
||||
|
||||
public EmojiGroupButtonsBar(Context context, AttributeSet attrs)
|
||||
{
|
||||
super(context, attrs);
|
||||
@@ -19,8 +26,37 @@ public class EmojiGroupButtonsBar extends LinearLayout
|
||||
}
|
||||
}
|
||||
|
||||
private void add_group(int id, String symbol)
|
||||
void add_group(int id, String symbol)
|
||||
{
|
||||
addView(new EmojiTypeButton(getContext(), id, symbol), new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.f));
|
||||
addView(this.new EmojiGroupButton(getContext(), id, symbol),
|
||||
new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.f));
|
||||
}
|
||||
|
||||
EmojiGridView get_emoji_grid()
|
||||
{
|
||||
if (_emoji_grid == null)
|
||||
_emoji_grid = (EmojiGridView)((ViewGroup)(getParent())).findViewById(R.id.emoji_grid);
|
||||
return _emoji_grid;
|
||||
}
|
||||
|
||||
class EmojiGroupButton extends Button implements View.OnTouchListener
|
||||
{
|
||||
int _group_id;
|
||||
|
||||
public EmojiGroupButton(Context context, int group_id, String symbol)
|
||||
{
|
||||
super(new ContextThemeWrapper(context, R.style.emojiTypeButton), null, 0);
|
||||
_group_id = group_id;
|
||||
setText(symbol);
|
||||
setOnTouchListener(this);
|
||||
}
|
||||
|
||||
public boolean onTouch(View view, MotionEvent event)
|
||||
{
|
||||
if (event.getAction() != MotionEvent.ACTION_DOWN)
|
||||
return false;
|
||||
get_emoji_grid().setEmojiGroup(_group_id);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -24,6 +24,6 @@ public class EmojiKeyButton extends Button
|
||||
public void onClick(View v)
|
||||
{
|
||||
Config config = Config.globalConfig();
|
||||
config.handler.handleKeyUp(_key, Pointers.Modifiers.EMPTY);
|
||||
config.handler.key_up(_key, Pointers.Modifiers.EMPTY);
|
||||
}
|
||||
}
|
||||
|
@@ -1,37 +0,0 @@
|
||||
package juloo.keyboard2;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
|
||||
/* Emoji "types" are groups. This class is misnamed. */
|
||||
|
||||
public class EmojiTypeButton extends Button
|
||||
implements View.OnTouchListener
|
||||
{
|
||||
private int _emojiType;
|
||||
|
||||
static private final int DEFAULT_GROUP = 0;
|
||||
|
||||
public EmojiTypeButton(Context context, int group_id, String symbol)
|
||||
{
|
||||
super(new ContextThemeWrapper(context, R.style.emojiTypeButton), null, 0);
|
||||
_emojiType = group_id;
|
||||
setText(symbol);
|
||||
setOnTouchListener(this);
|
||||
}
|
||||
|
||||
public boolean onTouch(View view, MotionEvent event)
|
||||
{
|
||||
EmojiGridView emojiGrid;
|
||||
|
||||
if (event.getAction() != MotionEvent.ACTION_DOWN)
|
||||
return (false);
|
||||
emojiGrid = (EmojiGridView)((ViewGroup)(getParent().getParent())).findViewById(R.id.emoji_grid);
|
||||
emojiGrid.setEmojiGroup(_emojiType);
|
||||
return (true);
|
||||
}
|
||||
}
|
@@ -36,6 +36,17 @@ public class ExtraKeyCheckBoxPreference extends CheckBoxPreference
|
||||
"£",
|
||||
"switch_greekmath",
|
||||
"capslock",
|
||||
"copy",
|
||||
"paste",
|
||||
"cut",
|
||||
"selectAll",
|
||||
"shareText",
|
||||
"pasteAsPlainText",
|
||||
"undo",
|
||||
"redo",
|
||||
"replaceText",
|
||||
"textAssist",
|
||||
"autofill",
|
||||
};
|
||||
|
||||
public static boolean default_checked(String name)
|
||||
|
@@ -1,41 +1,63 @@
|
||||
package juloo.keyboard2;
|
||||
|
||||
import android.os.Looper;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputConnection;
|
||||
|
||||
class KeyEventHandler implements Config.IKeyEventHandler
|
||||
{
|
||||
private IReceiver _recv;
|
||||
IReceiver _recv;
|
||||
Autocapitalisation _autocap;
|
||||
|
||||
public KeyEventHandler(IReceiver recv)
|
||||
public int actionId; // Action performed by the Action key.
|
||||
|
||||
public KeyEventHandler(Looper looper, IReceiver recv)
|
||||
{
|
||||
_recv = recv;
|
||||
_autocap = new Autocapitalisation(looper,
|
||||
this.new Autocapitalisation_callback());
|
||||
}
|
||||
|
||||
public void handleKeyUp(KeyValue key, Pointers.Modifiers mods)
|
||||
/** Editing just started. */
|
||||
public void started(EditorInfo info)
|
||||
{
|
||||
_autocap.started(info, _recv.getCurrentInputConnection());
|
||||
}
|
||||
|
||||
/** Selection has been updated. */
|
||||
public void selection_updated(int oldSelStart, int newSelStart)
|
||||
{
|
||||
_autocap.selection_updated(oldSelStart, newSelStart);
|
||||
}
|
||||
|
||||
/** A key has been released. */
|
||||
public void key_up(KeyValue key, Pointers.Modifiers mods)
|
||||
{
|
||||
if (key == null)
|
||||
return;
|
||||
switch (key.getKind())
|
||||
{
|
||||
case Char:
|
||||
_recv.commitChar(key.getChar());
|
||||
break;
|
||||
case String:
|
||||
_recv.commitText(key.getString());
|
||||
break;
|
||||
case Char: send_text(String.valueOf(key.getChar())); break;
|
||||
case String: send_text(key.getString()); break;
|
||||
case Event:
|
||||
switch (key.getEvent())
|
||||
{
|
||||
case CONFIG: _recv.showKeyboardConfig(); break;
|
||||
case SWITCH_TEXT: _recv.switchMain(); break;
|
||||
case SWITCH_NUMERIC: _recv.switchNumeric(); break;
|
||||
case SWITCH_TEXT: _recv.switch_text(); break;
|
||||
case SWITCH_NUMERIC: _recv.switch_layout(R.xml.numeric); break;
|
||||
case SWITCH_EMOJI: _recv.setPane_emoji(); break;
|
||||
case SWITCH_BACK_EMOJI: _recv.setPane_normal(); break;
|
||||
case CHANGE_METHOD: _recv.switchToNextInputMethod(); break;
|
||||
case ACTION: _recv.performAction(); break;
|
||||
case SWITCH_PROGRAMMING: _recv.switchProgramming(); break;
|
||||
case SWITCH_GREEKMATH: _recv.switchGreekmath(); break;
|
||||
case CAPS_LOCK: _recv.enableCapsLock(); 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 CAPS_LOCK: _recv.set_shift_state(true, true); break;
|
||||
}
|
||||
break;
|
||||
case Keyevent:
|
||||
@@ -43,6 +65,28 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
break;
|
||||
case Modifier:
|
||||
break;
|
||||
case Editing:
|
||||
send_context_menu_action(action_of_editing_key(key.getEditing()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static int action_of_editing_key(KeyValue.Editing e)
|
||||
{
|
||||
switch (e)
|
||||
{
|
||||
case COPY: return android.R.id.copy;
|
||||
case PASTE: return android.R.id.paste;
|
||||
case CUT: return android.R.id.cut;
|
||||
case SELECT_ALL: return android.R.id.selectAll;
|
||||
case SHARE: return android.R.id.shareText;
|
||||
case PASTE_PLAIN: return android.R.id.pasteAsPlainText;
|
||||
case UNDO: return android.R.id.undo;
|
||||
case REDO: return android.R.id.redo;
|
||||
case REPLACE: return android.R.id.replaceText;
|
||||
case ASSIST: return android.R.id.textAssist;
|
||||
case AUTOFILL: return android.R.id.autofill;
|
||||
default: return -1; // sad
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,17 +100,17 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
// getCurrentInputConnection().deleteSurroundingText(before, after);
|
||||
// }
|
||||
|
||||
private int sendMetaKey(int eventCode, int metaFlags, int metaState, boolean down)
|
||||
int sendMetaKey(int eventCode, int metaFlags, int metaState, boolean down)
|
||||
{
|
||||
int action;
|
||||
int updatedMetaState;
|
||||
if (down) { action = KeyEvent.ACTION_DOWN; updatedMetaState = metaState | metaFlags; }
|
||||
else { action = KeyEvent.ACTION_UP; updatedMetaState = metaState & ~metaFlags; }
|
||||
_recv.sendKeyEvent(action, eventCode, metaState);
|
||||
send_keyevent(action, eventCode, metaState);
|
||||
return updatedMetaState;
|
||||
}
|
||||
|
||||
private int sendMetaKeyForModifier(KeyValue.Modifier mod, int metaState, boolean down)
|
||||
int sendMetaKeyForModifier(KeyValue.Modifier mod, int metaState, boolean down)
|
||||
{
|
||||
switch (mod)
|
||||
{
|
||||
@@ -85,16 +129,44 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
/*
|
||||
* Don't set KeyEvent.FLAG_SOFT_KEYBOARD.
|
||||
*/
|
||||
private void handleKeyUpWithModifier(int keyCode, Pointers.Modifiers mods)
|
||||
{
|
||||
void handleKeyUpWithModifier(int keyCode, Pointers.Modifiers mods)
|
||||
{
|
||||
int metaState = 0;
|
||||
for (int i = 0; i < mods.size(); i++)
|
||||
metaState = sendMetaKeyForModifier(mods.get(i), metaState, true);
|
||||
_recv.sendKeyEvent(KeyEvent.ACTION_DOWN, keyCode, metaState);
|
||||
_recv.sendKeyEvent(KeyEvent.ACTION_UP, keyCode, metaState);
|
||||
send_keyevent(KeyEvent.ACTION_DOWN, keyCode, metaState);
|
||||
send_keyevent(KeyEvent.ACTION_UP, keyCode, metaState);
|
||||
for (int i = mods.size() - 1; i >= 0; i--)
|
||||
metaState = sendMetaKeyForModifier(mods.get(i), metaState, false);
|
||||
}
|
||||
}
|
||||
|
||||
void send_keyevent(int eventAction, int eventCode, int meta)
|
||||
{
|
||||
InputConnection conn = _recv.getCurrentInputConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
conn.sendKeyEvent(new KeyEvent(1, 1, eventAction, eventCode, 0, meta));
|
||||
if (eventAction == KeyEvent.ACTION_UP)
|
||||
_autocap.event_sent(eventCode, meta);
|
||||
}
|
||||
|
||||
void send_text(CharSequence text)
|
||||
{
|
||||
InputConnection conn = _recv.getCurrentInputConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
conn.commitText(text, 1);
|
||||
_autocap.typed(text);
|
||||
}
|
||||
|
||||
/** See {!InputConnection.performContextMenuAction}. */
|
||||
void send_context_menu_action(int id)
|
||||
{
|
||||
InputConnection conn = _recv.getCurrentInputConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
conn.performContextMenuAction(id);
|
||||
}
|
||||
|
||||
public static interface IReceiver
|
||||
{
|
||||
@@ -102,17 +174,26 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
public void setPane_emoji();
|
||||
public void setPane_normal();
|
||||
public void showKeyboardConfig();
|
||||
public void performAction();
|
||||
public void enableCapsLock();
|
||||
|
||||
public void switchMain();
|
||||
public void switchNumeric();
|
||||
public void switchProgramming();
|
||||
public void switchGreekmath();
|
||||
public void switch_text();
|
||||
public void switch_primary();
|
||||
public void switch_second();
|
||||
public void switch_layout(int layout_id);
|
||||
|
||||
public void sendKeyEvent(int eventAction, int eventCode, int meta);
|
||||
public void set_shift_state(boolean state, boolean lock);
|
||||
|
||||
public void commitText(String text);
|
||||
public void commitChar(char c);
|
||||
public InputConnection getCurrentInputConnection();
|
||||
}
|
||||
|
||||
class Autocapitalisation_callback implements Autocapitalisation.Callback
|
||||
{
|
||||
@Override
|
||||
public void update_shift_state(boolean should_enable, boolean should_disable)
|
||||
{
|
||||
if (should_enable)
|
||||
_recv.set_shift_state(true, false);
|
||||
else if (should_disable)
|
||||
_recv.set_shift_state(false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -15,7 +15,8 @@ final class KeyValue
|
||||
SWITCH_BACK_EMOJI,
|
||||
CHANGE_METHOD,
|
||||
ACTION,
|
||||
SWITCH_PROGRAMMING,
|
||||
SWITCH_SECOND,
|
||||
SWITCH_SECOND_BACK,
|
||||
SWITCH_GREEKMATH,
|
||||
CAPS_LOCK,
|
||||
}
|
||||
@@ -51,6 +52,27 @@ final class KeyValue
|
||||
FN, // Must be placed last to be applied first
|
||||
}
|
||||
|
||||
public static enum Editing
|
||||
{
|
||||
COPY,
|
||||
PASTE,
|
||||
CUT,
|
||||
SELECT_ALL,
|
||||
PASTE_PLAIN,
|
||||
UNDO,
|
||||
REDO,
|
||||
// Android context menu actions
|
||||
REPLACE,
|
||||
SHARE,
|
||||
ASSIST,
|
||||
AUTOFILL,
|
||||
}
|
||||
|
||||
public static enum Kind
|
||||
{
|
||||
Char, String, Keyevent, Event, Modifier, Editing
|
||||
}
|
||||
|
||||
// Behavior flags.
|
||||
public static final int FLAG_LATCH = (1 << 20);
|
||||
public static final int FLAG_LOCK = (1 << 21);
|
||||
@@ -58,18 +80,12 @@ final class KeyValue
|
||||
public static final int FLAG_SPECIAL = (1 << 22);
|
||||
public static final int FLAG_PRECISE_REPEAT = (1 << 23);
|
||||
// Rendering flags.
|
||||
public static final int FLAG_KEY_FONT = (1 << 24);
|
||||
public static final int FLAG_SMALLER_FONT = (1 << 25);
|
||||
public static final int FLAG_KEY_FONT = (1 << 24); // special font file
|
||||
public static final int FLAG_SMALLER_FONT = (1 << 25); // 25% smaller symbols
|
||||
public static final int FLAG_SECONDARY = (1 << 26); // dimmer
|
||||
// Used by [Pointers].
|
||||
public static final int FLAG_LOCKED = (1 << 26);
|
||||
public static final int FLAG_FAKE_PTR = (1 << 27);
|
||||
|
||||
// Kinds
|
||||
public static final int KIND_CHAR = (0 << 29);
|
||||
public static final int KIND_STRING = (1 << 29);
|
||||
public static final int KIND_KEYEVENT = (2 << 29);
|
||||
public static final int KIND_EVENT = (3 << 29);
|
||||
public static final int KIND_MODIFIER = (4 << 29);
|
||||
public static final int FLAG_LOCKED = (1 << 28);
|
||||
public static final int FLAG_FAKE_PTR = (1 << 29);
|
||||
|
||||
// Ranges for the different components
|
||||
private static final int FLAGS_BITS = (0b111111111 << 20); // 9 bits wide
|
||||
@@ -83,29 +99,12 @@ final class KeyValue
|
||||
|
||||
private final String _symbol;
|
||||
|
||||
/** This field encodes three things:
|
||||
- The kind
|
||||
- The flags
|
||||
- The value for Char, Event and Modifier keys.
|
||||
*/
|
||||
/** This field encodes three things: Kind, flags and value. */
|
||||
private final int _code;
|
||||
|
||||
public static enum Kind
|
||||
{
|
||||
Char, String, Keyevent, Event, Modifier
|
||||
}
|
||||
|
||||
public Kind getKind()
|
||||
{
|
||||
switch (_code & KIND_BITS)
|
||||
{
|
||||
case KIND_CHAR: return Kind.Char;
|
||||
case KIND_STRING: return Kind.String;
|
||||
case KIND_KEYEVENT: return Kind.Keyevent;
|
||||
case KIND_EVENT: return Kind.Event;
|
||||
case KIND_MODIFIER: return Kind.Modifier;
|
||||
default: throw new RuntimeException("Corrupted kind flags");
|
||||
}
|
||||
return Kind.values()[(_code & KIND_BITS) >>> 29];
|
||||
}
|
||||
|
||||
public int getFlags()
|
||||
@@ -149,15 +148,21 @@ final class KeyValue
|
||||
return Modifier.values()[(_code & VALUE_BITS)];
|
||||
}
|
||||
|
||||
/** Defined only when [getKind() == Kind.Editing]. */
|
||||
public Editing getEditing()
|
||||
{
|
||||
return Editing.values()[(_code & VALUE_BITS)];
|
||||
}
|
||||
|
||||
/* Update the char and the symbol. */
|
||||
public KeyValue withChar(char c)
|
||||
{
|
||||
return new KeyValue(String.valueOf(c), KIND_CHAR, c, getFlags());
|
||||
return new KeyValue(String.valueOf(c), Kind.Char, c, getFlags());
|
||||
}
|
||||
|
||||
public KeyValue withString(String s)
|
||||
{
|
||||
return new KeyValue(s, KIND_STRING, 0, getFlags());
|
||||
return new KeyValue(s, Kind.String, 0, getFlags());
|
||||
}
|
||||
|
||||
public KeyValue withSymbol(String s)
|
||||
@@ -167,7 +172,7 @@ final class KeyValue
|
||||
|
||||
public KeyValue withKeyevent(int code)
|
||||
{
|
||||
return new KeyValue(_symbol, KIND_KEYEVENT, code, getFlags());
|
||||
return new KeyValue(_symbol, Kind.Keyevent, code, getFlags());
|
||||
}
|
||||
|
||||
public KeyValue withFlags(int f)
|
||||
@@ -199,33 +204,38 @@ final class KeyValue
|
||||
_code = kind | flags | value;
|
||||
}
|
||||
|
||||
public KeyValue(String s, Kind k, int v, int f)
|
||||
{
|
||||
this(s, (k.ordinal() << 29), v, f);
|
||||
}
|
||||
|
||||
public static KeyValue getKeyByName(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);
|
||||
return new KeyValue(name, Kind.Char, name.charAt(0), 0);
|
||||
else
|
||||
return new KeyValue(name, KIND_STRING, 0, 0);
|
||||
return new KeyValue(name, Kind.String, 0, 0);
|
||||
}
|
||||
|
||||
private static void addKey(String name, String symbol, int kind, int code, int flags)
|
||||
private static void addKey(String name, String symbol, Kind kind, int code, int flags)
|
||||
{
|
||||
keys.put(name, new KeyValue(symbol, kind, code, flags));
|
||||
}
|
||||
|
||||
private static void addCharKey(String name, String symbol, char c, int flags)
|
||||
{
|
||||
addKey(name, symbol, KIND_CHAR, c, flags);
|
||||
addKey(name, symbol, Kind.Char, c, flags);
|
||||
}
|
||||
|
||||
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 | flags);
|
||||
addKey(name, symbol, Kind.Modifier, m.ordinal(),
|
||||
FLAG_LATCH | FLAG_SPECIAL | FLAG_SECONDARY | flags);
|
||||
}
|
||||
|
||||
private static void addModifierKey(String name, int symbol, Modifier m, int flags)
|
||||
@@ -235,12 +245,13 @@ final class KeyValue
|
||||
|
||||
private static void addDiacritic(String name, int symbol, Modifier m)
|
||||
{
|
||||
addModifierKey(name, symbol, m, 0);
|
||||
addKey(name, String.valueOf((char)symbol), Kind.Modifier, m.ordinal(),
|
||||
FLAG_LATCH | FLAG_SPECIAL | FLAG_KEY_FONT);
|
||||
}
|
||||
|
||||
private static void addEventKey(String name, String symbol, Event e, int flags)
|
||||
{
|
||||
addKey(name, symbol, KIND_EVENT, e.ordinal(), flags | FLAG_SPECIAL);
|
||||
addKey(name, symbol, Kind.Event, e.ordinal(), flags | FLAG_SPECIAL | FLAG_SECONDARY);
|
||||
}
|
||||
|
||||
private static void addEventKey(String name, int symbol, Event e, int flags)
|
||||
@@ -250,7 +261,7 @@ final class KeyValue
|
||||
|
||||
private static void addKeyeventKey(String name, String symbol, int code, int flags)
|
||||
{
|
||||
addKey(name, symbol, KIND_KEYEVENT, code, flags);
|
||||
addKey(name, symbol, Kind.Keyevent, code, flags | FLAG_SECONDARY);
|
||||
}
|
||||
|
||||
private static void addKeyeventKey(String name, int symbol, int code, int flags)
|
||||
@@ -258,6 +269,12 @@ final class KeyValue
|
||||
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;
|
||||
|
||||
@@ -265,7 +282,7 @@ final class KeyValue
|
||||
placeholders (it is the empty string). */
|
||||
private static void addPlaceholderKey(String name)
|
||||
{
|
||||
addKey(name, "", KIND_STRING, placeholder_unique_id++, 0);
|
||||
addKey(name, "", Kind.String, placeholder_unique_id++, 0);
|
||||
}
|
||||
|
||||
static
|
||||
@@ -302,7 +319,8 @@ final class KeyValue
|
||||
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_programming", "Prog", Event.SWITCH_PROGRAMMING, FLAG_SMALLER_FONT);
|
||||
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
|
||||
@@ -336,12 +354,24 @@ final class KeyValue
|
||||
addKeyeventKey("tab", 0x0F, KeyEvent.KEYCODE_TAB, FLAG_SMALLER_FONT);
|
||||
|
||||
addCharKey("\\t", "\\t", '\t', 0); // Send the tab character
|
||||
addCharKey("space", "\r", ' ', FLAG_KEY_FONT);
|
||||
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);
|
||||
}
|
||||
|
||||
static final HashMap<String, String> keys_descr = new HashMap<String, String>();
|
||||
|
@@ -25,45 +25,53 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class Keyboard2 extends InputMethodService
|
||||
implements SharedPreferences.OnSharedPreferenceChangeListener,
|
||||
Autocapitalisation.Callback
|
||||
implements SharedPreferences.OnSharedPreferenceChangeListener
|
||||
{
|
||||
static private final String TAG = "Keyboard2";
|
||||
|
||||
private Keyboard2View _keyboardView;
|
||||
private int _currentTextLayout;
|
||||
private KeyEventHandler _keyeventhandler;
|
||||
// If not 'null', the layout to use instead of [_currentTextLayout].
|
||||
private KeyboardData _currentSpecialLayout;
|
||||
private Current_text_layout _currentTextLayout;
|
||||
// Layout associated with the currently selected locale.
|
||||
private KeyboardData _localeTextLayout;
|
||||
private ViewGroup _emojiPane = null;
|
||||
|
||||
private Config _config;
|
||||
private Autocapitalisation _autocap;
|
||||
|
||||
private boolean _debug_logs = false;
|
||||
|
||||
private KeyboardData getLayout(int resId)
|
||||
/** Layout currently visible. */
|
||||
KeyboardData current_layout()
|
||||
{
|
||||
return KeyboardData.load(getResources(), resId);
|
||||
if (_currentSpecialLayout != null)
|
||||
return _currentSpecialLayout;
|
||||
if (_currentTextLayout == Current_text_layout.SECONDARY)
|
||||
return _config.second_layout;
|
||||
return (_config.layout == null) ? _localeTextLayout : _config.layout;
|
||||
}
|
||||
|
||||
void setTextLayout(Current_text_layout layout)
|
||||
{
|
||||
_currentTextLayout = layout;
|
||||
_currentSpecialLayout = null;
|
||||
_keyboardView.setKeyboard(current_layout());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate()
|
||||
{
|
||||
super.onCreate();
|
||||
KeyboardData.init(getResources());
|
||||
SharedPreferences prefs = DirectBootAwarePreferences.get_shared_preferences(this);
|
||||
prefs.registerOnSharedPreferenceChangeListener(this);
|
||||
Config.initGlobalConfig(prefs, getResources(), new KeyEventHandler(this.new Receiver()));
|
||||
_keyeventhandler = new KeyEventHandler(getMainLooper(), this.new Receiver());
|
||||
Config.initGlobalConfig(prefs, getResources(), _keyeventhandler);
|
||||
_config = Config.globalConfig();
|
||||
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
|
||||
_keyboardView.reset();
|
||||
_debug_logs = getResources().getBoolean(R.bool.debug_logs);
|
||||
_autocap = new Autocapitalisation(getMainLooper(), this);
|
||||
}
|
||||
|
||||
public void update_shift_state(boolean should_enable, boolean should_disable)
|
||||
{
|
||||
if (should_enable)
|
||||
_keyboardView.set_shift_state(true, false);
|
||||
else if (should_disable)
|
||||
_keyboardView.set_shift_state(false, false);
|
||||
}
|
||||
|
||||
private List<InputMethodSubtype> getEnabledSubtypes(InputMethodManager imm)
|
||||
@@ -77,16 +85,11 @@ public class Keyboard2 extends InputMethodService
|
||||
|
||||
private void refreshSubtypeLayout(InputMethodSubtype subtype)
|
||||
{
|
||||
int l = _config.layout;
|
||||
if (l == -1)
|
||||
{
|
||||
String s = subtype.getExtraValueOf("default_layout");
|
||||
if (s != null)
|
||||
l = Config.layoutId_of_string(s);
|
||||
else
|
||||
l = R.xml.qwerty;
|
||||
}
|
||||
_currentTextLayout = l;
|
||||
String s = subtype.getExtraValueOf("default_layout");
|
||||
if (s != null)
|
||||
_localeTextLayout = _config.layout_of_string(getResources(), s);
|
||||
else
|
||||
_localeTextLayout = KeyboardData.load(getResources(), R.xml.qwerty);
|
||||
}
|
||||
|
||||
private void extra_keys_of_subtype(Set<KeyValue> dst, InputMethodSubtype subtype)
|
||||
@@ -130,14 +133,15 @@ public class Keyboard2 extends InputMethodService
|
||||
case 1: case 2: case 3: _config.extra_keys_subtype = null; break;
|
||||
case 4: _config.extra_keys_subtype = new HashSet<KeyValue>(); break;
|
||||
}
|
||||
// Fallback for the layout option: Use qwerty in the "system settings" case
|
||||
_currentTextLayout = (_config.layout == -1) ? R.xml.qwerty : _config.layout;
|
||||
}
|
||||
|
||||
private void refreshSubtypeImm()
|
||||
{
|
||||
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
_config.shouldOfferSwitchingToNextInputMethod = imm.shouldOfferSwitchingToNextInputMethod(getConnectionToken());
|
||||
if (VERSION.SDK_INT < 28)
|
||||
_config.shouldOfferSwitchingToNextInputMethod = true;
|
||||
else
|
||||
_config.shouldOfferSwitchingToNextInputMethod = shouldOfferSwitchingToNextInputMethod();
|
||||
if (VERSION.SDK_INT < 12)
|
||||
{
|
||||
// Subtypes won't work well under API level 12 (getExtraValueOf)
|
||||
@@ -157,9 +161,15 @@ public class Keyboard2 extends InputMethodService
|
||||
refreshAccentsOption(imm, subtype);
|
||||
}
|
||||
}
|
||||
_config.shouldOfferSwitchingToProgramming =
|
||||
_config.programming_layout != -1 &&
|
||||
_currentTextLayout != _config.programming_layout;
|
||||
if (_config.second_layout == null)
|
||||
{
|
||||
_config.shouldOfferSwitchingToSecond = false;
|
||||
_currentTextLayout = Current_text_layout.PRIMARY;
|
||||
}
|
||||
else
|
||||
{
|
||||
_config.shouldOfferSwitchingToSecond = true;
|
||||
}
|
||||
}
|
||||
|
||||
private String actionLabel_of_imeAction(int action)
|
||||
@@ -187,20 +197,22 @@ public class Keyboard2 extends InputMethodService
|
||||
if (info.actionLabel != null)
|
||||
{
|
||||
_config.actionLabel = info.actionLabel.toString();
|
||||
_config.actionId = info.actionId;
|
||||
_keyeventhandler.actionId = info.actionId;
|
||||
_config.swapEnterActionKey = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
int action = info.imeOptions & EditorInfo.IME_MASK_ACTION;
|
||||
_config.actionLabel = actionLabel_of_imeAction(action); // Might be null
|
||||
_config.actionId = action;
|
||||
_keyeventhandler.actionId = action;
|
||||
_config.swapEnterActionKey =
|
||||
(info.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) == 0;
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshConfig()
|
||||
/** Might re-create the keyboard view. [_keyboardView.setKeyboard()] and
|
||||
[setInputView()] must be called soon after. */
|
||||
private void refresh_config()
|
||||
{
|
||||
int prev_theme = _config.theme;
|
||||
_config.refresh(getResources());
|
||||
@@ -211,6 +223,7 @@ public class Keyboard2 extends InputMethodService
|
||||
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
|
||||
_emojiPane = null;
|
||||
}
|
||||
_keyboardView.reset();
|
||||
}
|
||||
|
||||
private void log_editor_info(EditorInfo info)
|
||||
@@ -223,27 +236,29 @@ public class Keyboard2 extends InputMethodService
|
||||
Log.d(TAG, "actionLabel: "+_config.actionLabel);
|
||||
}
|
||||
|
||||
private int chooseLayout(EditorInfo info)
|
||||
private void refresh_special_layout(EditorInfo info)
|
||||
{
|
||||
switch (info.inputType & InputType.TYPE_MASK_CLASS)
|
||||
{
|
||||
case InputType.TYPE_CLASS_NUMBER:
|
||||
return R.xml.pin;
|
||||
case InputType.TYPE_CLASS_PHONE:
|
||||
case InputType.TYPE_CLASS_DATETIME:
|
||||
return R.xml.pin;
|
||||
_currentSpecialLayout = KeyboardData.load_pin_entry(getResources());
|
||||
break;
|
||||
default:
|
||||
return _currentTextLayout;
|
||||
_currentSpecialLayout = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartInputView(EditorInfo info, boolean restarting)
|
||||
{
|
||||
refreshConfig();
|
||||
refresh_config();
|
||||
refresh_action_label(info);
|
||||
_keyboardView.setKeyboard(getLayout(chooseLayout(info)));
|
||||
_autocap.started(info, getCurrentInputConnection());
|
||||
refresh_special_layout(info);
|
||||
_keyboardView.setKeyboard(current_layout());
|
||||
_keyeventhandler.started(info);
|
||||
setInputView(_keyboardView);
|
||||
if (_debug_logs)
|
||||
log_editor_info(info);
|
||||
@@ -262,14 +277,14 @@ public class Keyboard2 extends InputMethodService
|
||||
public void onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype)
|
||||
{
|
||||
refreshSubtypeImm();
|
||||
_keyboardView.setKeyboard(getLayout(_currentTextLayout));
|
||||
_keyboardView.setKeyboard(current_layout());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd)
|
||||
{
|
||||
super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd, candidatesStart, candidatesEnd);
|
||||
_autocap.selection_updated(oldSelStart, newSelStart);
|
||||
_keyeventhandler.selection_updated(oldSelStart, newSelStart);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -280,9 +295,11 @@ public class Keyboard2 extends InputMethodService
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
|
||||
public void onSharedPreferenceChanged(SharedPreferences _prefs, String _key)
|
||||
{
|
||||
refreshConfig();
|
||||
refresh_config();
|
||||
setInputView(_keyboardView);
|
||||
_keyboardView.setKeyboard(current_layout());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -315,59 +332,31 @@ public class Keyboard2 extends InputMethodService
|
||||
setInputView(_keyboardView);
|
||||
}
|
||||
|
||||
public void performAction()
|
||||
public void set_shift_state(boolean state, boolean lock)
|
||||
{
|
||||
InputConnection conn = getCurrentInputConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
conn.performEditorAction(_config.actionId);
|
||||
_keyboardView.set_shift_state(state, lock);
|
||||
}
|
||||
|
||||
public void enableCapsLock()
|
||||
public void switch_text()
|
||||
{
|
||||
_keyboardView.set_shift_state(true, true);
|
||||
_currentSpecialLayout = null;
|
||||
_keyboardView.setKeyboard(current_layout());
|
||||
}
|
||||
|
||||
public void switchMain()
|
||||
public void switch_layout(int layout_id)
|
||||
{
|
||||
_keyboardView.setKeyboard(getLayout(_currentTextLayout));
|
||||
_keyboardView.setKeyboard(KeyboardData.load(getResources(), layout_id));
|
||||
}
|
||||
|
||||
public void switchNumeric()
|
||||
public void switch_second()
|
||||
{
|
||||
_keyboardView.setKeyboard(getLayout(R.xml.numeric));
|
||||
if (_config.second_layout != null)
|
||||
setTextLayout(Current_text_layout.SECONDARY);
|
||||
}
|
||||
|
||||
public void switchGreekmath()
|
||||
public void switch_primary()
|
||||
{
|
||||
_keyboardView.setKeyboard(getLayout(R.xml.greekmath));
|
||||
}
|
||||
|
||||
public void switchProgramming()
|
||||
{
|
||||
if (_config.programming_layout == -1)
|
||||
return;
|
||||
KeyboardData layout =
|
||||
getLayout(_config.programming_layout).mapKeys(new KeyboardData.MapKeyValues() {
|
||||
public KeyValue apply(KeyValue key, boolean localized)
|
||||
{
|
||||
if (key.getKind() == KeyValue.Kind.Event
|
||||
&& key.getEvent() == KeyValue.Event.SWITCH_PROGRAMMING)
|
||||
return KeyValue.getKeyByName("switch_text");
|
||||
return key;
|
||||
}
|
||||
});
|
||||
_keyboardView.setKeyboard(layout);
|
||||
}
|
||||
|
||||
public void sendKeyEvent(int eventAction, int eventCode, int meta)
|
||||
{
|
||||
InputConnection conn = getCurrentInputConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
conn.sendKeyEvent(new KeyEvent(1, 1, eventAction, eventCode, 0, meta));
|
||||
if (eventAction == KeyEvent.ACTION_UP)
|
||||
_autocap.event_sent(eventCode, meta);
|
||||
setTextLayout(Current_text_layout.PRIMARY);
|
||||
}
|
||||
|
||||
public void showKeyboardConfig()
|
||||
@@ -377,16 +366,9 @@ public class Keyboard2 extends InputMethodService
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
public void commitText(String text)
|
||||
public InputConnection getCurrentInputConnection()
|
||||
{
|
||||
getCurrentInputConnection().commitText(text, 1);
|
||||
_autocap.typed(text);
|
||||
}
|
||||
|
||||
public void commitChar(char c)
|
||||
{
|
||||
sendKeyChar(c);
|
||||
_autocap.typed(c);
|
||||
return Keyboard2.this.getCurrentInputConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -399,4 +381,10 @@ public class Keyboard2 extends InputMethodService
|
||||
{
|
||||
return View.inflate(new ContextThemeWrapper(this, _config.theme), layout, null);
|
||||
}
|
||||
|
||||
private static enum Current_text_layout
|
||||
{
|
||||
PRIMARY,
|
||||
SECONDARY
|
||||
}
|
||||
}
|
||||
|
@@ -4,16 +4,17 @@ import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.inputmethodservice.InputMethodService;
|
||||
import android.os.Build.VERSION;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Keyboard2View extends View
|
||||
implements View.OnTouchListener, Pointers.IPointerEventHandler
|
||||
@@ -124,13 +125,13 @@ public class Keyboard2View extends View
|
||||
|
||||
public void onPointerUp(KeyValue k, Pointers.Modifiers mods)
|
||||
{
|
||||
_config.handler.handleKeyUp(k, mods);
|
||||
_config.handler.key_up(k, mods);
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public void onPointerHold(KeyValue k, Pointers.Modifiers mods)
|
||||
{
|
||||
_config.handler.handleKeyUp(k, mods);
|
||||
_config.handler.key_up(k, mods);
|
||||
}
|
||||
|
||||
public void onPointerFlagsChanged(boolean shouldVibrate)
|
||||
@@ -169,7 +170,7 @@ public class Keyboard2View extends View
|
||||
_pointers.onTouchMove(event.getX(p), event.getY(p), event.getPointerId(p));
|
||||
break;
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
_pointers.onTouchCancel(event.getPointerId(event.getActionIndex()));
|
||||
_pointers.onTouchCancel();
|
||||
break;
|
||||
default:
|
||||
return (false);
|
||||
@@ -194,7 +195,7 @@ public class Keyboard2View extends View
|
||||
private KeyboardData.Key getKeyAtPosition(float tx, float ty)
|
||||
{
|
||||
KeyboardData.Row row = getRowAtPosition(ty);
|
||||
float x = _config.horizontalMargin;
|
||||
float x = _config.horizontal_margin;
|
||||
if (row == null || tx < x)
|
||||
return null;
|
||||
for (KeyboardData.Key key : row.keys)
|
||||
@@ -229,29 +230,50 @@ public class Keyboard2View extends View
|
||||
int height =
|
||||
(int)(_config.keyHeight * _keyboard.keysHeight
|
||||
+ _keyboard.rows.size()
|
||||
+ _config.marginTop + _config.marginBottom);
|
||||
+ _config.marginTop + _config.margin_bottom);
|
||||
setMeasuredDimension(width, height);
|
||||
_keyWidth = (width - (_config.horizontalMargin * 2)) / _keyboard.keysWidth;
|
||||
_keyWidth = (width - (_config.horizontal_margin * 2)) / _keyboard.keysWidth;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLayout(boolean changed, int left, int top, int right, int bottom)
|
||||
{
|
||||
if (!changed)
|
||||
return;
|
||||
if (VERSION.SDK_INT >= 29)
|
||||
{
|
||||
// Disable the back-gesture on the keyboard area
|
||||
Rect keyboard_area = new Rect(
|
||||
left + (int)_config.horizontal_margin,
|
||||
top + (int)_config.marginTop,
|
||||
right - (int)_config.horizontal_margin,
|
||||
bottom - (int)_config.margin_bottom);
|
||||
setSystemGestureExclusionRects(Arrays.asList(keyboard_area));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas)
|
||||
{
|
||||
updateFlags();
|
||||
// Set keyboard background opacity
|
||||
getBackground().setAlpha(_config.keyboardOpacity);
|
||||
// Set keys opacity
|
||||
_theme.keyBgPaint.setAlpha(_config.keyOpacity);
|
||||
_theme.keyDownBgPaint.setAlpha(_config.keyActivatedOpacity);
|
||||
_theme.keyBorderPaint.setAlpha(_config.keyOpacity);
|
||||
float y = _config.marginTop + _config.keyVerticalInterval / 2;
|
||||
for (KeyboardData.Row row : _keyboard.rows)
|
||||
{
|
||||
y += row.shift * _config.keyHeight;
|
||||
float x = _config.horizontalMargin + _config.keyHorizontalInterval / 2;
|
||||
float x = _config.horizontal_margin + _config.keyHorizontalInterval / 2;
|
||||
float keyH = row.height * _config.keyHeight - _config.keyVerticalInterval;
|
||||
for (KeyboardData.Key k : row.keys)
|
||||
{
|
||||
x += k.shift * _keyWidth;
|
||||
float keyW = _keyWidth * k.width - _config.keyHorizontalInterval;
|
||||
boolean isKeyDown = _pointers.isKeyDown(k);
|
||||
_tmpRect.set(x, y, x + keyW, y + keyH);
|
||||
canvas.drawRoundRect(_tmpRect, _theme.keyBorderRadius, _theme.keyBorderRadius,
|
||||
isKeyDown ? _theme.keyDownBgPaint : _theme.keyBgPaint);
|
||||
drawKeyFrame(canvas, x, y, keyW, keyH, isKeyDown);
|
||||
drawLabel(canvas, k.key0, keyW / 2f + x, y, keyH, isKeyDown);
|
||||
if (k.edgekeys)
|
||||
{
|
||||
@@ -283,20 +305,56 @@ public class Keyboard2View extends View
|
||||
super.onDetachedFromWindow();
|
||||
}
|
||||
|
||||
private int labelColor(KeyValue k, boolean isKeyDown, int defaultColor)
|
||||
/** Draw borders and background of the key. */
|
||||
void drawKeyFrame(Canvas canvas, float x, float y, float keyW, float keyH,
|
||||
boolean isKeyDown)
|
||||
{
|
||||
if (isKeyDown && k.hasFlags(KeyValue.FLAG_LATCH))
|
||||
float r = _theme.keyBorderRadius;
|
||||
float w = isKeyDown ? _theme.keyBorderWidthActivated : _theme.keyBorderWidth;
|
||||
float w2 = _theme.keyBorderWidth / 2.f;
|
||||
_tmpRect.set(x + w2, y + w2, x + keyW - w2, y + keyH - w2);
|
||||
canvas.drawRoundRect(_tmpRect, r, r,
|
||||
isKeyDown ? _theme.keyDownBgPaint : _theme.keyBgPaint);
|
||||
if (w > 0.f)
|
||||
{
|
||||
_theme.keyBorderPaint.setStrokeWidth(w);
|
||||
float overlap = r - r * 0.85f + w; // sin(45°)
|
||||
drawBorder(canvas, x, y, x + overlap, y + keyH, _theme.keyBorderColorLeft);
|
||||
drawBorder(canvas, x, y, x + keyW, y + overlap, _theme.keyBorderColorTop);
|
||||
drawBorder(canvas, x + keyW - overlap, y, x + keyW, y + keyH, _theme.keyBorderColorRight);
|
||||
drawBorder(canvas, x, y + keyH - overlap, x + keyW, y + keyH, _theme.keyBorderColorBottom);
|
||||
}
|
||||
}
|
||||
|
||||
/** Clip to draw a border at a time. This allows to call [drawRoundRect]
|
||||
several time with the same parameters but a different Paint. */
|
||||
void drawBorder(Canvas canvas, float clipl, float clipt, float clipr,
|
||||
float clipb, int color)
|
||||
{
|
||||
Paint p = _theme.keyBorderPaint;
|
||||
float r = _theme.keyBorderRadius;
|
||||
canvas.save();
|
||||
canvas.clipRect(clipl, clipt, clipr, clipb);
|
||||
p.setColor(color);
|
||||
canvas.drawRoundRect(_tmpRect, r, r, p);
|
||||
canvas.restore();
|
||||
}
|
||||
|
||||
private int labelColor(KeyValue k, boolean isKeyDown, boolean sublabel)
|
||||
{
|
||||
if (isKeyDown)
|
||||
{
|
||||
int flags = _pointers.getKeyFlags(k);
|
||||
if (flags != -1)
|
||||
{
|
||||
if ((flags & KeyValue.FLAG_LOCKED) != 0)
|
||||
return _theme.lockedColor;
|
||||
if ((flags & KeyValue.FLAG_LATCH) == 0)
|
||||
return _theme.activatedColor;
|
||||
return _theme.activatedColor;
|
||||
}
|
||||
}
|
||||
return defaultColor;
|
||||
if (k.hasFlags(KeyValue.FLAG_SECONDARY))
|
||||
return _theme.secondaryLabelColor;
|
||||
return sublabel ? _theme.subLabelColor : _theme.labelColor;
|
||||
}
|
||||
|
||||
private void drawLabel(Canvas canvas, KeyboardData.Corner k, float x, float y, float keyH, boolean isKeyDown)
|
||||
@@ -308,7 +366,8 @@ public class Keyboard2View extends View
|
||||
return;
|
||||
float textSize = scaleTextSize(kv, _config.labelTextSize, keyH);
|
||||
Paint p = _theme.labelPaint(kv.hasFlags(KeyValue.FLAG_KEY_FONT));
|
||||
p.setColor(labelColor(kv, isKeyDown, _theme.labelColor));
|
||||
p.setColor(labelColor(kv, isKeyDown, false));
|
||||
p.setAlpha(_config.labelBrightness);
|
||||
p.setTextSize(textSize);
|
||||
canvas.drawText(kv.getString(), x, (keyH - p.ascent() - p.descent()) / 2f + y, p);
|
||||
}
|
||||
@@ -324,7 +383,8 @@ public class Keyboard2View extends View
|
||||
return;
|
||||
float textSize = scaleTextSize(kv, _config.sublabelTextSize, keyH);
|
||||
Paint p = _theme.subLabelPaint(kv.hasFlags(KeyValue.FLAG_KEY_FONT), a);
|
||||
p.setColor(labelColor(kv, isKeyDown, _theme.subLabelColor));
|
||||
p.setColor(labelColor(kv, isKeyDown, true));
|
||||
p.setAlpha(_config.labelBrightness);
|
||||
p.setTextSize(textSize);
|
||||
float subPadding = _config.keyPadding;
|
||||
if (v == Vertical.CENTER)
|
||||
|
@@ -2,12 +2,15 @@ package juloo.keyboard2;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.XmlResourceParser;
|
||||
import android.util.Xml;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.function.Function;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
||||
class KeyboardData
|
||||
{
|
||||
@@ -53,10 +56,10 @@ class KeyboardData
|
||||
|
||||
public KeyboardData addNumPad()
|
||||
{
|
||||
if (!num_pad || _numPadKeyboardData == null)
|
||||
if (!num_pad)
|
||||
return this;
|
||||
ArrayList<Row> extendedRows = new ArrayList<Row>();
|
||||
Iterator<Row> iterNumPadRows = _numPadKeyboardData.rows.iterator();
|
||||
Iterator<Row> iterNumPadRows = _num_pad.rows.iterator();
|
||||
for (Row row : rows)
|
||||
{
|
||||
ArrayList<KeyboardData.Key> keys = new ArrayList<Key>(row.keys);
|
||||
@@ -101,10 +104,32 @@ class KeyboardData
|
||||
}));
|
||||
}
|
||||
|
||||
private static Row _bottomRow = null;
|
||||
private static KeyboardData _numPadKeyboardData = null;
|
||||
private static Row _bottom_row;
|
||||
private static KeyboardData _num_pad;
|
||||
private 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));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static KeyboardData load_pin_entry(Resources res)
|
||||
{
|
||||
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. */
|
||||
public static KeyboardData load(Resources res, int id)
|
||||
{
|
||||
KeyboardData l = _layoutCache.get(id);
|
||||
@@ -112,13 +137,9 @@ class KeyboardData
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_bottomRow == null)
|
||||
_bottomRow = parse_bottom_row(res.getXml(R.xml.bottom_row));
|
||||
if (_numPadKeyboardData == null)
|
||||
{
|
||||
_numPadKeyboardData = parse_keyboard(res.getXml(R.xml.numpad));
|
||||
}
|
||||
l = parse_keyboard(res.getXml(id));
|
||||
XmlResourceParser parser = res.getXml(id);
|
||||
l = parse_keyboard(parser);
|
||||
parser.close();
|
||||
_layoutCache.put(id, l);
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -129,20 +150,35 @@ class KeyboardData
|
||||
return l;
|
||||
}
|
||||
|
||||
private static KeyboardData parse_keyboard(XmlResourceParser parser) throws Exception
|
||||
/** Load a layout from a string. Returns [null] on error. */
|
||||
public static KeyboardData load_string(String src)
|
||||
{
|
||||
try
|
||||
{
|
||||
XmlPullParser parser = Xml.newPullParser();
|
||||
parser.setInput(new StringReader(src));
|
||||
return parse_keyboard(parser);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static KeyboardData parse_keyboard(XmlPullParser parser) throws Exception
|
||||
{
|
||||
if (!expect_tag(parser, "keyboard"))
|
||||
throw new Exception("Empty layout file");
|
||||
boolean bottom_row = parser.getAttributeBooleanValue(null, "bottom_row", true);
|
||||
boolean extra_keys = parser.getAttributeBooleanValue(null, "extra_keys", true);
|
||||
boolean num_pad = parser.getAttributeBooleanValue(null, "num_pad", true);
|
||||
float specified_kw = parser.getAttributeFloatValue(null, "width", 0f);
|
||||
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);
|
||||
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(_bottomRow.updateWidth(kw));
|
||||
rows.add(_bottom_row.updateWidth(kw));
|
||||
return new KeyboardData(rows, kw, extra_keys, num_pad);
|
||||
}
|
||||
|
||||
@@ -154,7 +190,7 @@ class KeyboardData
|
||||
return w;
|
||||
}
|
||||
|
||||
private static Row parse_bottom_row(XmlResourceParser parser) throws Exception
|
||||
private static Row parse_bottom_row(XmlPullParser parser) throws Exception
|
||||
{
|
||||
if (!expect_tag(parser, "row"))
|
||||
throw new Exception("Failed to parse bottom row");
|
||||
@@ -193,12 +229,12 @@ class KeyboardData
|
||||
keysWidth = kw;
|
||||
}
|
||||
|
||||
public static Row parse(XmlResourceParser parser) throws Exception
|
||||
public static Row parse(XmlPullParser parser) throws Exception
|
||||
{
|
||||
ArrayList<Key> keys = new ArrayList<Key>();
|
||||
int status;
|
||||
float h = parser.getAttributeFloatValue(null, "height", 1f);
|
||||
float shift = parser.getAttributeFloatValue(null, "shift", 0f);
|
||||
float h = attribute_float(parser, "height", 1f);
|
||||
float shift = attribute_float(parser, "shift", 0f);
|
||||
while (expect_tag(parser, "key"))
|
||||
keys.add(Key.parse(parser));
|
||||
return new Row(keys, h, shift);
|
||||
@@ -264,18 +300,18 @@ class KeyboardData
|
||||
indication = i;
|
||||
}
|
||||
|
||||
public static Key parse(XmlResourceParser parser) throws Exception
|
||||
public static Key parse(XmlPullParser parser) throws Exception
|
||||
{
|
||||
Corner k0 = Corner.parse_of_attr(parser, "key0");
|
||||
Corner k1 = Corner.parse_of_attr(parser, "key1");
|
||||
Corner k2 = Corner.parse_of_attr(parser, "key2");
|
||||
Corner k3 = Corner.parse_of_attr(parser, "key3");
|
||||
Corner k4 = Corner.parse_of_attr(parser, "key4");
|
||||
float width = parser.getAttributeFloatValue(null, "width", 1f);
|
||||
float shift = parser.getAttributeFloatValue(null, "shift", 0.f);
|
||||
boolean edgekeys = parser.getAttributeBooleanValue(null, "edgekeys", false);
|
||||
float width = attribute_float(parser, "width", 1f);
|
||||
float shift = attribute_float(parser, "shift", 0.f);
|
||||
boolean edgekeys = attribute_bool(parser, "edgekeys", false);
|
||||
String indication = parser.getAttributeValue(null, "indication");
|
||||
while (parser.next() != XmlResourceParser.END_TAG)
|
||||
while (parser.next() != XmlPullParser.END_TAG)
|
||||
continue ;
|
||||
return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys, indication);
|
||||
}
|
||||
@@ -386,7 +422,7 @@ class KeyboardData
|
||||
localized = l;
|
||||
}
|
||||
|
||||
public static Corner parse_of_attr(XmlResourceParser parser, String attr) throws Exception
|
||||
public static Corner parse_of_attr(XmlPullParser parser, String attr) throws Exception
|
||||
{
|
||||
String name = parser.getAttributeValue(null, attr);
|
||||
boolean localized = false;
|
||||
@@ -426,37 +462,56 @@ class KeyboardData
|
||||
|
||||
public Key apply(Key k)
|
||||
{
|
||||
return new Key(apply(k.key0), apply(k.key1), apply(k.key2),
|
||||
return new Key(apply_key0(k.key0), apply(k.key1), apply(k.key2),
|
||||
apply(k.key3), apply(k.key4), k.width, k.shift, k.edgekeys,
|
||||
k.indication);
|
||||
}
|
||||
|
||||
private Corner apply(Corner c)
|
||||
protected Corner apply_key0(Corner c)
|
||||
{
|
||||
return apply(c);
|
||||
}
|
||||
|
||||
protected Corner apply(Corner c)
|
||||
{
|
||||
if (c == null)
|
||||
return null;
|
||||
KeyValue kv = apply(c.kv, c.localized);
|
||||
if (kv == null)
|
||||
return null;
|
||||
return Corner.of_kv(kv);
|
||||
return (kv == null) ? null : new Corner(kv, c.localized);
|
||||
}
|
||||
}
|
||||
|
||||
/** Parsing utils */
|
||||
|
||||
/** Returns [false] on [END_DOCUMENT] or [END_TAG], [true] otherwise. */
|
||||
private static boolean expect_tag(XmlResourceParser parser, String name) throws Exception
|
||||
private static boolean expect_tag(XmlPullParser parser, String name) throws Exception
|
||||
{
|
||||
int status;
|
||||
do
|
||||
{
|
||||
status = parser.next();
|
||||
if (status == XmlResourceParser.END_DOCUMENT || status == XmlResourceParser.END_TAG)
|
||||
if (status == XmlPullParser.END_DOCUMENT || status == XmlPullParser.END_TAG)
|
||||
return false;
|
||||
}
|
||||
while (status != XmlResourceParser.START_TAG);
|
||||
while (status != XmlPullParser.START_TAG);
|
||||
if (!parser.getName().equals(name))
|
||||
throw new Exception("Unknow tag: " + parser.getName());
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean attribute_bool(XmlPullParser parser, String attr, boolean default_val)
|
||||
{
|
||||
String val = parser.getAttributeValue(null, attr);
|
||||
if (val == null)
|
||||
return default_val;
|
||||
return val.equals("true");
|
||||
}
|
||||
|
||||
private static float attribute_float(XmlPullParser parser, String attr, float default_val)
|
||||
{
|
||||
String val = parser.getAttributeValue(null, attr);
|
||||
if (val == null)
|
||||
return default_val;
|
||||
return Float.parseFloat(val);
|
||||
}
|
||||
}
|
||||
|
25
srcs/juloo.keyboard2/LayoutListPreference.java
Normal file
25
srcs/juloo.keyboard2/LayoutListPreference.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package juloo.keyboard2;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.preference.ListPreference;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
public class LayoutListPreference extends ListPreference
|
||||
{
|
||||
public LayoutListPreference(Context context, AttributeSet attrs)
|
||||
{
|
||||
super(context, attrs);
|
||||
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LayoutListPreference);
|
||||
String defaultString = a.getString(R.styleable.LayoutListPreference_defaultString);
|
||||
a.recycle();
|
||||
Resources res = context.getResources();
|
||||
String[] entries = res.getStringArray(R.array.pref_layout_entries);
|
||||
entries[0] = defaultString;
|
||||
setEntries(entries);
|
||||
setEntryValues(res.getStringArray(R.array.pref_layout_values));
|
||||
setSummary("%s");
|
||||
setDefaultValue("none");
|
||||
}
|
||||
}
|
@@ -48,6 +48,8 @@ public final class Pointers implements Handler.Callback
|
||||
|
||||
public void clear()
|
||||
{
|
||||
for (Pointer p : _ptrs)
|
||||
stopKeyRepeat(p);
|
||||
_ptrs.clear();
|
||||
}
|
||||
|
||||
@@ -80,10 +82,10 @@ public final class Pointers implements Handler.Callback
|
||||
if (getLatched(key, kv) != null)
|
||||
return; // Already latched, don't add an other pointer.
|
||||
Pointer ptr = new Pointer(-1, key, kv, 0.f, 0.f, Modifiers.EMPTY);
|
||||
ptr.flags &= ~KeyValue.FLAG_LATCH;
|
||||
ptr.flags |= KeyValue.FLAG_LOCK | KeyValue.FLAG_FAKE_PTR;
|
||||
ptr.flags &= ~(KeyValue.FLAG_LATCH | KeyValue.FLAG_LOCK);
|
||||
ptr.flags |= KeyValue.FLAG_FAKE_PTR;
|
||||
if (locked)
|
||||
ptr.flags = (ptr.flags & ~KeyValue.FLAG_LOCK) | KeyValue.FLAG_LOCKED;
|
||||
ptr.flags |= KeyValue.FLAG_LOCKED;
|
||||
_ptrs.add(ptr);
|
||||
}
|
||||
|
||||
@@ -128,13 +130,9 @@ public final class Pointers implements Handler.Callback
|
||||
}
|
||||
}
|
||||
|
||||
public void onTouchCancel(int pointerId)
|
||||
public void onTouchCancel()
|
||||
{
|
||||
Pointer ptr = getPtr(pointerId);
|
||||
if (ptr == null)
|
||||
return;
|
||||
stopKeyRepeat(ptr);
|
||||
removePtr(ptr);
|
||||
clear();
|
||||
_handler.onPointerFlagsChanged(true);
|
||||
}
|
||||
|
||||
|
@@ -14,13 +14,11 @@ public class SettingsActivity extends PreferenceActivity
|
||||
{
|
||||
detectSystemTheme();
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences prefs;
|
||||
// The preferences can't be read when in direct-boot mode. Avoid crashing
|
||||
// and don't allow changing the settings.
|
||||
try { prefs = PreferenceManager.getDefaultSharedPreferences(this); }
|
||||
try { getPreferenceManager().getSharedPreferences(); }
|
||||
catch (Exception _e) { fallbackEncrypted(); return; }
|
||||
addPreferencesFromResource(R.xml.settings);
|
||||
prefs.registerOnSharedPreferenceChangeListener(this.new OnPreferencesChange());
|
||||
}
|
||||
|
||||
/** The default theme is [Theme.DeviceDefault], which is dark. Detect if the
|
||||
@@ -41,14 +39,11 @@ public class SettingsActivity extends PreferenceActivity
|
||||
finish();
|
||||
}
|
||||
|
||||
/** See DirectBootAwarePreferences. */
|
||||
class OnPreferencesChange implements SharedPreferences.OnSharedPreferenceChangeListener
|
||||
protected void onStop()
|
||||
{
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences prefs, String _key)
|
||||
{
|
||||
DirectBootAwarePreferences
|
||||
.copy_preferences_to_protected_storage(SettingsActivity.this, prefs);
|
||||
}
|
||||
DirectBootAwarePreferences
|
||||
.copy_preferences_to_protected_storage(this,
|
||||
getPreferenceManager().getSharedPreferences());
|
||||
super.onStop();
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,7 @@ package juloo.keyboard2;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Typeface;
|
||||
import android.util.AttributeSet;
|
||||
@@ -11,12 +12,20 @@ public class Theme
|
||||
{
|
||||
public final Paint keyBgPaint = new Paint();
|
||||
public final Paint keyDownBgPaint = new Paint();
|
||||
public final Paint keyBorderPaint = new Paint();
|
||||
public final int lockedColor;
|
||||
public final int activatedColor;
|
||||
public final int labelColor;
|
||||
public final int subLabelColor;
|
||||
public final int secondaryLabelColor;
|
||||
|
||||
public final float keyBorderRadius;
|
||||
public final float keyBorderWidth;
|
||||
public final float keyBorderWidthActivated;
|
||||
public final int keyBorderColorLeft;
|
||||
public final int keyBorderColorTop;
|
||||
public final int keyBorderColorRight;
|
||||
public final int keyBorderColorBottom;
|
||||
|
||||
public final int colorNavBar;
|
||||
public final boolean isLightNavBar;
|
||||
@@ -30,7 +39,8 @@ public class Theme
|
||||
public Theme(Context context, AttributeSet attrs)
|
||||
{
|
||||
TypedArray s = context.getTheme().obtainStyledAttributes(attrs, R.styleable.keyboard, 0, 0);
|
||||
keyBgPaint.setColor(s.getColor(R.styleable.keyboard_colorKey, 0));
|
||||
int colorKey = s.getColor(R.styleable.keyboard_colorKey, 0);
|
||||
keyBgPaint.setColor(colorKey);
|
||||
keyDownBgPaint.setColor(s.getColor(R.styleable.keyboard_colorKeyActivated, 0));
|
||||
// colorKeyboard = s.getColor(R.styleable.keyboard_colorKeyboard, 0);
|
||||
colorNavBar = s.getColor(R.styleable.keyboard_navigationBarColor, 0);
|
||||
@@ -39,7 +49,16 @@ public class Theme
|
||||
activatedColor = s.getColor(R.styleable.keyboard_colorLabelActivated, 0);
|
||||
lockedColor = s.getColor(R.styleable.keyboard_colorLabelLocked, 0);
|
||||
subLabelColor = s.getColor(R.styleable.keyboard_colorSubLabel, 0);
|
||||
float secondaryLightOffset = s.getFloat(R.styleable.keyboard_secondaryLightOffset, 1.f);
|
||||
secondaryLabelColor = adjustLight(labelColor, secondaryLightOffset);
|
||||
keyBorderRadius = s.getDimension(R.styleable.keyboard_keyBorderRadius, 0);
|
||||
keyBorderWidth = s.getDimension(R.styleable.keyboard_keyBorderWidth, 0);
|
||||
keyBorderWidthActivated = s.getDimension(R.styleable.keyboard_keyBorderWidthActivated, 0);
|
||||
keyBorderPaint.setStyle(Paint.Style.STROKE);
|
||||
keyBorderColorLeft = s.getColor(R.styleable.keyboard_keyBorderColorLeft, colorKey);
|
||||
keyBorderColorTop = s.getColor(R.styleable.keyboard_keyBorderColorTop, colorKey);
|
||||
keyBorderColorRight = s.getColor(R.styleable.keyboard_keyBorderColorRight, colorKey);
|
||||
keyBorderColorBottom = s.getColor(R.styleable.keyboard_keyBorderColorBottom, colorKey);
|
||||
s.recycle();
|
||||
_keyLabelPaint = initLabelPaint(Paint.Align.CENTER, null);
|
||||
_keySubLabelPaint = initLabelPaint(Paint.Align.LEFT, null);
|
||||
@@ -67,7 +86,15 @@ public class Theme
|
||||
return _indicationPaint;
|
||||
}
|
||||
|
||||
private Paint initLabelPaint(Paint.Align align, Typeface font)
|
||||
int adjustLight(int color, float offset)
|
||||
{
|
||||
float[] hsv = new float[3];
|
||||
Color.colorToHSV(color, hsv);
|
||||
hsv[2] += offset;
|
||||
return Color.HSVToColor(hsv);
|
||||
}
|
||||
|
||||
Paint initLabelPaint(Paint.Align align, Typeface font)
|
||||
{
|
||||
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
paint.setTextAlign(align);
|
||||
@@ -76,7 +103,7 @@ public class Theme
|
||||
return (paint);
|
||||
}
|
||||
|
||||
private static Typeface _key_font = null;
|
||||
static Typeface _key_font = null;
|
||||
|
||||
static public Typeface getKeyFont(Context context)
|
||||
{
|
||||
|
@@ -1,6 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generated by IcoMoon.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="16" viewBox="0 0 18 16">
|
||||
<path fill="#000000" d="M17 2h-16c-0.55 0-1 0.45-1 1v10c0 0.55 0.45 1 1 1h16c0.55 0 1-0.45 1-1v-10c0-0.55-0.45-1-1-1zM10 4h2v2h-2v-2zM13 7v2h-2v-2h2zM7 4h2v2h-2v-2zM10 7v2h-2v-2h2zM4 4h2v2h-2v-2zM7 7v2h-2v-2h2zM2 4h1v2h-1v-2zM2 7h2v2h-2v-2zM3 12h-1v-2h1v2zM12 12h-8v-2h8v2zM16 12h-3v-2h3v2zM16 9h-2v-2h2v2zM16 6h-3v-2h3v2z"></path>
|
||||
</svg>
|
||||
<!-- materialdesignicons.com keyboard @Google -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19,10H17V8H19M19,13H17V11H19M16,10H14V8H16M16,13H14V11H16M16,17H8V15H16M7,10H5V8H7M7,13H5V11H7M8,11H10V13H8M8,8H10V10H8M11,11H13V13H11M11,8H13V10H11M20,5H4C2.89,5 2,5.89 2,7V17A2,2 0 0,0 4,19H20A2,2 0 0,0 22,17V7C22,5.89 21.1,5 20,5Z" /></svg>
|
||||
|
Before Width: | Height: | Size: 651 B After Width: | Height: | Size: 364 B |
2
srcs/special_font/13.svg
Normal file
2
srcs/special_font/13.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<!-- materialdesignicons.com keyboard-settings Michael Richins @MrGrigri -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19,10H17V8H19M19,13H17V11H19M16,10H14V8H16M16,13H14V11H16M16,17H8V15H16M7,10H5V8H7M7,13H5V11H7M8,11H10V13H8M8,8H10V10H8M11,11H13V13H11M11,8H13V10H11M20,5H4A2,2 0 0,0 2,7V17A2,2 0 0,0 4,19H20A2,2 0 0,0 22,17V7A2,2 0 0,0 20,5M7,22H9V24H7V22M11,22H13V24H11V22M15,22H17V24H15V22Z" /></svg>
|
After Width: | Height: | Size: 433 B |
2
srcs/special_font/14.svg
Normal file
2
srcs/special_font/14.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<!-- materialdesignicons.com keyboard-settings Michael Richins @MrGrigri -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7,22H9V24H7V22M11,22H13V24H11V22M15,22H17V24H15V22M4,5A2,2 0 0,0 2,7V17A2,2 0 0,0 4,19H20A2,2 0 0,0 22,17V7A2,2 0 0,0 20,5H4M4,7H20V17H4V7M5,8V10H7V8H5M8,8V10H10V8H8M11,8V10H13V8H11M14,8V10H16V8H14M17,8V10H19V8H17M5,11V13H7V11H5M8,11V13H10V11H8M11,11V13H13V11H11M14,11V13H16V11H14M17,11V13H19V11H17M8,14V16H16V14H8Z" /></svg>
|
After Width: | Height: | Size: 473 B |
@@ -1,13 +1,10 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1256 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-55 0 2103 2048">
|
||||
<path fill="currentColor"
|
||||
d="M589 493v151v0h637v-151h-637zM931.256 1002.78l-69.3145 -69.3145q-112.472 86.3154 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166v0v0zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30859 -71.9297 74.5449l2.61523 -2.61523
|
||||
q142.555 116.396 319.106 128.166v-99.3945v0v0zM197.572 860.229q-90.2393 -103.315 -107.24 -245.866h-99.3936q17.001 181.786 137.32 319.104l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3867 30.0791 -32.6953v0v0zM1137.89 614.361h-99.3936
|
||||
q-17.001 141.241 -107.238 248.482l69.3135 70.6211q120.317 -137.318 137.318 -319.104v0v0zM1137.89 517.58q-14.3857 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3154 111.164 99.3936 256.331h99.3936v0v0zM189.726 263.87h0.000976562
|
||||
q-86.3154 107.239 -99.3936 253.716h-99.3945q13.0781 -189.633 128.165 -326.953l-3.92285 -3.92383q-1.30762 0 74.5449 77.1611v0zM939.103 121.32q-146.476 -124.242 -326.951 -136.015v99.3945q139.935 11.7705 257.639 105.935zM516.679 -14.7002
|
||||
q-180.478 11.7715 -326.953 136.014l69.3145 69.3145q117.703 -90.2383 257.641 -105.934v-99.3945h-0.000976562h-0.000976562z" />
|
||||
</g>
|
||||
|
||||
d="M127.905 602.248l-6.18555 -4.94824l3.92285 2.61523zM931.256 533.22l-69.3145 69.3145q-112.472 -86.3154 -249.792 -98.0859v-99.3945q176.555 11.7715 319.106 128.166zM516.679 504.45q-133.396 10.4619 -249.792 100.701q0.0234375 -1.28516 -69.3145 -71.9297
|
||||
q142.558 -116.396 319.106 -128.166v99.3945zM1137.89 1018.42q-14.3857 189.633 -129.474 326.953l-69.3135 -70.6221q86.3154 -111.164 99.3936 -256.331h99.3936zM189.726 1272.13q-86.3145 -107.239 -99.3926 -253.716h-99.3945q13.0625 189.402 127.886 326.619
|
||||
q12.8672 -13.8672 70.9014 -72.9033zM939.103 1414.68q-146.476 124.242 -326.948 136.018v-99.3945q139.935 -11.7705 257.639 -105.938zM516.684 1550.7q-180.482 -11.7715 -326.958 -136.016l69.3145 -69.3145q117.703 90.2383 257.644 105.936v99.3945zM-45 926v-150
|
||||
h68.7334q35.2666 -94 104.487 -173.426l39.2725 40.499q30.5068 30.9268 30.0791 32.6953q-40.5723 46.2314 -66.0537 100.231h865.861h107.714q-35.0264 -94.1494 -104.52 -173.463l-69.3135 70.6211q40.3994 48.0137 66.1191 102.842h107.714v0h74.9062v150h-1225z
|
||||
M115.181 1349.29q-0.307617 0 1.73828 -2.04492l2.18457 -1.87891z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
41
sync_translations.py
Normal file
41
sync_translations.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import xml.etree.ElementTree as ET
|
||||
from xml.sax import saxutils
|
||||
import glob
|
||||
|
||||
# Edit every strings.xml files:
|
||||
# - Add missing translation as comments
|
||||
# - Remove obsolete strings
|
||||
# - Sort in the same order as the baseline
|
||||
# The baseline is 'values/strings.xml', which is english.
|
||||
|
||||
def parse_strings_file(file):
|
||||
resources = ET.parse(file).getroot()
|
||||
return [
|
||||
((ent.get("name"), ent.get("product")), ent.text)
|
||||
for ent in resources if ent.tag == "string"
|
||||
]
|
||||
|
||||
def string_entry_str(name, text, product):
|
||||
product_attr = ' product="%s"' % product if product != None else ""
|
||||
text_encoded = saxutils.escape(text)
|
||||
return '<string name="%s"%s>%s</string>' % (name, product_attr, text_encoded)
|
||||
|
||||
def write_updated_strings(out, baseline, strings):
|
||||
out.write('<?xml version="1.0" encoding="utf-8"?>\n<resources>\n')
|
||||
for key, default_text in baseline:
|
||||
name, product = key
|
||||
if key in strings:
|
||||
ent = string_entry_str(name, strings[key], product)
|
||||
out.write(" %s\n" % ent)
|
||||
else:
|
||||
def_ent = string_entry_str(name, default_text, product)
|
||||
out.write(" <!-- %s -->\n" % def_ent)
|
||||
out.write('</resources>\n')
|
||||
|
||||
baseline = parse_strings_file("res/values/strings.xml")
|
||||
|
||||
for strings_file in glob.glob("res/values-*/strings.xml"):
|
||||
print(strings_file)
|
||||
strings = dict(parse_strings_file(strings_file))
|
||||
with open(strings_file, "w") as out:
|
||||
write_updated_strings(out, baseline, strings)
|
Reference in New Issue
Block a user