mirror of
https://github.com/Julow/Unexpected-Keyboard.git
synced 2025-08-18 15:59:05 +02:00
Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
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 | ||
|
fc68f2e07d | ||
|
8350efaa83 | ||
|
ef34303c7e | ||
|
f1ce6abe5a | ||
|
29fbb27a8a |
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,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="27" android:versionName="1.19.0" android:hardwareAccelerated="false">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="29" android:versionName="1.20.0" android:hardwareAccelerated="false">
|
||||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="30"/>
|
<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">
|
<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">
|
<service android:name="juloo.keyboard2.Keyboard2" android:label="@string/app_name" android:permission="android.permission.BIND_INPUT_METHOD" android:exported="true" android:directBootAware="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
<meta-data android:name="android.view.im" android:resource="@xml/method"/>
|
<meta-data android:name="android.view.im" android:resource="@xml/method"/>
|
||||||
</service>
|
</service>
|
||||||
<activity android:name="juloo.keyboard2.SettingsActivity" android:icon="@drawable/ic_launcher" android:label="@string/settings_activity_label" android:theme="@style/android:Theme.DeviceDefault">
|
<activity android:name="juloo.keyboard2.SettingsActivity" android:icon="@drawable/ic_launcher" android:label="@string/settings_activity_label" android:theme="@style/android:Theme.DeviceDefault" android:exported="true" android:directBootAware="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
6
metadata/android/en-US/changelogs/28.txt
Normal file
6
metadata/android/en-US/changelogs/28.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Updated translations: Latvian
|
||||||
|
|
||||||
|
Fix crash when typing device password
|
||||||
|
Increase target SDK version to 31
|
||||||
|
|
||||||
|
Thanks to the contributors: @eandersons
|
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
|
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.
|
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:hardwareAccelerated="false">
|
<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.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">
|
<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" key="switch_back_emoji"/>
|
||||||
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" android:layout_weight="4" key="space"/>
|
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" android:layout_weight="4" key="space"/>
|
||||||
|
@@ -4,16 +4,29 @@
|
|||||||
<string name="app_name" product="default">Klávesnice Unexpected</string>
|
<string name="app_name" product="default">Klávesnice Unexpected</string>
|
||||||
<string name="settings_activity_label">Nastavení Klávesnice Unexpected</string>
|
<string name="settings_activity_label">Nastavení Klávesnice Unexpected</string>
|
||||||
<string name="pref_category_layout">Rozvržení</string>
|
<string name="pref_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_title">Změnit rozvržení klávesnice</string>
|
||||||
<string name="pref_layout_e_system">V nastavení systému</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_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_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_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_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_title">Automatická kapitalizace</string>
|
||||||
<string name="pref_autocapitalisation_summary">Stiskne Shift na začátku věty</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_extra_keys_title">Add keys to the keyboard</string> -->
|
||||||
<string name="pref_programming_layout_none">Žádné</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_category_typing">Psaní</string>
|
||||||
<string name="pref_swipe_dist_title">Vzdálenost posunutí prstem</string>
|
<string name="pref_swipe_dist_title">Vzdálenost posunutí prstem</string>
|
||||||
<string name="pref_swipe_dist_summary">Jak daleko je třeba posunout prst pro napsaní znaku/diakritiky v rozích klávey (%s)</string>
|
<string name="pref_swipe_dist_summary">Jak daleko je třeba posunout prst pro napsaní znaku/diakritiky v rozích klávey (%s)</string>
|
||||||
@@ -37,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">Tmavý</string>
|
<string name="pref_theme_e_dark">Tmavý</string>
|
||||||
<string name="pref_theme_e_light">Světlý</string>
|
<string name="pref_theme_e_light">Světlý</string>
|
||||||
<string name="pref_theme_e_black">Černý</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_very_short">Velmi krátká</string>
|
||||||
<string name="pref_swipe_dist_e_short">Krátká</string>
|
<string name="pref_swipe_dist_e_short">Krátká</string>
|
||||||
<string name="pref_swipe_dist_e_default">Běžná</string>
|
<string name="pref_swipe_dist_e_default">Běžná</string>
|
||||||
@@ -44,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Velmi dlouhá</string>
|
<string name="pref_swipe_dist_e_very_far">Velmi dlouhá</string>
|
||||||
<string name="pref_key_horizontal_space">Horizontální mezery mezi klávesami</string>
|
<string name="pref_key_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_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_next">Další</string>
|
||||||
<string name="key_action_done">Dokončit</string>
|
<string name="key_action_done">Dokončit</string>
|
||||||
<string name="key_action_go">Spustit</string>
|
<string name="key_action_go">Spustit</string>
|
||||||
|
@@ -4,8 +4,13 @@
|
|||||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||||
<string name="settings_activity_label">Unexpected Keyboard - Einstellungen</string>
|
<string name="settings_activity_label">Unexpected Keyboard - Einstellungen</string>
|
||||||
<string name="pref_category_layout">Layout</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_title">Tastaturlayout ändern</string>
|
||||||
<string name="pref_layout_e_system">Systemeinstellung</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_title">Akzente</string>
|
||||||
<string name="pref_accents_e_all_installed">Akzente für alle installierten Sprachen anzeigen</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>
|
<string name="pref_accents_e_selected">Akzente nur für die gewählte Sprache anzeigen</string>
|
||||||
@@ -14,12 +19,15 @@
|
|||||||
<string name="pref_show_numpad_never">Nie</string>
|
<string name="pref_show_numpad_never">Nie</string>
|
||||||
<string name="pref_show_numpad_landscape">Nur im Querformat</string>
|
<string name="pref_show_numpad_landscape">Nur im Querformat</string>
|
||||||
<string name="pref_show_numpad_always">Immer</string>
|
<string name="pref_show_numpad_always">Immer</string>
|
||||||
<string name="pref_programming_layout_title">Tastaturlayout zum Programmieren</string>
|
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||||
<string name="pref_extra_keys_title">Zusätzliche Zeichen zur Tastatur hinzufügen</string>
|
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||||
<string name="pref_programming_layout_none">Keines</string>
|
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
|
||||||
<string name="pref_category_typing">Tippen</string>
|
|
||||||
<string name="pref_autocapitalisation_title">Automatische Großschreibung</string>
|
<string name="pref_autocapitalisation_title">Automatische Großschreibung</string>
|
||||||
<string name="pref_autocapitalisation_summary">Shift-Taste am Satzanfang aktivieren</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_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_swipe_dist_summary">Abstand der Zeichen in den Ecken der Tasten (%s)</string>
|
||||||
<string name="pref_long_timeout_title">Zeitüberschreitung bei Tastenwiederholung</string>
|
<string name="pref_long_timeout_title">Zeitüberschreitung bei Tastenwiederholung</string>
|
||||||
@@ -50,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Sehr weit</string>
|
<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_horizontal_space">Horizontaler Abstand zwischen den Tasten</string>
|
||||||
<string name="pref_key_vertical_space">Vertikaler 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_next">Nächstes</string>
|
||||||
<string name="key_action_done">Fertig</string>
|
<string name="key_action_done">Fertig</string>
|
||||||
<string name="key_action_go">Los</string>
|
<string name="key_action_go">Los</string>
|
||||||
|
@@ -1,13 +1,32 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<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="settings_activity_label">Ajustes de Unexpected Keyboard</string>
|
||||||
<string name="pref_category_layout">Formato</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_title">Cambiar formato de teclado</string>
|
||||||
<string name="pref_layout_e_system">Ajustes del sistema</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_title">Acentos</string>
|
||||||
<string name="pref_accents_e_all_installed">Mostrar acentos para todos los lenguajes instalados</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_selected">Solo mostrar acentos para el lenguaje seleccionado</string>
|
||||||
<string name="pref_accents_e_none">Ocultar acentos</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_category_typing">Escribiendo</string>
|
||||||
<string name="pref_swipe_dist_title">Distancia para deslizar</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>
|
<string name="pref_swipe_dist_summary">Distancia de caracteres en las esquinas de las letras (%s)</string>
|
||||||
@@ -17,9 +36,12 @@
|
|||||||
<string name="pref_vibrate_summary">Habilitar/deshabilitar vibración al presionar una tecla</string>
|
<string name="pref_vibrate_summary">Habilitar/deshabilitar vibración al presionar una tecla</string>
|
||||||
<string name="pref_precise_repeat_title">Movimientos de cursor preciso</string>
|
<string name="pref_precise_repeat_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_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_category_style">Estilo</string>
|
||||||
<string name="pref_margin_bottom_title">Margen del pie</string>
|
<string name="pref_margin_bottom_title">Margen del pie</string>
|
||||||
<string name="pref_keyboard_height_title">Altura del teclado</string>
|
<string name="pref_keyboard_height_title">Altura del teclado</string>
|
||||||
|
<!-- <string name="pref_keyboard_height_landscape_title">Keyboard height in landscape mode</string> -->
|
||||||
<string name="pref_horizontal_margin_title">Margen horizontal</string>
|
<string name="pref_horizontal_margin_title">Margen horizontal</string>
|
||||||
<string name="pref_character_size_title">Tamaño de etiqueta</string>
|
<string name="pref_character_size_title">Tamaño de etiqueta</string>
|
||||||
<string name="pref_character_size_summary">Tamaño de caracteres mostrados en el teclado (%.2fx)</string>
|
<string name="pref_character_size_summary">Tamaño de caracteres mostrados en el teclado (%.2fx)</string>
|
||||||
@@ -28,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">Oscuro</string>
|
<string name="pref_theme_e_dark">Oscuro</string>
|
||||||
<string name="pref_theme_e_light">Claro</string>
|
<string name="pref_theme_e_light">Claro</string>
|
||||||
<string name="pref_theme_e_black">Negro</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_very_short">Muy corto</string>
|
||||||
<string name="pref_swipe_dist_e_short">Corto</string>
|
<string name="pref_swipe_dist_e_short">Corto</string>
|
||||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||||
@@ -35,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Muy lejano</string>
|
<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_horizontal_space">Espaciado horizontal entre las teclas</string>
|
||||||
<string name="pref_key_vertical_space">Espaciado vertical 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_next">Siguiente</string>
|
||||||
<string name="key_action_done">Hecho</string>
|
<string name="key_action_done">Hecho</string>
|
||||||
<string name="key_action_go">Ir</string>
|
<string name="key_action_go">Ir</string>
|
||||||
|
@@ -1,9 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<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="settings_activity_label">Unexpected Keyboard Paramètres</string>
|
||||||
<string name="pref_category_layout">Disposition</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_title">Disposition des touches</string>
|
||||||
<string name="pref_layout_e_system">Paramètre système</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_title">Accents</string>
|
||||||
<string name="pref_accents_e_all_installed">Afficher les accents pour les langues installées</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>
|
<string name="pref_accents_e_selected">Afficher les accents pour la langue sélectionnée</string>
|
||||||
@@ -12,23 +19,31 @@
|
|||||||
<string name="pref_show_numpad_never">Jamais</string>
|
<string name="pref_show_numpad_never">Jamais</string>
|
||||||
<string name="pref_show_numpad_landscape">Seulement en mode paysage</string>
|
<string name="pref_show_numpad_landscape">Seulement en mode paysage</string>
|
||||||
<string name="pref_show_numpad_always">Toujour</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_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_category_typing">Saisie</string>
|
||||||
<string name="pref_swipe_dist_title">Distance de swipe</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_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_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_title">Vibreur</string>
|
||||||
<string name="pref_vibrate_summary">Vibration a chaque touche</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_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_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_category_style">Style</string>
|
||||||
<string name="pref_margin_bottom_title">Marge du bas</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_title">Hauteur du clavier</string>
|
||||||
<string name="pref_keyboard_height_landscape_title">Hauteur du clavier en mode paysage</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_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_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">Thème</string>
|
||||||
<string name="pref_theme_e_system">Paramètre système</string>
|
<string name="pref_theme_e_system">Paramètre système</string>
|
||||||
@@ -43,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Très longue</string>
|
<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_horizontal_space">Espacement horizontal entre les touches</string>
|
||||||
<string name="pref_key_vertical_space">Espacement vertical 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_next">Suiv.</string>
|
||||||
<string name="key_action_done">Fin</string>
|
<string name="key_action_done">Fin</string>
|
||||||
<string name="key_action_go">Aller</string>
|
<string name="key_action_go">Aller</string>
|
||||||
|
@@ -4,16 +4,29 @@
|
|||||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||||
<string name="settings_activity_label">Impostazioni di Unexpected Keyboard</string>
|
<string name="settings_activity_label">Impostazioni di Unexpected Keyboard</string>
|
||||||
<string name="pref_category_layout">Layout</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_title">Cambia layout tastiera</string>
|
||||||
<string name="pref_layout_e_system">Impostazioni di sistema</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_title">Accenti</string>
|
||||||
<string name="pref_accents_e_all_installed">Mostra accenti per tutte le lingue installate</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_selected">Mostra accenti solo per le lingue selezionate</string>
|
||||||
<string name="pref_accents_e_none">Nascondi accenti</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_title">Maiuscole Automatiche</string>
|
||||||
<string name="pref_autocapitalisation_summary">Premi Shift all\'inizio di una frase</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_extra_keys_title">Add keys to the keyboard</string> -->
|
||||||
<string name="pref_programming_layout_none">Nessuno</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_category_typing">Digitando</string>
|
||||||
<string name="pref_swipe_dist_title">Distanza swipe</string>
|
<string name="pref_swipe_dist_title">Distanza swipe</string>
|
||||||
<string name="pref_swipe_dist_summary">Distanza dei caratteri negli angoli dei tasti (%s)</string>
|
<string name="pref_swipe_dist_summary">Distanza dei caratteri negli angoli dei tasti (%s)</string>
|
||||||
@@ -37,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">Scuro</string>
|
<string name="pref_theme_e_dark">Scuro</string>
|
||||||
<string name="pref_theme_e_light">Chiaro</string>
|
<string name="pref_theme_e_light">Chiaro</string>
|
||||||
<string name="pref_theme_e_black">Nero</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_very_short">Veramente breve</string>
|
||||||
<string name="pref_swipe_dist_e_short">Breve</string>
|
<string name="pref_swipe_dist_e_short">Breve</string>
|
||||||
<string name="pref_swipe_dist_e_default">Normale</string>
|
<string name="pref_swipe_dist_e_default">Normale</string>
|
||||||
@@ -44,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Molto distante</string>
|
<string name="pref_swipe_dist_e_very_far">Molto distante</string>
|
||||||
<string name="pref_key_horizontal_space">Spazio orizzontale tra i tasti</string>
|
<string name="pref_key_horizontal_space">Spazio orizzontale tra i tasti</string>
|
||||||
<string name="pref_key_vertical_space">Spazio verticale 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_next">Prossimo</string>
|
||||||
<string name="key_action_done">Fatto</string>
|
<string name="key_action_done">Fatto</string>
|
||||||
<string name="key_action_go">Vai</string>
|
<string name="key_action_go">Vai</string>
|
||||||
|
@@ -1,13 +1,32 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<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="settings_activity_label">Unexpected Keyboard 설정</string>
|
||||||
<string name="pref_category_layout">레이아웃</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_title">키보드 레이아웃 변경</string>
|
||||||
<string name="pref_layout_e_system">시스템 세팅</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_title">악센트</string>
|
||||||
<string name="pref_accents_e_all_installed">설치된 모든 언어의 악센트 표시</string>
|
<string name="pref_accents_e_all_installed">설치된 모든 언어의 악센트 표시</string>
|
||||||
<string name="pref_accents_e_selected">선택한 언어의 악센트만 표시</string>
|
<string name="pref_accents_e_selected">선택한 언어의 악센트만 표시</string>
|
||||||
<string name="pref_accents_e_none">모든 언어의 악센트 숨기기</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_category_typing">타자</string>
|
||||||
<string name="pref_swipe_dist_title">스와이프 범위</string>
|
<string name="pref_swipe_dist_title">스와이프 범위</string>
|
||||||
<string name="pref_swipe_dist_summary">키 모서리 문자의 입력 범위 (%s)</string>
|
<string name="pref_swipe_dist_summary">키 모서리 문자의 입력 범위 (%s)</string>
|
||||||
@@ -17,9 +36,12 @@
|
|||||||
<string name="pref_vibrate_summary">키 누를 때 진동 키거/끄기</string>
|
<string name="pref_vibrate_summary">키 누를 때 진동 키거/끄기</string>
|
||||||
<string name="pref_precise_repeat_title">정확한 커서 움직임</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">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_category_style">스타일</string>
|
||||||
<string name="pref_margin_bottom_title">아래 넓이</string>
|
<string name="pref_margin_bottom_title">아래 넓이</string>
|
||||||
<string name="pref_keyboard_height_title">키보드 높이</string>
|
<string name="pref_keyboard_height_title">키보드 높이</string>
|
||||||
|
<!-- <string name="pref_keyboard_height_landscape_title">Keyboard height in landscape mode</string> -->
|
||||||
<string name="pref_horizontal_margin_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_character_size_summary">키보드의 표시되는 폰트 크기 (%.2fx)</string>
|
||||||
@@ -28,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">Dark</string>
|
<string name="pref_theme_e_dark">Dark</string>
|
||||||
<string name="pref_theme_e_light">Light</string>
|
<string name="pref_theme_e_light">Light</string>
|
||||||
<string name="pref_theme_e_black">Black</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_very_short">매우 짧음</string>
|
||||||
<string name="pref_swipe_dist_e_short">짧음</string>
|
<string name="pref_swipe_dist_e_short">짧음</string>
|
||||||
<string name="pref_swipe_dist_e_default">보통</string>
|
<string name="pref_swipe_dist_e_default">보통</string>
|
||||||
@@ -35,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">매우 넓음</string>
|
<string name="pref_swipe_dist_e_very_far">매우 넓음</string>
|
||||||
<string name="pref_key_horizontal_space">키보드 양 옆 간격</string>
|
<string name="pref_key_horizontal_space">키보드 양 옆 간격</string>
|
||||||
<string name="pref_key_vertical_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_next">다음</string>
|
||||||
<string name="key_action_done">확인</string>
|
<string name="key_action_done">확인</string>
|
||||||
<string name="key_action_go">Go</string>
|
<string name="key_action_go">Go</string>
|
||||||
|
@@ -4,17 +4,29 @@
|
|||||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||||
<string name="settings_activity_label">Unexpected Keyboard iestatījumi</string>
|
<string name="settings_activity_label">Unexpected Keyboard iestatījumi</string>
|
||||||
<string name="pref_category_layout">Izkārtojums</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_title">Mainīt tastatūras izkārtojumu</string>
|
||||||
<string name="pref_layout_e_system">Ierīces iestatījumi</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_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_all_installed">Rādīt uzsvara zīmes visām uzstādītajām valodām</string>
|
||||||
<string name="pref_accents_e_selected">Rādīt uzsvara zīmes tikai atlasītajām valodām</string>
|
<string name="pref_accents_e_selected">Rādīt uzsvara zīmes tikai atlasītajām valodām</string>
|
||||||
<string name="pref_accents_e_none">Paslēpt uzsvara zīmes</string>
|
<string name="pref_accents_e_none">Paslēpt uzsvara zīmes</string>
|
||||||
|
<string name="pref_show_numpad_title">Rādīt ciparnīcu</string>
|
||||||
|
<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_title">Automātiski lielie burti</string>
|
||||||
<string name="pref_autocapitalisation_summary">Piespiest Shift teikuma sākumā</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_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_second_layout_title">Secondary layout</string> -->
|
||||||
<string name="pref_programming_layout_none">Neviens</string>
|
<string name="pref_second_layout_none">Neviens</string>
|
||||||
<string name="pref_category_typing">Rakstīšana</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_title">Pavilkšanas attālums</string>
|
||||||
<string name="pref_swipe_dist_summary">Taustiņu stūros esošo rakstzīmju attālums (%s)</string>
|
<string name="pref_swipe_dist_summary">Taustiņu stūros esošo rakstzīmju attālums (%s)</string>
|
||||||
@@ -38,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">Tumšs</string>
|
<string name="pref_theme_e_dark">Tumšs</string>
|
||||||
<string name="pref_theme_e_light">Gaišs</string>
|
<string name="pref_theme_e_light">Gaišs</string>
|
||||||
<string name="pref_theme_e_black">Melns</string>
|
<string name="pref_theme_e_black">Melns</string>
|
||||||
|
<string name="pref_theme_e_white">Balts</string>
|
||||||
<string name="pref_swipe_dist_e_very_short">Ļoti tuvs</string>
|
<string name="pref_swipe_dist_e_very_short">Ļoti tuvs</string>
|
||||||
<string name="pref_swipe_dist_e_short">Tuvs</string>
|
<string name="pref_swipe_dist_e_short">Tuvs</string>
|
||||||
<string name="pref_swipe_dist_e_default">Vidējs</string>
|
<string name="pref_swipe_dist_e_default">Vidējs</string>
|
||||||
@@ -45,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Ļoti tāls</string>
|
<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_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_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_next">Nākamais</string>
|
||||||
<string name="key_action_done">Darīts</string>
|
<string name="key_action_done">Darīts</string>
|
||||||
<string name="key_action_go">Aiziet</string>
|
<string name="key_action_go">Aiziet</string>
|
||||||
|
70
res/values-pl/strings.xml
Normal file
70
res/values-pl/strings.xml
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
<?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_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_keyboard_height_landscape_title">Wysokość klawiatury w orientacji poziomej</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>
|
@@ -4,16 +4,29 @@
|
|||||||
<string name="app_name" product="default">Teclado Unexpected</string>
|
<string name="app_name" product="default">Teclado Unexpected</string>
|
||||||
<string name="settings_activity_label">Configurar Teclado Unexpected</string>
|
<string name="settings_activity_label">Configurar Teclado Unexpected</string>
|
||||||
<string name="pref_category_layout">Layout</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_title">Mudar layout do teclado</string>
|
||||||
<string name="pref_layout_e_system">Mesmo do sistema</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_title">Acentos</string>
|
||||||
<string name="pref_accents_e_all_installed">Mostrar acentos para todos os idiomas instalados</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_selected">Mostrar acentos só para o idioma selecionado</string>
|
||||||
<string name="pref_accents_e_none">Ocultar acentos</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_title">Maiusculização automática</string>
|
||||||
<string name="pref_autocapitalisation_summary">Aciona o shift no início de cada frase</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_extra_keys_title">Add keys to the keyboard</string> -->
|
||||||
<string name="pref_programming_layout_none">Nenhum</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_category_typing">Digitação</string>
|
||||||
<string name="pref_swipe_dist_title">Distância a deslizar</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>
|
<string name="pref_swipe_dist_summary">Distância até acionar os cantos das teclas (%s)</string>
|
||||||
@@ -37,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">Escuro</string>
|
<string name="pref_theme_e_dark">Escuro</string>
|
||||||
<string name="pref_theme_e_light">Claro</string>
|
<string name="pref_theme_e_light">Claro</string>
|
||||||
<string name="pref_theme_e_black">Preto</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_very_short">Muito curto</string>
|
||||||
<string name="pref_swipe_dist_e_short">Curto</string>
|
<string name="pref_swipe_dist_e_short">Curto</string>
|
||||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||||
@@ -44,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Muito longo</string>
|
<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_horizontal_space">Distância horizontal entre teclas</string>
|
||||||
<string name="pref_key_vertical_space">Distância vertical 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_next">Próximo</string>
|
||||||
<string name="key_action_done">Pronto</string>
|
<string name="key_action_done">Pronto</string>
|
||||||
<string name="key_action_go">Ir</string>
|
<string name="key_action_go">Ir</string>
|
||||||
|
@@ -1,16 +1,32 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">Unexpected Keyboard</string>
|
<!-- <string name="app_name" product="debug">Unexpected Keyboard (debug)</string> -->
|
||||||
|
<!-- <string name="app_name" product="default">Unexpected Keyboard</string> -->
|
||||||
<string name="settings_activity_label">Unexpected Keyboard Настройки</string>
|
<string name="settings_activity_label">Unexpected Keyboard Настройки</string>
|
||||||
<string name="pref_category_layout">Расположение</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_title">Изменить раскладку клавиатуры</string>
|
||||||
<string name="pref_layout_e_system">Системные настройки</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_title">Акцент</string>
|
||||||
<string name="pref_accents_e_all_installed">Показывать акценты для всех установленных языков</string>
|
<string name="pref_accents_e_all_installed">Показывать акценты для всех установленных языков</string>
|
||||||
<string name="pref_accents_e_selected">Показывать акценты только для выбранного языка</string>
|
<string name="pref_accents_e_selected">Показывать акценты только для выбранного языка</string>
|
||||||
<string name="pref_accents_e_none">Скрыть акценты</string>
|
<string name="pref_accents_e_none">Скрыть акценты</string>
|
||||||
<string name="pref_programming_layout_title">Раскладка клавиатуры для программирования</string>
|
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
|
||||||
<string name="pref_programming_layout_none">Нету</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">Нету</string>
|
||||||
<string name="pref_category_typing">Печатание</string>
|
<string name="pref_category_typing">Печатание</string>
|
||||||
<string name="pref_swipe_dist_title">Расстояние пролистывания</string>
|
<string name="pref_swipe_dist_title">Расстояние пролистывания</string>
|
||||||
<string name="pref_swipe_dist_summary">Расстояние между символами в углах клавиш (%s)</string>
|
<string name="pref_swipe_dist_summary">Расстояние между символами в углах клавиш (%s)</string>
|
||||||
@@ -20,6 +36,8 @@
|
|||||||
<string name="pref_vibrate_summary">Включение/выключение вибрации при нажатии клавиши</string>
|
<string name="pref_vibrate_summary">Включение/выключение вибрации при нажатии клавиши</string>
|
||||||
<string name="pref_precise_repeat_title">Точные перемещения курсора</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">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_category_style">Стиль</string>
|
||||||
<string name="pref_margin_bottom_title">Нижняя граница поля</string>
|
<string name="pref_margin_bottom_title">Нижняя граница поля</string>
|
||||||
<string name="pref_keyboard_height_title">Высота клавиатуры</string>
|
<string name="pref_keyboard_height_title">Высота клавиатуры</string>
|
||||||
@@ -32,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">Темный</string>
|
<string name="pref_theme_e_dark">Темный</string>
|
||||||
<string name="pref_theme_e_light">Светлый</string>
|
<string name="pref_theme_e_light">Светлый</string>
|
||||||
<string name="pref_theme_e_black">Черный</string>
|
<string name="pref_theme_e_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_very_short">Очень короткий</string>
|
||||||
<string name="pref_swipe_dist_e_short">Короткий</string>
|
<string name="pref_swipe_dist_e_short">Короткий</string>
|
||||||
<string name="pref_swipe_dist_e_default">Обычный</string>
|
<string name="pref_swipe_dist_e_default">Обычный</string>
|
||||||
@@ -39,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Очень далеко</string>
|
<string name="pref_swipe_dist_e_very_far">Очень далеко</string>
|
||||||
<string name="pref_key_horizontal_space">Горизонтальное расстояние между клавишами</string>
|
<string name="pref_key_horizontal_space">Горизонтальное расстояние между клавишами</string>
|
||||||
<string name="pref_key_vertical_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">Next</string>
|
<string name="key_action_next">Next</string>
|
||||||
<string name="key_action_done">Ввод</string>
|
<string name="key_action_done">Ввод</string>
|
||||||
<string name="key_action_go">Go</string>
|
<string name="key_action_go">Go</string>
|
||||||
|
@@ -4,14 +4,29 @@
|
|||||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||||
<string name="settings_activity_label">Unexpected Keyboard Ayarları</string>
|
<string name="settings_activity_label">Unexpected Keyboard Ayarları</string>
|
||||||
<string name="pref_category_layout">Düzen</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_title">Klavye Düzenini Değiştir</string>
|
||||||
<string name="pref_layout_e_system">Sistem Ayarları</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_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_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_selected">Sadece seçili dilin aksanlarını göster</string>
|
||||||
<string name="pref_accents_e_none">Aksanları gizle</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_show_numpad_title">Show NumPad</string> -->
|
||||||
<string name="pref_programming_layout_none">Hiçbiri</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_category_typing">Yazma</string>
|
||||||
<string name="pref_swipe_dist_title">Kaydırma mesafesi</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>
|
<string name="pref_swipe_dist_summary">Tuşların köşelerindeki karakterlerin uzaklıkları (%s)</string>
|
||||||
@@ -21,9 +36,12 @@
|
|||||||
<string name="pref_vibrate_summary">Tuşa basıldığında titreşimi etkinleştir</string>
|
<string name="pref_vibrate_summary">Tuşa basıldığında titreşimi etkinleştir</string>
|
||||||
<string name="pref_precise_repeat_title">İmleç hareketini ayarla</string>
|
<string name="pref_precise_repeat_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_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_category_style">Stil</string>
|
||||||
<string name="pref_margin_bottom_title">Alt boşluk</string>
|
<string name="pref_margin_bottom_title">Alt boşluk</string>
|
||||||
<string name="pref_keyboard_height_title">Klavye yüksekliği</string>
|
<string name="pref_keyboard_height_title">Klavye yüksekliği</string>
|
||||||
|
<!-- <string name="pref_keyboard_height_landscape_title">Keyboard height in landscape mode</string> -->
|
||||||
<string name="pref_horizontal_margin_title">Yatay boşluk</string>
|
<string name="pref_horizontal_margin_title">Yatay boşluk</string>
|
||||||
<string name="pref_character_size_title">Etiket boyutu</string>
|
<string name="pref_character_size_title">Etiket boyutu</string>
|
||||||
<string name="pref_character_size_summary">Klavye üzerinde gösterilecek karakter boyutu (%.2fx)</string>
|
<string name="pref_character_size_summary">Klavye üzerinde gösterilecek karakter boyutu (%.2fx)</string>
|
||||||
@@ -32,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">Koyu</string>
|
<string name="pref_theme_e_dark">Koyu</string>
|
||||||
<string name="pref_theme_e_light">Açık</string>
|
<string name="pref_theme_e_light">Açık</string>
|
||||||
<string name="pref_theme_e_black">Siyah</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_very_short">Çok kısa</string>
|
||||||
<string name="pref_swipe_dist_e_short">Kısa</string>
|
<string name="pref_swipe_dist_e_short">Kısa</string>
|
||||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||||
@@ -39,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Çok uzun</string>
|
<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_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_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_next">İleri</string>
|
||||||
<string name="key_action_done">Bitti</string>
|
<string name="key_action_done">Bitti</string>
|
||||||
<string name="key_action_go">İlerle</string>
|
<string name="key_action_go">İlerle</string>
|
||||||
|
@@ -4,12 +4,29 @@
|
|||||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||||
<string name="settings_activity_label">Unexpected Keyboard 设置</string>
|
<string name="settings_activity_label">Unexpected Keyboard 设置</string>
|
||||||
<string name="pref_category_layout">布局</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_title">改变键盘布局</string>
|
||||||
<string name="pref_layout_e_system">系统设置</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_title">声调</string>
|
||||||
<string name="pref_accents_e_all_installed">显示所有安装的语言的声调符号</string>
|
<string name="pref_accents_e_all_installed">显示所有安装的语言的声调符号</string>
|
||||||
<string name="pref_accents_e_selected">只显示选择的语言的声调符号</string>
|
<string name="pref_accents_e_selected">只显示选择的语言的声调符号</string>
|
||||||
<string name="pref_accents_e_none">隐藏声调符号</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_category_typing">输入</string>
|
||||||
<string name="pref_swipe_dist_title">滑动触发距离</string>
|
<string name="pref_swipe_dist_title">滑动触发距离</string>
|
||||||
<string name="pref_swipe_dist_summary">输入按键四角的符号需要滑动的距离 (%s)</string>
|
<string name="pref_swipe_dist_summary">输入按键四角的符号需要滑动的距离 (%s)</string>
|
||||||
@@ -19,9 +36,12 @@
|
|||||||
<string name="pref_vibrate_summary">启用或者禁用按下按键时振动</string>
|
<string name="pref_vibrate_summary">启用或者禁用按下按键时振动</string>
|
||||||
<string name="pref_precise_repeat_title">精确控制光标移速</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键锁定大写</string>
|
||||||
|
<string name="pref_lock_double_tap_summary">任何时候都可以长按修改键以锁定</string>
|
||||||
<string name="pref_category_style">样式</string>
|
<string name="pref_category_style">样式</string>
|
||||||
<string name="pref_margin_bottom_title">键盘下边距</string>
|
<string name="pref_margin_bottom_title">键盘下边距</string>
|
||||||
<string name="pref_keyboard_height_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_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_character_size_summary">按键上显示的字符的大小 (%.2fx)</string>
|
||||||
@@ -30,6 +50,7 @@
|
|||||||
<string name="pref_theme_e_dark">暗色</string>
|
<string name="pref_theme_e_dark">暗色</string>
|
||||||
<string name="pref_theme_e_light">亮色</string>
|
<string name="pref_theme_e_light">亮色</string>
|
||||||
<string name="pref_theme_e_black">黑色</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_very_short">非常短</string>
|
||||||
<string name="pref_swipe_dist_e_short">短</string>
|
<string name="pref_swipe_dist_e_short">短</string>
|
||||||
<string name="pref_swipe_dist_e_default">中(默认)</string>
|
<string name="pref_swipe_dist_e_default">中(默认)</string>
|
||||||
@@ -37,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">非常长</string>
|
<string name="pref_swipe_dist_e_very_far">非常长</string>
|
||||||
<string name="pref_key_horizontal_space">按键的左右边距</string>
|
<string name="pref_key_horizontal_space">按键的左右边距</string>
|
||||||
<string name="pref_key_vertical_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_next">下一项</string>
|
||||||
<string name="key_action_done">完成</string>
|
<string name="key_action_done">完成</string>
|
||||||
<string name="key_action_go">前往</string>
|
<string name="key_action_go">前往</string>
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string-array name="pref_layout_values">
|
<string-array name="pref_layout_values">
|
||||||
<item>system</item>
|
<item>none</item>
|
||||||
<item>azerty</item>
|
<item>azerty</item>
|
||||||
<item>qwerty</item>
|
<item>qwerty</item>
|
||||||
<item>qwerty_pt</item>
|
<item>qwerty_pt</item>
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
<item>qwerty_sv_se</item>
|
<item>qwerty_sv_se</item>
|
||||||
<item>qwerty_hu</item>
|
<item>qwerty_hu</item>
|
||||||
<item>qwerty_tr</item>
|
<item>qwerty_tr</item>
|
||||||
|
<item>qwerty_pl</item>
|
||||||
<item>ru_jcuken</item>
|
<item>ru_jcuken</item>
|
||||||
<item>qwertz</item>
|
<item>qwertz</item>
|
||||||
<item>qwertz_cs</item>
|
<item>qwertz_cs</item>
|
||||||
@@ -26,9 +27,10 @@
|
|||||||
<item>jcuken_ua</item>
|
<item>jcuken_ua</item>
|
||||||
<item>bangla</item>
|
<item>bangla</item>
|
||||||
<item>hindi</item>
|
<item>hindi</item>
|
||||||
|
<item>custom</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="pref_layout_entries">
|
<string-array name="pref_layout_entries">
|
||||||
<item>@string/pref_layout_e_system</item>
|
<item>None</item>
|
||||||
<item>AZERTY</item>
|
<item>AZERTY</item>
|
||||||
<item>QWERTY</item>
|
<item>QWERTY</item>
|
||||||
<item>QWERTY (Brasileiro)</item>
|
<item>QWERTY (Brasileiro)</item>
|
||||||
@@ -40,6 +42,7 @@
|
|||||||
<item>QWERTY (Swedish)</item>
|
<item>QWERTY (Swedish)</item>
|
||||||
<item>QWERTY (Hungarian)</item>
|
<item>QWERTY (Hungarian)</item>
|
||||||
<item>QWERTY (Türkçe)</item>
|
<item>QWERTY (Türkçe)</item>
|
||||||
|
<item>QWERTY (Polski)</item>
|
||||||
<item>ЙЦУКЕН (Русский)</item>
|
<item>ЙЦУКЕН (Русский)</item>
|
||||||
<item>QWERTZ</item>
|
<item>QWERTZ</item>
|
||||||
<item>QWERTZ (Czech)</item>
|
<item>QWERTZ (Czech)</item>
|
||||||
@@ -53,18 +56,7 @@
|
|||||||
<item>ЙЦУКЕН (Українська)</item>
|
<item>ЙЦУКЕН (Українська)</item>
|
||||||
<item>বাংলা</item>
|
<item>বাংলা</item>
|
||||||
<item>हिन्दी</item>
|
<item>हिन्दी</item>
|
||||||
</string-array>
|
<item>@string/pref_layout_e_custom</item>
|
||||||
<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>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="pref_accents_entries">
|
<string-array name="pref_accents_entries">
|
||||||
<item>@string/pref_accents_e_all_installed</item>
|
<item>@string/pref_accents_e_all_installed</item>
|
||||||
@@ -81,6 +73,14 @@
|
|||||||
<item>@string/pref_show_numpad_landscape</item>
|
<item>@string/pref_show_numpad_landscape</item>
|
||||||
<item>@string/pref_show_numpad_always</item>
|
<item>@string/pref_show_numpad_always</item>
|
||||||
</string-array>
|
</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">
|
<string-array name="pref_accents_values">
|
||||||
<item>1</item>
|
<item>1</item>
|
||||||
<item>2</item>
|
<item>2</item>
|
||||||
|
@@ -3,4 +3,7 @@
|
|||||||
<declare-styleable name="ExtraKeyCheckBoxPreference">
|
<declare-styleable name="ExtraKeyCheckBoxPreference">
|
||||||
<attr name="index" format="integer"/>
|
<attr name="index" format="integer"/>
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
<declare-styleable name="LayoutListPreference">
|
||||||
|
<attr name="defaultString" format="string"/>
|
||||||
|
</declare-styleable>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -4,8 +4,13 @@
|
|||||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||||
<string name="settings_activity_label">Unexpected Keyboard Settings</string>
|
<string name="settings_activity_label">Unexpected Keyboard Settings</string>
|
||||||
<string name="pref_category_layout">Layout</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_title">Change keyboard layout</string>
|
||||||
<string name="pref_layout_e_system">System settings</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_title">Accents</string>
|
||||||
<string name="pref_accents_e_all_installed">Show accents for all installed languages</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>
|
<string name="pref_accents_e_selected">Only show accents for the selected language</string>
|
||||||
@@ -14,11 +19,14 @@
|
|||||||
<string name="pref_show_numpad_never">Never</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_landscape">Only in landscape mode</string>
|
||||||
<string name="pref_show_numpad_always">Always</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_title">Automatic capitalisation</string>
|
||||||
<string name="pref_autocapitalisation_summary">Press Shift at the beginning of a sentence</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_extra_keys_title">Add keys to the keyboard</string>
|
||||||
<string name="pref_programming_layout_title">Keyboard layout for programming</string>
|
<string name="pref_second_layout_title">Secondary layout</string>
|
||||||
<string name="pref_programming_layout_none">None</string>
|
<string name="pref_second_layout_none">None</string>
|
||||||
<string name="pref_category_typing">Typing</string>
|
<string name="pref_category_typing">Typing</string>
|
||||||
<string name="pref_swipe_dist_title">Swiping distance</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>
|
<string name="pref_swipe_dist_summary">Distance of characters in the corners of the keys (%s)</string>
|
||||||
@@ -50,6 +58,9 @@
|
|||||||
<string name="pref_swipe_dist_e_very_far">Very far</string>
|
<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_horizontal_space">Horizontal spacing between the keys</string>
|
||||||
<string name="pref_key_vertical_space">Vertical 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_next">Next</string>
|
||||||
<string name="key_action_done">Done</string>
|
<string name="key_action_done">Done</string>
|
||||||
<string name="key_action_go">Go</string>
|
<string name="key_action_go">Go</string>
|
||||||
|
@@ -17,8 +17,10 @@
|
|||||||
<item name="android:textColor">?attr/emoji_key_text</item>
|
<item name="android:textColor">?attr/emoji_key_text</item>
|
||||||
<item name="android:textSize">18dp</item>
|
<item name="android:textSize">18dp</item>
|
||||||
</style>
|
</style>
|
||||||
<!-- Passed to TextView.setTextAppearance -->
|
|
||||||
<style name="emojiGridButton">
|
<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:textSize">@dimen/emoji_text_size</item>
|
||||||
<item name="android:textColor">?attr/emoji_color</item>
|
<item name="android:textColor">?attr/emoji_color</item>
|
||||||
</style>
|
</style>
|
||||||
|
@@ -11,10 +11,17 @@
|
|||||||
<attr name="colorLabel" format="color"/>
|
<attr name="colorLabel" format="color"/>
|
||||||
<attr name="colorLabelActivated" format="color"/>
|
<attr name="colorLabelActivated" format="color"/>
|
||||||
<attr name="colorLabelLocked" format="color"/>
|
<attr name="colorLabelLocked" format="color"/>
|
||||||
|
<attr name="secondaryLightOffset" format="float"/>
|
||||||
<!-- Corner labels -->
|
<!-- Corner labels -->
|
||||||
<attr name="colorSubLabel" format="color"/>
|
<attr name="colorSubLabel" format="color"/>
|
||||||
<!-- Dimens -->
|
<!-- Borders -->
|
||||||
<attr name="keyBorderRadius" format="dimension"/>
|
<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 -->
|
<!-- Emoji panel -->
|
||||||
<attr name="emoji_button_bg" type="color" format="color"/>
|
<attr name="emoji_button_bg" type="color" format="color"/>
|
||||||
<attr name="emoji_color" type="color" format="color"/>
|
<attr name="emoji_color" type="color" format="color"/>
|
||||||
@@ -29,6 +36,8 @@
|
|||||||
<item name="navigationBarColor">?attr/colorKeyboard</item>
|
<item name="navigationBarColor">?attr/colorKeyboard</item>
|
||||||
<item name="windowLightNavigationBar">?attr/android:isLightTheme</item>
|
<item name="windowLightNavigationBar">?attr/android:isLightTheme</item>
|
||||||
<item name="keyBorderRadius">5dp</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_bg" type="color">?attr/emoji_button_bg</item>
|
||||||
<item name="emoji_key_text" type="color">?attr/colorLabel</item>
|
<item name="emoji_key_text" type="color">?attr/colorLabel</item>
|
||||||
</style>
|
</style>
|
||||||
@@ -37,10 +46,14 @@
|
|||||||
<item name="colorKeyboard">#1b1b1b</item>
|
<item name="colorKeyboard">#1b1b1b</item>
|
||||||
<item name="colorKey">#333333</item>
|
<item name="colorKey">#333333</item>
|
||||||
<item name="colorKeyActivated">#1b1b1b</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="colorLabel">#ffffff</item>
|
||||||
<item name="colorLabelActivated">#3399ff</item>
|
<item name="colorLabelActivated">#3399ff</item>
|
||||||
<item name="colorLabelLocked">#33cc33</item>
|
<item name="colorLabelLocked">#33cc33</item>
|
||||||
<item name="colorSubLabel">#cccccc</item>
|
<item name="colorSubLabel">#cccccc</item>
|
||||||
|
<item name="secondaryLightOffset">-0.2</item>
|
||||||
<item name="emoji_button_bg" type="color">#202020</item>
|
<item name="emoji_button_bg" type="color">#202020</item>
|
||||||
<item name="emoji_color" type="color">#ffffff</item>
|
<item name="emoji_color" type="color">#ffffff</item>
|
||||||
</style>
|
</style>
|
||||||
@@ -49,10 +62,17 @@
|
|||||||
<item name="colorKeyboard">#e3e3e3</item>
|
<item name="colorKeyboard">#e3e3e3</item>
|
||||||
<item name="colorKey">#cccccc</item>
|
<item name="colorKey">#cccccc</item>
|
||||||
<item name="colorKeyActivated">#e3e3e3</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="colorLabel">#000000</item>
|
||||||
<item name="colorLabelActivated">#0066cc</item>
|
<item name="colorLabelActivated">#0066cc</item>
|
||||||
<item name="colorLabelLocked">#33cc33</item>
|
<item name="colorLabelLocked">#33cc33</item>
|
||||||
<item name="colorSubLabel">#333333</item>
|
<item name="colorSubLabel">#333333</item>
|
||||||
|
<item name="secondaryLightOffset">+0.3</item>
|
||||||
<item name="emoji_button_bg">#dedede</item>
|
<item name="emoji_button_bg">#dedede</item>
|
||||||
<item name="emoji_color">#000000</item>
|
<item name="emoji_color">#000000</item>
|
||||||
</style>
|
</style>
|
||||||
@@ -61,10 +81,17 @@
|
|||||||
<item name="colorKeyboard">#000000</item>
|
<item name="colorKeyboard">#000000</item>
|
||||||
<item name="colorKey">#000000</item>
|
<item name="colorKey">#000000</item>
|
||||||
<item name="colorKeyActivated">#333333</item>
|
<item name="colorKeyActivated">#333333</item>
|
||||||
|
<item name="keyBorderWidth">1dp</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="colorLabel">#eeeeee</item>
|
||||||
<item name="colorLabelActivated">#009dff</item>
|
<item name="colorLabelActivated">#009dff</item>
|
||||||
<item name="colorLabelLocked">#00ff26</item>
|
<item name="colorLabelLocked">#00ff26</item>
|
||||||
<item name="colorSubLabel">#bbbbbb</item>
|
<item name="colorSubLabel">#bbbbbb</item>
|
||||||
|
<item name="secondaryLightOffset">-0.25</item>
|
||||||
<item name="keyBorderRadius">1dp</item>
|
<item name="keyBorderRadius">1dp</item>
|
||||||
<item name="emoji_button_bg">#000000</item>
|
<item name="emoji_button_bg">#000000</item>
|
||||||
<item name="emoji_color">#ffffff</item>
|
<item name="emoji_color">#ffffff</item>
|
||||||
@@ -73,11 +100,18 @@
|
|||||||
<item name="android:isLightTheme">true</item>
|
<item name="android:isLightTheme">true</item>
|
||||||
<item name="colorKeyboard">#ffffff</item>
|
<item name="colorKeyboard">#ffffff</item>
|
||||||
<item name="colorKey">#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="colorLabel">#000000</item>
|
||||||
<item name="colorLabelActivated">#0066cc</item>
|
<item name="colorLabelActivated">#0066cc</item>
|
||||||
<item name="colorLabelLocked">#33cc33</item>
|
<item name="colorLabelLocked">#33cc33</item>
|
||||||
<item name="colorSubLabel">#333333</item>
|
<item name="colorSubLabel">#333333</item>
|
||||||
|
<item name="secondaryLightOffset">+0.35</item>
|
||||||
<item name="emoji_button_bg">#ffffff</item>
|
<item name="emoji_button_bg">#ffffff</item>
|
||||||
<item name="emoji_color">#000000</item>
|
<item name="emoji_color">#000000</item>
|
||||||
</style>
|
</style>
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
<row height="0.95">
|
<row height="0.95">
|
||||||
<key width="1.8" key0="ctrl" key2="loc meta" key4="switch_numeric"/>
|
<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="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.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||||
<key width="1.8" key0="enter" key3="action"/>
|
<key width="1.8" key0="enter" key3="action"/>
|
||||||
</row>
|
</row>
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
<row height="0.95">
|
<row height="0.95">
|
||||||
<key width="1.8" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key4="switch_numeric"/>
|
<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="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.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||||
<key width="1.8" key0="enter" key2="action"/>
|
<key width="1.8" key0="enter" key2="action"/>
|
||||||
</row>
|
</row>
|
||||||
|
@@ -41,7 +41,7 @@
|
|||||||
<row height="0.95">
|
<row height="0.95">
|
||||||
<key width="1.8" key0="ctrl" key2="loc meta" key4="switch_numeric"/>
|
<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="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.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||||
<key key0="j" key4=";"/>
|
<key key0="j" key4=";"/>
|
||||||
<key width="1.8" key0="enter" key2="action"/>
|
<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>
|
@@ -1,10 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?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">
|
<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">
|
<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="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="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">
|
<PreferenceScreen android:title="@string/pref_extra_keys_title">
|
||||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="0"/>
|
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="0"/>
|
||||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="1"/>
|
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="1"/>
|
||||||
@@ -28,7 +28,12 @@
|
|||||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="19"/>
|
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="19"/>
|
||||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="20"/>
|
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="20"/>
|
||||||
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="21"/>
|
<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"/>
|
||||||
</PreferenceScreen>
|
</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>
|
||||||
<PreferenceCategory android:title="@string/pref_category_typing">
|
<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"/>
|
<CheckBoxPreference android:key="autocapitalisation" android:title="@string/pref_autocapitalisation_title" android:summary="@string/pref_autocapitalisation_summary" android:defaultValue="true"/>
|
||||||
@@ -41,12 +46,19 @@
|
|||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/pref_category_style">
|
<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"/>
|
<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="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"/>
|
||||||
<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="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" android:title="@string/pref_keyboard_height_title" android:summary="%s%%" android:defaultValue="35" min="10" 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="keyboard_height_landscape" android:title="@string/pref_keyboard_height_landscape_title" android:summary="%s%%" android:defaultValue="50" min="20" 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="horizontal_margin" android:title="@string/pref_horizontal_margin_title" android:summary="%sdp" android:defaultValue="3" min="0" max="20"/>
|
||||||
<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.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_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"/>
|
<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>
|
||||||
|
<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>
|
</PreferenceScreen>
|
||||||
|
@@ -59,12 +59,6 @@ final class Autocapitalisation
|
|||||||
callback(false);
|
callback(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void typed(char c)
|
|
||||||
{
|
|
||||||
type_one_char(c);
|
|
||||||
callback(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void event_sent(int code, int meta)
|
public void event_sent(int code, int meta)
|
||||||
{
|
{
|
||||||
if (meta != 0)
|
if (meta != 0)
|
||||||
|
@@ -1,20 +1,19 @@
|
|||||||
package juloo.keyboard2;
|
package juloo.keyboard2;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.content.res.Configuration;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
final class Config
|
final class Config
|
||||||
{
|
{
|
||||||
|
private final SharedPreferences _prefs;
|
||||||
|
|
||||||
// From resources
|
// From resources
|
||||||
public final float marginTop;
|
public final float marginTop;
|
||||||
public final float keyPadding;
|
public final float keyPadding;
|
||||||
@@ -23,9 +22,12 @@ final class Config
|
|||||||
public final float sublabelTextSize;
|
public final float sublabelTextSize;
|
||||||
|
|
||||||
// From preferences
|
// From preferences
|
||||||
public int layout; // Or '-1' for the system defaults
|
public KeyboardData layout; // Or 'null' for the system defaults
|
||||||
public int programming_layout; // Or '-1' for none
|
public KeyboardData second_layout; // Or 'null' for none
|
||||||
|
public KeyboardData custom_layout; // Might be 'null'
|
||||||
public boolean show_numpad = false;
|
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 float swipe_dist_px;
|
||||||
public boolean vibrateEnabled;
|
public boolean vibrateEnabled;
|
||||||
public long longPressTimeout;
|
public long longPressTimeout;
|
||||||
@@ -35,6 +37,10 @@ final class Config
|
|||||||
public float horizontalMargin;
|
public float horizontalMargin;
|
||||||
public float keyVerticalInterval;
|
public float keyVerticalInterval;
|
||||||
public float keyHorizontalInterval;
|
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 preciseRepeat;
|
||||||
public boolean double_tap_lock_shift;
|
public boolean double_tap_lock_shift;
|
||||||
public float characterSize; // Ratio
|
public float characterSize; // Ratio
|
||||||
@@ -44,7 +50,7 @@ final class Config
|
|||||||
|
|
||||||
// Dynamically set
|
// Dynamically set
|
||||||
public boolean shouldOfferSwitchingToNextInputMethod;
|
public boolean shouldOfferSwitchingToNextInputMethod;
|
||||||
public boolean shouldOfferSwitchingToProgramming;
|
public boolean shouldOfferSwitchingToSecond;
|
||||||
public String actionLabel; // Might be 'null'
|
public String actionLabel; // Might be 'null'
|
||||||
public int actionId; // Meaningful only when 'actionLabel' isn't 'null'
|
public int actionId; // Meaningful only when 'actionLabel' isn't 'null'
|
||||||
public boolean swapEnterActionKey; // Swap the "enter" and "action" keys
|
public boolean swapEnterActionKey; // Swap the "enter" and "action" keys
|
||||||
@@ -53,17 +59,18 @@ final class Config
|
|||||||
|
|
||||||
public final IKeyEventHandler handler;
|
public final IKeyEventHandler handler;
|
||||||
|
|
||||||
private Config(Context context, IKeyEventHandler h)
|
private Config(SharedPreferences prefs, Resources res, IKeyEventHandler h)
|
||||||
{
|
{
|
||||||
Resources res = context.getResources();
|
_prefs = prefs;
|
||||||
// static values
|
// static values
|
||||||
marginTop = res.getDimension(R.dimen.margin_top);
|
marginTop = res.getDimension(R.dimen.margin_top);
|
||||||
keyPadding = res.getDimension(R.dimen.key_padding);
|
keyPadding = res.getDimension(R.dimen.key_padding);
|
||||||
labelTextSize = 0.33f;
|
labelTextSize = 0.33f;
|
||||||
sublabelTextSize = 0.22f;
|
sublabelTextSize = 0.22f;
|
||||||
// default values
|
// default values
|
||||||
layout = -1;
|
layout = null;
|
||||||
programming_layout = -1;
|
second_layout = null;
|
||||||
|
custom_layout = null;
|
||||||
vibrateEnabled = true;
|
vibrateEnabled = true;
|
||||||
longPressTimeout = 600;
|
longPressTimeout = 600;
|
||||||
longPressInterval = 65;
|
longPressInterval = 65;
|
||||||
@@ -76,10 +83,10 @@ final class Config
|
|||||||
characterSize = 1.f;
|
characterSize = 1.f;
|
||||||
accents = 1;
|
accents = 1;
|
||||||
// from prefs
|
// from prefs
|
||||||
refresh(context);
|
refresh(res);
|
||||||
// initialized later
|
// initialized later
|
||||||
shouldOfferSwitchingToNextInputMethod = false;
|
shouldOfferSwitchingToNextInputMethod = false;
|
||||||
shouldOfferSwitchingToProgramming = false;
|
shouldOfferSwitchingToSecond = false;
|
||||||
actionLabel = null;
|
actionLabel = null;
|
||||||
actionId = 0;
|
actionId = 0;
|
||||||
swapEnterActionKey = false;
|
swapEnterActionKey = false;
|
||||||
@@ -90,10 +97,8 @@ final class Config
|
|||||||
/*
|
/*
|
||||||
** Reload prefs
|
** Reload prefs
|
||||||
*/
|
*/
|
||||||
public void refresh(Context context)
|
public void refresh(Resources res)
|
||||||
{
|
{
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
||||||
Resources res = context.getResources();
|
|
||||||
DisplayMetrics dm = res.getDisplayMetrics();
|
DisplayMetrics dm = res.getDisplayMetrics();
|
||||||
// The height of the keyboard is relative to the height of the screen.
|
// 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.
|
// This is the height of the keyboard if it have 4 rows.
|
||||||
@@ -101,52 +106,61 @@ final class Config
|
|||||||
// Scale some dimensions depending on orientation
|
// Scale some dimensions depending on orientation
|
||||||
float horizontalIntervalScale = 1.f;
|
float horizontalIntervalScale = 1.f;
|
||||||
float characterSizeScale = 1.f;
|
float characterSizeScale = 1.f;
|
||||||
String show_numpad_s = prefs.getString("show_numpad", "never");
|
String show_numpad_s = _prefs.getString("show_numpad", "never");
|
||||||
show_numpad = "always".equals(show_numpad_s);
|
show_numpad = "always".equals(show_numpad_s);
|
||||||
if (res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) // Landscape mode
|
if (res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) // Landscape mode
|
||||||
{
|
{
|
||||||
if ("landscape".equals(show_numpad_s))
|
if ("landscape".equals(show_numpad_s))
|
||||||
show_numpad = true;
|
show_numpad = true;
|
||||||
keyboardHeightPercent = prefs.getInt("keyboard_height_landscape", 50);
|
keyboardHeightPercent = _prefs.getInt("keyboard_height_landscape", 50);
|
||||||
horizontalIntervalScale = 2.f;
|
horizontalIntervalScale = 2.f;
|
||||||
characterSizeScale = 1.25f;
|
characterSizeScale = 1.25f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
keyboardHeightPercent = prefs.getInt("keyboard_height", 35);
|
keyboardHeightPercent = _prefs.getInt("keyboard_height", 35);
|
||||||
}
|
}
|
||||||
String layout_s = prefs.getString("layout", "system");
|
layout = layout_of_string(res, _prefs.getString("layout", "none"));
|
||||||
layout = layout_s.equals("system") ? -1 : layoutId_of_string(layout_s);
|
second_layout = layout_of_string(res, _prefs.getString("second_layout", "none"));
|
||||||
String prog_layout_s = prefs.getString("programming_layout", "none");
|
custom_layout = KeyboardData.load_string(_prefs.getString("custom_layout", ""));
|
||||||
programming_layout = prog_layout_s.equals("none") ? -1 : layoutId_of_string(prog_layout_s);
|
inverse_numpad = _prefs.getString("numpad_layout", "default").equals("low_first");
|
||||||
// The swipe distance is defined relatively to the "exact physical pixels
|
// The baseline for the swipe distance correspond to approximately the
|
||||||
// per inch of the screen", which isn't affected by the scaling settings.
|
// width of a key in portrait mode, as most layouts have 10 columns.
|
||||||
// Take the mean of both dimensions as an approximation of the diagonal.
|
// Multipled by the DPI ratio because most swipes are made in the diagonals.
|
||||||
float physical_scaling = (dm.widthPixels + dm.heightPixels) / (dm.xdpi + dm.ydpi);
|
// The option value uses an unnamed scale where the baseline is around 25.
|
||||||
swipe_dist_px = Float.valueOf(prefs.getString("swipe_dist", "15")) * physical_scaling;;
|
float dpi_ratio = Math.max(dm.xdpi, dm.ydpi) / Math.min(dm.xdpi, dm.ydpi);
|
||||||
vibrateEnabled = prefs.getBoolean("vibrate_enabled", vibrateEnabled);
|
float swipe_scaling = Math.min(dm.widthPixels, dm.heightPixels) / 10.f * dpi_ratio;
|
||||||
longPressTimeout = prefs.getInt("longpress_timeout", (int)longPressTimeout);
|
float swipe_dist_value = Float.valueOf(_prefs.getString("swipe_dist", "15"));
|
||||||
longPressInterval = prefs.getInt("longpress_interval", (int)longPressInterval);
|
swipe_dist_px = swipe_dist_value / 25.f * swipe_scaling;
|
||||||
marginBottom = getDipPref(dm, prefs, "margin_bottom", marginBottom);
|
vibrateEnabled = _prefs.getBoolean("vibrate_enabled", vibrateEnabled);
|
||||||
keyVerticalInterval = getDipPref(dm, prefs, "key_vertical_space", keyVerticalInterval);
|
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);
|
||||||
keyHorizontalInterval =
|
keyHorizontalInterval =
|
||||||
getDipPref(dm, prefs, "key_horizontal_space", keyHorizontalInterval)
|
getDipPref(dm, _prefs, "key_horizontal_space", keyHorizontalInterval)
|
||||||
* horizontalIntervalScale;
|
* 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
|
// Do not substract keyVerticalInterval from keyHeight because this is done
|
||||||
// during rendered.
|
// during rendered.
|
||||||
keyHeight = dm.heightPixels * keyboardHeightPercent / 100 / 4;
|
keyHeight = dm.heightPixels * keyboardHeightPercent / 100 / 4;
|
||||||
horizontalMargin =
|
horizontalMargin =
|
||||||
getDipPref(dm, prefs, "horizontal_margin", horizontalMargin)
|
getDipPref(dm, _prefs, "horizontal_margin", horizontalMargin)
|
||||||
+ res.getDimension(R.dimen.extra_horizontal_margin);
|
+ res.getDimension(R.dimen.extra_horizontal_margin);
|
||||||
preciseRepeat = prefs.getBoolean("precise_repeat", preciseRepeat);
|
preciseRepeat = _prefs.getBoolean("precise_repeat", preciseRepeat);
|
||||||
double_tap_lock_shift = prefs.getBoolean("lock_double_tap", false);
|
double_tap_lock_shift = _prefs.getBoolean("lock_double_tap", false);
|
||||||
characterSize =
|
characterSize =
|
||||||
prefs.getFloat("character_size", characterSize)
|
_prefs.getFloat("character_size", characterSize)
|
||||||
* characterSizeScale;
|
* characterSizeScale;
|
||||||
accents = Integer.valueOf(prefs.getString("accents", "1"));
|
accents = Integer.valueOf(_prefs.getString("accents", "1"));
|
||||||
theme = getThemeId(res, prefs.getString("theme", ""));
|
theme = getThemeId(res, _prefs.getString("theme", ""));
|
||||||
autocapitalisation = prefs.getBoolean("autocapitalisation", true);
|
autocapitalisation = _prefs.getBoolean("autocapitalisation", true);
|
||||||
extra_keys_param = ExtraKeyCheckBoxPreference.get_extra_keys(prefs);
|
extra_keys_param = ExtraKeyCheckBoxPreference.get_extra_keys(_prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Update the layout according to the configuration.
|
/** Update the layout according to the configuration.
|
||||||
@@ -155,7 +169,7 @@ final class Config
|
|||||||
* - Replace the action key to show the right label
|
* - Replace the action key to show the right label
|
||||||
* - Swap the enter and action keys
|
* - 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
|
// Update the name to avoid caching in KeyModifier
|
||||||
final KeyValue action_key = (actionLabel == null) ? null :
|
final KeyValue action_key = (actionLabel == null) ? null :
|
||||||
@@ -165,7 +179,28 @@ final class Config
|
|||||||
final Set<KeyValue> extra_keys = new HashSet<KeyValue>();
|
final Set<KeyValue> extra_keys = new HashSet<KeyValue>();
|
||||||
extra_keys.addAll(extra_keys_subtype);
|
extra_keys.addAll(extra_keys_subtype);
|
||||||
extra_keys.addAll(extra_keys_param);
|
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)
|
public KeyValue apply(KeyValue key, boolean localized)
|
||||||
{
|
{
|
||||||
boolean is_extra_key = extra_keys.contains(key);
|
boolean is_extra_key = extra_keys.contains(key);
|
||||||
@@ -183,8 +218,8 @@ final class Config
|
|||||||
case ACTION:
|
case ACTION:
|
||||||
return (swapEnterActionKey && action_key != null) ?
|
return (swapEnterActionKey && action_key != null) ?
|
||||||
KeyValue.getKeyByName("enter") : action_key;
|
KeyValue.getKeyByName("enter") : action_key;
|
||||||
case SWITCH_PROGRAMMING:
|
case SWITCH_SECOND:
|
||||||
return shouldOfferSwitchingToProgramming ? key : null;
|
return shouldOfferSwitchingToSecond ? key : null;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Keyevent:
|
case Keyevent:
|
||||||
@@ -208,8 +243,6 @@ final class Config
|
|||||||
});
|
});
|
||||||
if (extra_keys.size() > 0)
|
if (extra_keys.size() > 0)
|
||||||
kw = kw.addExtraKeys(extra_keys.iterator());
|
kw = kw.addExtraKeys(extra_keys.iterator());
|
||||||
if (original_kw.num_pad && show_numpad)
|
|
||||||
kw = kw.addNumPad();
|
|
||||||
return kw;
|
return kw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,43 +276,62 @@ 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)
|
switch (name)
|
||||||
{
|
{
|
||||||
case "azerty": return R.xml.azerty;
|
case "system": case "none": return null;
|
||||||
case "bangla": return R.xml.bangla;
|
case "custom": if (custom_layout != null) return custom_layout; break;
|
||||||
case "bgph1": return R.xml.local_bgph1;
|
case "azerty": id = R.xml.azerty; break;
|
||||||
case "bone": return R.xml.bone;
|
case "bangla": id = R.xml.bangla; break;
|
||||||
case "colemak": return R.xml.colemak;
|
case "bgph1": id = R.xml.local_bgph1; break;
|
||||||
case "dvorak": return R.xml.dvorak;
|
case "bone": id = R.xml.bone; break;
|
||||||
case "hindi": return R.xml.hindi;
|
case "colemak": id = R.xml.colemak; break;
|
||||||
case "jcuken_ua": return R.xml.jcuken_ua;
|
case "dvorak": id = R.xml.dvorak; break;
|
||||||
case "neo2": return R.xml.neo2;
|
case "hindi": id = R.xml.hindi; break;
|
||||||
case "qwerty": return R.xml.qwerty;
|
case "jcuken_ua": id = R.xml.jcuken_ua; break;
|
||||||
case "qwerty_el": return R.xml.qwerty_el;
|
case "neo2": id = R.xml.neo2; break;
|
||||||
case "qwerty_es": return R.xml.qwerty_es;
|
case "qwerty": id = R.xml.qwerty; break;
|
||||||
case "qwerty_hu": return R.xml.qwerty_hu;
|
case "qwerty_el": id = R.xml.qwerty_el; break;
|
||||||
case "qwerty_ko": return R.xml.qwerty_ko;
|
case "qwerty_es": id = R.xml.qwerty_es; break;
|
||||||
case "qwerty_lv": return R.xml.qwerty_lv;
|
case "qwerty_hu": id = R.xml.qwerty_hu; break;
|
||||||
case "qwerty_no": return R.xml.qwerty_no;
|
case "qwerty_ko": id = R.xml.qwerty_ko; break;
|
||||||
case "qwerty_pt": return R.xml.qwerty_pt;
|
case "qwerty_lv": id = R.xml.qwerty_lv; break;
|
||||||
case "qwerty_sv_se": return R.xml.qwerty_sv_se;
|
case "qwerty_no": id = R.xml.qwerty_no; break;
|
||||||
case "qwerty_tr": return R.xml.qwerty_tr;
|
case "qwerty_pt": id = R.xml.qwerty_pt; break;
|
||||||
case "qwertz": return R.xml.qwertz;
|
case "qwerty_sv_se": id = R.xml.qwerty_sv_se; break;
|
||||||
case "qwertz_cs": return R.xml.qwertz_cs;
|
case "qwerty_tr": id = R.xml.qwerty_tr; break;
|
||||||
case "qwertz_de": return R.xml.qwertz_de;
|
case "qwerty_pl": id = R.xml.qwerty_pl; break;
|
||||||
case "qwertz_hu": return R.xml.qwertz_hu;
|
case "qwertz": id = R.xml.qwertz; break;
|
||||||
case "ru_jcuken": return R.xml.local_ru_jcuken;
|
case "qwertz_cs": id = R.xml.qwertz_cs; break;
|
||||||
default: return R.xml.qwerty; // The config might store an invalid layout, don't crash
|
case "qwertz_de": id = R.xml.qwertz_de; break;
|
||||||
|
case "qwertz_hu": id = R.xml.qwertz_hu; 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Config _globalConfig = null;
|
private static Config _globalConfig = null;
|
||||||
|
|
||||||
public static void initGlobalConfig(Context context, IKeyEventHandler handler)
|
public static void initGlobalConfig(SharedPreferences prefs, Resources res,
|
||||||
|
IKeyEventHandler handler)
|
||||||
{
|
{
|
||||||
_globalConfig = new Config(context, handler);
|
_globalConfig = new Config(prefs, res, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Config globalConfig()
|
public static Config globalConfig()
|
||||||
@@ -289,6 +341,6 @@ final class Config
|
|||||||
|
|
||||||
public static interface IKeyEventHandler
|
public static interface IKeyEventHandler
|
||||||
{
|
{
|
||||||
public void handleKeyUp(KeyValue value, Pointers.Modifiers flags);
|
public void key_up(KeyValue value, Pointers.Modifiers flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
86
srcs/juloo.keyboard2/DirectBootAwarePreferences.java
Normal file
86
srcs/juloo.keyboard2/DirectBootAwarePreferences.java
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
package juloo.keyboard2;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Build.VERSION;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public final class DirectBootAwarePreferences
|
||||||
|
{
|
||||||
|
/* On API >= 24, preferences are read from the device protected storage. This
|
||||||
|
* storage is less protected than the default, no personnal or sensitive
|
||||||
|
* information is stored there (only the keyboard settings). This storage is
|
||||||
|
* accessible during boot and allow the keyboard to read its settings and
|
||||||
|
* allow typing the storage password. */
|
||||||
|
public static SharedPreferences get_shared_preferences(Context context)
|
||||||
|
{
|
||||||
|
if (VERSION.SDK_INT < 24)
|
||||||
|
return PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
SharedPreferences prefs = get_protected_prefs(context);
|
||||||
|
check_need_migration(context, prefs);
|
||||||
|
return prefs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy shared preferences to device protected storage. Not using
|
||||||
|
* [Context.moveSharedPreferencesFrom] because the settings activity still
|
||||||
|
* use [PreferenceActivity], which can't work on a non-default shared
|
||||||
|
* preference file. */
|
||||||
|
public static void copy_preferences_to_protected_storage(Context context,
|
||||||
|
SharedPreferences src)
|
||||||
|
{
|
||||||
|
if (VERSION.SDK_INT >= 24)
|
||||||
|
copy_shared_preferences(src, get_protected_prefs(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
static SharedPreferences get_protected_prefs(Context context)
|
||||||
|
{
|
||||||
|
String pref_name =
|
||||||
|
PreferenceManager.getDefaultSharedPreferencesName(context);
|
||||||
|
return context.createDeviceProtectedStorageContext()
|
||||||
|
.getSharedPreferences(pref_name, Context.MODE_PRIVATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void check_need_migration(Context app_context,
|
||||||
|
SharedPreferences protected_prefs)
|
||||||
|
{
|
||||||
|
if (!protected_prefs.getBoolean("need_migration", true))
|
||||||
|
return;
|
||||||
|
SharedPreferences prefs;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
prefs = PreferenceManager.getDefaultSharedPreferences(app_context);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
// Device is locked, migrate later.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
prefs.edit().putBoolean("need_migration", false).commit();
|
||||||
|
copy_shared_preferences(prefs, protected_prefs);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void copy_shared_preferences(SharedPreferences src, SharedPreferences dst)
|
||||||
|
{
|
||||||
|
SharedPreferences.Editor e = dst.edit();
|
||||||
|
Map<String, ?> entries = src.getAll();
|
||||||
|
for (String k : entries.keySet())
|
||||||
|
{
|
||||||
|
Object v = entries.get(k);
|
||||||
|
if (v instanceof Boolean)
|
||||||
|
e.putBoolean(k, (Boolean)v);
|
||||||
|
else if (v instanceof Float)
|
||||||
|
e.putFloat(k, (Float)v);
|
||||||
|
else if (v instanceof Integer)
|
||||||
|
e.putInt(k, (Integer)v);
|
||||||
|
else if (v instanceof Long)
|
||||||
|
e.putLong(k, (Long)v);
|
||||||
|
else if (v instanceof String)
|
||||||
|
e.putString(k, (String)v);
|
||||||
|
else if (v instanceof Set)
|
||||||
|
e.putStringSet(k, (Set<String>)v);
|
||||||
|
}
|
||||||
|
e.commit();
|
||||||
|
}
|
||||||
|
}
|
@@ -19,7 +19,7 @@ public class Emoji
|
|||||||
protected Emoji(String name, String bytecode, String desc)
|
protected Emoji(String name, String bytecode, String desc)
|
||||||
{
|
{
|
||||||
_name = name;
|
_name = name;
|
||||||
_kv = new KeyValue(bytecode, KeyValue.KIND_STRING, 0, 0);
|
_kv = new KeyValue(bytecode, KeyValue.Kind.String, 0, 0);
|
||||||
_desc = desc;
|
_desc = desc;
|
||||||
emojis_by_name.put(name, this);
|
emojis_by_name.put(name, this);
|
||||||
}
|
}
|
||||||
|
@@ -2,10 +2,8 @@ package juloo.keyboard2;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.graphics.Typeface;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.Gravity;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
@@ -15,16 +13,14 @@ import android.widget.TextView;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class EmojiGridView extends GridView
|
public class EmojiGridView extends GridView
|
||||||
implements GridView.OnItemClickListener
|
implements GridView.OnItemClickListener
|
||||||
{
|
{
|
||||||
public static final int GROUP_LAST_USE = -1;
|
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 static final String LAST_USE_PREF = "emoji_last_use";
|
||||||
|
|
||||||
private Emoji[] _emojiArray;
|
private Emoji[] _emojiArray;
|
||||||
@@ -39,7 +35,6 @@ public class EmojiGridView extends GridView
|
|||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
Emoji.init(context.getResources());
|
Emoji.init(context.getResources());
|
||||||
setOnItemClickListener(this);
|
setOnItemClickListener(this);
|
||||||
setColumnWidth(COLUMN_WIDTH);
|
|
||||||
loadLastUsed();
|
loadLastUsed();
|
||||||
setEmojiGroup((_lastUsed.size() == 0) ? 0 : GROUP_LAST_USE);
|
setEmojiGroup((_lastUsed.size() == 0) ? 0 : GROUP_LAST_USE);
|
||||||
}
|
}
|
||||||
@@ -55,17 +50,10 @@ public class EmojiGridView extends GridView
|
|||||||
Config config = Config.globalConfig();
|
Config config = Config.globalConfig();
|
||||||
Integer used = _lastUsed.get(_emojiArray[pos]);
|
Integer used = _lastUsed.get(_emojiArray[pos]);
|
||||||
_lastUsed.put(_emojiArray[pos], (used == null) ? 1 : used.intValue() + 1);
|
_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
|
saveLastUsed(); // TODO: opti
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onMeasure(int wSpec, int hSpec)
|
|
||||||
{
|
|
||||||
super.onMeasure(wSpec, hSpec);
|
|
||||||
setNumColumns(getMeasuredWidth() / COLUMN_WIDTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Emoji[] getLastEmojis()
|
private Emoji[] getLastEmojis()
|
||||||
{
|
{
|
||||||
final HashMap<Emoji, Integer> map = _lastUsed;
|
final HashMap<Emoji, Integer> map = _lastUsed;
|
||||||
@@ -84,9 +72,10 @@ public class EmojiGridView extends GridView
|
|||||||
|
|
||||||
private void saveLastUsed()
|
private void saveLastUsed()
|
||||||
{
|
{
|
||||||
SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(getContext()).edit();
|
SharedPreferences.Editor edit;
|
||||||
|
try { edit = emojiSharedPreferences().edit(); }
|
||||||
|
catch (Exception _e) { return; }
|
||||||
HashSet<String> set = new HashSet<String>();
|
HashSet<String> set = new HashSet<String>();
|
||||||
|
|
||||||
for (Emoji emoji : _lastUsed.keySet())
|
for (Emoji emoji : _lastUsed.keySet())
|
||||||
set.add(String.valueOf(_lastUsed.get(emoji)) + "-" + emoji.name());
|
set.add(String.valueOf(_lastUsed.get(emoji)) + "-" + emoji.name());
|
||||||
edit.putStringSet(LAST_USE_PREF, set);
|
edit.putStringSet(LAST_USE_PREF, set);
|
||||||
@@ -95,16 +84,18 @@ public class EmojiGridView extends GridView
|
|||||||
|
|
||||||
private void loadLastUsed()
|
private void loadLastUsed()
|
||||||
{
|
{
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
|
||||||
Set<String> lastUseSet = prefs.getStringSet(LAST_USE_PREF, null);
|
|
||||||
|
|
||||||
_lastUsed = new HashMap<Emoji, Integer>();
|
_lastUsed = new HashMap<Emoji, Integer>();
|
||||||
|
SharedPreferences prefs;
|
||||||
|
// Storage might not be available (eg. the device is locked), avoid
|
||||||
|
// crashing.
|
||||||
|
try { prefs = emojiSharedPreferences(); }
|
||||||
|
catch (Exception _e) { return; }
|
||||||
|
Set<String> lastUseSet = prefs.getStringSet(LAST_USE_PREF, null);
|
||||||
if (lastUseSet != null)
|
if (lastUseSet != null)
|
||||||
for (String emojiData : lastUseSet)
|
for (String emojiData : lastUseSet)
|
||||||
{
|
{
|
||||||
String[] data = emojiData.split("-", 2);
|
String[] data = emojiData.split("-", 2);
|
||||||
Emoji emoji;
|
Emoji emoji;
|
||||||
|
|
||||||
if (data.length != 2)
|
if (data.length != 2)
|
||||||
continue ;
|
continue ;
|
||||||
emoji = Emoji.getEmojiByName(data[1]);
|
emoji = Emoji.getEmojiByName(data[1]);
|
||||||
@@ -114,14 +105,16 @@ public class EmojiGridView extends GridView
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class EmojiView extends TextView
|
SharedPreferences emojiSharedPreferences()
|
||||||
|
{
|
||||||
|
return getContext().getSharedPreferences("emoji_last_use", Context.MODE_PRIVATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static class EmojiView extends TextView
|
||||||
{
|
{
|
||||||
public EmojiView(Context context)
|
public EmojiView(Context context)
|
||||||
{
|
{
|
||||||
super(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)
|
public void setEmoji(Emoji emoji)
|
||||||
@@ -130,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)
|
public EmojiViewAdpater(Context context, Emoji[] emojiArray)
|
||||||
{
|
{
|
||||||
_context = context;
|
_button_context = new ContextThemeWrapper(context, R.style.emojiGridButton);
|
||||||
_emojiArray = emojiArray;
|
_emojiArray = emojiArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,9 +157,9 @@ public class EmojiGridView extends GridView
|
|||||||
EmojiView view = (EmojiView)convertView;
|
EmojiView view = (EmojiView)convertView;
|
||||||
|
|
||||||
if (view == null)
|
if (view == null)
|
||||||
view = new EmojiView(_context);
|
view = new EmojiView(_button_context);
|
||||||
view.setEmoji(_emojiArray[pos]);
|
view.setEmoji(_emojiArray[pos]);
|
||||||
return (view);
|
return view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,11 +2,18 @@ package juloo.keyboard2;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.AttributeSet;
|
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.LayoutParams;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
public class EmojiGroupButtonsBar extends LinearLayout
|
public class EmojiGroupButtonsBar extends LinearLayout
|
||||||
{
|
{
|
||||||
|
private EmojiGridView _emoji_grid = null;
|
||||||
|
|
||||||
public EmojiGroupButtonsBar(Context context, AttributeSet attrs)
|
public EmojiGroupButtonsBar(Context context, AttributeSet attrs)
|
||||||
{
|
{
|
||||||
super(context, 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)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
Config config = Config.globalConfig();
|
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,10 @@ public class ExtraKeyCheckBoxPreference extends CheckBoxPreference
|
|||||||
"£",
|
"£",
|
||||||
"switch_greekmath",
|
"switch_greekmath",
|
||||||
"capslock",
|
"capslock",
|
||||||
|
"copy",
|
||||||
|
"paste",
|
||||||
|
"cut",
|
||||||
|
"select_all",
|
||||||
};
|
};
|
||||||
|
|
||||||
public static boolean default_checked(String name)
|
public static boolean default_checked(String name)
|
||||||
|
@@ -1,41 +1,63 @@
|
|||||||
package juloo.keyboard2;
|
package juloo.keyboard2;
|
||||||
|
|
||||||
|
import android.os.Looper;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.view.inputmethod.InputConnection;
|
||||||
|
|
||||||
class KeyEventHandler implements Config.IKeyEventHandler
|
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;
|
_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)
|
if (key == null)
|
||||||
return;
|
return;
|
||||||
switch (key.getKind())
|
switch (key.getKind())
|
||||||
{
|
{
|
||||||
case Char:
|
case Char: send_text(String.valueOf(key.getChar())); break;
|
||||||
_recv.commitChar(key.getChar());
|
case String: send_text(key.getString()); break;
|
||||||
break;
|
|
||||||
case String:
|
|
||||||
_recv.commitText(key.getString());
|
|
||||||
break;
|
|
||||||
case Event:
|
case Event:
|
||||||
switch (key.getEvent())
|
switch (key.getEvent())
|
||||||
{
|
{
|
||||||
case CONFIG: _recv.showKeyboardConfig(); break;
|
case CONFIG: _recv.showKeyboardConfig(); break;
|
||||||
case SWITCH_TEXT: _recv.switchMain(); break;
|
case SWITCH_TEXT:
|
||||||
case SWITCH_NUMERIC: _recv.switchNumeric(); break;
|
case SWITCH_SECOND_BACK: _recv.switch_main(); break;
|
||||||
|
case SWITCH_NUMERIC: _recv.switch_layout(R.xml.numeric); break;
|
||||||
case SWITCH_EMOJI: _recv.setPane_emoji(); break;
|
case SWITCH_EMOJI: _recv.setPane_emoji(); break;
|
||||||
case SWITCH_BACK_EMOJI: _recv.setPane_normal(); break;
|
case SWITCH_BACK_EMOJI: _recv.setPane_normal(); break;
|
||||||
case CHANGE_METHOD: _recv.switchToNextInputMethod(); break;
|
case CHANGE_METHOD: _recv.switchToNextInputMethod(); break;
|
||||||
case ACTION: _recv.performAction(); break;
|
case ACTION:
|
||||||
case SWITCH_PROGRAMMING: _recv.switchProgramming(); break;
|
InputConnection conn = _recv.getCurrentInputConnection();
|
||||||
case SWITCH_GREEKMATH: _recv.switchGreekmath(); break;
|
if (conn != null)
|
||||||
case CAPS_LOCK: _recv.enableCapsLock(); break;
|
conn.performEditorAction(actionId);
|
||||||
|
break;
|
||||||
|
case SWITCH_SECOND: _recv.switch_second(); break;
|
||||||
|
case SWITCH_GREEKMATH: _recv.switch_layout(R.xml.greekmath); break;
|
||||||
|
case CAPS_LOCK: _recv.set_shift_state(true, true); break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Keyevent:
|
case Keyevent:
|
||||||
@@ -43,6 +65,15 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
|||||||
break;
|
break;
|
||||||
case Modifier:
|
case Modifier:
|
||||||
break;
|
break;
|
||||||
|
case Editing:
|
||||||
|
switch (key.getEditing())
|
||||||
|
{
|
||||||
|
case COPY: send_context_menu_action(android.R.id.copy); break;
|
||||||
|
case PASTE: send_context_menu_action(android.R.id.paste); break;
|
||||||
|
case CUT: send_context_menu_action(android.R.id.cut); break;
|
||||||
|
case SELECT_ALL: send_context_menu_action(android.R.id.selectAll); break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,17 +87,17 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
|||||||
// getCurrentInputConnection().deleteSurroundingText(before, after);
|
// 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 action;
|
||||||
int updatedMetaState;
|
int updatedMetaState;
|
||||||
if (down) { action = KeyEvent.ACTION_DOWN; updatedMetaState = metaState | metaFlags; }
|
if (down) { action = KeyEvent.ACTION_DOWN; updatedMetaState = metaState | metaFlags; }
|
||||||
else { action = KeyEvent.ACTION_UP; updatedMetaState = metaState & ~metaFlags; }
|
else { action = KeyEvent.ACTION_UP; updatedMetaState = metaState & ~metaFlags; }
|
||||||
_recv.sendKeyEvent(action, eventCode, metaState);
|
send_keyevent(action, eventCode, metaState);
|
||||||
return updatedMetaState;
|
return updatedMetaState;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int sendMetaKeyForModifier(KeyValue.Modifier mod, int metaState, boolean down)
|
int sendMetaKeyForModifier(KeyValue.Modifier mod, int metaState, boolean down)
|
||||||
{
|
{
|
||||||
switch (mod)
|
switch (mod)
|
||||||
{
|
{
|
||||||
@@ -85,34 +116,70 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
|||||||
/*
|
/*
|
||||||
* Don't set KeyEvent.FLAG_SOFT_KEYBOARD.
|
* 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;
|
int metaState = 0;
|
||||||
for (int i = 0; i < mods.size(); i++)
|
for (int i = 0; i < mods.size(); i++)
|
||||||
metaState = sendMetaKeyForModifier(mods.get(i), metaState, true);
|
metaState = sendMetaKeyForModifier(mods.get(i), metaState, true);
|
||||||
_recv.sendKeyEvent(KeyEvent.ACTION_DOWN, keyCode, metaState);
|
send_keyevent(KeyEvent.ACTION_DOWN, keyCode, metaState);
|
||||||
_recv.sendKeyEvent(KeyEvent.ACTION_UP, keyCode, metaState);
|
send_keyevent(KeyEvent.ACTION_UP, keyCode, metaState);
|
||||||
for (int i = mods.size() - 1; i >= 0; i--)
|
for (int i = mods.size() - 1; i >= 0; i--)
|
||||||
metaState = sendMetaKeyForModifier(mods.get(i), metaState, false);
|
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
|
public static interface IReceiver
|
||||||
{
|
{
|
||||||
public void switchToNextInputMethod();
|
public void switchToNextInputMethod();
|
||||||
public void setPane_emoji();
|
public void setPane_emoji();
|
||||||
public void setPane_normal();
|
public void setPane_normal();
|
||||||
public void showKeyboardConfig();
|
public void showKeyboardConfig();
|
||||||
public void performAction();
|
|
||||||
public void enableCapsLock();
|
|
||||||
|
|
||||||
public void switchMain();
|
public void switch_main();
|
||||||
public void switchNumeric();
|
public void switch_second();
|
||||||
public void switchProgramming();
|
public void switch_layout(int layout_id);
|
||||||
public void switchGreekmath();
|
|
||||||
|
|
||||||
public void sendKeyEvent(int eventAction, int eventCode, int meta);
|
public void set_shift_state(boolean state, boolean lock);
|
||||||
|
|
||||||
public void commitText(String text);
|
public InputConnection getCurrentInputConnection();
|
||||||
public void commitChar(char c);
|
}
|
||||||
|
|
||||||
|
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,
|
SWITCH_BACK_EMOJI,
|
||||||
CHANGE_METHOD,
|
CHANGE_METHOD,
|
||||||
ACTION,
|
ACTION,
|
||||||
SWITCH_PROGRAMMING,
|
SWITCH_SECOND,
|
||||||
|
SWITCH_SECOND_BACK,
|
||||||
SWITCH_GREEKMATH,
|
SWITCH_GREEKMATH,
|
||||||
CAPS_LOCK,
|
CAPS_LOCK,
|
||||||
}
|
}
|
||||||
@@ -51,6 +52,19 @@ final class KeyValue
|
|||||||
FN, // Must be placed last to be applied first
|
FN, // Must be placed last to be applied first
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static enum Editing
|
||||||
|
{
|
||||||
|
COPY,
|
||||||
|
PASTE,
|
||||||
|
CUT,
|
||||||
|
SELECT_ALL,
|
||||||
|
}
|
||||||
|
|
||||||
|
public static enum Kind
|
||||||
|
{
|
||||||
|
Char, String, Keyevent, Event, Modifier, Editing
|
||||||
|
}
|
||||||
|
|
||||||
// Behavior flags.
|
// Behavior flags.
|
||||||
public static final int FLAG_LATCH = (1 << 20);
|
public static final int FLAG_LATCH = (1 << 20);
|
||||||
public static final int FLAG_LOCK = (1 << 21);
|
public static final int FLAG_LOCK = (1 << 21);
|
||||||
@@ -58,18 +72,12 @@ final class KeyValue
|
|||||||
public static final int FLAG_SPECIAL = (1 << 22);
|
public static final int FLAG_SPECIAL = (1 << 22);
|
||||||
public static final int FLAG_PRECISE_REPEAT = (1 << 23);
|
public static final int FLAG_PRECISE_REPEAT = (1 << 23);
|
||||||
// Rendering flags.
|
// Rendering flags.
|
||||||
public static final int FLAG_KEY_FONT = (1 << 24);
|
public static final int FLAG_KEY_FONT = (1 << 24); // special font file
|
||||||
public static final int FLAG_SMALLER_FONT = (1 << 25);
|
public static final int FLAG_SMALLER_FONT = (1 << 25); // 25% smaller symbols
|
||||||
|
public static final int FLAG_SECONDARY = (1 << 26); // dimmer
|
||||||
// Used by [Pointers].
|
// Used by [Pointers].
|
||||||
public static final int FLAG_LOCKED = (1 << 26);
|
public static final int FLAG_LOCKED = (1 << 28);
|
||||||
public static final int FLAG_FAKE_PTR = (1 << 27);
|
public static final int FLAG_FAKE_PTR = (1 << 29);
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
// Ranges for the different components
|
// Ranges for the different components
|
||||||
private static final int FLAGS_BITS = (0b111111111 << 20); // 9 bits wide
|
private static final int FLAGS_BITS = (0b111111111 << 20); // 9 bits wide
|
||||||
@@ -83,29 +91,12 @@ final class KeyValue
|
|||||||
|
|
||||||
private final String _symbol;
|
private final String _symbol;
|
||||||
|
|
||||||
/** This field encodes three things:
|
/** This field encodes three things: Kind, flags and value. */
|
||||||
- The kind
|
|
||||||
- The flags
|
|
||||||
- The value for Char, Event and Modifier keys.
|
|
||||||
*/
|
|
||||||
private final int _code;
|
private final int _code;
|
||||||
|
|
||||||
public static enum Kind
|
|
||||||
{
|
|
||||||
Char, String, Keyevent, Event, Modifier
|
|
||||||
}
|
|
||||||
|
|
||||||
public Kind getKind()
|
public Kind getKind()
|
||||||
{
|
{
|
||||||
switch (_code & KIND_BITS)
|
return Kind.values()[(_code & KIND_BITS) >>> 29];
|
||||||
{
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFlags()
|
public int getFlags()
|
||||||
@@ -149,15 +140,21 @@ final class KeyValue
|
|||||||
return Modifier.values()[(_code & VALUE_BITS)];
|
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. */
|
/* Update the char and the symbol. */
|
||||||
public KeyValue withChar(char c)
|
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)
|
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)
|
public KeyValue withSymbol(String s)
|
||||||
@@ -167,7 +164,7 @@ final class KeyValue
|
|||||||
|
|
||||||
public KeyValue withKeyevent(int code)
|
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)
|
public KeyValue withFlags(int f)
|
||||||
@@ -199,33 +196,38 @@ final class KeyValue
|
|||||||
_code = kind | flags | value;
|
_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)
|
public static KeyValue getKeyByName(String name)
|
||||||
{
|
{
|
||||||
KeyValue kv = keys.get(name);
|
KeyValue kv = keys.get(name);
|
||||||
if (kv != null)
|
if (kv != null)
|
||||||
return kv;
|
return kv;
|
||||||
if (name.length() == 1)
|
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
|
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));
|
keys.put(name, new KeyValue(symbol, kind, code, flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addCharKey(String name, String symbol, char c, int 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)
|
private static void addModifierKey(String name, String symbol, Modifier m, int flags)
|
||||||
{
|
{
|
||||||
if (symbol.length() > 1)
|
if (symbol.length() > 1)
|
||||||
flags |= FLAG_SMALLER_FONT;
|
flags |= FLAG_SMALLER_FONT;
|
||||||
addKey(name, symbol, KIND_MODIFIER, m.ordinal(),
|
addKey(name, symbol, Kind.Modifier, m.ordinal(),
|
||||||
FLAG_LATCH | FLAG_SPECIAL | flags);
|
FLAG_LATCH | FLAG_SPECIAL | FLAG_SECONDARY | flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addModifierKey(String name, int symbol, Modifier m, int flags)
|
private static void addModifierKey(String name, int symbol, Modifier m, int flags)
|
||||||
@@ -235,12 +237,13 @@ final class KeyValue
|
|||||||
|
|
||||||
private static void addDiacritic(String name, int symbol, Modifier m)
|
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)
|
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)
|
private static void addEventKey(String name, int symbol, Event e, int flags)
|
||||||
@@ -250,7 +253,7 @@ final class KeyValue
|
|||||||
|
|
||||||
private static void addKeyeventKey(String name, String symbol, int code, int flags)
|
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)
|
private static void addKeyeventKey(String name, int symbol, int code, int flags)
|
||||||
@@ -258,6 +261,12 @@ final class KeyValue
|
|||||||
addKeyeventKey(name, String.valueOf((char)symbol), code, flags | FLAG_KEY_FONT);
|
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
|
// Within VALUE_BITS
|
||||||
private static int placeholder_unique_id = 0;
|
private static int placeholder_unique_id = 0;
|
||||||
|
|
||||||
@@ -265,7 +274,7 @@ final class KeyValue
|
|||||||
placeholders (it is the empty string). */
|
placeholders (it is the empty string). */
|
||||||
private static void addPlaceholderKey(String name)
|
private static void addPlaceholderKey(String name)
|
||||||
{
|
{
|
||||||
addKey(name, "", KIND_STRING, placeholder_unique_id++, 0);
|
addKey(name, "", Kind.String, placeholder_unique_id++, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
@@ -302,7 +311,8 @@ final class KeyValue
|
|||||||
addEventKey("switch_numeric", "123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT);
|
addEventKey("switch_numeric", "123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT);
|
||||||
addEventKey("switch_emoji", 0x01, Event.SWITCH_EMOJI, FLAG_SMALLER_FONT);
|
addEventKey("switch_emoji", 0x01, Event.SWITCH_EMOJI, FLAG_SMALLER_FONT);
|
||||||
addEventKey("switch_back_emoji", "ABC", Event.SWITCH_BACK_EMOJI, 0);
|
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("switch_greekmath", "πλ∇¬", Event.SWITCH_GREEKMATH, FLAG_SMALLER_FONT);
|
||||||
addEventKey("change_method", 0x09, Event.CHANGE_METHOD, FLAG_SMALLER_FONT);
|
addEventKey("change_method", 0x09, Event.CHANGE_METHOD, FLAG_SMALLER_FONT);
|
||||||
addEventKey("action", "Action", Event.ACTION, FLAG_SMALLER_FONT); // Will always be replaced
|
addEventKey("action", "Action", Event.ACTION, FLAG_SMALLER_FONT); // Will always be replaced
|
||||||
@@ -336,12 +346,17 @@ final class KeyValue
|
|||||||
addKeyeventKey("tab", 0x0F, KeyEvent.KEYCODE_TAB, FLAG_SMALLER_FONT);
|
addKeyeventKey("tab", 0x0F, KeyEvent.KEYCODE_TAB, FLAG_SMALLER_FONT);
|
||||||
|
|
||||||
addCharKey("\\t", "\\t", '\t', 0); // Send the tab character
|
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);
|
addCharKey("nbsp", "\u237d", '\u00a0', FLAG_SMALLER_FONT);
|
||||||
|
|
||||||
addPlaceholderKey("removed");
|
addPlaceholderKey("removed");
|
||||||
addPlaceholderKey("f11_placeholder");
|
addPlaceholderKey("f11_placeholder");
|
||||||
addPlaceholderKey("f12_placeholder");
|
addPlaceholderKey("f12_placeholder");
|
||||||
|
|
||||||
|
addEditingKey("copy", "copy", Editing.COPY);
|
||||||
|
addEditingKey("paste", "paste", Editing.PASTE);
|
||||||
|
addEditingKey("cut", "cut", Editing.CUT);
|
||||||
|
addEditingKey("select_all", "s. all", Editing.SELECT_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static final HashMap<String, String> keys_descr = new HashMap<String, String>();
|
static final HashMap<String, String> keys_descr = new HashMap<String, String>();
|
||||||
|
@@ -6,66 +6,60 @@ import android.content.SharedPreferences;
|
|||||||
import android.inputmethodservice.InputMethodService;
|
import android.inputmethodservice.InputMethodService;
|
||||||
import android.os.Build.VERSION;
|
import android.os.Build.VERSION;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.util.LogPrinter;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
|
import android.view.KeyEvent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.view.ViewParent;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputConnection;
|
import android.view.inputmethod.InputConnection;
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.view.inputmethod.InputMethodSubtype;
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.view.ViewParent;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.util.LogPrinter;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class Keyboard2 extends InputMethodService
|
public class Keyboard2 extends InputMethodService
|
||||||
implements SharedPreferences.OnSharedPreferenceChangeListener,
|
implements SharedPreferences.OnSharedPreferenceChangeListener
|
||||||
Autocapitalisation.Callback
|
|
||||||
{
|
{
|
||||||
static private final String TAG = "Keyboard2";
|
static private final String TAG = "Keyboard2";
|
||||||
|
|
||||||
private Keyboard2View _keyboardView;
|
private Keyboard2View _keyboardView;
|
||||||
private int _currentTextLayout;
|
private KeyEventHandler _keyeventhandler;
|
||||||
|
// If not 'null', the layout to use instead of [_currentTextLayout].
|
||||||
|
private KeyboardData _currentSpecialLayout;
|
||||||
|
private KeyboardData _currentTextLayout;
|
||||||
|
private KeyboardData _localeTextLayout;
|
||||||
private ViewGroup _emojiPane = null;
|
private ViewGroup _emojiPane = null;
|
||||||
|
|
||||||
private Config _config;
|
private Config _config;
|
||||||
private Autocapitalisation _autocap;
|
|
||||||
|
|
||||||
private boolean _debug_logs = false;
|
private boolean _debug_logs = false;
|
||||||
|
|
||||||
private KeyboardData getLayout(int resId)
|
KeyboardData main_layout()
|
||||||
{
|
{
|
||||||
return KeyboardData.load(getResources(), resId);
|
return (_currentSpecialLayout != null) ? _currentSpecialLayout : _currentTextLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate()
|
public void onCreate()
|
||||||
{
|
{
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
PreferenceManager.setDefaultValues(this, R.xml.settings, false);
|
KeyboardData.init(getResources());
|
||||||
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
|
SharedPreferences prefs = DirectBootAwarePreferences.get_shared_preferences(this);
|
||||||
Config.initGlobalConfig(this, new KeyEventHandler(this.new Receiver()));
|
prefs.registerOnSharedPreferenceChangeListener(this);
|
||||||
|
_keyeventhandler = new KeyEventHandler(getMainLooper(), this.new Receiver());
|
||||||
|
Config.initGlobalConfig(prefs, getResources(), _keyeventhandler);
|
||||||
_config = Config.globalConfig();
|
_config = Config.globalConfig();
|
||||||
_config.refresh(this);
|
|
||||||
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
|
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
|
||||||
_keyboardView.reset();
|
_keyboardView.reset();
|
||||||
|
setInputView(_keyboardView);
|
||||||
_debug_logs = getResources().getBoolean(R.bool.debug_logs);
|
_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)
|
private List<InputMethodSubtype> getEnabledSubtypes(InputMethodManager imm)
|
||||||
@@ -78,17 +72,12 @@ public class Keyboard2 extends InputMethodService
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void refreshSubtypeLayout(InputMethodSubtype subtype)
|
private void refreshSubtypeLayout(InputMethodSubtype subtype)
|
||||||
{
|
|
||||||
int l = _config.layout;
|
|
||||||
if (l == -1)
|
|
||||||
{
|
{
|
||||||
String s = subtype.getExtraValueOf("default_layout");
|
String s = subtype.getExtraValueOf("default_layout");
|
||||||
if (s != null)
|
if (s != null)
|
||||||
l = Config.layoutId_of_string(s);
|
_localeTextLayout = _config.layout_of_string(getResources(), s);
|
||||||
else
|
else
|
||||||
l = R.xml.qwerty;
|
_localeTextLayout = KeyboardData.load(getResources(), R.xml.qwerty);
|
||||||
}
|
|
||||||
_currentTextLayout = l;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void extra_keys_of_subtype(Set<KeyValue> dst, InputMethodSubtype subtype)
|
private void extra_keys_of_subtype(Set<KeyValue> dst, InputMethodSubtype subtype)
|
||||||
@@ -132,14 +121,15 @@ public class Keyboard2 extends InputMethodService
|
|||||||
case 1: case 2: case 3: _config.extra_keys_subtype = null; break;
|
case 1: case 2: case 3: _config.extra_keys_subtype = null; break;
|
||||||
case 4: _config.extra_keys_subtype = new HashSet<KeyValue>(); 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()
|
private void refreshSubtypeImm()
|
||||||
{
|
{
|
||||||
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
|
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)
|
if (VERSION.SDK_INT < 12)
|
||||||
{
|
{
|
||||||
// Subtypes won't work well under API level 12 (getExtraValueOf)
|
// Subtypes won't work well under API level 12 (getExtraValueOf)
|
||||||
@@ -159,9 +149,10 @@ public class Keyboard2 extends InputMethodService
|
|||||||
refreshAccentsOption(imm, subtype);
|
refreshAccentsOption(imm, subtype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_config.shouldOfferSwitchingToProgramming =
|
_config.shouldOfferSwitchingToSecond =
|
||||||
_config.programming_layout != -1 &&
|
_config.second_layout != null &&
|
||||||
_currentTextLayout != _config.programming_layout;
|
_currentTextLayout != _config.second_layout;
|
||||||
|
_currentTextLayout = (_config.layout == null) ? _localeTextLayout : _config.layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String actionLabel_of_imeAction(int action)
|
private String actionLabel_of_imeAction(int action)
|
||||||
@@ -189,30 +180,34 @@ public class Keyboard2 extends InputMethodService
|
|||||||
if (info.actionLabel != null)
|
if (info.actionLabel != null)
|
||||||
{
|
{
|
||||||
_config.actionLabel = info.actionLabel.toString();
|
_config.actionLabel = info.actionLabel.toString();
|
||||||
_config.actionId = info.actionId;
|
_keyeventhandler.actionId = info.actionId;
|
||||||
_config.swapEnterActionKey = false;
|
_config.swapEnterActionKey = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int action = info.imeOptions & EditorInfo.IME_MASK_ACTION;
|
int action = info.imeOptions & EditorInfo.IME_MASK_ACTION;
|
||||||
_config.actionLabel = actionLabel_of_imeAction(action); // Might be null
|
_config.actionLabel = actionLabel_of_imeAction(action); // Might be null
|
||||||
_config.actionId = action;
|
_keyeventhandler.actionId = action;
|
||||||
_config.swapEnterActionKey =
|
_config.swapEnterActionKey =
|
||||||
(info.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) == 0;
|
(info.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) == 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshConfig()
|
/** Might re-create the keyboard view. [_keyboardView.setKeyboard()] must be
|
||||||
|
called soon after. */
|
||||||
|
private void refresh_config()
|
||||||
{
|
{
|
||||||
int prev_theme = _config.theme;
|
int prev_theme = _config.theme;
|
||||||
_config.refresh(this);
|
_config.refresh(getResources());
|
||||||
refreshSubtypeImm();
|
refreshSubtypeImm();
|
||||||
// Refreshing the theme config requires re-creating the views
|
// Refreshing the theme config requires re-creating the views
|
||||||
if (prev_theme != _config.theme)
|
if (prev_theme != _config.theme)
|
||||||
{
|
{
|
||||||
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
|
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
|
||||||
|
setInputView(_keyboardView);
|
||||||
_emojiPane = null;
|
_emojiPane = null;
|
||||||
}
|
}
|
||||||
|
_keyboardView.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void log_editor_info(EditorInfo info)
|
private void log_editor_info(EditorInfo info)
|
||||||
@@ -225,28 +220,27 @@ public class Keyboard2 extends InputMethodService
|
|||||||
Log.d(TAG, "actionLabel: "+_config.actionLabel);
|
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)
|
switch (info.inputType & InputType.TYPE_MASK_CLASS)
|
||||||
{
|
{
|
||||||
case InputType.TYPE_CLASS_NUMBER:
|
case InputType.TYPE_CLASS_NUMBER:
|
||||||
return R.xml.pin;
|
|
||||||
case InputType.TYPE_CLASS_PHONE:
|
case InputType.TYPE_CLASS_PHONE:
|
||||||
case InputType.TYPE_CLASS_DATETIME:
|
case InputType.TYPE_CLASS_DATETIME:
|
||||||
return R.xml.pin;
|
_currentSpecialLayout = KeyboardData.load_pin_entry(getResources());
|
||||||
default:
|
default:
|
||||||
return _currentTextLayout;
|
_currentSpecialLayout = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStartInputView(EditorInfo info, boolean restarting)
|
public void onStartInputView(EditorInfo info, boolean restarting)
|
||||||
{
|
{
|
||||||
refreshConfig();
|
refresh_config();
|
||||||
refresh_action_label(info);
|
refresh_action_label(info);
|
||||||
_keyboardView.setKeyboard(getLayout(chooseLayout(info)));
|
refresh_special_layout(info);
|
||||||
_autocap.started(info, getCurrentInputConnection());
|
_keyboardView.setKeyboard(main_layout());
|
||||||
setInputView(_keyboardView);
|
_keyeventhandler.started(info);
|
||||||
if (_debug_logs)
|
if (_debug_logs)
|
||||||
log_editor_info(info);
|
log_editor_info(info);
|
||||||
}
|
}
|
||||||
@@ -264,14 +258,14 @@ public class Keyboard2 extends InputMethodService
|
|||||||
public void onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype)
|
public void onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype)
|
||||||
{
|
{
|
||||||
refreshSubtypeImm();
|
refreshSubtypeImm();
|
||||||
_keyboardView.setKeyboard(getLayout(_currentTextLayout));
|
_keyboardView.setKeyboard(main_layout());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd)
|
public void onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd)
|
||||||
{
|
{
|
||||||
super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd, candidatesStart, candidatesEnd);
|
super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd, candidatesStart, candidatesEnd);
|
||||||
_autocap.selection_updated(oldSelStart, newSelStart);
|
_keyeventhandler.selection_updated(oldSelStart, newSelStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -282,9 +276,10 @@ public class Keyboard2 extends InputMethodService
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
|
public void onSharedPreferenceChanged(SharedPreferences _prefs, String _key)
|
||||||
{
|
{
|
||||||
refreshConfig();
|
refresh_config();
|
||||||
|
_keyboardView.setKeyboard(main_layout());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -317,61 +312,38 @@ public class Keyboard2 extends InputMethodService
|
|||||||
setInputView(_keyboardView);
|
setInputView(_keyboardView);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void performAction()
|
public void set_shift_state(boolean state, boolean lock)
|
||||||
{
|
{
|
||||||
InputConnection conn = getCurrentInputConnection();
|
_keyboardView.set_shift_state(state, lock);
|
||||||
if (conn == null)
|
|
||||||
return;
|
|
||||||
conn.performEditorAction(_config.actionId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enableCapsLock()
|
public void switch_main()
|
||||||
{
|
{
|
||||||
_keyboardView.set_shift_state(true, true);
|
_keyboardView.setKeyboard(main_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)
|
||||||
}
|
|
||||||
|
|
||||||
public void switchGreekmath()
|
|
||||||
{
|
|
||||||
_keyboardView.setKeyboard(getLayout(R.xml.greekmath));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void switchProgramming()
|
|
||||||
{
|
|
||||||
if (_config.programming_layout == -1)
|
|
||||||
return;
|
return;
|
||||||
KeyboardData layout =
|
KeyboardData layout =
|
||||||
getLayout(_config.programming_layout).mapKeys(new KeyboardData.MapKeyValues() {
|
_config.second_layout.mapKeys(new KeyboardData.MapKeyValues() {
|
||||||
public KeyValue apply(KeyValue key, boolean localized)
|
public KeyValue apply(KeyValue key, boolean localized)
|
||||||
{
|
{
|
||||||
if (key.getKind() == KeyValue.Kind.Event
|
if (key.getKind() == KeyValue.Kind.Event
|
||||||
&& key.getEvent() == KeyValue.Event.SWITCH_PROGRAMMING)
|
&& key.getEvent() == KeyValue.Event.SWITCH_SECOND)
|
||||||
return KeyValue.getKeyByName("switch_text");
|
return KeyValue.getKeyByName("switch_second_back");
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
_keyboardView.setKeyboard(layout);
|
_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);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void showKeyboardConfig()
|
public void showKeyboardConfig()
|
||||||
{
|
{
|
||||||
Intent intent = new Intent(Keyboard2.this, SettingsActivity.class);
|
Intent intent = new Intent(Keyboard2.this, SettingsActivity.class);
|
||||||
@@ -379,16 +351,9 @@ public class Keyboard2 extends InputMethodService
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void commitText(String text)
|
public InputConnection getCurrentInputConnection()
|
||||||
{
|
{
|
||||||
getCurrentInputConnection().commitText(text, 1);
|
return Keyboard2.this.getCurrentInputConnection();
|
||||||
_autocap.typed(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void commitChar(char c)
|
|
||||||
{
|
|
||||||
sendKeyChar(c);
|
|
||||||
_autocap.typed(c);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4,16 +4,17 @@ import android.content.Context;
|
|||||||
import android.content.ContextWrapper;
|
import android.content.ContextWrapper;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
import android.inputmethodservice.InputMethodService;
|
import android.inputmethodservice.InputMethodService;
|
||||||
import android.os.Build.VERSION;
|
import android.os.Build.VERSION;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.view.HapticFeedbackConstants;
|
import android.view.HapticFeedbackConstants;
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class Keyboard2View extends View
|
public class Keyboard2View extends View
|
||||||
implements View.OnTouchListener, Pointers.IPointerEventHandler
|
implements View.OnTouchListener, Pointers.IPointerEventHandler
|
||||||
@@ -124,13 +125,13 @@ public class Keyboard2View extends View
|
|||||||
|
|
||||||
public void onPointerUp(KeyValue k, Pointers.Modifiers mods)
|
public void onPointerUp(KeyValue k, Pointers.Modifiers mods)
|
||||||
{
|
{
|
||||||
_config.handler.handleKeyUp(k, mods);
|
_config.handler.key_up(k, mods);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onPointerHold(KeyValue k, Pointers.Modifiers mods)
|
public void onPointerHold(KeyValue k, Pointers.Modifiers mods)
|
||||||
{
|
{
|
||||||
_config.handler.handleKeyUp(k, mods);
|
_config.handler.key_up(k, mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onPointerFlagsChanged(boolean shouldVibrate)
|
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));
|
_pointers.onTouchMove(event.getX(p), event.getY(p), event.getPointerId(p));
|
||||||
break;
|
break;
|
||||||
case MotionEvent.ACTION_CANCEL:
|
case MotionEvent.ACTION_CANCEL:
|
||||||
_pointers.onTouchCancel(event.getPointerId(event.getActionIndex()));
|
_pointers.onTouchCancel();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return (false);
|
return (false);
|
||||||
@@ -234,10 +235,33 @@ public class Keyboard2View extends View
|
|||||||
_keyWidth = (width - (_config.horizontalMargin * 2)) / _keyboard.keysWidth;
|
_keyWidth = (width - (_config.horizontalMargin * 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.horizontalMargin,
|
||||||
|
top + (int)_config.marginTop,
|
||||||
|
right - (int)_config.horizontalMargin,
|
||||||
|
bottom - (int)_config.marginBottom);
|
||||||
|
setSystemGestureExclusionRects(Arrays.asList(keyboard_area));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas)
|
protected void onDraw(Canvas canvas)
|
||||||
{
|
{
|
||||||
updateFlags();
|
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;
|
float y = _config.marginTop + _config.keyVerticalInterval / 2;
|
||||||
for (KeyboardData.Row row : _keyboard.rows)
|
for (KeyboardData.Row row : _keyboard.rows)
|
||||||
{
|
{
|
||||||
@@ -249,9 +273,7 @@ public class Keyboard2View extends View
|
|||||||
x += k.shift * _keyWidth;
|
x += k.shift * _keyWidth;
|
||||||
float keyW = _keyWidth * k.width - _config.keyHorizontalInterval;
|
float keyW = _keyWidth * k.width - _config.keyHorizontalInterval;
|
||||||
boolean isKeyDown = _pointers.isKeyDown(k);
|
boolean isKeyDown = _pointers.isKeyDown(k);
|
||||||
_tmpRect.set(x, y, x + keyW, y + keyH);
|
drawKeyFrame(canvas, x, y, keyW, keyH, isKeyDown);
|
||||||
canvas.drawRoundRect(_tmpRect, _theme.keyBorderRadius, _theme.keyBorderRadius,
|
|
||||||
isKeyDown ? _theme.keyDownBgPaint : _theme.keyBgPaint);
|
|
||||||
drawLabel(canvas, k.key0, keyW / 2f + x, y, keyH, isKeyDown);
|
drawLabel(canvas, k.key0, keyW / 2f + x, y, keyH, isKeyDown);
|
||||||
if (k.edgekeys)
|
if (k.edgekeys)
|
||||||
{
|
{
|
||||||
@@ -283,20 +305,56 @@ public class Keyboard2View extends View
|
|||||||
super.onDetachedFromWindow();
|
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);
|
int flags = _pointers.getKeyFlags(k);
|
||||||
if (flags != -1)
|
if (flags != -1)
|
||||||
{
|
{
|
||||||
if ((flags & KeyValue.FLAG_LOCKED) != 0)
|
if ((flags & KeyValue.FLAG_LOCKED) != 0)
|
||||||
return _theme.lockedColor;
|
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)
|
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;
|
return;
|
||||||
float textSize = scaleTextSize(kv, _config.labelTextSize, keyH);
|
float textSize = scaleTextSize(kv, _config.labelTextSize, keyH);
|
||||||
Paint p = _theme.labelPaint(kv.hasFlags(KeyValue.FLAG_KEY_FONT));
|
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);
|
p.setTextSize(textSize);
|
||||||
canvas.drawText(kv.getString(), x, (keyH - p.ascent() - p.descent()) / 2f + y, p);
|
canvas.drawText(kv.getString(), x, (keyH - p.ascent() - p.descent()) / 2f + y, p);
|
||||||
}
|
}
|
||||||
@@ -324,7 +383,8 @@ public class Keyboard2View extends View
|
|||||||
return;
|
return;
|
||||||
float textSize = scaleTextSize(kv, _config.sublabelTextSize, keyH);
|
float textSize = scaleTextSize(kv, _config.sublabelTextSize, keyH);
|
||||||
Paint p = _theme.subLabelPaint(kv.hasFlags(KeyValue.FLAG_KEY_FONT), a);
|
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);
|
p.setTextSize(textSize);
|
||||||
float subPadding = _config.keyPadding;
|
float subPadding = _config.keyPadding;
|
||||||
if (v == Vertical.CENTER)
|
if (v == Vertical.CENTER)
|
||||||
|
@@ -2,12 +2,15 @@ package juloo.keyboard2;
|
|||||||
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.content.res.XmlResourceParser;
|
import android.content.res.XmlResourceParser;
|
||||||
|
import android.util.Xml;
|
||||||
|
import java.io.StringReader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
|
||||||
class KeyboardData
|
class KeyboardData
|
||||||
{
|
{
|
||||||
@@ -53,10 +56,10 @@ class KeyboardData
|
|||||||
|
|
||||||
public KeyboardData addNumPad()
|
public KeyboardData addNumPad()
|
||||||
{
|
{
|
||||||
if (!num_pad || _numPadKeyboardData == null)
|
if (!num_pad)
|
||||||
return this;
|
return this;
|
||||||
ArrayList<Row> extendedRows = new ArrayList<Row>();
|
ArrayList<Row> extendedRows = new ArrayList<Row>();
|
||||||
Iterator<Row> iterNumPadRows = _numPadKeyboardData.rows.iterator();
|
Iterator<Row> iterNumPadRows = _num_pad.rows.iterator();
|
||||||
for (Row row : rows)
|
for (Row row : rows)
|
||||||
{
|
{
|
||||||
ArrayList<KeyboardData.Key> keys = new ArrayList<Key>(row.keys);
|
ArrayList<KeyboardData.Key> keys = new ArrayList<Key>(row.keys);
|
||||||
@@ -101,10 +104,32 @@ class KeyboardData
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Row _bottomRow = null;
|
private static Row _bottom_row;
|
||||||
private static KeyboardData _numPadKeyboardData = null;
|
private static KeyboardData _num_pad;
|
||||||
|
private static KeyboardData _pin_entry;
|
||||||
private static Map<Integer, KeyboardData> _layoutCache = new HashMap<Integer, KeyboardData>();
|
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)
|
public static KeyboardData load(Resources res, int id)
|
||||||
{
|
{
|
||||||
KeyboardData l = _layoutCache.get(id);
|
KeyboardData l = _layoutCache.get(id);
|
||||||
@@ -112,13 +137,9 @@ class KeyboardData
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (_bottomRow == null)
|
XmlResourceParser parser = res.getXml(id);
|
||||||
_bottomRow = parse_bottom_row(res.getXml(R.xml.bottom_row));
|
l = parse_keyboard(parser);
|
||||||
if (_numPadKeyboardData == null)
|
parser.close();
|
||||||
{
|
|
||||||
_numPadKeyboardData = parse_keyboard(res.getXml(R.xml.numpad));
|
|
||||||
}
|
|
||||||
l = parse_keyboard(res.getXml(id));
|
|
||||||
_layoutCache.put(id, l);
|
_layoutCache.put(id, l);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -129,20 +150,35 @@ class KeyboardData
|
|||||||
return l;
|
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"))
|
if (!expect_tag(parser, "keyboard"))
|
||||||
throw new Exception("Empty layout file");
|
throw new Exception("Empty layout file");
|
||||||
boolean bottom_row = parser.getAttributeBooleanValue(null, "bottom_row", true);
|
boolean bottom_row = attribute_bool(parser, "bottom_row", true);
|
||||||
boolean extra_keys = parser.getAttributeBooleanValue(null, "extra_keys", true);
|
boolean extra_keys = attribute_bool(parser, "extra_keys", true);
|
||||||
boolean num_pad = parser.getAttributeBooleanValue(null, "num_pad", true);
|
boolean num_pad = attribute_bool(parser, "num_pad", true);
|
||||||
float specified_kw = parser.getAttributeFloatValue(null, "width", 0f);
|
float specified_kw = attribute_float(parser, "width", 0f);
|
||||||
ArrayList<Row> rows = new ArrayList<Row>();
|
ArrayList<Row> rows = new ArrayList<Row>();
|
||||||
while (expect_tag(parser, "row"))
|
while (expect_tag(parser, "row"))
|
||||||
rows.add(Row.parse(parser));
|
rows.add(Row.parse(parser));
|
||||||
float kw = (specified_kw != 0f) ? specified_kw : compute_max_width(rows);
|
float kw = (specified_kw != 0f) ? specified_kw : compute_max_width(rows);
|
||||||
if (bottom_row)
|
if (bottom_row)
|
||||||
rows.add(_bottomRow.updateWidth(kw));
|
rows.add(_bottom_row.updateWidth(kw));
|
||||||
return new KeyboardData(rows, kw, extra_keys, num_pad);
|
return new KeyboardData(rows, kw, extra_keys, num_pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,7 +190,7 @@ class KeyboardData
|
|||||||
return w;
|
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"))
|
if (!expect_tag(parser, "row"))
|
||||||
throw new Exception("Failed to parse bottom row");
|
throw new Exception("Failed to parse bottom row");
|
||||||
@@ -193,12 +229,12 @@ class KeyboardData
|
|||||||
keysWidth = kw;
|
keysWidth = kw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Row parse(XmlResourceParser parser) throws Exception
|
public static Row parse(XmlPullParser parser) throws Exception
|
||||||
{
|
{
|
||||||
ArrayList<Key> keys = new ArrayList<Key>();
|
ArrayList<Key> keys = new ArrayList<Key>();
|
||||||
int status;
|
int status;
|
||||||
float h = parser.getAttributeFloatValue(null, "height", 1f);
|
float h = attribute_float(parser, "height", 1f);
|
||||||
float shift = parser.getAttributeFloatValue(null, "shift", 0f);
|
float shift = attribute_float(parser, "shift", 0f);
|
||||||
while (expect_tag(parser, "key"))
|
while (expect_tag(parser, "key"))
|
||||||
keys.add(Key.parse(parser));
|
keys.add(Key.parse(parser));
|
||||||
return new Row(keys, h, shift);
|
return new Row(keys, h, shift);
|
||||||
@@ -264,18 +300,18 @@ class KeyboardData
|
|||||||
indication = i;
|
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 k0 = Corner.parse_of_attr(parser, "key0");
|
||||||
Corner k1 = Corner.parse_of_attr(parser, "key1");
|
Corner k1 = Corner.parse_of_attr(parser, "key1");
|
||||||
Corner k2 = Corner.parse_of_attr(parser, "key2");
|
Corner k2 = Corner.parse_of_attr(parser, "key2");
|
||||||
Corner k3 = Corner.parse_of_attr(parser, "key3");
|
Corner k3 = Corner.parse_of_attr(parser, "key3");
|
||||||
Corner k4 = Corner.parse_of_attr(parser, "key4");
|
Corner k4 = Corner.parse_of_attr(parser, "key4");
|
||||||
float width = parser.getAttributeFloatValue(null, "width", 1f);
|
float width = attribute_float(parser, "width", 1f);
|
||||||
float shift = parser.getAttributeFloatValue(null, "shift", 0.f);
|
float shift = attribute_float(parser, "shift", 0.f);
|
||||||
boolean edgekeys = parser.getAttributeBooleanValue(null, "edgekeys", false);
|
boolean edgekeys = attribute_bool(parser, "edgekeys", false);
|
||||||
String indication = parser.getAttributeValue(null, "indication");
|
String indication = parser.getAttributeValue(null, "indication");
|
||||||
while (parser.next() != XmlResourceParser.END_TAG)
|
while (parser.next() != XmlPullParser.END_TAG)
|
||||||
continue ;
|
continue ;
|
||||||
return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys, indication);
|
return new Key(k0, k1, k2, k3, k4, width, shift, edgekeys, indication);
|
||||||
}
|
}
|
||||||
@@ -386,7 +422,7 @@ class KeyboardData
|
|||||||
localized = l;
|
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);
|
String name = parser.getAttributeValue(null, attr);
|
||||||
boolean localized = false;
|
boolean localized = false;
|
||||||
@@ -426,37 +462,56 @@ class KeyboardData
|
|||||||
|
|
||||||
public Key apply(Key k)
|
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,
|
apply(k.key3), apply(k.key4), k.width, k.shift, k.edgekeys,
|
||||||
k.indication);
|
k.indication);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Corner apply(Corner c)
|
protected Corner apply_key0(Corner c)
|
||||||
|
{
|
||||||
|
return apply(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Corner apply(Corner c)
|
||||||
{
|
{
|
||||||
if (c == null)
|
if (c == null)
|
||||||
return null;
|
return null;
|
||||||
KeyValue kv = apply(c.kv, c.localized);
|
KeyValue kv = apply(c.kv, c.localized);
|
||||||
if (kv == null)
|
return (kv == null) ? null : new Corner(kv, c.localized);
|
||||||
return null;
|
|
||||||
return Corner.of_kv(kv);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Parsing utils */
|
/** Parsing utils */
|
||||||
|
|
||||||
/** Returns [false] on [END_DOCUMENT] or [END_TAG], [true] otherwise. */
|
/** 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;
|
int status;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
status = parser.next();
|
status = parser.next();
|
||||||
if (status == XmlResourceParser.END_DOCUMENT || status == XmlResourceParser.END_TAG)
|
if (status == XmlPullParser.END_DOCUMENT || status == XmlPullParser.END_TAG)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
while (status != XmlResourceParser.START_TAG);
|
while (status != XmlPullParser.START_TAG);
|
||||||
if (!parser.getName().equals(name))
|
if (!parser.getName().equals(name))
|
||||||
throw new Exception("Unknow tag: " + parser.getName());
|
throw new Exception("Unknow tag: " + parser.getName());
|
||||||
return true;
|
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()
|
public void clear()
|
||||||
{
|
{
|
||||||
|
for (Pointer p : _ptrs)
|
||||||
|
stopKeyRepeat(p);
|
||||||
_ptrs.clear();
|
_ptrs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,10 +82,10 @@ public final class Pointers implements Handler.Callback
|
|||||||
if (getLatched(key, kv) != null)
|
if (getLatched(key, kv) != null)
|
||||||
return; // Already latched, don't add an other pointer.
|
return; // Already latched, don't add an other pointer.
|
||||||
Pointer ptr = new Pointer(-1, key, kv, 0.f, 0.f, Modifiers.EMPTY);
|
Pointer ptr = new Pointer(-1, key, kv, 0.f, 0.f, Modifiers.EMPTY);
|
||||||
ptr.flags &= ~KeyValue.FLAG_LATCH;
|
ptr.flags &= ~(KeyValue.FLAG_LATCH | KeyValue.FLAG_LOCK);
|
||||||
ptr.flags |= KeyValue.FLAG_LOCK | KeyValue.FLAG_FAKE_PTR;
|
ptr.flags |= KeyValue.FLAG_FAKE_PTR;
|
||||||
if (locked)
|
if (locked)
|
||||||
ptr.flags = (ptr.flags & ~KeyValue.FLAG_LOCK) | KeyValue.FLAG_LOCKED;
|
ptr.flags |= KeyValue.FLAG_LOCKED;
|
||||||
_ptrs.add(ptr);
|
_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);
|
clear();
|
||||||
if (ptr == null)
|
|
||||||
return;
|
|
||||||
stopKeyRepeat(ptr);
|
|
||||||
removePtr(ptr);
|
|
||||||
_handler.onPointerFlagsChanged(true);
|
_handler.onPointerFlagsChanged(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,9 +1,11 @@
|
|||||||
package juloo.keyboard2;
|
package juloo.keyboard2;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceActivity;
|
import android.preference.PreferenceActivity;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
public class SettingsActivity extends PreferenceActivity
|
public class SettingsActivity extends PreferenceActivity
|
||||||
{
|
{
|
||||||
@@ -12,6 +14,10 @@ public class SettingsActivity extends PreferenceActivity
|
|||||||
{
|
{
|
||||||
detectSystemTheme();
|
detectSystemTheme();
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
// The preferences can't be read when in direct-boot mode. Avoid crashing
|
||||||
|
// and don't allow changing the settings.
|
||||||
|
try { getPreferenceManager().getSharedPreferences(); }
|
||||||
|
catch (Exception _e) { fallbackEncrypted(); return; }
|
||||||
addPreferencesFromResource(R.xml.settings);
|
addPreferencesFromResource(R.xml.settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,4 +32,18 @@ public class SettingsActivity extends PreferenceActivity
|
|||||||
setTheme(android.R.style.Theme_DeviceDefault_Light);
|
setTheme(android.R.style.Theme_DeviceDefault_Light);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fallbackEncrypted()
|
||||||
|
{
|
||||||
|
// Can't communicate with the user here.
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onStop()
|
||||||
|
{
|
||||||
|
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.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
@@ -11,12 +12,20 @@ public class Theme
|
|||||||
{
|
{
|
||||||
public final Paint keyBgPaint = new Paint();
|
public final Paint keyBgPaint = new Paint();
|
||||||
public final Paint keyDownBgPaint = new Paint();
|
public final Paint keyDownBgPaint = new Paint();
|
||||||
|
public final Paint keyBorderPaint = new Paint();
|
||||||
public final int lockedColor;
|
public final int lockedColor;
|
||||||
public final int activatedColor;
|
public final int activatedColor;
|
||||||
public final int labelColor;
|
public final int labelColor;
|
||||||
public final int subLabelColor;
|
public final int subLabelColor;
|
||||||
|
public final int secondaryLabelColor;
|
||||||
|
|
||||||
public final float keyBorderRadius;
|
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 int colorNavBar;
|
||||||
public final boolean isLightNavBar;
|
public final boolean isLightNavBar;
|
||||||
@@ -30,7 +39,8 @@ public class Theme
|
|||||||
public Theme(Context context, AttributeSet attrs)
|
public Theme(Context context, AttributeSet attrs)
|
||||||
{
|
{
|
||||||
TypedArray s = context.getTheme().obtainStyledAttributes(attrs, R.styleable.keyboard, 0, 0);
|
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));
|
keyDownBgPaint.setColor(s.getColor(R.styleable.keyboard_colorKeyActivated, 0));
|
||||||
// colorKeyboard = s.getColor(R.styleable.keyboard_colorKeyboard, 0);
|
// colorKeyboard = s.getColor(R.styleable.keyboard_colorKeyboard, 0);
|
||||||
colorNavBar = s.getColor(R.styleable.keyboard_navigationBarColor, 0);
|
colorNavBar = s.getColor(R.styleable.keyboard_navigationBarColor, 0);
|
||||||
@@ -39,7 +49,16 @@ public class Theme
|
|||||||
activatedColor = s.getColor(R.styleable.keyboard_colorLabelActivated, 0);
|
activatedColor = s.getColor(R.styleable.keyboard_colorLabelActivated, 0);
|
||||||
lockedColor = s.getColor(R.styleable.keyboard_colorLabelLocked, 0);
|
lockedColor = s.getColor(R.styleable.keyboard_colorLabelLocked, 0);
|
||||||
subLabelColor = s.getColor(R.styleable.keyboard_colorSubLabel, 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);
|
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();
|
s.recycle();
|
||||||
_keyLabelPaint = initLabelPaint(Paint.Align.CENTER, null);
|
_keyLabelPaint = initLabelPaint(Paint.Align.CENTER, null);
|
||||||
_keySubLabelPaint = initLabelPaint(Paint.Align.LEFT, null);
|
_keySubLabelPaint = initLabelPaint(Paint.Align.LEFT, null);
|
||||||
@@ -67,7 +86,15 @@ public class Theme
|
|||||||
return _indicationPaint;
|
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 paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
paint.setTextAlign(align);
|
paint.setTextAlign(align);
|
||||||
@@ -76,7 +103,7 @@ public class Theme
|
|||||||
return (paint);
|
return (paint);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Typeface _key_font = null;
|
static Typeface _key_font = null;
|
||||||
|
|
||||||
static public Typeface getKeyFont(Context context)
|
static public Typeface getKeyFont(Context context)
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,2 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<!-- materialdesignicons.com keyboard @Google -->
|
||||||
<!-- Generated by IcoMoon.io -->
|
<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>
|
||||||
<!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>
|
|
||||||
|
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"?>
|
<?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" >
|
<!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">
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-55 0 2103 2048">
|
||||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
|
||||||
<path fill="currentColor"
|
<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
|
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.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
|
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
|
||||||
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
|
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
|
||||||
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
|
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
|
||||||
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" />
|
M115.181 1349.29q-0.307617 0 1.73828 -2.04492l2.18457 -1.87891z" />
|
||||||
</g>
|
|
||||||
|
|
||||||
</svg>
|
</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