Compare commits

...

73 Commits

Author SHA1 Message Date
Jules Aguillon
cd5ca56226 Release 1.24.0 (36) 2023-08-18 12:29:17 +02:00
Shareef101
491e72f247 Add urdu phonetic layout (#413) 2023-08-18 12:20:41 +02:00
Dimethylebutane
c3a5dc63f2 Added french bépo layout (adapted) (#402) 2023-08-18 12:15:43 +02:00
Eluc
6cb6f2541b Add Bitcoin symbol to Fn+b (#434) 2023-08-18 12:14:20 +02:00
Jules Aguillon
5123ce5417 Fix slider movements changing input focus
The slider was repeatedly sending arrow keys, which change the focused
input when the end of a text box is hit.

A new key is added that implements cursor movements using the
`InputConnection` API.
The new keys are defined as `KeyValue.Editing`, which are no longer only
context menu actions.

The behavior when a selection has started is changed. The selection is
modified instead of cleared even when shift isn't pressed or the
selection would become empty.

Fallbacks to sending arrow keys for editors that do not support the API,
like Termux.
2023-08-17 12:47:44 +02:00
Jules Aguillon
2dc0ce066d Fix inconsistent initial spacing between keys
Settings defined with `get_dip_pref` had a wrong default value on first
launch.

The "right" default value was used after the shared preferences are
populated.
2023-08-16 18:25:20 +02:00
Eluc
ab05d8314b Create latn_qwertz_fr_CH.xml (#390)
Adapted from qwertz DE to match qwertz fr_CH layout.

Added all missing characters with accents needed in French while leaving the most common Swiss German characters as it is on the Swiss layout PC keyboard.
Re-organized some special characters to be in a similar position than the PC layout.

* Add locale fr-CH
2023-08-16 16:14:38 +02:00
Validbit
405e63d5c2 Move voice input key (#433)
Move the voice input key to the top-left corner of the return key to reduce accidentally entering voice input, which is disrupting.
2023-08-16 12:27:00 +02:00
Jules Aguillon
5822f98bbb Migrate layouts preferences
The new `layouts` preference replaces three previous preferences:

    layout
    second_layout
    custom_layout

Add a preference migration function, which first migration is to
migrate layouts into the new preference.

The migration must also be called from the SettingsActivity as it might
use a different preference store due to the boot-aware preference copy.
2023-08-16 12:21:40 +02:00
Jules Aguillon
613aa283bd LayoutsPreference: Remove cross button for custom layouts
Remove the cross button on the right of custom layouts to reduce
accidental removal.
A remove button is added in the dialog for modifying the layout.
2023-08-16 12:21:38 +02:00
Jules Aguillon
ddceb69d4e LayoutsPreference: Modify custom layout
Clicking on a custom layout opens a dialog for modifying the layout
description instead of the dialog for selecting a layout.
2023-08-16 12:21:25 +02:00
Jules Aguillon
4584e8289b Remove unused class LayoutListPreference
This class is not used since the introduction of [LayoutsPreference].
2023-08-16 12:21:25 +02:00
Jules Aguillon
febc23776f ListGroupPreference: Fix change items
[Preference.onClick] is apparently not called on [Item]s, though it is
on [AddButton].

Workaround this by listening on click events on the view.
2023-08-16 12:21:25 +02:00
Jules Aguillon
500f4e41d3 Allow multiple custom layouts
This merges the "Layouts" option with the "Custom layout" option.
A custom layout becomes an item in the "Layouts" list among the other
layouts. It's possible to add several custom layouts.

Selecting the "Custom layout" item in the list opens a second dialog for
entering the layout description.

Layouts are serialized as JSON object and are decoded solely in the
LayoutsPreference class.
2023-08-16 12:21:23 +02:00
Jules Aguillon
8611dbcfa0 CustomExtraKeysPreference: Reusable edit text layout
This layout is generically used by CustomExtraKeysPreference and
LayoutsPreference.
2023-08-16 12:20:40 +02:00
Jules Aguillon
03f2b8df70 ListGroupPreference.Serializer: Allow exceptions
(De)serializing might raise exceptions, which are handled by dropping
the failing item.
2023-08-16 12:20:40 +02:00
Jules Aguillon
0269cd65ea ListGroupPreference: Make items abstract
Allow items to be of any class instead of strings.

Item serialization and deserialization methods are in a separate class
because they are also used in a static context.
2023-08-16 12:20:40 +02:00
polyctena
20ab3915e8 Update German Strings (#430)
Co-authored-by: Benjamin <f.weiss@stud.uni-goettingen.de>
2023-08-15 20:18:35 +02:00
Edgars
39a751a497 Add missing Latvian translations (#425) 2023-08-08 16:38:34 +02:00
Chasm Solacer
1ad8f79b5c Updated pl (Polish) translation (#424) 2023-08-07 20:48:13 +02:00
Validbit
12de2733a8 Updated Czech translation (#421) 2023-08-07 20:16:45 +02:00
sdrapha
78f521250f Update pt-Br translations 2023-08-07 18:38:53 +02:00
sdrapha
29106bc69a Add Superscript and Subscript letters 2023-08-07 18:38:53 +02:00
Rapha
f522a678f9 Add superscript, subscript, ª and º to optional extrakeys
And add description strings.
2023-08-07 18:38:53 +02:00
Rapha
c17dfdfe13 Add ordinals to ptbr extrakeys 2023-08-07 18:38:53 +02:00
Jules Aguillon
21316b77d7 Don't elide label of non-string keys
Several non-string keys can have a large label that shouldn't be elided,
for example ctrl, meta, send.

Also, change the cutoff to 3 characters as labels are easily colliding.
2023-08-07 13:11:21 +02:00
Jules Aguillon
eeae964ae6 check_layout: Warn about duplicate keys 2023-08-06 20:09:53 +02:00
Jules Aguillon
8d7b3efeb1 LayoutsPreference: Show layout display names
The internal name of layouts was rendered.
2023-08-06 19:54:38 +02:00
Jules Aguillon
ddc4ff1378 Describe editing keys
The new strings are used in the "Add keys to the keyboard" option.
2023-08-06 19:35:06 +02:00
Jules Aguillon
1c59347cca Add glyphs for editing keys
All from Material Design Icons.
2023-08-06 19:17:05 +02:00
Jules Aguillon
eb56c80ffb Elide custom keys labels
Make the font smaller for custom keys with a length above 1.
Draw up to 4 characters on keys.
2023-08-06 18:22:15 +02:00
Jules Aguillon
4d10556d49 Don't replace user selected dead keys
Don't replace dead-keys selected in the "Add keys to the keyboard"
option by an alternative.
2023-08-06 17:15:36 +02:00
Jules Aguillon
1eea9e25d2 Remove the Accents option
This option makes less sense since per-script extra keys. It's also
getting in the way of an eventual "dead-key or accented-letters" option.
2023-08-06 17:15:35 +02:00
Jules Aguillon
45905f5f3b Replace dead-keys when there's one alternative
The dead-key is replaced by its alternative if there's only one
specified.
Extra keys from every subtypes must be merged together to be able to
make this check.
2023-08-06 17:14:23 +02:00
Jules Aguillon
c26343cd42 method.xml: Specify extra keys alternatives 2023-08-06 17:14:23 +02:00
Jules Aguillon
cd95c589de Extra keys alternatives
For each extra key, a list of alternative can be specified. An extra key
won't be added to the keyboard if all its alternatives are already
present on it.

This is useful to avoid having the dead key for an accent and the
accented letters at the same time.
2023-08-06 17:14:23 +02:00
Rapha
0924df8d13 Update translations pt-br (#420) 2023-08-06 12:19:51 +02:00
Chasm Solacer
0fea071352 Updated pl (Polish) translation (#419) 2023-08-06 00:13:37 +02:00
Jules Aguillon
c46e5ec450 Add esc and tab to the Persian layout 2023-08-05 19:44:00 +02:00
Jules Aguillon
6054c2eec8 Add Persian to method.xml 2023-08-05 19:40:13 +02:00
Jules Aguillon
dcbb4c484c Modify arabic and persian numbers info function keys
And add function keys placeholders in the layouts.
2023-08-05 19:40:13 +02:00
Jules Aguillon
76f01122c2 Tweak check_layout.py
- Warn about missing esc, tab, f11_placeholder and f12_placeholder.
- Don't check non-layout files and special layouts.
2023-08-05 19:40:13 +02:00
Stephen Karl Larroque
94bd9c6bc8 docs: mention Calculator++ (#418)
* docs: mention Calculator++

Signed-off-by: Stephen L. <LRQ3000@gmail.com>
2023-08-05 17:37:27 +02:00
Jules Aguillon
7ce0c6e37a sync_translations.py: Report number of missing strings 2023-08-05 17:27:56 +02:00
Jules Aguillon
9ea06594d1 Update French translations 2023-08-05 16:52:26 +02:00
Jules Aguillon
ae791ab292 Translatable key descriptions
Key descriptions are shown in the "extra keys" option and can now be
translated.
2023-08-05 16:45:57 +02:00
Jules Aguillon
8b95053566 LauncherActivity: Visible, clickable and untranslatable link
The link to Github was not clickable and couldn't easily be made so in
its current form.

Render the link in its own paragraph and do not hide the URL.
2023-08-04 17:31:06 +02:00
Jules Aguillon
e0dd145bb4 Correct Farsi strings 2023-08-04 17:11:00 +02:00
Jules Aguillon
4abea0e878 Settings: Increase vibration values 2023-08-02 21:02:07 +02:00
Jules Aguillon
be97364b34 font: Move glyphs into the PUA
Glyphs in the Private Use Area at uE000 will no longer conflict with
fallback fonts in the "extra keys" option.
2023-08-02 20:39:37 +02:00
Jules Aguillon
3c3955e583 Settings: Move "extra keys" higher on the page
And "Accents" lower.
2023-08-02 20:17:41 +02:00
Jules Aguillon
22458cd445 check_layout.py: Warn about editing and function keys 2023-08-02 12:09:15 +02:00
Jules Aguillon
3598e19894 Update check_layout.output 2023-07-31 00:10:49 +02:00
Jules Aguillon
9bd8b08544 ListGroupPreference: Allow to modify items 2023-07-30 23:34:48 +02:00
Jules Aguillon
dad5f57a03 Allow more than 2 layouts
The two layout selection options are replaced by a ListGroupPreference
that allow to enter an arbitrary amount of layouts.

The "switch_second" and "switch_second_back" keys are replaced by
"switch_forward" and "switch_backward", which allow to cycle through the
selected layouts in two directions.

Layouts are changed to place these two key on the space bar.
The backward key is not shown if there's only two layouts.
2023-07-30 21:44:14 +02:00
Jules Aguillon
818aa4c7d5 ListGroupPreference: Allow hide the "remove" button 2023-07-30 21:34:01 +02:00
Jules Aguillon
b4a1ac48bb ListGroupPreference: Overrideable "add" button 2023-07-30 21:34:01 +02:00
Jules Aguillon
0856fb4e31 Refactor: Split out ListGroupPreference
Split out the implementation of a string-list preference from
CustomExtraKeysPreference.

Allows to share the implementation with future preferences.
2023-07-29 18:42:36 +02:00
Ben Slusky
0a114bd2bc Add dagger, double dagger, section mark, and pilcrow as extra keys on QWERTY-like layouts (#410)
* Add section mark as an extra key in QWERTY-like layouts that don't have it already

* Add dagger (also double dagger) as an extra key in QWERTY-like layouts
2023-07-29 18:42:20 +02:00
Jules Aguillon
427ef6a97d Add '=' to pin entry layout
Might be useful in spreadsheets.
2023-07-29 17:40:21 +02:00
Jules Aguillon
fce8ff7ce2 Add option to disable pin entry layout
The pin entry layout might be inferior for some usecases and people
might be more used to the numeric layout.
2023-07-29 17:29:45 +02:00
KuRa KuRd
d1f0d5a7bf Correct Kurdish layout name (#407)
Correct layout name to Kurdish because Kurdish and Arabic are totally two different language.
2023-07-23 17:09:57 +02:00
adu
f60927edac Updated Spanish translation (#404) 2023-07-20 14:02:18 +02:00
Jules Aguillon
8b2c07c9cb Refactor: Centralize logging in a static class
This new class will help write more logs. The LogPrinter is no longer
created everytime the keyboard is opened.

An error log is added if failing to load the custom extra keys.
2023-07-19 23:30:58 +02:00
Jules Aguillon
458e17bf31 Add custom extra keys preference
This is a new section in the extra keys option that allows to enter
arbitrary strings which are then added to the keyboard.

A new string is needed for the title of the section, Android's icons and
strings are used as much as possible to avoid adding more strings.

Keys are stored in the preferences as a JSON array of strings.
2023-07-19 23:30:58 +02:00
Jules Aguillon
324aa26ba4 Refactor: Make KeyValue.makeStringKey public 2023-07-19 23:30:58 +02:00
Jules Aguillon
6747669c2d Refactor: Use a PreferenceCategory for extra keys
This removes the need for a layout definition and adds a title before
the prefs.
It's a prerequise for the custom keys preference.
2023-07-19 23:30:58 +02:00
Reza Hosseinzadeh
1097b297d3 Improve the Persian layout (#397)
Change some characters' position
2023-07-17 19:33:09 +02:00
Jules Aguillon
4669192a01 Refactor: Don't define extra keys in xml
The current approach is hard to maintain, for example the last key
"autofill" was not displayed.

This implements a PreferenceGroup that contains the check boxes for
every extra keys without involving listing the preferences in
settings.xml.

A custom layout is used to remove the 'title' text view.
The list of extra keys is moved into the new class.
'ExtraKeyCheckBoxPreference' becomes a nested class.
2023-07-09 18:14:43 +02:00
Jules Aguillon
a2957a43d6 Add symbol ₴ to Fn+h and to Ukrainian 2023-07-09 16:12:13 +02:00
Jules Aguillon
37d4a523bb Remove use of Arrays.copyOf
The function has been added in API 9.
2023-07-05 18:58:27 +02:00
Validbit
ef4477d50c Updated/Added Czech translation + 2 common Fn keys (#387) 2023-07-02 16:12:19 +02:00
Jules Aguillon
7f79bc358d Fix descriptions
Short description can't exceed 80 characters.
Removed trailing space.
2023-07-01 17:44:14 +02:00
96 changed files with 2268 additions and 892 deletions

View File

@@ -1,5 +1,5 @@
<?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="35" android:versionName="1.23.0" android:hardwareAccelerated="false"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="36" android:versionName="1.24.0" android:hardwareAccelerated="false">
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="33"/> <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="33"/>
<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">

View File

@@ -149,6 +149,7 @@ To check that `strings.xml` is formatted correctly, run
The store description is found in `metadata/android/<locale>/`, The store description is found in `metadata/android/<locale>/`,
`short_description.txt` and `full_description.txt`. `short_description.txt` and `full_description.txt`.
The short description must not exceed 80 characters.
Translating changelogs is not useful. Translating changelogs is not useful.
The app name might be partially translated, the "unexpected" word should remain The app name might be partially translated, the "unexpected" word should remain

View File

@@ -20,6 +20,9 @@ Now perfect for everyday use.
This application contains no ads, doesn't make any network requests and is Open Source. This application contains no ads, doesn't make any network requests and is Open Source.
## Similar apps
* [Calculator++](https://github.com/Bubu/android-calculatorpp) - Calculator with a similar UX, swipe to corners for advanced math symbols and operators. Works up to Android 13 but maybe unmaintained.
## Contributing ## Contributing
For instructions on building the application, see For instructions on building the application, see

View File

@@ -1,24 +1,27 @@
# res/xml/arab_alt.xml # res/xml/arab_alt.xml
Layout includes some ASCII punctuation but not all, missing: !, ", ', +, -, /, :, ;, <, =, >, ?, [, \, ], _, |, ~ Layout includes some ASCII punctuation but not all, missing: !, ", ', +, -, /, :, ;, <, =, >, ?, [, \, ], _, |, ~
1 warnings Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
2 warnings
# res/xml/arab_pc_ckb.xml # res/xml/arab_pc_ckb.xml
Layout includes some ASCII punctuation but not all, missing: ", %, ', +, ,, ., :, ;, <, =, >, ?, `, |, ~ Layout includes some ASCII punctuation but not all, missing: ", %, ', +, ,, ., :, ;, <, =, >, ?, `, |, ~
1 warnings 1 warnings
# res/xml/arab_pc_ir.xml # res/xml/arab_pc_ir.xml
Layout includes some ASCII punctuation but not all, missing: ", $, %, ', *, ,, /, ;, <, =, >, ?, [, \, ], ^, _, `, {, |, }, ~ Duplicate keys: (, )
1 warnings Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], `, {, |, }
2 warnings
# res/xml/arab_pc.xml # res/xml/arab_pc.xml
Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, | Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, |
1 warnings 1 warnings
# res/xml/beng_national.xml # res/xml/beng_national.xml
Layout includes some ASCII punctuation but not all, missing: $ Layout includes some ASCII punctuation but not all, missing: $
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
Layout doesn't specify a script. Layout doesn't specify a script.
2 warnings 3 warnings
# res/xml/beng_provat.xml # res/xml/beng_provat.xml
Layout includes some ASCII punctuation but not all, missing: $, &, *, ., /, <, >, [, \, ], `, {, |, } Layout includes some ASCII punctuation but not all, missing: $, &, *, ., /, <, >, [, \, ], `, {, |, }
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
Layout doesn't specify a script. Layout doesn't specify a script.
2 warnings 3 warnings
Not a layout file: res/xml/bottom_row.xml
# res/xml/cyrl_jcuken_ru.xml # res/xml/cyrl_jcuken_ru.xml
0 warnings 0 warnings
# res/xml/cyrl_jcuken_uk.xml # res/xml/cyrl_jcuken_uk.xml
@@ -28,17 +31,16 @@ Layout includes some ASCII punctuation but not all, missing: ~
1 warnings 1 warnings
# res/xml/deva_alt.xml # res/xml/deva_alt.xml
Layout includes some ASCII punctuation but not all, missing: #, $, %, &, ', (, ), *, +, ., /, :, <, =, >, @, [, \, ], ^, _, `, {, |, }, ~ Layout includes some ASCII punctuation but not all, missing: #, $, %, &, ', (, ), *, +, ., /, :, <, =, >, @, [, \, ], ^, _, `, {, |, }, ~
1 warnings Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
2 warnings
# res/xml/deva_inscript.xml # res/xml/deva_inscript.xml
Duplicate keys: , ।
Layout includes some ASCII punctuation but not all, missing: ", $, ', ^, _, `, | Layout includes some ASCII punctuation but not all, missing: ", $, ', ^, _, `, |
1 warnings Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
# res/xml/greekmath.xml
Layout includes some ASCII punctuation but not all, missing: !, ", #, $, %, &, ', (, ), *, +, ,, -, /, :, ;, <, >, ?, @, [, \, ], _, `, {, |, }, ~
Layout redefines the bottom row but some important keys are missing, missing: change_method, config, ctrl, switch_emoji, switch_second
Layout doesn't specify a script.
3 warnings 3 warnings
# res/xml/grek_qwerty.xml # res/xml/grek_qwerty.xml
0 warnings Duplicate keys: ;
1 warnings
# res/xml/hang_dubeolsik_kr.xml # res/xml/hang_dubeolsik_kr.xml
0 warnings 0 warnings
# res/xml/hebr_1_il.xml # res/xml/hebr_1_il.xml
@@ -49,15 +51,21 @@ Layout includes some ASCII punctuation but not all, missing: (, ), <, >, [, ], {
1 warnings 1 warnings
# res/xml/latn_azerty_fr.xml # res/xml/latn_azerty_fr.xml
0 warnings 0 warnings
# res/xml/latn_bepo_fr.xml
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
1 warnings
# res/xml/latn_bone.xml # res/xml/latn_bone.xml
Layout includes some ASCII punctuation but not all, missing: $ Layout includes some ASCII punctuation but not all, missing: $
1 warnings Layout redefines the bottom row but some important keys are missing, missing: switch_backward
2 warnings
# res/xml/latn_colemak.xml # res/xml/latn_colemak.xml
0 warnings 0 warnings
# res/xml/latn_dvorak.xml # res/xml/latn_dvorak.xml
0 warnings 0 warnings
# res/xml/latn_neo2.xml # res/xml/latn_neo2.xml
0 warnings Duplicate keys: -
Layout redefines the bottom row but some important keys are missing, missing: switch_forward
2 warnings
# res/xml/latn_qwerty_br.xml # res/xml/latn_qwerty_br.xml
0 warnings 0 warnings
# res/xml/latn_qwerty_es.xml # res/xml/latn_qwerty_es.xml
@@ -73,9 +81,11 @@ Layout includes some ASCII punctuation but not all, missing: $
# res/xml/latn_qwerty_ro.xml # res/xml/latn_qwerty_ro.xml
0 warnings 0 warnings
# res/xml/latn_qwerty_se.xml # res/xml/latn_qwerty_se.xml
0 warnings Duplicate keys: !, ', ,, -, ., ?
1 warnings
# res/xml/latn_qwerty_tr.xml # res/xml/latn_qwerty_tr.xml
0 warnings Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
1 warnings
# res/xml/latn_qwerty_us.xml # res/xml/latn_qwerty_us.xml
0 warnings 0 warnings
# res/xml/latn_qwerty_vi.xml # res/xml/latn_qwerty_vi.xml
@@ -83,34 +93,25 @@ Layout includes some ASCII punctuation but not all, missing: \
1 warnings 1 warnings
# res/xml/latn_qwertz_cz_multifunctional.xml # res/xml/latn_qwertz_cz_multifunctional.xml
Layout includes some ASCII punctuation but not all, missing: ` Layout includes some ASCII punctuation but not all, missing: `
1 warnings Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
2 warnings
# res/xml/latn_qwertz_cz.xml # res/xml/latn_qwertz_cz.xml
0 warnings Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
1 warnings
# res/xml/latn_qwertz_de.xml # res/xml/latn_qwertz_de.xml
0 warnings 0 warnings
# res/xml/latn_qwertz_fr_ch.xml
0 warnings
# res/xml/latn_qwertz_hu.xml # res/xml/latn_qwertz_hu.xml
0 warnings 0 warnings
# res/xml/latn_qwertz_sk.xml # res/xml/latn_qwertz_sk.xml
Layout includes some ASCII punctuation but not all, missing: \, ` Layout includes some ASCII punctuation but not all, missing: \, `
1 warnings Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
2 warnings
# res/xml/latn_qwertz.xml # res/xml/latn_qwertz.xml
0 warnings 0 warnings
Not a layout file: res/xml/method.xml # res/xml/urdu_phonetic_ur.xml
Not a layout file: res/xml/number_row.xml Duplicate keys:
# res/xml/numeric.xml Layout includes some ASCII punctuation but not all, missing: <, >, ?, `, |, ~
Layout includes some ASCII punctuation but not all, missing: &, ?, @, ` Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
Layout redefines the bottom row but some important keys are missing, missing: change_method, config, switch_emoji, switch_numeric, switch_second
Layout doesn't specify a script.
3 warnings 3 warnings
# res/xml/numpad.xml
Layout includes some ASCII punctuation but not all, missing: !, ", #, $, %, &, ', (, ), ,, :, ;, <, >, ?, @, [, \, ], ^, _, `, {, |, }, ~
Layout doesn't define some important keys, missing: backspace, delete
Layout redefines the bottom row but some important keys are missing, missing: action, change_method, config, ctrl, down, enter, fn, left, right, space, switch_emoji, switch_numeric, switch_second, up
Layout doesn't specify a script.
4 warnings
# res/xml/pin.xml
Layout includes some ASCII punctuation but not all, missing: !, ", $, %, &, ', ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, ~
Layout redefines the bottom row but some important keys are missing, missing: change_method, config, ctrl, fn, switch_emoji, switch_second
Layout doesn't specify a script.
3 warnings
Not a layout file: res/xml/settings.xml

View File

@@ -3,6 +3,11 @@ import sys
warning_count = 0 warning_count = 0
KNOWN_NOT_LAYOUT = set([
"res/xml/number_row.xml", "res/xml/numpad.xml", "res/xml/pin.xml",
"res/xml/bottom_row.xml", "res/xml/settings.xml", "res/xml/method.xml",
"res/xml/greekmath.xml", "res/xml/numeric.xml" ])
def warn(msg): def warn(msg):
global warning_count global warning_count
print(msg) print(msg)
@@ -31,27 +36,42 @@ def unexpected_keys(keys, symbols, msg):
def parse_layout(fname): def parse_layout(fname):
keys = set() keys = set()
dup = set()
root = ET.parse(fname).getroot() root = ET.parse(fname).getroot()
if root.tag != "keyboard": if root.tag != "keyboard":
return None return None
for row in root: for row in root:
for key in row: for key in row:
for attr in key.keys(): for attr in key.keys():
keys.add(key.get(attr).removeprefix("\\")) if attr.startswith("key"):
return root, keys k = key.get(attr).removeprefix("\\")
if k in keys: dup.add(k)
keys.add(k)
return root, keys, dup
def check_layout(layout): def check_layout(layout):
root, keys = layout root, keys, dup = layout
if len(dup) > 0: warn("Duplicate keys: " + key_list_str(dup))
missing_some_of(keys, "~!@#$%^&*(){}`[]=\\-_;:/.,?<>'\"+|", "ASCII punctuation") missing_some_of(keys, "~!@#$%^&*(){}`[]=\\-_;:/.,?<>'\"+|", "ASCII punctuation")
missing_some_of(keys, "0123456789", "digits") missing_some_of(keys, "0123456789", "digits")
missing_some_of(keys, ["f11_placeholder", "f12_placeholder"]) missing_required(keys,
missing_some_of(keys, ["esc", "tab"]) ["esc", "tab", "backspace", "delete",
missing_required(keys, ["backspace", "delete"], "Layout doesn't define some important keys") "f11_placeholder", "f12_placeholder"],
"Layout doesn't define some important keys")
unexpected_keys(keys,
["copy", "paste", "cut", "selectAll", "shareText",
"pasteAsPlainText", "undo", "redo", "replaceText",
"textAssist", "autofill" ],
"Layout contains editing keys")
unexpected_keys(keys,
[ "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9",
"f10", "f11", "f12" ],
"Layout contains function keys")
bottom_row_keys = [ bottom_row_keys = [
"ctrl", "fn", "switch_numeric", "change_method", "switch_emoji", "ctrl", "fn", "switch_numeric", "change_method", "switch_emoji",
"config", "switch_second", "enter", "action", "left", "up", "right", "config", "switch_forward", "switch_backward", "enter", "action",
"down", "space" "left", "up", "right", "down", "space"
] ]
if root.get("bottom_row") == "false": if root.get("bottom_row") == "false":
@@ -65,6 +85,8 @@ def check_layout(layout):
warn("Layout doesn't specify a script.") warn("Layout doesn't specify a script.")
for fname in sys.argv[1:]: for fname in sys.argv[1:]:
if fname in KNOWN_NOT_LAYOUT:
continue
layout = parse_layout(fname) layout = parse_layout(fname)
if layout == None: if layout == None:
print("Not a layout file: %s" % fname) print("Not a layout file: %s" % fname)

View File

@@ -54,10 +54,10 @@ def generate_arrays(out, layouts):
item.text = s item.text = s
elem.append(item) elem.append(item)
return elem return elem
none_item = [ ("none", "None") ] system_item = [ ("system", "@string/pref_layout_e_system") ]
custom_item = [ ("custom", "@string/pref_layout_e_custom") ] custom_item = [ ("custom", "@string/pref_layout_e_custom") ]
values_items, entries_items = zip(*(none_item + layouts + custom_item)) # unzip values_items, entries_items = zip(*(system_item + layouts + custom_item)) # unzip
ids_items = map(lambda s: "@xml/%s" % s if s not in ["none", "custom"] else "-1", values_items) ids_items = map(lambda s: "@xml/%s" % s if s not in ["system", "custom"] else "-1", values_items)
root = XML.Element("resources") root = XML.Element("resources")
root.append(XML.Comment(text="DO NOT EDIT. This file is generated, see gen_layouts.py.")) root.append(XML.Comment(text="DO NOT EDIT. This file is generated, see gen_layouts.py."))
root.append(mk_array("string-array", "pref_layout_values", values_items)) root.append(mk_array("string-array", "pref_layout_values", values_items))

View File

@@ -1,4 +1,4 @@
Diese Tastatur zeichnet sich dadurch aus, dass man zusätzliche Zeichen durch Wischgesten in Richtung der Tastenecken eingeben kann. Diese Tastatur zeichnet sich dadurch aus, dass man zusätzliche Zeichen durch Wischgesten in Richtung der Tastenecken eingeben kann.
Die Anwendung wurde ursprünglich für das Programmieren in Termux entwickelt. Die Anwendung wurde ursprünglich für das Programmieren in Termux entwickelt.
Mittlerweile ist sie auch für den täglichen Gebrauch perfekt geeignet. Mittlerweile ist sie auch für den täglichen Gebrauch perfekt geeignet.

View File

@@ -0,0 +1,9 @@
Allow selecting any number of standard and custom layouts.
Allow adding custom keys to the keyboard.
Changed behavior of auto-added keys (often dead-keys).
New layouts.
Improved layouts and language support.
Improved the space bar slider, and many more.
Updated translations.
Thanks to the contributors: @ChasmSolacer, @ElucGeek, @GoRaN909, @RZHSSNZDH, @Shareef101, @Validbit, @eandersons, @nitsvga, @polyctena, @sdrapha, @syskill

View File

@@ -0,0 +1,6 @@
La característica principal es que hay acceso a más caractéres deslizando hacia las esquinas de las teclas.
Esta aplicación fue originalmente diseñada para programadores que usaran Termux.
Ahora es perfecta para uso cotidiano.
La misma no contiene ningún anuncio/publicidad, no realiza peticiones de red y es de Fuente Abierta.

View File

@@ -1 +1 @@
Un teclado virtual ligero para desarrolladores. Un teclado virtual ligero para Android consciente de su privacidad.

View File

@@ -1 +1 @@
Легкая виртуальная клавиатура для пользователей, заботящихся о своей конфиденциальности. Легкая клавиатура для пользователей, заботящихся о конфиденциальности.

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content">
<EditText android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10dp"/>
</LinearLayout>

View File

@@ -2,7 +2,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">
<TextView style="@style/paragraph" android:text="@string/launcher_description"/> <TextView style="@style/paragraph" android:text="@string/launcher_description"/>
<Button style="@style/paragraph" android:text="@string/launcher_button_imesettings" android:onClick="launch_imesettings" android:layout_width="wrap_content"/> <Button style="@style/paragraph" android:text="@string/launcher_button_imesettings" android:onClick="launch_imesettings" android:layout_width="wrap_content"/>
<TextView style="@style/paragraph" android:text="@string/launcher_sourcecode" android:autoLink="web"/> <TextView style="@style/paragraph" android:text="@string/launcher_sourcecode"/>
<TextView style="@style/paragraph" android:text="https://github.com/Julow/Unexpected-Keyboard" android:autoLink="web" android:linksClickable="true"/>
<TextView android:id="@+id/launcher_tryhere_text" style="@style/paragraph" android:text="@string/launcher_tryhere"/> <TextView android:id="@+id/launcher_tryhere_text" style="@style/paragraph" android:text="@string/launcher_tryhere"/>
<EditText android:id="@+id/launcher_tryhere_area" style="@style/paragraph" android:inputType="text"/> <EditText android:id="@+id/launcher_tryhere_area" style="@style/paragraph" android:inputType="text"/>
</LinearLayout> </LinearLayout>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:minHeight="?android:attr/listPreferredItemHeightSmall">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/pref_layouts_add" android:textAppearance="?android:attr/textAppearanceListItemSmall"/>
</LinearLayout>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center">
<View android:layout_width="@dimen/pref_button_size" android:layout_height="@dimen/pref_button_size" android:background="@android:drawable/ic_menu_add"/>
</LinearLayout>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center">
</LinearLayout>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal">
<Button android:id="@+id/pref_listgroup_remove_btn" android:layout_width="@dimen/pref_button_size" android:layout_height="@dimen/pref_button_size" android:layout_gravity="center" android:background="@android:drawable/ic_menu_close_clear_cancel"/>
</LinearLayout>

View File

@@ -3,46 +3,49 @@
<string name="app_name" product="debug">Klávesnice Unexpected (pro ladění)</string> <string name="app_name" product="debug">Klávesnice Unexpected (pro ladění)</string>
<string name="app_name" product="default">Klávesnice Unexpected</string> <string name="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_portrait">In portrait mode</string> --> <string name="pref_portrait">V režimu na výšku</string>
<!-- <string name="pref_landscape">In landscape mode</string> --> <string name="pref_landscape">V režimu na šířku</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_label_brightness">Upravit jas nápisu</string>
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> --> <string name="pref_keyboard_opacity">Upravit průhlednost pozadí klávesnice</string>
<!-- <string name="pref_key_opacity">Adjust key opacity</string> --> <string name="pref_key_opacity">Upravit průhlednost kláves</string>
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> --> <string name="pref_key_activated_opacity">Upravit průhlednost stisknutých kláves</string>
<string name="pref_layout_title">Změnit rozvržení klávesnice</string> <string name="pref_layout_e_system">Dle nastavení systému</string>
<string name="pref_layout_e_system">V nastavení systému</string> <string name="pref_layout_e_custom">Vlastní rozvržení</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> --> <string name="pref_layouts_add">Přidat alternativní rozložení</string>
<string name="pref_accents_title">(Univerzální) Diakritická znaménka</string> <string name="pref_layouts_item">Rozložení %1$d: %2$s</string>
<string name="pref_accents_e_all_installed">Zobrazovat znaménka pro všechny instalované systémové jazyky</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_selected">Zobrazovat znaménka pouze pro současně zvolený jazyk</string> <string name="pref_custom_layout_title">Vlastní rozvržení</string>
<string name="pref_accents_e_none">Skrýt (univerzální) diakritická znaménka</string> <string name="pref_show_numpad_title">Zobrazit NumPad</string>
<!-- <string name="pref_show_numpad_title">Show NumPad</string> --> <string name="pref_show_numpad_never">Nikdy</string>
<!-- <string name="pref_show_numpad_never">Never</string> --> <string name="pref_show_numpad_landscape">Pouze v režimu na šířku</string>
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> --> <string name="pref_show_numpad_always">Vždy</string>
<!-- <string name="pref_show_numpad_always">Always</string> --> <string name="pref_number_row_title">Zobrazit řádek s čísly</string>
<!-- <string name="pref_number_row_title">Show number row</string> --> <string name="pref_number_row_summary">Přidá řádek s čísly nad klávesnici, pokud je NumPad skrytý</string>
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> --> <string name="pref_numpad_layout">Rozložení NumPadu</string>
<!-- <string name="pref_numpad_layout">NumPad layout</string> --> <string name="pref_numpad_layout_e_high_first">Vyšší číslice jako první (horní řádek 789)</string>
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> --> <string name="pref_numpad_layout_e_low_first">Nižší číslice jako první (horní řádek 123)</string>
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> --> <string name="pref_extra_keys_title">Přidat klávesy do klávesnice</string>
<!-- <string name="pref_extra_keys_title">Add keys to the keyboard</string> --> <string name="pref_extra_keys_custom">Přidat vlastní klávesy</string>
<!-- <string name="pref_second_layout_title">Secondary layout</string> --> <string name="pref_extra_keys_internal">Výbrané klávesy k přidaní do klávesnice</string>
<string name="pref_second_layout_title">Vedlejší rozvržení</string>
<string name="pref_second_layout_none">Žádné</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 zadání znaku/znaménka v rohu klávey (%s)</string>
<string name="pref_long_timeout_title">Časová prodleva opakování znaků</string> <string name="pref_long_timeout_title">Časová prodleva opakování znaků</string>
<string name="pref_long_interval_title">Interval opakování znaků</string> <string name="pref_long_interval_title">Interval opakování znaků</string>
<string name="pref_lock_double_tap_title">Dvojklik pro aktivaci caps lock(u)</string> <string name="pref_lock_double_tap_title">Dvojklik pro aktivaci Capslock(u)</string>
<string name="pref_lock_double_tap_summary">Dvojklik namísto držení modifikačních kláves po nějakou dobu</string> <string name="pref_lock_double_tap_summary">Dvojklik namísto držení modifikačních kláves po nějakou dobu</string>
<!-- <string name="pref_category_behavior">Behavior</string> --> <string name="pref_category_behavior">Chování</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_switch_input_immediate_title">Switch to the last used keyboard</string> --> <string name="pref_switch_input_immediate_title">Přepnout na posledně užívanou klávesnici</string>
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> --> <string name="pref_switch_input_immediate_summary">Jak bude klávesa pro přepnutí klávesnice reagovat</string>
<string name="pref_vibrate_title">Vibrace</string> <string name="pref_vibrate_title">Vibrace</string>
<string name="pref_vibrate_summary">Zapnout/Vypnout vibrace při stisku klávesy</string> <string name="pref_vibrate_summary">Preference intenzity vibrací při stisku klávesy</string>
<string name="pref_pin_entry_enabled_title">Rozvržení zadávání PIN kódu</string>
<string name="pref_pin_entry_enabled_summary">Při psaní čísel, datumů a telefonních čísel</string>
<string name="pref_category_style">Styl</string> <string name="pref_category_style">Styl</string>
<string name="pref_margin_bottom_title">Spodní odsazení</string> <string name="pref_margin_bottom_title">Spodní odsazení</string>
<string name="pref_keyboard_height_title">Výška klávesnice</string> <string name="pref_keyboard_height_title">Výška klávesnice</string>
@@ -54,9 +57,9 @@
<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_altblack">Alternative Black</string> --> <string name="pref_theme_e_altblack">Černý (alternativní)</string>
<!-- <string name="pref_theme_e_white">White</string> --> <string name="pref_theme_e_white">Bílý</string>
<!-- <string name="pref_theme_e_epaper">ePaper</string> --> <string name="pref_theme_e_epaper">ePapír</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>
@@ -64,22 +67,38 @@
<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_vibration_e_disabled">Deaktivovány</string>
<!-- <string name="pref_custom_layout_title">Custom layout</string> --> <string name="pref_vibration_e_system">Dle systému</string>
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> --> <string name="pref_vibration_e_strong">Silné</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <string name="pref_vibration_e_medium">Střední</string>
<!-- <string name="pref_vibration_e_system">System</string> --> <string name="pref_vibration_e_light">Slabé</string>
<!-- <string name="pref_vibration_e_strong">Strong</string> -->
<!-- <string name="pref_vibration_e_medium">Medium</string> -->
<!-- <string name="pref_vibration_e_light">Light</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>
<string name="key_action_prev">Předchozí</string> <string name="key_action_prev">Předchozí</string>
<string name="key_action_search">Hledat</string> <string name="key_action_search">Hledat</string>
<string name="key_action_send">Odeslat</string> <string name="key_action_send">Odeslat</string>
<!-- <string name="launcher_button_imesettings">Enable keyboard</string> --> <string name="launcher_button_imesettings">Aktivovat klávesnici</string>
<!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> --> <string name="launcher_description">Tato aplikace je pouhou virtuální klávesnicí. Přejděte do systémového nastavení, kliknutím na tlačítko níže a aktivujte ji.</string>
<!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> --> <string name="launcher_sourcecode">Toto je volná, open-source aplikace. Její zdrojový kód, či hlášení chyb, naleznete na Githubu.</string>
<!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> --> <string name="launcher_tryhere">Po aktivaci můžete klávesnici rovnou vyzkoušet zde:</string>
<string name="key_descr_capslock">Caps lock</string>
<string name="key_descr_switch_greekmath">Řecké a matematické symboly</string>
<string name="key_descr_voice_typing">Hlasové zadávání</string>
<string name="key_descr_copy">Kopírovat</string>
<string name="key_descr_paste">Vložit</string>
<string name="key_descr_cut">Vyjmout</string>
<string name="key_descr_selectAll">Označit vše</string>
<string name="key_descr_shareText">Sdílet text</string>
<string name="key_descr_pasteAsPlainText">Vložit jako prostý text</string>
<string name="key_descr_undo">Zpět</string>
<string name="key_descr_redo">Znovu</string>
<string name="key_descr_replaceText">Nahradit</string>
<string name="key_descr_textAssist">Asistovat</string>
<string name="key_descr_autofill">Předvyplnit</string>
<string name="key_descr_ª">Indikátor řadové číslovky</string>
<string name="key_descr_º">Indikátor řadové číslovky</string>
<string name="key_descr_superscript">Horní index</string>
<string name="key_descr_subscript">Dolní index</string>
<string name="pref_category_advanced">Pokročilé</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">Deckkraft des Tastaturhintergrunds anpassen</string> <string name="pref_keyboard_opacity">Deckkraft des Tastaturhintergrunds anpassen</string>
<string name="pref_key_opacity">Deckkraft der Tasten anpassen</string> <string name="pref_key_opacity">Deckkraft der Tasten anpassen</string>
<string name="pref_key_activated_opacity">Deckkraft gedrückter Tasten anpassen</string> <string name="pref_key_activated_opacity">Deckkraft gedrückter Tasten anpassen</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">Eigenes Layout</string> <string name="pref_layout_e_custom">Eigenes Layout</string>
<string name="pref_accents_title">Akzente</string> <string name="pref_layouts_add">Alternatives Layout hinzufügen</string>
<string name="pref_accents_e_all_installed">Akzente für alle installierten Sprachen anzeigen</string> <string name="pref_layouts_item">Layout %1$d: %2$s</string>
<string name="pref_accents_e_selected">Akzente nur für die gewählte Sprache anzeigen</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Akzente verbergen</string> <string name="pref_custom_layout_title">Eigenes Layout</string>
<string name="pref_show_numpad_title">Ziffernblock anzeigen</string> <string name="pref_show_numpad_title">Ziffernblock anzeigen</string>
<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>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">Hohe Ziffern zuerst</string> <string name="pref_numpad_layout_e_high_first">Hohe Ziffern zuerst</string>
<string name="pref_numpad_layout_e_low_first">Niedrige Ziffern zuerst</string> <string name="pref_numpad_layout_e_low_first">Niedrige Ziffern zuerst</string>
<string name="pref_extra_keys_title">Zusätzliche Zeichen zur Tastatur hinzufügen</string> <string name="pref_extra_keys_title">Zusätzliche Zeichen zur Tastatur hinzufügen</string>
<string name="pref_extra_keys_custom">Benutzerdefinierte Tasten hinzufügen</string>
<string name="pref_extra_keys_internal">Tasten auswählen, die der Tastatur hinzugefügt werden sollen</string>
<string name="pref_second_layout_title">Zweites Layout</string> <string name="pref_second_layout_title">Zweites Layout</string>
<string name="pref_second_layout_none">Keines</string> <string name="pref_second_layout_none">Keines</string>
<string name="pref_category_typing">Tippen</string> <string name="pref_category_typing">Tippen</string>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">Verhalten der Tastaturumschalttaste</string> <string name="pref_switch_input_immediate_summary">Verhalten der Tastaturumschalttaste</string>
<string name="pref_vibrate_title">Vibration</string> <string name="pref_vibrate_title">Vibration</string>
<string name="pref_vibrate_summary">Vibration bei Tastendruck ein-/ausschalten</string> <string name="pref_vibrate_summary">Vibration bei Tastendruck ein-/ausschalten</string>
<string name="pref_pin_entry_enabled_title">PIN-Eingabe-Layout</string>
<string name="pref_pin_entry_enabled_summary">Für die Nummern-, Datums- und Telefonnummern-Eingabe</string>
<string name="pref_category_style">Design</string> <string name="pref_category_style">Design</string>
<string name="pref_margin_bottom_title">Unterer Abstand</string> <string name="pref_margin_bottom_title">Unterer Abstand</string>
<string name="pref_keyboard_height_title">Höhe der Tastatur</string> <string name="pref_keyboard_height_title">Höhe der Tastatur</string>
@@ -64,14 +67,11 @@
<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">Erweitert</string> <string name="pref_vibration_e_disabled">Deaktiviert</string>
<string name="pref_custom_layout_title">Eigenes Layout</string> <string name="pref_vibration_e_system">System</string>
<string name="pref_custom_layout_summary">Bitte Sourcecode ansehen. Diese Option ist nicht zur Verwendung vorgesehen.</string> <string name="pref_vibration_e_strong">Stark</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <string name="pref_vibration_e_medium">Mittel</string>
<!-- <string name="pref_vibration_e_system">System</string> --> <string name="pref_vibration_e_light">Schwach</string>
<!-- <string name="pref_vibration_e_strong">Strong</string> -->
<!-- <string name="pref_vibration_e_medium">Medium</string> -->
<!-- <string name="pref_vibration_e_light">Light</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>
@@ -80,6 +80,25 @@
<string name="key_action_send">Senden</string> <string name="key_action_send">Senden</string>
<string name="launcher_button_imesettings">Tastatur aktivieren</string> <string name="launcher_button_imesettings">Tastatur aktivieren</string>
<string name="launcher_description">Diese App ist eine virtuelle Tastatur. Tippe auf den Button unten und aktivere Unexpected Keyboard in den Systemeinstellungen.</string> <string name="launcher_description">Diese App ist eine virtuelle Tastatur. Tippe auf den Button unten und aktivere Unexpected Keyboard in den Systemeinstellungen.</string>
<string name="launcher_sourcecode">Dies ist eine freie und quelloffene App. Du findest den Quellcode auf <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>. Dort können auch Bugs gemeldet werden.</string> <string name="launcher_sourcecode">Dies ist eine freie und quelloffene App. Du findest den Quellcode auf Github. Dort können auch Bugs gemeldet werden.</string>
<string name="launcher_tryhere">Nach Aktivierung kannst du die Tastatur hier ausprobieren:</string> <string name="launcher_tryhere">Nach Aktivierung kannst du die Tastatur hier ausprobieren:</string>
<string name="key_descr_capslock">Feststelltaste</string>
<string name="key_descr_switch_greekmath">Griechische &amp; mathematische Symbole</string>
<string name="key_descr_voice_typing">Spracheingabe</string>
<string name="key_descr_copy">Kopieren</string>
<string name="key_descr_paste">Einfügen</string>
<string name="key_descr_cut">Ausschneiden</string>
<string name="key_descr_selectAll">Alles auswählen</string>
<string name="key_descr_shareText">Text teilen</string>
<string name="key_descr_pasteAsPlainText">Unformatiert einfügen</string>
<string name="key_descr_undo">Rückgängig</string>
<string name="key_descr_redo">Wiederholen</string>
<string name="key_descr_replaceText">Ersetzen</string>
<string name="key_descr_textAssist">Assistieren</string>
<string name="key_descr_autofill">Automatische Vervollständigung</string>
<string name="key_descr_ª">Ordinalzeichen</string>
<string name="key_descr_º">Ordinalzeichen</string>
<string name="key_descr_superscript">Hochgestellt</string>
<string name="key_descr_subscript">Tiefgestellt</string>
<string name="pref_category_advanced">Erweitert</string>
</resources> </resources>

View File

@@ -1,48 +1,51 @@
<?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="debug">Unexpected Keyboard (debug)</string>
<!-- <string name="app_name" product="default">Unexpected Keyboard</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_portrait">In portrait mode</string> --> <string name="pref_portrait">En modo retrato</string>
<!-- <string name="pref_landscape">In landscape mode</string> --> <string name="pref_landscape">En modo paisaje</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_label_brightness">Ajustar brillo de etiqueta</string>
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> --> <string name="pref_keyboard_opacity">Ajustar opacidad del fondo del teclado</string>
<!-- <string name="pref_key_opacity">Adjust key opacity</string> --> <string name="pref_key_opacity">Ajustar opacidad de teclas</string>
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> --> <string name="pref_key_activated_opacity">Ajustar opacidad de teclas apretadas</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_layout_e_custom">Formato personalizado</string>
<string name="pref_accents_title">Acentos</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">Mostrar acentos para todos los lenguajes instalados</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">Solo mostrar acentos para el lenguaje seleccionado</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Ocultar acentos</string> <string name="pref_custom_layout_title">Formato personalizado</string>
<!-- <string name="pref_show_numpad_title">Show NumPad</string> --> <string name="pref_show_numpad_title">Mostrar pad numérico</string>
<!-- <string name="pref_show_numpad_never">Never</string> --> <string name="pref_show_numpad_never">Nunca</string>
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> --> <string name="pref_show_numpad_landscape">Solo en modo paisaje</string>
<!-- <string name="pref_show_numpad_always">Always</string> --> <string name="pref_show_numpad_always">Siempre</string>
<!-- <string name="pref_number_row_title">Show number row</string> --> <string name="pref_number_row_title">Mostrar fila númerica</string>
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> --> <string name="pref_number_row_summary">Agrega una fila de numeros en la cima del teclado mientras el pad numérico esté oculto</string>
<!-- <string name="pref_numpad_layout">NumPad layout</string> --> <string name="pref_numpad_layout">Formato del pad numérico</string>
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> --> <string name="pref_numpad_layout_e_high_first">gitos descendientes</string>
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> --> <string name="pref_numpad_layout_e_low_first">gitos ascendientes</string>
<!-- <string name="pref_extra_keys_title">Add keys to the keyboard</string> --> <string name="pref_extra_keys_title">Agregar teclas</string>
<!-- <string name="pref_second_layout_title">Secondary layout</string> --> <string name="pref_extra_keys_custom">Agregar teclas personalizadas</string>
<!-- <string name="pref_second_layout_none">None</string> --> <string name="pref_extra_keys_internal">Selecciona teclas para agregar al teclado</string>
<string name="pref_category_typing">Escribiendo</string> <string name="pref_second_layout_title">Formato secundario</string>
<string name="pref_second_layout_none">Ninguno</string>
<string name="pref_category_typing">Escritura</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>
<string name="pref_long_timeout_title">Tiempo de espera de repetición de tecla</string> <string name="pref_long_timeout_title">Tiempo de espera de repetición de tecla</string>
<string name="pref_long_interval_title">Intervalo de repetición de tecla</string> <string name="pref_long_interval_title">Intervalo de repetición de tecla</string>
<!-- <string name="pref_lock_double_tap_title">Double tap on shift for caps lock</string> --> <string name="pref_lock_double_tap_title">Doble toque al Shift para bloquear las mayúsculas</string>
<!-- <string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string> --> <string name="pref_lock_double_tap_summary">Se puede bloquear cualquier modificador manteniéndolo apretado</string>
<!-- <string name="pref_category_behavior">Behavior</string> --> <string name="pref_category_behavior">Comportamiento</string>
<!-- <string name="pref_autocapitalisation_title">Automatic capitalisation</string> --> <string name="pref_autocapitalisation_title">Capitalización automática</string>
<!-- <string name="pref_autocapitalisation_summary">Press Shift at the beginning of a sentence</string> --> <string name="pref_autocapitalisation_summary">Apretar Shift al principio de una oración</string>
<!-- <string name="pref_switch_input_immediate_title">Switch to the last used keyboard</string> --> <string name="pref_switch_input_immediate_title">Cambiar al último teclado usado</string>
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> --> <string name="pref_switch_input_immediate_summary">Comportamiento de la tecla para cambiar formatos</string>
<string name="pref_vibrate_title">Vibración</string> <string name="pref_vibrate_title">Vibración</string>
<string name="pref_vibrate_summary">Habilitar/deshabilitar vibración al presionar una tecla</string> <string name="pref_vibrate_summary">Habilitar/deshabilitar vibración al presionar una tecla</string>
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</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>
@@ -54,32 +57,48 @@
<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_altblack">Alternative Black</string> --> <string name="pref_theme_e_altblack">Negro Alternativo</string>
<!-- <string name="pref_theme_e_white">White</string> --> <string name="pref_theme_e_white">Blanco</string>
<!-- <string name="pref_theme_e_epaper">ePaper</string> --> <string name="pref_theme_e_epaper">ePaper</string>
<string name="pref_swipe_dist_e_very_short">Muy corto</string> <string name="pref_swipe_dist_e_very_short">Muy corta</string>
<string name="pref_swipe_dist_e_short">Corto</string> <string name="pref_swipe_dist_e_short">Corta</string>
<string name="pref_swipe_dist_e_default">Normal</string> <string name="pref_swipe_dist_e_default">Normal</string>
<string name="pref_swipe_dist_e_far">Lejano</string> <string name="pref_swipe_dist_e_far">Lejana</string>
<string name="pref_swipe_dist_e_very_far">Muy lejano</string> <string name="pref_swipe_dist_e_very_far">Muy lejana</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_vibration_e_disabled">Deshabilitada</string>
<!-- <string name="pref_custom_layout_title">Custom layout</string> --> <string name="pref_vibration_e_system">Sistema</string>
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> --> <string name="pref_vibration_e_strong">Fuerte</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <string name="pref_vibration_e_medium">Media</string>
<!-- <string name="pref_vibration_e_system">System</string> --> <string name="pref_vibration_e_light">Suave</string>
<!-- <string name="pref_vibration_e_strong">Strong</string> -->
<!-- <string name="pref_vibration_e_medium">Medium</string> -->
<!-- <string name="pref_vibration_e_light">Light</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>
<string name="key_action_prev">Anterior</string> <string name="key_action_prev">Anterior</string>
<string name="key_action_search">Buscar</string> <string name="key_action_search">Buscar</string>
<string name="key_action_send">Enviar</string> <string name="key_action_send">Enviar</string>
<!-- <string name="launcher_button_imesettings">Enable keyboard</string> --> <string name="launcher_button_imesettings">Habilitar teclado</string>
<!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> --> <string name="launcher_description">Esta aplicación es un teclado virtual. Apretar el botón de abajo te facilitará habilitarlo.</string>
<!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> --> <string name="launcher_sourcecode">Esta es una aplicación gratuita, libre y de fuente abierta. EL código fuente se puede encontrar también para reportar errores en Github.</string>
<!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> --> <string name="launcher_tryhere">Tras habilitar, debajo se puede probar el teclado:</string>
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<string name="pref_category_advanced">Avanzado</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">تنظیم کدر بودن پس‌زمینه صفحه کلید</string> <string name="pref_keyboard_opacity">تنظیم کدر بودن پس‌زمینه صفحه کلید</string>
<string name="pref_key_opacity">تنظیم کدر بودن کلید</string> <string name="pref_key_opacity">تنظیم کدر بودن کلید</string>
<string name="pref_key_activated_opacity">تنظیم کدر بودن کلید فشرده شده</string> <string name="pref_key_activated_opacity">تنظیم کدر بودن کلید فشرده شده</string>
<string name="pref_layout_title">تغییر طرح صفحه کلید</string>
<string name="pref_layout_e_system">تنظیمات سامانه</string> <string name="pref_layout_e_system">تنظیمات سامانه</string>
<string name="pref_layout_e_custom">طرح صفارشی</string> <string name="pref_layout_e_custom">طرح صفارشی</string>
<string name="pref_accents_title">لهجه‌ها</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">نمایش لهجه‌ها برای تمام زبان‌هی نصب شده</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">فقط نمایش لهجه‌ها برای زبان‌های انتخاب شده</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">پنهان کردن لهجه‌ها</string> <string name="pref_custom_layout_title">طرح شخصی</string>
<string name="pref_show_numpad_title">نمایش پد شماره‌ها</string> <string name="pref_show_numpad_title">نمایش پد شماره‌ها</string>
<string name="pref_show_numpad_never">هرگز</string> <string name="pref_show_numpad_never">هرگز</string>
<string name="pref_show_numpad_landscape">فقط در حالت افقی</string> <string name="pref_show_numpad_landscape">فقط در حالت افقی</string>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">ابتدا اعداد بزرگ</string> <string name="pref_numpad_layout_e_high_first">ابتدا اعداد بزرگ</string>
<string name="pref_numpad_layout_e_low_first">ابتدا اعداد کوچک</string> <string name="pref_numpad_layout_e_low_first">ابتدا اعداد کوچک</string>
<string name="pref_extra_keys_title">افزودن کلیدها به صفحه کلید</string> <string name="pref_extra_keys_title">افزودن کلیدها به صفحه کلید</string>
<!-- <string name="pref_extra_keys_custom">Add custom keys</string> -->
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
<string name="pref_second_layout_title">طرح دوم</string> <string name="pref_second_layout_title">طرح دوم</string>
<string name="pref_second_layout_none">هیچ</string> <string name="pref_second_layout_none">هیچ</string>
<string name="pref_category_typing">درحال نوشتن</string> <string name="pref_category_typing">درحال نوشتن</string>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">رفتار کلید تغییردهنده صفحه کلید</string> <string name="pref_switch_input_immediate_summary">رفتار کلید تغییردهنده صفحه کلید</string>
<string name="pref_vibrate_title">لرزش</string> <string name="pref_vibrate_title">لرزش</string>
<string name="pref_vibrate_summary">فعال/غیرفعال کردن لرزش در زمان فشار دادن کلیدها</string> <string name="pref_vibrate_summary">فعال/غیرفعال کردن لرزش در زمان فشار دادن کلیدها</string>
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</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>
@@ -64,9 +67,6 @@
<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">پیشرفته</string>
<string name="pref_custom_layout_title">طرح شخصی</string>
<string name="pref_custom_layout_summary">کد منبع را ببینید. این گزینه قرار نیست استفاده شود.</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</string> --> <!-- <string name="pref_vibration_e_system">System</string> -->
<!-- <string name="pref_vibration_e_strong">Strong</string> --> <!-- <string name="pref_vibration_e_strong">Strong</string> -->
@@ -80,6 +80,25 @@
<string name="key_action_send">ارسال</string> <string name="key_action_send">ارسال</string>
<string name="launcher_button_imesettings">فعال کردن صفحه کلید</string> <string name="launcher_button_imesettings">فعال کردن صفحه کلید</string>
<string name="launcher_description">این برنامه یک صفحه کلید مجازی است. با کلیک روی گزینه زیر به تنظیمات سامانه بروید و صفحه کلید غیرمنتظره را فعال کنید.</string> <string name="launcher_description">این برنامه یک صفحه کلید مجازی است. با کلیک روی گزینه زیر به تنظیمات سامانه بروید و صفحه کلید غیرمنتظره را فعال کنید.</string>
<string name="launcher_sourcecode">این یک برنامه آزاد و منبع‌باز است. شما میتوانید پیدا کنید کد منبع را و گزارش کنید باگ‌ها را در <a href="https://github.com/Julow/Unexpected-Keyboard/">گیت‌هاب</a>.</string> <string name="launcher_sourcecode">این یک برنامه متن باز و آزاد است. شما میتوانید کد منبع را در گیتهاب پیدا کرده و نیز باگ‌ها را گزارش کنید.</string>
<string name="launcher_tryhere">بعد از فعالسازی، صفحه کلید را اینجا امتحان کنید:</string> <string name="launcher_tryhere">بعد از فعالسازی، صفحه کلید را اینجا امتحان کنید:</string>
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<string name="pref_category_advanced">پیشرفته</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">Transparence du clavier</string> <string name="pref_keyboard_opacity">Transparence du clavier</string>
<string name="pref_key_opacity">Transparence des touches</string> <string name="pref_key_opacity">Transparence des touches</string>
<string name="pref_key_activated_opacity">Transparence des touches pressées</string> <string name="pref_key_activated_opacity">Transparence des touches pressées</string>
<string name="pref_layout_title">Disposition des touches</string>
<string name="pref_layout_e_system">Paramètre système</string> <string name="pref_layout_e_system">Paramètre système</string>
<string name="pref_layout_e_custom">Disposition personnalisée</string> <string name="pref_layout_e_custom">Disposition personnalisée</string>
<string name="pref_accents_title">Accents</string> <string name="pref_layouts_add">Ajouter un clavier alternatif</string>
<string name="pref_accents_e_all_installed">Afficher les accents pour les langues installées</string> <string name="pref_layouts_item">Disposition %1$d: %2$s</string>
<string name="pref_accents_e_selected">Afficher les accents pour la langue sélectionnée</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Cacher les accents</string> <string name="pref_custom_layout_title">Disposition personnalisée</string>
<string name="pref_show_numpad_title">Afficher le pavé numérique</string> <string name="pref_show_numpad_title">Afficher le pavé numérique</string>
<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>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">Du plus haut au plus bas</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_numpad_layout_e_low_first">Du plus bas au plus haut</string>
<string name="pref_extra_keys_title">Ajouter des touches au clavier</string> <string name="pref_extra_keys_title">Ajouter des touches au clavier</string>
<string name="pref_extra_keys_custom">Ajouter des touches personnalisées</string>
<string name="pref_extra_keys_internal">Sélectionner les touches à ajouter au clavier</string>
<string name="pref_second_layout_title">Disposition secondaire</string> <string name="pref_second_layout_title">Disposition secondaire</string>
<string name="pref_second_layout_none">Aucune</string> <string name="pref_second_layout_none">Aucune</string>
<string name="pref_category_typing">Saisie</string> <string name="pref_category_typing">Saisie</string>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">Comportement de la touche de changement de clavier</string> <string name="pref_switch_input_immediate_summary">Comportement de la touche de changement de clavier</string>
<string name="pref_vibrate_title">Vibreur</string> <string name="pref_vibrate_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_pin_entry_enabled_title">Clavier PIN</string>
<string name="pref_pin_entry_enabled_summary">Lors de la saisie de nombres, de dates et de numéros de téléphone</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>
@@ -64,9 +67,6 @@
<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="pref_vibration_e_disabled">Désactivé</string> <string name="pref_vibration_e_disabled">Désactivé</string>
<string name="pref_vibration_e_system">Système</string> <string name="pref_vibration_e_system">Système</string>
<string name="pref_vibration_e_strong">Fort</string> <string name="pref_vibration_e_strong">Fort</string>
@@ -80,6 +80,25 @@
<string name="key_action_send">Envoyer</string> <string name="key_action_send">Envoyer</string>
<string name="launcher_button_imesettings">Activer le clavier</string> <string name="launcher_button_imesettings">Activer le clavier</string>
<string name="launcher_description">Cette application est un clavier virtuel. Activez-le dans les paramètres système en cliquant sur le bouton ci-dessous.</string> <string name="launcher_description">Cette application est un clavier virtuel. Activez-le dans les paramètres système en cliquant sur le bouton ci-dessous.</string>
<string name="launcher_sourcecode">Cette application est libre et open-source. Lisez le source code et reportez des problèmes sur <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> <string name="launcher_sourcecode">Cette application est libre et open-source. Lisez le source code et reportez des problèmes sur Github.</string>
<string name="launcher_tryhere">Après l\'avoir activé, vous pouvez l\'essayer ici:</string> <string name="launcher_tryhere">Après l\'avoir activé, vous pouvez l\'essayer ici:</string>
<string name="key_descr_capslock">Verrouillage majuscules</string>
<string name="key_descr_switch_greekmath">Symboles mathématiques</string>
<string name="key_descr_voice_typing">Saisie vocale</string>
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<string name="pref_category_advanced">Avancé</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> --> <!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
<!-- <string name="pref_key_opacity">Adjust key 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_key_activated_opacity">Adjust pressed key opacity</string> -->
<string name="pref_layout_title">Cambia layout tastiera</string>
<string name="pref_layout_e_system">Impostazioni di sistema</string> <string name="pref_layout_e_system">Impostazioni di sistema</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> --> <!-- <string name="pref_layout_e_custom">Custom layout</string> -->
<string name="pref_accents_title">Accenti</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">Mostra accenti per tutte le lingue installate</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">Mostra accenti solo per le lingue selezionate</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Nascondi accenti</string> <!-- <string name="pref_custom_layout_title">Custom layout</string> -->
<!-- <string name="pref_show_numpad_title">Show NumPad</string> --> <!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
<!-- <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> -->
@@ -27,6 +26,8 @@
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</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_numpad_layout_e_low_first">Low digits first</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_extra_keys_custom">Add custom keys</string> -->
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
<!-- <string name="pref_second_layout_title">Secondary layout</string> --> <!-- <string name="pref_second_layout_title">Secondary layout</string> -->
<string name="pref_second_layout_none">Nessuno</string> <string name="pref_second_layout_none">Nessuno</string>
<string name="pref_category_typing">Digitando</string> <string name="pref_category_typing">Digitando</string>
@@ -43,6 +44,8 @@
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> --> <!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">Vibrazione</string> <string name="pref_vibrate_title">Vibrazione</string>
<string name="pref_vibrate_summary">Abilita/Disabilita Vibrazione alla pressione dei tasti</string> <string name="pref_vibrate_summary">Abilita/Disabilita Vibrazione alla pressione dei tasti</string>
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
<string name="pref_category_style">Stile</string> <string name="pref_category_style">Stile</string>
<string name="pref_margin_bottom_title">Margine inferiore</string> <string name="pref_margin_bottom_title">Margine inferiore</string>
<string name="pref_keyboard_height_title">Altezza tastiera</string> <string name="pref_keyboard_height_title">Altezza tastiera</string>
@@ -64,9 +67,6 @@
<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="pref_vibration_e_disabled">Disabled</string> --> <!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</string> --> <!-- <string name="pref_vibration_e_system">System</string> -->
<!-- <string name="pref_vibration_e_strong">Strong</string> --> <!-- <string name="pref_vibration_e_strong">Strong</string> -->
@@ -80,6 +80,25 @@
<string name="key_action_send">Invia</string> <string name="key_action_send">Invia</string>
<!-- <string name="launcher_button_imesettings">Enable keyboard</string> --> <!-- <string name="launcher_button_imesettings">Enable keyboard</string> -->
<!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> --> <!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> -->
<!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> --> <!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on Github.</string> -->
<!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> --> <!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> -->
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<!-- <string name="pref_category_advanced">Advanced</string> -->
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> --> <!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
<!-- <string name="pref_key_opacity">Adjust key 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_key_activated_opacity">Adjust pressed key opacity</string> -->
<string name="pref_layout_title">키보드 레이아웃 변경</string>
<string name="pref_layout_e_system">시스템 세팅</string> <string name="pref_layout_e_system">시스템 세팅</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> --> <!-- <string name="pref_layout_e_custom">Custom layout</string> -->
<string name="pref_accents_title">악센트</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">설치된 모든 언어의 악센트 표시</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">선택한 언어의 악센트만 표시</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">모든 언어의 악센트 숨기기</string> <!-- <string name="pref_custom_layout_title">Custom layout</string> -->
<!-- <string name="pref_show_numpad_title">Show NumPad</string> --> <!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
<!-- <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> -->
@@ -27,6 +26,8 @@
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</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_numpad_layout_e_low_first">Low digits first</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_extra_keys_custom">Add custom keys</string> -->
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
<!-- <string name="pref_second_layout_title">Secondary layout</string> --> <!-- <string name="pref_second_layout_title">Secondary layout</string> -->
<!-- <string name="pref_second_layout_none">None</string> --> <!-- <string name="pref_second_layout_none">None</string> -->
<string name="pref_category_typing">타자</string> <string name="pref_category_typing">타자</string>
@@ -43,6 +44,8 @@
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> --> <!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">진동</string> <string name="pref_vibrate_title">진동</string>
<string name="pref_vibrate_summary">키 누를 때 진동 키거/끄기</string> <string name="pref_vibrate_summary">키 누를 때 진동 키거/끄기</string>
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</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>
@@ -64,9 +67,6 @@
<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="pref_vibration_e_disabled">Disabled</string> --> <!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</string> --> <!-- <string name="pref_vibration_e_system">System</string> -->
<!-- <string name="pref_vibration_e_strong">Strong</string> --> <!-- <string name="pref_vibration_e_strong">Strong</string> -->
@@ -80,6 +80,25 @@
<string name="key_action_send">보내기</string> <string name="key_action_send">보내기</string>
<!-- <string name="launcher_button_imesettings">Enable keyboard</string> --> <!-- <string name="launcher_button_imesettings">Enable keyboard</string> -->
<!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> --> <!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> -->
<!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> --> <!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on Github.</string> -->
<!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> --> <!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> -->
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<!-- <string name="pref_category_advanced">Advanced</string> -->
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">Pielāgot tastatūras fona necaurredzamību</string> <string name="pref_keyboard_opacity">Pielāgot tastatūras fona necaurredzamību</string>
<string name="pref_key_opacity">Pielāgot taustiņu necaurredzamību</string> <string name="pref_key_opacity">Pielāgot taustiņu necaurredzamību</string>
<string name="pref_key_activated_opacity">Pielāgot piespiesta taustiņa necaurredzamību</string> <string name="pref_key_activated_opacity">Pielāgot piespiesta taustiņa necaurredzamību</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">Pielāgots izkārtojums</string> <string name="pref_layout_e_custom">Pielāgots izkārtojums</string>
<string name="pref_accents_title">Uzsvara zīmes</string> <string name="pref_layouts_add">Pievienot aizstājējizkārtojumu</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_layouts_item">Izkārtojums %1$d: %2$s</string>
<string name="pref_accents_e_selected">Rādīt uzsvara zīmes tikai atlasītajām valodām</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Paslēpt uzsvara zīmes</string> <string name="pref_custom_layout_title">Pielāgots izkārtojums</string>
<string name="pref_show_numpad_title">Rādīt ciparnīcu</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_never">Nekad</string>
<string name="pref_show_numpad_landscape">Tikai guleniskajā skatā</string> <string name="pref_show_numpad_landscape">Tikai guleniskajā skatā</string>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">Vispirms lielākie cipari</string> <string name="pref_numpad_layout_e_high_first">Vispirms lielākie cipari</string>
<string name="pref_numpad_layout_e_low_first">Vispirms mazākie cipari</string> <string name="pref_numpad_layout_e_low_first">Vispirms mazākie cipari</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_extra_keys_custom">Pievienot pielāgotus taustiņus</string>
<string name="pref_extra_keys_internal">Atlasīt taustiņus, ko pievienot tastatūrai</string>
<string name="pref_second_layout_title">Otrējais izkārtojums</string> <string name="pref_second_layout_title">Otrējais izkārtojums</string>
<string name="pref_second_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>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">Tastatūras pārslēgšanas taustiņa uzvedība</string> <string name="pref_switch_input_immediate_summary">Tastatūras pārslēgšanas taustiņa uzvedība</string>
<string name="pref_vibrate_title">Trīcēšana</string> <string name="pref_vibrate_title">Trīcēšana</string>
<string name="pref_vibrate_summary">Iespējot/atspējot taustiņa piespiešanas trīcēšanu</string> <string name="pref_vibrate_summary">Iespējot/atspējot taustiņa piespiešanas trīcēšanu</string>
<string name="pref_pin_entry_enabled_title">Piespraust ievadīšanas izkārtojumu</string>
<string name="pref_pin_entry_enabled_summary">Kad ievada skaitļus, datumus un tālruņa numurus</string>
<string name="pref_category_style">Izskata pielāgojumi</string> <string name="pref_category_style">Izskata pielāgojumi</string>
<string name="pref_margin_bottom_title">Apakšējā apmale</string> <string name="pref_margin_bottom_title">Apakšējā apmale</string>
<string name="pref_keyboard_height_title">Tastatūras augstums</string> <string name="pref_keyboard_height_title">Tastatūras augstums</string>
@@ -64,22 +67,40 @@
<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">Papildu</string> <string name="pref_vibration_e_disabled">Atspējota</string>
<string name="pref_custom_layout_title">Pielāgots izkārtojums</string> <string name="pref_vibration_e_system">Sistēmas</string>
<string name="pref_custom_layout_summary">Skatīt pirmkodu. Šī iespēja nav paredzēta izmantošanai.</string> <string name="pref_vibration_e_strong">Spēcīga</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <string name="pref_vibration_e_medium">Vidēja</string>
<!-- <string name="pref_vibration_e_system">System</string> --> <string name="pref_vibration_e_light">Vāja</string>
<!-- <string name="pref_vibration_e_strong">Strong</string> -->
<!-- <string name="pref_vibration_e_medium">Medium</string> -->
<!-- <string name="pref_vibration_e_light">Light</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>
<string name="key_action_prev">Iepriekšējais</string> <string name="key_action_prev">Iepriekšējais</string>
<string name="key_action_search">Meklēt</string> <string name="key_action_search">Meklēt</string>
<string name="key_action_send">Sūtīt</string> <string name="key_action_send">Sūtīt</string>
<!-- <string name="launcher_button_imesettings">Enable keyboard</string> --> <string name="launcher_button_imesettings">Iespējot tastatūru</string>
<!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> --> <string name="launcher_description">Šī lietotne ir virtuālā tastatūra.
<!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> --> Ar zemāk esošo pogu var atvērt sistēmas iestatījumus un iespējot Unexpected Keyboard.</string>
<!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> --> <string name="launcher_sourcecode">Šī ir bezmaksas un atvērtā pirmkoda lietotne.
GitHub var atrast pirmkodu un ziņot par nepilnībām.</string>
<string name="launcher_tryhere">Pēc iespējošanas šeit var izmēģināt tastatūru:</string>
<string name="key_descr_capslock">Burtslēgs</string>
<string name="key_descr_switch_greekmath">Grieķu un matemātikas rakstzīmes</string>
<string name="key_descr_voice_typing">Rakstīšana ar balsi</string>
<string name="key_descr_copy">Ievietot starpliktuvē</string>
<string name="key_descr_paste">Ielīmēt</string>
<string name="key_descr_cut">Izgriezt</string>
<string name="key_descr_selectAll">Iezīmēt visu</string>
<string name="key_descr_shareText">Kopīgot tekstu</string>
<string name="key_descr_pasteAsPlainText">Ielīmēt kā vienkāršu tekstu</string>
<string name="key_descr_undo">Atsaukt</string>
<string name="key_descr_redo">Atatsaukt</string>
<string name="key_descr_replaceText">Aizvietot</string>
<string name="key_descr_textAssist">Palīgs</string>
<string name="key_descr_autofill">Automātiskā aizpilde</string>
<string name="key_descr_ª">Kārtas rādītājs</string>
<string name="key_descr_º">Kārtas rādītājs</string>
<string name="key_descr_superscript">Augšraksts</string>
<string name="key_descr_subscript">Apakšraksts</string>
<string name="pref_category_advanced">Papildu</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">Nieprzezroczystość tła klawiatury</string> <string name="pref_keyboard_opacity">Nieprzezroczystość tła klawiatury</string>
<string name="pref_key_opacity">Nieprzezroczystość klawisza</string> <string name="pref_key_opacity">Nieprzezroczystość klawisza</string>
<string name="pref_key_activated_opacity">Nieprzezroczystość naciśniętego 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_system">Systemowy</string>
<string name="pref_layout_e_custom">Własny układ</string> <string name="pref_layout_e_custom">Własny układ</string>
<string name="pref_accents_title">Znaki diakrytyczne</string> <string name="pref_layouts_add">Dodaj dodatkowy układ</string>
<string name="pref_accents_e_all_installed">Pokaż znaki diakryt. dla wszystkich zainstalowanych języków</string> <string name="pref_layouts_item">Układ %1$d: %2$s</string>
<string name="pref_accents_e_selected">Pokaż znaki diakryt. tylko dla wybranego języka</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Ukryj znaki diakrytyczne</string> <string name="pref_custom_layout_title">Własny układ</string>
<string name="pref_show_numpad_title">Pokaż klawiaturę numeryczną</string> <string name="pref_show_numpad_title">Pokaż klawiaturę numeryczną</string>
<string name="pref_show_numpad_never">Nigdy</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_landscape">Tylko w orientacji poziomej</string>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">Od największej cyfry</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_numpad_layout_e_low_first">Od najmniejszej cyfry</string>
<string name="pref_extra_keys_title">Dodaj klawisze do klawiatury</string> <string name="pref_extra_keys_title">Dodaj klawisze do klawiatury</string>
<string name="pref_extra_keys_custom">Dodaj niestandardowe klawisze</string>
<string name="pref_extra_keys_internal">Wybierz klawisze, które chcesz dodać do klawiatury</string>
<string name="pref_second_layout_title">Drugi układ</string> <string name="pref_second_layout_title">Drugi układ</string>
<string name="pref_second_layout_none">Żaden</string> <string name="pref_second_layout_none">Żaden</string>
<string name="pref_category_typing">Pisanie</string> <string name="pref_category_typing">Pisanie</string>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">Działanie klawisza przełączającego klawiaturę</string> <string name="pref_switch_input_immediate_summary">Działanie klawisza przełączającego klawiaturę</string>
<string name="pref_vibrate_title">Wibracje</string> <string name="pref_vibrate_title">Wibracje</string>
<string name="pref_vibrate_summary">Wł./wył. wibrację przy naciśnięciu klawisza</string> <string name="pref_vibrate_summary">Wł./wył. wibrację przy naciśnięciu klawisza</string>
<string name="pref_pin_entry_enabled_title">Układ klawiatury PIN</string>
<string name="pref_pin_entry_enabled_summary">Podczas wpisywania liczb, dat i numerów telefonu</string>
<string name="pref_category_style">Styl</string> <string name="pref_category_style">Styl</string>
<string name="pref_margin_bottom_title">Margines dolny</string> <string name="pref_margin_bottom_title">Margines dolny</string>
<string name="pref_keyboard_height_title">Wysokość klawiatury</string> <string name="pref_keyboard_height_title">Wysokość klawiatury</string>
@@ -64,9 +67,6 @@
<string name="pref_swipe_dist_e_very_far">Bardzo 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_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_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="pref_vibration_e_disabled">Wyłączone</string> <string name="pref_vibration_e_disabled">Wyłączone</string>
<string name="pref_vibration_e_system">Systemowe</string> <string name="pref_vibration_e_system">Systemowe</string>
<string name="pref_vibration_e_strong">Silne</string> <string name="pref_vibration_e_strong">Silne</string>
@@ -80,6 +80,25 @@
<string name="key_action_send">Wyślij</string> <string name="key_action_send">Wyślij</string>
<string name="launcher_button_imesettings">Włącz klawiaturę</string> <string name="launcher_button_imesettings">Włącz klawiaturę</string>
<string name="launcher_description">Ta aplikacja jest klawiaturą ekranową. Naciśnij poniższy przycisk, aby przejść do ustawień systemu i włącz Unexpected-Keyboard.</string> <string name="launcher_description">Ta aplikacja jest klawiaturą ekranową. Naciśnij poniższy przycisk, aby przejść do ustawień systemu i włącz Unexpected-Keyboard.</string>
<string name="launcher_sourcecode">Jest to darmowa aplikacja o otwartym kodzie źródłowym. Możesz zobaczyć kod źródłowy oraz zgłosić błedy na <a href="https://github.com/Julow/Unexpected-Keyboard/">Githubie</a>.</string> <string name="launcher_sourcecode">Jest to darmowa aplikacja o otwartym kodzie źródłowym. Możesz zobaczyć kod źródłowy oraz zgłosić błedy na Githubie.</string>
<string name="launcher_tryhere">Po jej włączeniu, możesz wypróbować klawiaturę tutaj:</string> <string name="launcher_tryhere">Po jej włączeniu, możesz wypróbować klawiaturę tutaj:</string>
<string name="key_descr_capslock">Caps lock</string>
<string name="key_descr_switch_greekmath">Symbole greckie i matematyczne</string>
<string name="key_descr_voice_typing">Pisanie głosowe</string>
<string name="key_descr_copy">Kopiuj</string>
<string name="key_descr_paste">Wklej</string>
<string name="key_descr_cut">Wytnij</string>
<string name="key_descr_selectAll">Zaznacz wszystko</string>
<string name="key_descr_shareText">Udostępnij tekst</string>
<string name="key_descr_pasteAsPlainText">Wklej sam tekst</string>
<string name="key_descr_undo">Cofnij</string>
<string name="key_descr_redo">Ponów</string>
<string name="key_descr_replaceText">Zamień</string>
<string name="key_descr_textAssist">Asystent</string>
<string name="key_descr_autofill">Autouzupełnianie</string>
<string name="key_descr_ª">Wskaźnik porządkowy (żeński)</string>
<string name="key_descr_º">Wskaźnik porządkowy (męski)</string>
<string name="key_descr_superscript">Indeks górny</string>
<string name="key_descr_subscript">Indeks dolny</string>
<string name="pref_category_advanced">Zaawansowane</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">Ajustar opacidade do fundo do teclado</string> <string name="pref_keyboard_opacity">Ajustar opacidade do fundo do teclado</string>
<string name="pref_key_opacity">Ajustar opacidade das teclas</string> <string name="pref_key_opacity">Ajustar opacidade das teclas</string>
<string name="pref_key_activated_opacity">Ajustar opacidade das teclas pressionadas</string> <string name="pref_key_activated_opacity">Ajustar opacidade das teclas pressionadas</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">Layout personalizado</string> <string name="pref_layout_e_custom">Layout personalizado</string>
<string name="pref_accents_title">Acentos</string> <string name="pref_layouts_add">Adicione um layout alternativo</string>
<string name="pref_accents_e_all_installed">Mostrar acentos para todos os idiomas instalados</string> <string name="pref_layouts_item">Layout %1$d: %2$s</string>
<string name="pref_accents_e_selected">Mostrar acentos só para o idioma selecionado</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Ocultar acentos</string> <string name="pref_custom_layout_title">Layout personalizado</string>
<string name="pref_show_numpad_title">Mostrar Teclado Numérico</string> <string name="pref_show_numpad_title">Mostrar Teclado Numérico</string>
<string name="pref_show_numpad_never">Nunca</string> <string name="pref_show_numpad_never">Nunca</string>
<string name="pref_show_numpad_landscape">Somente no modo paisagem</string> <string name="pref_show_numpad_landscape">Somente no modo paisagem</string>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">Dígitos maiores primeiro</string> <string name="pref_numpad_layout_e_high_first">Dígitos maiores primeiro</string>
<string name="pref_numpad_layout_e_low_first">Dígitos menores primeiro</string> <string name="pref_numpad_layout_e_low_first">Dígitos menores primeiro</string>
<string name="pref_extra_keys_title">Adicionar teclas ao teclado</string> <string name="pref_extra_keys_title">Adicionar teclas ao teclado</string>
<string name="pref_extra_keys_custom">Adicionar teclas customizadas</string>
<string name="pref_extra_keys_internal">Selecione teclas para serem adicionadas ao teclado</string>
<string name="pref_second_layout_title">Layout secundário</string> <string name="pref_second_layout_title">Layout secundário</string>
<string name="pref_second_layout_none">Nenhum</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>
@@ -34,7 +35,7 @@
<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>
<string name="pref_long_timeout_title">Tempo até repetir tecla</string> <string name="pref_long_timeout_title">Tempo até repetir tecla</string>
<string name="pref_long_interval_title">Intervalo de repetição de tecla</string> <string name="pref_long_interval_title">Intervalo de repetição de tecla</string>
<string name="pref_lock_double_tap_title">Tecle duas vezes no shift para caixa alta</string> <string name="pref_lock_double_tap_title">Tecle duas vezes no shift para travá-lo acionado</string>
<string name="pref_lock_double_tap_summary">Ao invés de apertar e segurar por um tempo</string> <string name="pref_lock_double_tap_summary">Ao invés de apertar e segurar por um tempo</string>
<string name="pref_category_behavior">Comportamento</string> <string name="pref_category_behavior">Comportamento</string>
<string name="pref_autocapitalisation_title">Capitalização automática</string> <string name="pref_autocapitalisation_title">Capitalização automática</string>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">Comportamento da tecla de troca de teclado</string> <string name="pref_switch_input_immediate_summary">Comportamento da tecla de troca de teclado</string>
<string name="pref_vibrate_title">Vibração</string> <string name="pref_vibrate_title">Vibração</string>
<string name="pref_vibrate_summary">Ativar/desativar vibração ao digitar</string> <string name="pref_vibrate_summary">Ativar/desativar vibração ao digitar</string>
<string name="pref_pin_entry_enabled_title">Layout PIN</string>
<string name="pref_pin_entry_enabled_summary">Quando digitando números, datas ou números de telefone</string>
<string name="pref_category_style">Estilo</string> <string name="pref_category_style">Estilo</string>
<string name="pref_margin_bottom_title">Margem inferior</string> <string name="pref_margin_bottom_title">Margem inferior</string>
<string name="pref_keyboard_height_title">Altura do teclado</string> <string name="pref_keyboard_height_title">Altura do teclado</string>
@@ -64,14 +67,11 @@
<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">Avançado</string> <string name="pref_vibration_e_disabled">Desabilitado</string>
<string name="pref_custom_layout_title">Layout personalizado</string> <string name="pref_vibration_e_system">Sistema</string>
<string name="pref_custom_layout_summary">Veja o código-fonte. Esta opção não deve ser usada.</string> <string name="pref_vibration_e_strong">Intenso</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <string name="pref_vibration_e_medium">Médio</string>
<!-- <string name="pref_vibration_e_system">System</string> --> <string name="pref_vibration_e_light">Suave</string>
<!-- <string name="pref_vibration_e_strong">Strong</string> -->
<!-- <string name="pref_vibration_e_medium">Medium</string> -->
<!-- <string name="pref_vibration_e_light">Light</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>
@@ -80,6 +80,25 @@
<string name="key_action_send">Enviar</string> <string name="key_action_send">Enviar</string>
<string name="launcher_button_imesettings">Ativar teclado</string> <string name="launcher_button_imesettings">Ativar teclado</string>
<string name="launcher_description">Este app é um teclado virtual. Vá para as configurações do sistema clicando no botão abaixo e ative o Teclado Unexpected.</string> <string name="launcher_description">Este app é um teclado virtual. Vá para as configurações do sistema clicando no botão abaixo e ative o Teclado Unexpected.</string>
<string name="launcher_sourcecode">Este app é gratuito é de código aberto. Você pode consultar o código ou fazer sugestões em <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> <string name="launcher_sourcecode">Este app é gratuito é de código aberto. Você pode consultar o código ou fazer sugestões em Github.</string>
<string name="launcher_tryhere">Após ativar, experimente aqui:</string> <string name="launcher_tryhere">Após ativar, experimente aqui:</string>
<string name="key_descr_capslock">Caps lock</string>
<string name="key_descr_switch_greekmath">Grego &amp; símbolos matemáticos</string>
<string name="key_descr_voice_typing">Digitação por voz</string>
<string name="key_descr_copy">Copiar</string>
<string name="key_descr_paste">Colar</string>
<string name="key_descr_cut">Cortar</string>
<string name="key_descr_selectAll">Selecionar tudo</string>
<string name="key_descr_shareText">Compartilhar texto</string>
<string name="key_descr_pasteAsPlainText">Colar texto não formatado</string>
<string name="key_descr_undo">Desfazer</string>
<string name="key_descr_redo">Refazer</string>
<string name="key_descr_replaceText">Substituir</string>
<string name="key_descr_textAssist">Assistente</string>
<string name="key_descr_autofill">Autopreenchimento</string>
<string name="key_descr_ª">Indicador Ordinal</string>
<string name="key_descr_º">Indicador Ordinal</string>
<string name="key_descr_superscript">Sobrescrito</string>
<string name="key_descr_subscript">Subscrito</string>
<string name="pref_category_advanced">Avançado</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">Modifică opacitatea fundalului tastaturii</string> <string name="pref_keyboard_opacity">Modifică opacitatea fundalului tastaturii</string>
<string name="pref_key_opacity">Modifică opacitatea tastelor</string> <string name="pref_key_opacity">Modifică opacitatea tastelor</string>
<string name="pref_key_activated_opacity">Modifică opacitatea tastei apăsate</string> <string name="pref_key_activated_opacity">Modifică opacitatea tastei apăsate</string>
<string name="pref_layout_title">Schimbă aranjamentul tastaturii</string>
<string name="pref_layout_e_system">Setări de Sistem</string> <string name="pref_layout_e_system">Setări de Sistem</string>
<string name="pref_layout_e_custom">Aranjament personalizat</string> <string name="pref_layout_e_custom">Aranjament personalizat</string>
<string name="pref_accents_title">Accente</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">Arată accentele pentru toate limbile instalate</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">Aratp accentele doar pentru limba selectată</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Ascunde accentele</string> <string name="pref_custom_layout_title">Aranjament personalizat</string>
<string name="pref_show_numpad_title">Arată NumPad</string> <string name="pref_show_numpad_title">Arată NumPad</string>
<string name="pref_show_numpad_never">Niciodată</string> <string name="pref_show_numpad_never">Niciodată</string>
<string name="pref_show_numpad_landscape">Doar în mod panoramă</string> <string name="pref_show_numpad_landscape">Doar în mod panoramă</string>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">Mai întâi cifrele mari</string> <string name="pref_numpad_layout_e_high_first">Mai întâi cifrele mari</string>
<string name="pref_numpad_layout_e_low_first">Mai întâi cifrele mici</string> <string name="pref_numpad_layout_e_low_first">Mai întâi cifrele mici</string>
<string name="pref_extra_keys_title">Adaugă taste pe tastatură</string> <string name="pref_extra_keys_title">Adaugă taste pe tastatură</string>
<!-- <string name="pref_extra_keys_custom">Add custom keys</string> -->
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
<string name="pref_second_layout_title">Aranjament secundar</string> <string name="pref_second_layout_title">Aranjament secundar</string>
<string name="pref_second_layout_none">Nimic</string> <string name="pref_second_layout_none">Nimic</string>
<string name="pref_category_typing">Tipărire</string> <string name="pref_category_typing">Tipărire</string>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">Comportamentul tastei pentru schimbarea tastaturii</string> <string name="pref_switch_input_immediate_summary">Comportamentul tastei pentru schimbarea tastaturii</string>
<string name="pref_vibrate_title">Vibrație</string> <string name="pref_vibrate_title">Vibrație</string>
<string name="pref_vibrate_summary">Activați/dezactivați vibrația la apăsarea tastelor</string> <string name="pref_vibrate_summary">Activați/dezactivați vibrația la apăsarea tastelor</string>
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
<string name="pref_category_style">Stil</string> <string name="pref_category_style">Stil</string>
<string name="pref_margin_bottom_title">Marginea de jos</string> <string name="pref_margin_bottom_title">Marginea de jos</string>
<string name="pref_keyboard_height_title">Înălțimea tastaturii</string> <string name="pref_keyboard_height_title">Înălțimea tastaturii</string>
@@ -64,9 +67,6 @@
<string name="pref_swipe_dist_e_very_far">Foarte depărtată</string> <string name="pref_swipe_dist_e_very_far">Foarte depărtată</string>
<string name="pref_key_horizontal_space">Distanța orizontală dintre taste</string> <string name="pref_key_horizontal_space">Distanța orizontală dintre taste</string>
<string name="pref_key_vertical_space">Distanța verticală dintre taste</string> <string name="pref_key_vertical_space">Distanța verticală dintre taste</string>
<string name="pref_category_advanced">Setări avansate</string>
<string name="pref_custom_layout_title">Aranjament personalizat</string>
<string name="pref_custom_layout_summary">Deschide codul sursă. Această opțiune nu e destinată spre folosință.</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</string> --> <!-- <string name="pref_vibration_e_system">System</string> -->
<!-- <string name="pref_vibration_e_strong">Strong</string> --> <!-- <string name="pref_vibration_e_strong">Strong</string> -->
@@ -80,6 +80,25 @@
<string name="key_action_send">Trimite</string> <string name="key_action_send">Trimite</string>
<string name="launcher_button_imesettings">Activează tastatura</string> <string name="launcher_button_imesettings">Activează tastatura</string>
<string name="launcher_description">Această aplicație este o tastatură virtuală. Accesați setările sistemului făcând clic pe butonul de mai jos și activați tastatura Unexpected.</string> <string name="launcher_description">Această aplicație este o tastatură virtuală. Accesați setările sistemului făcând clic pe butonul de mai jos și activați tastatura Unexpected.</string>
<string name="launcher_sourcecode">Aceasta este o aplicație gratuită și open source. Puteți găsi codul sursă sau raporta erori folosind link-ul <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> <string name="launcher_sourcecode">Aceasta este o aplicație gratuită și open source. Puteți găsi codul sursă sau raporta erori folosind link-ul Github.</string>
<string name="launcher_tryhere">După activare, puteți să încercați tastatura aici:</string> <string name="launcher_tryhere">După activare, puteți să încercați tastatura aici:</string>
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<string name="pref_category_advanced">Setări avansate</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">Изменить прозрачность фона</string> <string name="pref_keyboard_opacity">Изменить прозрачность фона</string>
<string name="pref_key_opacity">Изменить прозрачность клавиш</string> <string name="pref_key_opacity">Изменить прозрачность клавиш</string>
<string name="pref_key_activated_opacity">Изменить прозрачность нажатой клавиши</string> <string name="pref_key_activated_opacity">Изменить прозрачность нажатой клавиши</string>
<string name="pref_layout_title">Изменить раскладку клавиатуры</string>
<string name="pref_layout_e_system">Системные настройки</string> <string name="pref_layout_e_system">Системные настройки</string>
<string name="pref_layout_e_custom">Пользовательская раскладка</string> <string name="pref_layout_e_custom">Пользовательская раскладка</string>
<string name="pref_accents_title">Акцент</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">Показывать акценты для всех установленных языков</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">Показывать акценты только для выбранного языка</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Скрыть акценты</string> <string name="pref_custom_layout_title">Пользовательская раскладка</string>
<string name="pref_show_numpad_title">Показывать NumPad</string> <string name="pref_show_numpad_title">Показывать NumPad</string>
<string name="pref_show_numpad_never">Никогда</string> <string name="pref_show_numpad_never">Никогда</string>
<string name="pref_show_numpad_landscape">Только в ландшафтном режиме</string> <string name="pref_show_numpad_landscape">Только в ландшафтном режиме</string>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">Старшие цифры сверху</string> <string name="pref_numpad_layout_e_high_first">Старшие цифры сверху</string>
<string name="pref_numpad_layout_e_low_first">Младшие цифры сверху</string> <string name="pref_numpad_layout_e_low_first">Младшие цифры сверху</string>
<string name="pref_extra_keys_title">Добавить клавиши на клавиатуру</string> <string name="pref_extra_keys_title">Добавить клавиши на клавиатуру</string>
<!-- <string name="pref_extra_keys_custom">Add custom keys</string> -->
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
<string name="pref_second_layout_title">Дополнительная раскладка</string> <string name="pref_second_layout_title">Дополнительная раскладка</string>
<string name="pref_second_layout_none">Нет</string> <string name="pref_second_layout_none">Нет</string>
<string name="pref_category_typing">Печать</string> <string name="pref_category_typing">Печать</string>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">Поведение клавиши переключения клавиатуры</string> <string name="pref_switch_input_immediate_summary">Поведение клавиши переключения клавиатуры</string>
<string name="pref_vibrate_title">Вибрация</string> <string name="pref_vibrate_title">Вибрация</string>
<string name="pref_vibrate_summary">Включение/выключение вибрации при нажатии клавиши</string> <string name="pref_vibrate_summary">Включение/выключение вибрации при нажатии клавиши</string>
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</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>
@@ -64,9 +67,6 @@
<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">Расширенные настройки</string>
<string name="pref_custom_layout_title">Пользовательская раскладка</string>
<string name="pref_custom_layout_summary">Откройте исходный код. Эта параметр не предназначен для использования.</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</string> --> <!-- <string name="pref_vibration_e_system">System</string> -->
<!-- <string name="pref_vibration_e_strong">Strong</string> --> <!-- <string name="pref_vibration_e_strong">Strong</string> -->
@@ -80,6 +80,25 @@
<string name="key_action_send">Отправить</string> <string name="key_action_send">Отправить</string>
<string name="launcher_button_imesettings">Включить клавиатуру</string> <string name="launcher_button_imesettings">Включить клавиатуру</string>
<string name="launcher_description">Данное приложение является виртуальной клавиатурой. Зайдите в настройки, нажав кнопку внизу и активируйте Unexpected-Keyboard.</string> <string name="launcher_description">Данное приложение является виртуальной клавиатурой. Зайдите в настройки, нажав кнопку внизу и активируйте Unexpected-Keyboard.</string>
<string name="launcher_sourcecode">Это бесплатное приложение с открытым исходным кодом. Вы можете изучить код или сообщить об ошибках по ссылке <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> <string name="launcher_sourcecode">Это бесплатное приложение с открытым исходным кодом. Вы можете изучить код или сообщить об ошибках по ссылке Github.</string>
<string name="launcher_tryhere">После активации вы можете попробовать клавиатуру прямо здесь:</string> <string name="launcher_tryhere">После активации вы можете попробовать клавиатуру прямо здесь:</string>
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<string name="pref_category_advanced">Расширенные настройки</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> --> <!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
<!-- <string name="pref_key_opacity">Adjust key 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_key_activated_opacity">Adjust pressed key opacity</string> -->
<string name="pref_layout_title">Klavye Düzenini Değiştir</string>
<string name="pref_layout_e_system">Sistem Ayarları</string> <string name="pref_layout_e_system">Sistem Ayarları</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> --> <!-- <string name="pref_layout_e_custom">Custom layout</string> -->
<string name="pref_accents_title">Aksanlar</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">Yüklü tüm dillerin aksanlarını göster</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">Sadece seçili dilin aksanlarını göster</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">Aksanları gizle</string> <!-- <string name="pref_custom_layout_title">Custom layout</string> -->
<!-- <string name="pref_show_numpad_title">Show NumPad</string> --> <!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
<!-- <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> -->
@@ -27,6 +26,8 @@
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</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_numpad_layout_e_low_first">Low digits first</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_extra_keys_custom">Add custom keys</string> -->
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
<!-- <string name="pref_second_layout_title">Secondary layout</string> --> <!-- <string name="pref_second_layout_title">Secondary layout</string> -->
<string name="pref_second_layout_none">Hiçbiri</string> <string name="pref_second_layout_none">Hiçbiri</string>
<string name="pref_category_typing">Yazma</string> <string name="pref_category_typing">Yazma</string>
@@ -43,6 +44,8 @@
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> --> <!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">Titreşim</string> <string name="pref_vibrate_title">Titreşim</string>
<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_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</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>
@@ -64,9 +67,6 @@
<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="pref_vibration_e_disabled">Disabled</string> --> <!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</string> --> <!-- <string name="pref_vibration_e_system">System</string> -->
<!-- <string name="pref_vibration_e_strong">Strong</string> --> <!-- <string name="pref_vibration_e_strong">Strong</string> -->
@@ -80,6 +80,25 @@
<string name="key_action_send">Gönder</string> <string name="key_action_send">Gönder</string>
<!-- <string name="launcher_button_imesettings">Enable keyboard</string> --> <!-- <string name="launcher_button_imesettings">Enable keyboard</string> -->
<!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> --> <!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> -->
<!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> --> <!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on Github.</string> -->
<!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> --> <!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> -->
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<!-- <string name="pref_category_advanced">Advanced</string> -->
</resources> </resources>

View File

@@ -10,15 +10,12 @@
<string name="pref_keyboard_opacity">Tùy chỉnh độ trong suốt của bàn phím</string> <string name="pref_keyboard_opacity">Tùy chỉnh độ trong suốt của bàn phím</string>
<string name="pref_key_opacity">Tùy chỉnh độ trong suốt của phím</string> <string name="pref_key_opacity">Tùy chỉnh độ trong suốt của phím</string>
<string name="pref_key_activated_opacity">Tùy chỉnh độ trong suốt của phím khi nhấn</string> <string name="pref_key_activated_opacity">Tùy chỉnh độ trong suốt của phím khi nhấn</string>
<string name="pref_layout_title">Thay đổi bố cục bàn phím</string>
<string name="pref_layout_e_system">Hệ thống</string> <string name="pref_layout_e_system">Hệ thống</string>
<string name="pref_layout_e_custom">Tùy chỉnh bố cục</string> <string name="pref_layout_e_custom">Tùy chỉnh bố cục</string>
<string name="pref_accents_title">Dấu phụ</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">Hiển thị cho các ngôn ngữ đã cài đặt</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">Chỉ hiển thị cho các ngôn ngữ đã chọn</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none"> <string name="pref_custom_layout_title">Tùy chỉnh bố cục</string>
Ẩn dấu phụ
</string>
<string name="pref_show_numpad_title">Hiện NumPad</string> <string name="pref_show_numpad_title">Hiện NumPad</string>
<string name="pref_show_numpad_never">Không bao giờ</string> <string name="pref_show_numpad_never">Không bao giờ</string>
<string name="pref_show_numpad_landscape">Chỉ trong chế độ phong cảnh</string> <string name="pref_show_numpad_landscape">Chỉ trong chế độ phong cảnh</string>
@@ -29,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">Số lớn nhất trước</string> <string name="pref_numpad_layout_e_high_first">Số lớn nhất trước</string>
<string name="pref_numpad_layout_e_low_first">Số nhỏ nhất trước</string> <string name="pref_numpad_layout_e_low_first">Số nhỏ nhất trước</string>
<string name="pref_extra_keys_title">Thêm phím vào bàn phím</string> <string name="pref_extra_keys_title">Thêm phím vào bàn phím</string>
<!-- <string name="pref_extra_keys_custom">Add custom keys</string> -->
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
<string name="pref_second_layout_title">Bố cục phụ</string> <string name="pref_second_layout_title">Bố cục phụ</string>
<string name="pref_second_layout_none">Không</string> <string name="pref_second_layout_none">Không</string>
<string name="pref_category_typing"></string> <string name="pref_category_typing"></string>
@@ -45,6 +44,8 @@
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> --> <!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">Sự rung</string> <string name="pref_vibrate_title">Sự rung</string>
<string name="pref_vibrate_summary">Bật/tắt rung khi nhấn</string> <string name="pref_vibrate_summary">Bật/tắt rung khi nhấn</string>
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
<string name="pref_category_style">Kiểu cách</string> <string name="pref_category_style">Kiểu cách</string>
<string name="pref_margin_bottom_title">Căn lề dưới</string> <string name="pref_margin_bottom_title">Căn lề dưới</string>
<string name="pref_keyboard_height_title">Chiều cao bàn phím</string> <string name="pref_keyboard_height_title">Chiều cao bàn phím</string>
@@ -66,9 +67,6 @@
<string name="pref_swipe_dist_e_very_far">Rất xa</string> <string name="pref_swipe_dist_e_very_far">Rất xa</string>
<string name="pref_key_horizontal_space">Khoảng cách giữa các phím theo chiều ngang</string> <string name="pref_key_horizontal_space">Khoảng cách giữa các phím theo chiều ngang</string>
<string name="pref_key_vertical_space">Khoảng cách giữa các phím theo chiều dọc</string> <string name="pref_key_vertical_space">Khoảng cách giữa các phím theo chiều dọc</string>
<string name="pref_category_advanced">Nâng cao</string>
<string name="pref_custom_layout_title">Tùy chỉnh bố cục</string>
<string name="pref_custom_layout_summary">Hãy xem mã nguồn. Lựa chọn này không có mục đích sử dụng.</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> --> <!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</string> --> <!-- <string name="pref_vibration_e_system">System</string> -->
<!-- <string name="pref_vibration_e_strong">Strong</string> --> <!-- <string name="pref_vibration_e_strong">Strong</string> -->
@@ -82,6 +80,25 @@
<string name="key_action_send">Gửi</string> <string name="key_action_send">Gửi</string>
<!-- <string name="launcher_button_imesettings">Enable keyboard</string> --> <!-- <string name="launcher_button_imesettings">Enable keyboard</string> -->
<!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> --> <!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> -->
<!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> --> <!-- <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on Github.</string> -->
<!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> --> <!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> -->
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<string name="pref_category_advanced">Nâng cao</string>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">调整键盘背景透明度</string> <string name="pref_keyboard_opacity">调整键盘背景透明度</string>
<string name="pref_key_opacity">调整按键透明度</string> <string name="pref_key_opacity">调整按键透明度</string>
<string name="pref_key_activated_opacity">调整按下的按键的透明度</string> <string name="pref_key_activated_opacity">调整按下的按键的透明度</string>
<string name="pref_layout_title">改变键盘布局</string>
<string name="pref_layout_e_system">系统设置</string> <string name="pref_layout_e_system">系统设置</string>
<string name="pref_layout_e_custom">自定义布局</string> <string name="pref_layout_e_custom">自定义布局</string>
<string name="pref_accents_title">声调</string> <!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
<string name="pref_accents_e_all_installed">显示所有安装的语言的声调符号</string> <!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
<string name="pref_accents_e_selected">只显示选择的语言的声调符号</string> <!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
<string name="pref_accents_e_none">隐藏声调符号</string> <string name="pref_custom_layout_title">自定义布局</string>
<string name="pref_show_numpad_title">显示数字小键盘</string> <string name="pref_show_numpad_title">显示数字小键盘</string>
<string name="pref_show_numpad_never">从不</string> <string name="pref_show_numpad_never">从不</string>
<string name="pref_show_numpad_landscape">只在横屏显示</string> <string name="pref_show_numpad_landscape">只在横屏显示</string>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">大数字在上方</string> <string name="pref_numpad_layout_e_high_first">大数字在上方</string>
<string name="pref_numpad_layout_e_low_first">小数字在上方</string> <string name="pref_numpad_layout_e_low_first">小数字在上方</string>
<string name="pref_extra_keys_title">选择要显示的按键</string> <string name="pref_extra_keys_title">选择要显示的按键</string>
<!-- <string name="pref_extra_keys_custom">Add custom keys</string> -->
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
<string name="pref_second_layout_title">第二键盘布局</string> <string name="pref_second_layout_title">第二键盘布局</string>
<string name="pref_second_layout_none"></string> <string name="pref_second_layout_none"></string>
<string name="pref_category_typing">输入</string> <string name="pref_category_typing">输入</string>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">切换键盘按钮的行为</string> <string name="pref_switch_input_immediate_summary">切换键盘按钮的行为</string>
<string name="pref_vibrate_title">振动</string> <string name="pref_vibrate_title">振动</string>
<string name="pref_vibrate_summary">启用或者禁用按下按键时振动</string> <string name="pref_vibrate_summary">启用或者禁用按下按键时振动</string>
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</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>
@@ -64,9 +67,6 @@
<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">高级设置</string>
<string name="pref_custom_layout_title">自定义布局</string>
<string name="pref_custom_layout_summary">请查看源代码。这个选项不应该在正常情况下使用。</string>
<string name="pref_vibration_e_disabled">禁用</string> <string name="pref_vibration_e_disabled">禁用</string>
<string name="pref_vibration_e_system">使用系统振动强度</string> <string name="pref_vibration_e_system">使用系统振动强度</string>
<string name="pref_vibration_e_strong"></string> <string name="pref_vibration_e_strong"></string>
@@ -80,6 +80,25 @@
<string name="key_action_send">发送</string> <string name="key_action_send">发送</string>
<string name="launcher_button_imesettings">启用键盘</string> <string name="launcher_button_imesettings">启用键盘</string>
<string name="launcher_description">这是一个虚拟键盘软件。点击按钮进入系统设置,然后启用 Unexpected-Keyboard 即可使用。</string> <string name="launcher_description">这是一个虚拟键盘软件。点击按钮进入系统设置,然后启用 Unexpected-Keyboard 即可使用。</string>
<string name="launcher_sourcecode">这是一个免费且开源的软件。你可以在 <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a> 上找到源代码或者反馈 bug。</string> <string name="launcher_sourcecode">这是一个免费且开源的软件。你可以在 Github 上找到源代码或者反馈 bug。</string>
<string name="launcher_tryhere">启用键盘后,可以在这里测试效果:</string> <string name="launcher_tryhere">启用键盘后,可以在这里测试效果:</string>
<!-- <string name="key_descr_capslock">Caps lock</string> -->
<!-- <string name="key_descr_switch_greekmath">Greek &amp; math symbols</string> -->
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
<!-- <string name="key_descr_copy">Copy</string> -->
<!-- <string name="key_descr_paste">Paste</string> -->
<!-- <string name="key_descr_cut">Cut</string> -->
<!-- <string name="key_descr_selectAll">Select all</string> -->
<!-- <string name="key_descr_shareText">Share text</string> -->
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
<!-- <string name="key_descr_undo">Undo</string> -->
<!-- <string name="key_descr_redo">Redo</string> -->
<!-- <string name="key_descr_replaceText">Replace</string> -->
<!-- <string name="key_descr_textAssist">Assist</string> -->
<!-- <string name="key_descr_autofill">Autofill</string> -->
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
<!-- <string name="key_descr_superscript">Superscript</string> -->
<!-- <string name="key_descr_subscript">Subscript</string> -->
<string name="pref_category_advanced">高级设置</string>
</resources> </resources>

View File

@@ -1,10 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string-array name="pref_accents_entries">
<item>@string/pref_accents_e_all_installed</item>
<item>@string/pref_accents_e_selected</item>
<item>@string/pref_accents_e_none</item>
</string-array>
<string-array name="pref_show_numpad_values"> <string-array name="pref_show_numpad_values">
<item>never</item> <item>never</item>
<item>landscape</item> <item>landscape</item>
@@ -23,11 +18,6 @@
<item>@string/pref_numpad_layout_e_high_first</item> <item>@string/pref_numpad_layout_e_high_first</item>
<item>@string/pref_numpad_layout_e_low_first</item> <item>@string/pref_numpad_layout_e_low_first</item>
</string-array> </string-array>
<string-array name="pref_accents_values">
<item>1</item>
<item>2</item>
<item>4</item>
</string-array>
<string-array name="pref_theme_entries"> <string-array name="pref_theme_entries">
<item>@string/pref_theme_e_system</item> <item>@string/pref_theme_e_system</item>
<item>@string/pref_theme_e_dark</item> <item>@string/pref_theme_e_dark</item>

View File

@@ -3,7 +3,4 @@
<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>

View File

@@ -2,7 +2,7 @@
<resources> <resources>
<!--DO NOT EDIT. This file is generated, see gen_layouts.py.--> <!--DO NOT EDIT. This file is generated, see gen_layouts.py.-->
<string-array name="pref_layout_values"> <string-array name="pref_layout_values">
<item>none</item> <item>system</item>
<item>latn_qwerty_us</item> <item>latn_qwerty_us</item>
<item>latn_colemak</item> <item>latn_colemak</item>
<item>latn_dvorak</item> <item>latn_dvorak</item>
@@ -22,6 +22,7 @@
<item>hebr_1_il</item> <item>hebr_1_il</item>
<item>hebr_2_il</item> <item>hebr_2_il</item>
<item>latn_azerty_fr</item> <item>latn_azerty_fr</item>
<item>latn_bepo_fr</item>
<item>latn_bone</item> <item>latn_bone</item>
<item>latn_neo2</item> <item>latn_neo2</item>
<item>latn_qwerty_br</item> <item>latn_qwerty_br</item>
@@ -38,18 +39,20 @@
<item>latn_qwertz_cz</item> <item>latn_qwertz_cz</item>
<item>latn_qwertz_cz_multifunctional</item> <item>latn_qwertz_cz_multifunctional</item>
<item>latn_qwertz_de</item> <item>latn_qwertz_de</item>
<item>latn_qwertz_fr_ch</item>
<item>latn_qwertz_hu</item> <item>latn_qwertz_hu</item>
<item>latn_qwertz_sk</item> <item>latn_qwertz_sk</item>
<item>urdu_phonetic_ur</item>
<item>custom</item> <item>custom</item>
</string-array> </string-array>
<string-array name="pref_layout_entries"> <string-array name="pref_layout_entries">
<item>None</item> <item>@string/pref_layout_e_system</item>
<item>QWERTY (US)</item> <item>QWERTY (US)</item>
<item>Colemak</item> <item>Colemak</item>
<item>Dvorak</item> <item>Dvorak</item>
<item>Arabic Alt</item> <item>Arabic Alt</item>
<item>Arabic PC</item> <item>Arabic PC</item>
<item>Arabic (کوردی)</item> <item>Kurdish (کوردی)</item>
<item>Persian PC</item> <item>Persian PC</item>
<item>বাংলা (জাতীয়)</item> <item>বাংলা (জাতীয়)</item>
<item>বাংলা (প্রভাত)</item> <item>বাংলা (প্রভাত)</item>
@@ -63,6 +66,7 @@
<item>Hebrew 1</item> <item>Hebrew 1</item>
<item>Hebrew 2</item> <item>Hebrew 2</item>
<item>AZERTY (Français)</item> <item>AZERTY (Français)</item>
<item>BEPO (Français)</item>
<item>Bone</item> <item>Bone</item>
<item>Neo 2</item> <item>Neo 2</item>
<item>QWERTY (Brasileiro)</item> <item>QWERTY (Brasileiro)</item>
@@ -79,8 +83,10 @@
<item>QWERTZ (Czech)</item> <item>QWERTZ (Czech)</item>
<item>QWERTZ Multifunctional (Czech)</item> <item>QWERTZ Multifunctional (Czech)</item>
<item>QWERTZ (Deutsch)</item> <item>QWERTZ (Deutsch)</item>
<item>QWERTZ (Swiss French)</item>
<item>QWERTZ (Magyar)</item> <item>QWERTZ (Magyar)</item>
<item>QWERTZ (Slovak)</item> <item>QWERTZ (Slovak)</item>
<item>Urdu Phonetic</item>
<item>@string/pref_layout_e_custom</item> <item>@string/pref_layout_e_custom</item>
</string-array> </string-array>
<integer-array name="layout_ids"> <integer-array name="layout_ids">
@@ -104,6 +110,7 @@
<item>@xml/hebr_1_il</item> <item>@xml/hebr_1_il</item>
<item>@xml/hebr_2_il</item> <item>@xml/hebr_2_il</item>
<item>@xml/latn_azerty_fr</item> <item>@xml/latn_azerty_fr</item>
<item>@xml/latn_bepo_fr</item>
<item>@xml/latn_bone</item> <item>@xml/latn_bone</item>
<item>@xml/latn_neo2</item> <item>@xml/latn_neo2</item>
<item>@xml/latn_qwerty_br</item> <item>@xml/latn_qwerty_br</item>
@@ -120,8 +127,10 @@
<item>@xml/latn_qwertz_cz</item> <item>@xml/latn_qwertz_cz</item>
<item>@xml/latn_qwertz_cz_multifunctional</item> <item>@xml/latn_qwertz_cz_multifunctional</item>
<item>@xml/latn_qwertz_de</item> <item>@xml/latn_qwertz_de</item>
<item>@xml/latn_qwertz_fr_ch</item>
<item>@xml/latn_qwertz_hu</item> <item>@xml/latn_qwertz_hu</item>
<item>@xml/latn_qwertz_sk</item> <item>@xml/latn_qwertz_sk</item>
<item>@xml/urdu_phonetic_ur</item>
<item>-1</item> <item>-1</item>
</integer-array> </integer-array>
</resources> </resources>

View File

@@ -10,13 +10,12 @@
<string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string>
<string name="pref_key_opacity">Adjust key 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_key_activated_opacity">Adjust pressed key opacity</string>
<string name="pref_layout_title">Change keyboard layout</string>
<string name="pref_layout_e_system">System settings</string> <string name="pref_layout_e_system">System settings</string>
<string name="pref_layout_e_custom">Custom layout</string> <string name="pref_layout_e_custom">Custom layout</string>
<string name="pref_accents_title">Accents</string> <string name="pref_layouts_add">Add an alternate layout</string>
<string name="pref_accents_e_all_installed">Show accents for all installed languages</string> <string name="pref_layouts_item">Layout %1$d: %2$s</string>
<string name="pref_accents_e_selected">Only show accents for the selected language</string> <string name="pref_layouts_remove_custom">Remove layout</string>
<string name="pref_accents_e_none">Hide accents</string> <string name="pref_custom_layout_title">Custom layout</string>
<string name="pref_show_numpad_title">Show NumPad</string> <string name="pref_show_numpad_title">Show NumPad</string>
<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>
@@ -27,6 +26,8 @@
<string name="pref_numpad_layout_e_high_first">High digits first</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_numpad_layout_e_low_first">Low digits first</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_extra_keys_custom">Add custom keys</string>
<string name="pref_extra_keys_internal">Select keys to add to the keyboard</string>
<string name="pref_second_layout_title">Secondary layout</string> <string name="pref_second_layout_title">Secondary layout</string>
<string name="pref_second_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>
@@ -43,6 +44,8 @@
<string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string>
<string name="pref_vibrate_title">Vibration</string> <string name="pref_vibrate_title">Vibration</string>
<string name="pref_vibrate_summary">Enable/disable vibration on keypress</string> <string name="pref_vibrate_summary">Enable/disable vibration on keypress</string>
<string name="pref_pin_entry_enabled_title">Pin entry layout</string>
<string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string>
<string name="pref_category_style">Style</string> <string name="pref_category_style">Style</string>
<string name="pref_margin_bottom_title">Margin bottom</string> <string name="pref_margin_bottom_title">Margin bottom</string>
<string name="pref_keyboard_height_title">Keyboard height</string> <string name="pref_keyboard_height_title">Keyboard height</string>
@@ -64,9 +67,6 @@
<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="pref_vibration_e_disabled">Disabled</string> <string name="pref_vibration_e_disabled">Disabled</string>
<string name="pref_vibration_e_system">System</string> <string name="pref_vibration_e_system">System</string>
<string name="pref_vibration_e_strong">Strong</string> <string name="pref_vibration_e_strong">Strong</string>
@@ -80,6 +80,26 @@
<string name="key_action_send">Send</string> <string name="key_action_send">Send</string>
<string name="launcher_button_imesettings">Enable keyboard</string> <string name="launcher_button_imesettings">Enable keyboard</string>
<string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string>
<string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on <a href="https://github.com/Julow/Unexpected-Keyboard/">Github</a>.</string> <string name="launcher_sourcecode">This is an free and open source application. You can find the source code or report bugs on Github.</string>
<string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string>
<string name="key_descr_capslock">Caps lock</string>
<string name="key_descr_switch_greekmath">Greek &amp; math symbols</string>
<string name="key_descr_voice_typing">Voice typing</string>
<string name="key_descr_copy">Copy</string>
<string name="key_descr_paste">Paste</string>
<string name="key_descr_cut">Cut</string>
<string name="key_descr_selectAll">Select all</string>
<string name="key_descr_shareText">Share text</string>
<string name="key_descr_pasteAsPlainText">Paste as plain text</string>
<string name="key_descr_undo">Undo</string>
<string name="key_descr_redo">Redo</string>
<string name="key_descr_replaceText">Replace</string>
<string name="key_descr_textAssist">Assist</string>
<string name="key_descr_autofill">Autofill</string>
<string name="key_descr_ª">Ordinal Indicator</string>
<string name="key_descr_º">Ordinal Indicator</string>
<string name="key_descr_superscript">Superscript</string>
<string name="key_descr_subscript">Subscript</string>
<!-- Unused -->
<string name="pref_category_advanced">Advanced</string>
</resources> </resources>

View File

@@ -5,6 +5,7 @@
<dimen name="emoji_type_button_height">56dp</dimen> <dimen name="emoji_type_button_height">56dp</dimen>
<dimen name="emoji_grid_height">250dp</dimen> <dimen name="emoji_grid_height">250dp</dimen>
<dimen name="emoji_text_size">28dp</dimen> <dimen name="emoji_text_size">28dp</dimen>
<dimen name="pref_button_size">28dp</dimen>
<bool name="debug_logs" product="debug">true</bool> <bool name="debug_logs" product="debug">true</bool>
<bool name="debug_logs" product="default">false</bool> <bool name="debug_logs" product="default">false</bool>
</resources> </resources>

View File

@@ -11,8 +11,8 @@
<key key0="ه" key1="&#0247;" key2="٨" key3="*"/> <key key0="ه" key1="&#0247;" key2="٨" key3="*"/>
<key key0="خ" key1="&#0215;" key2="٩" key3="("/> <key key0="خ" key1="&#0215;" key2="٩" key3="("/>
<key key0="ح" key1="&#1563;" key2="٠" key3=")"/> <key key0="ح" key1="&#1563;" key2="٠" key3=")"/>
<key key0="ج" key1="&gt;" key2="-" key3="_"/> <key key0="ج" key1="&gt;" key2="-" key3="_" key4="f11_placeholder"/>
<key key0="د" key1="&lt;" key2="=" key3="ذ"/> <key key0="د" key1="&lt;" key2="=" key3="ذ" key4="f12_placeholder"/>
<!-- <key key0="ذ" key1="&#1617;" key3="\\" key4="|"/> --> <!-- <key key0="ذ" key1="&#1617;" key3="\\" key4="|"/> -->
</row> </row>
<row> <row>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<keyboard name="Arabic (کوردی)" script="arabic"> <keyboard name="Kurdish (کوردی)" script="arabic">
<row> <row>
<key key0="ق" key1="ٯ" key2="١" key3="esc"/> <key key0="ق" key1="ٯ" key2="١" key3="esc"/>
<key key0="و" key1="وو" key2="٢" key3="\@"/> <key key0="و" key1="وو" key2="٢" key3="\@"/>

View File

@@ -1,26 +1,25 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Adapted from standard SIRI 9147 --> <keyboard name="Persian PC" script="persian">
<keyboard name="Persian PC" script="arabic">
<row> <row>
<key key0="ض" key2="۱"/> <key key0="ض" key2="۱" key4="esc"/>
<key key0="ص" key2="۲"/> <key key0="ص" key2="۲" key1="~" key3="\@"/>
<key key0="ث" key2="۳"/> <key key0="ث" key2="۳" key1="!" key3="\#"/>
<key key0="ق" key2="۴"/> <key key0="ق" key2="۴" key1="﷼" key3="$"/>
<key key0="ف" key2="۵"/> <key key0="ف" key2="۵" key3="٪"/>
<key key0="غ" key1="۶" key2="،"/> <key key0="غ" key2="۶" key1="،" key3="^"/>
<key key0="ع" key1="۷"/> <key key0="ع" key2="۷" key3="&amp;"/>
<key key0="ه" key1="۸"/> <key key0="ه" key2="۸" key3="*"/>
<key key0="خ" key1="۹"/> <key key0="خ" key2="۹" key3="(" key4=")"/>
<key key0="ح" key1="۰"/> <key key0="ح" key2="۰"/>
<key key0="ج"/> <key key0="ج" key1="f11_placeholder" key3="f12_placeholder"/>
</row> </row>
<row> <row>
<key key0="ش" key2="\@"/> <key key0="ش" key2="tab"/>
<key key0="س" key2="\#"/> <key key0="س"/>
<key key0="ی" key2=""/> <key key0="ی" key2="ئ"/>
<key key0="ب" key2="٪"/> <key key0="ب"/>
<key key0="ل" key2="&amp;"/> <key key0="ل"/>
<key key0="ا" key1="آ" key2="ء" key4="-"/> <key key0="ا" key1="آ" key4="ء" key2="-" key3="_"/>
<key key0="ت" key1="&#x200C;" key2="+"/> <key key0="ت" key1="&#x200C;" key2="+"/>
<key key0="ن" key1="("/> <key key0="ن" key1="("/>
<key key0="م" key1=")"/> <key key0="م" key1=")"/>
@@ -28,15 +27,15 @@
<key key0="گ"/> <key key0="گ"/>
</row> </row>
<row> <row>
<key key0="ظ" key2="&#1567;"/> <key key0="ظ"/>
<key key0="ط"/> <key key0="ط"/>
<key key0="ز" key2="«"/> <key key0="ز" key2="«"/>
<key key0="ر" key2="»"/> <key key0="ر" key2="»"/>
<key key0="ژ" key2="."/> <key key0="ژ" key2="."/>
<key key0="ذ" key2=":"/> <key key0="ذ" key2=":"/>
<key key0="د" key1="؛"/> <key key0="د" key2="؛"/>
<key key0="پ" key1="!"/> <key key0="پ" key2="&#1567;"/>
<key key0="و" key1="ـ"/> <key key0="و"/>
<key key0="چ"/> <key key0="چ"/>
<key width="1.0" key0="backspace" key2="delete"/> <key width="1.0" key0="backspace" key2="delete"/>
</row> </row>

View File

@@ -2,7 +2,7 @@
<row height="0.95"> <row height="0.95">
<key width="1.7" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key4="switch_numeric"/> <key width="1.7" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key4="switch_numeric"/>
<key width="1.1" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/> <key width="1.1" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/>
<key width="4.4" key0="space" key7="switch_second" key5="left" key6="right" slider="true"/> <key width="4.4" key0="space" key7="switch_forward" key8="switch_backward" key5="cursor_left" key6="cursor_right" slider="true"/>
<key width="1.1" key0="loc voice_typing" key7="up" key6="right" key5="left" key8="down"/> <key width="1.1" key7="up" key6="right" key5="left" key8="down"/>
<key width="1.7" key0="enter" key2="action"/> <key width="1.7" key0="enter" key1="loc voice_typing" key2="action"/>
</row> </row>

View File

@@ -29,7 +29,7 @@
<row> <row>
<key width="2.0" key0="shift" key2="loc capslock"/> <key width="2.0" key0="shift" key2="loc capslock"/>
<key key0="w" key3="&lt;" key4="&gt;"/> <key key0="w" key3="&lt;" key4="&gt;"/>
<key key0="x"/> <key key0="x" key1="loc †"/>
<key key0="c" key1="accent_cedille" key3="," key4="\?"/> <key key0="c" key1="accent_cedille" key3="," key4="\?"/>
<key key0="v" key3=";" key4="."/> <key key0="v" key3=";" key4="."/>
<key key0="b" key3=":" key4="/"/> <key key0="b" key3=":" key4="/"/>

40
res/xml/latn_bepo_fr.xml Normal file
View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Inspired by the bépo layout, but adapted to smartphone -->
<keyboard name="BEPO (Français)" script="latin">
<row>
<key width="1.1" key0="b" key1="esc" key2="1" key4="|"/>
<key width="1.1" key0="é" key2="2" key4="è"/>
<key width="1.1" key0="p" key2="3"/>
<key width="1.1" key0="o" key2="4" key4="accent_circonflexe"/>
<key width="1.1" key0="v" key2="5" key4="{"/>
<key width="1.1" key0="d" key2="6" key4="}"/>
<key width="1.1" key0="l" key2="7" key4="("/>
<key width="1.1" key0="j" key2="8" key4=")"/>
<key width="1.1" key0="z" key2="9" key4="["/>
<key width="1.1" key0="w" key2="0" key4="]"/>
</row>
<row>
<key width="1.1" key0="a" key1="tab" key4="à"/>
<key width="1.1" key0="u" key1="$" key4="ù"/>
<key width="1.1" key0="i" key4="&amp;"/>
<key width="1.1" key0="e" key1="+" key2="accent_trema" key4="€"/>
<key width="1.1" key0="c" key1="=" key4="ç"/>
<key width="1.1" key0="t" key1="^" key4=";"/>
<key width="1.1" key0="s" key4="!"/>
<key width="1.1" key0="r" key4="\?"/>
<key width="1.1" key0="n" key1="`" key2="'" key4=":"/>
<key width="1.1" key0="m" key2="&quot;"/>
</row>
<row>
<key width="1.5" key0="shift" key2="capslock" key3="&lt;"/>
<key key0="y" key4="%"/>
<key key0="x" key4="\@"/>
<key key0="k" key4="~"/>
<key key0="." key1="\#" key4="," key6="-" key8="_"/>
<key key0="q" key4="*"/>
<key key0="g" key3="/" key4="\\"/>
<key key0="h"/>
<key key0="f"/>
<key width="1.5" key0="backspace" key2="delete" key3=">"/>
</row>
</keyboard>

View File

@@ -39,7 +39,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" key7="switch_second" key8="0"/> <key width="4.0" key0="space" key7="switch_forward" key8="0"/>
<key width="1.2" key7="up" key6="right" key5="left" key8="down"/> <key width="1.2" key7="up" key6="right" key5="left" key8="down"/>
<key width="1.8" key0="enter" key3="action"/> <key width="1.8" key0="enter" key3="action"/>
</row> </row>

View File

@@ -42,7 +42,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" key7="switch_second"/> <key width="4.0" key0="space" key7="switch_second" key8="switch_backward"/>
<key width="1.2" key7="up" key6="right" key5="left" key8="down"/> <key width="1.2" key7="up" key6="right" key5="left" key8="down"/>
<key key0="j" key4=";"/> <key key0="j" key4=";"/>
<key width="1.8" key0="enter" key2="action"/> <key width="1.8" key0="enter" key2="action"/>

View File

@@ -15,7 +15,7 @@
</row> </row>
<row> <row>
<key key0="a" key2="tab" key4="`"/> <key key0="a" key2="tab" key4="`"/>
<key key0="s" key1="'" key3="loc ß" key4="accent_cedille"/> <key key0="s" key1="'" key2="loc §" key3="loc ß" key4="accent_cedille"/>
<key key0="d" key1="&quot;"/> <key key0="d" key1="&quot;"/>
<key key0="f"/> <key key0="f"/>
<key key0="g"/> <key key0="g"/>
@@ -28,7 +28,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z"/> <key key0="z"/>
<key key0="x"/> <key key0="x" key2="loc †"/>
<key key0="c"/> <key key0="c"/>
<key key0="v"/> <key key0="v"/>
<key key0="b"/> <key key0="b"/>

View File

@@ -14,7 +14,7 @@
</row> </row>
<row> <row>
<key key0="a" key2="tab" key4="`"/> <key key0="a" key2="tab" key4="`"/>
<key key0="s" key2="¡" key3="loc ß"/> <key key0="s" key1="loc §" key2="¡" key3="loc ß"/>
<key key0="d" key1="accent_grave" key3="accent_aigu"/> <key key0="d" key1="accent_grave" key3="accent_aigu"/>
<key key0="f"/> <key key0="f"/>
<key key0="g" key2="-" key3="_"/> <key key0="g" key2="-" key3="_"/>
@@ -27,7 +27,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z"/> <key key0="z"/>
<key key0="x"/> <key key0="x" key1="loc †"/>
<key key0="c" key1="loc accent_cedille" key2="&lt;" key3="."/> <key key0="c" key1="loc accent_cedille" key2="&lt;" key3="."/>
<key key0="v" key2="&gt;" key3=","/> <key key0="v" key2="&gt;" key3=","/>
<key key0="b" key2="\?" key3="/" key4="¿"/> <key key0="b" key2="\?" key3="/" key4="¿"/>

View File

@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z" key3="&lt;" key4="&gt;"/> <key key0="z" key3="&lt;" key4="&gt;"/>
<key key0="x" key4="\#"/> <key key0="x" key1="loc †" key4="\#"/>
<key key0="c" key4="&amp;"/> <key key0="c" key4="&amp;"/>
<key key0="v" key4="\@"/> <key key0="v" key4="\@"/>
<key key0="b" key1="\?" key3="," key4=";"/> <key key0="b" key1="\?" key3="," key4=";"/>

View File

@@ -14,7 +14,7 @@
</row> </row>
<row> <row>
<key shift="0.5" key0="a" key1="ā" key2="tab"/> <key shift="0.5" key0="a" key1="ā" key2="tab"/>
<key key0="s" key1="š" key3="loc ß" key4="loc accent_ogonek"/> <key key0="s" key1="š" key2="loc §" key3="loc ß" key4="loc accent_ogonek"/>
<key key0="d"/> <key key0="d"/>
<key key0="f" key1="loc accent_dot_above"/> <key key0="f" key1="loc accent_dot_above"/>
<key key0="g" key1="ģ"/> <key key0="g" key1="ģ"/>
@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z" key1="ž"/> <key key0="z" key1="ž"/>
<key key0="x"/> <key key0="x" key2="loc †"/>
<key key0="c" key1="č"/> <key key0="c" key1="č"/>
<key key0="v"/> <key key0="v"/>
<key key0="b" key2="\?" key3="&lt;" key4="&gt;"/> <key key0="b" key2="\?" key3="&lt;" key4="&gt;"/>

View File

@@ -14,7 +14,7 @@
</row> </row>
<row> <row>
<key shift="0.5" key0="a" key1="tab" key2="`" key3="æ" key4="å"/> <key shift="0.5" key0="a" key1="tab" key2="`" key3="æ" key4="å"/>
<key key0="s" key1="loc accent_ring" key3="loc ß" key4="loc accent_ogonek"/> <key key0="s" key1="loc accent_ring" key2="loc §" key3="loc ß" key4="loc accent_ogonek"/>
<key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/> <key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/>
<key key0="f" key1="loc accent_dot_above"/> <key key0="f" key1="loc accent_dot_above"/>
<key key0="g" key1="loc accent_caron" key2="-" key3="_"/> <key key0="g" key1="loc accent_caron" key2="-" key3="_"/>
@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z"/> <key key0="z"/>
<key key0="x"/> <key key0="x" key2="loc †"/>
<key key0="c" key1="loc accent_cedille" key2="&lt;" key3="."/> <key key0="c" key1="loc accent_cedille" key2="&lt;" key3="."/>
<key key0="v" key2="&gt;" key3=","/> <key key0="v" key2="&gt;" key3=","/>
<key key0="b" key2="\?" key3="/"/> <key key0="b" key2="\?" key3="/"/>

View File

@@ -14,7 +14,7 @@
</row> </row>
<row> <row>
<key shift="0.5" key0="a" key1="tab" key2="`" key4="ą"/> <key shift="0.5" key0="a" key1="tab" key2="`" key4="ą"/>
<key key0="s" key1="loc accent_ring" key3="loc ß" key4="ś"/> <key key0="s" key1="loc accent_ring" key2="loc §" key3="loc ß" key4="ś"/>
<key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/> <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="f" key1="loc accent_dot_above" key4="loc accent_ogonek"/>
<key key0="g" key1="loc accent_caron" key2="-" key3="_"/> <key key0="g" key1="loc accent_caron" key2="-" key3="_"/>
@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z" key4="ż"/> <key key0="z" key4="ż"/>
<key key0="x" key4="ź"/> <key key0="x" key2="loc †" key4="ź"/>
<key key0="c" key1="loc accent_cedille" key2="&lt;" key3="." key4="ć"/> <key key0="c" key1="loc accent_cedille" key2="&lt;" key3="." key4="ć"/>
<key key0="v" key2="&gt;" key3=","/> <key key0="v" key2="&gt;" key3=","/>
<key key0="b" key2="\?" key3="/"/> <key key0="b" key2="\?" key3="/"/>

View File

@@ -14,7 +14,7 @@
</row> </row>
<row> <row>
<key shift="0.5" key0="a" key1="â" key2="ă" key3="`" key4="tab"/> <key shift="0.5" key0="a" key1="â" key2="ă" key3="`" key4="tab"/>
<key key0="s" key1="ș" key3="loc ß" key4="loc accent_ogonek"/> <key key0="s" key1="ș" key2="loc §" key3="loc ß" key4="loc accent_ogonek"/>
<key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/> <key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/>
<key key0="f" key1="loc accent_dot_above"/> <key key0="f" key1="loc accent_dot_above"/>
<key key0="g" key1="loc accent_caron" key2="-" key3="_"/> <key key0="g" key1="loc accent_caron" key2="-" key3="_"/>
@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z"/> <key key0="z"/>
<key key0="x"/> <key key0="x" key2="loc †"/>
<key key0="c" key1="loc accent_cedille" key2="&lt;" key3="."/> <key key0="c" key1="loc accent_cedille" key2="&lt;" key3="."/>
<key key0="v" key2="&gt;" key3=","/> <key key0="v" key2="&gt;" key3=","/>
<key key0="b" key2="\?" key3="/"/> <key key0="b" key2="\?" key3="/"/>

View File

@@ -15,7 +15,7 @@
</row> </row>
<row> <row>
<key key0="a" key2="tab"/> <key key0="a" key2="tab"/>
<key key0="s" key1="accent_ring" key3="loc ß"/> <key key0="s" key1="accent_ring" key2="loc §" key3="loc ß"/>
<key key0="d" key3="accent_aigu"/> <key key0="d" key3="accent_aigu"/>
<key key0="f" key1="accent_trema"/> <key key0="f" key1="accent_trema"/>
<key key0="g"/> <key key0="g"/>
@@ -29,7 +29,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z"/> <key key0="z"/>
<key key0="x"/> <key key0="x" key2="loc †"/>
<key key0="c"/> <key key0="c"/>
<key key0="v"/> <key key0="v"/>
<key key0="b" key2=";" key4=","/> <key key0="b" key2=";" key4=","/>

View File

@@ -14,7 +14,7 @@
</row> </row>
<row> <row>
<key shift="0.5" key0="a" key1="tab" key2="`"/> <key shift="0.5" key0="a" key1="tab" key2="`"/>
<key key0="s" key1="ş"/> <key key0="s" key1="ş" key2="loc §"/>
<key key0="d"/> <key key0="d"/>
<key key0="f"/> <key key0="f"/>
<key key0="g" key1="ğ" key2="-" key3="_"/> <key key0="g" key1="ğ" key2="-" key3="_"/>
@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z"/> <key key0="z"/>
<key key0="x"/> <key key0="x" key2="loc †"/>
<key key0="c" key1="ç" key2="&lt;" key3="."/> <key key0="c" key1="ç" key2="&lt;" key3="."/>
<key key0="v" key2="&gt;" key3=","/> <key key0="v" key2="&gt;" key3=","/>
<key key0="b" key2="\?" key3="/"/> <key key0="b" key2="\?" key3="/"/>

View File

@@ -35,7 +35,7 @@ See srcs/juloo.keyboard2/KeyValue.java for the keys that have a special meaning.
</row> </row>
<row> <row>
<key shift="0.5" key0="a" key1="tab" key2="`"/> <key shift="0.5" key0="a" key1="tab" key2="`"/>
<key key0="s" key1="loc accent_ring" key3="loc ß" key4="loc accent_ogonek"/> <key key0="s" key1="loc accent_ring" key2="loc §" key3="loc ß" key4="loc accent_ogonek"/>
<key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/> <key key0="d" key1="loc accent_grave" key2="loc £" key3="loc accent_aigu"/>
<key key0="f" key1="loc accent_dot_above"/> <key key0="f" key1="loc accent_dot_above"/>
<key key0="g" key1="loc accent_caron" key2="-" key3="_"/> <key key0="g" key1="loc accent_caron" key2="-" key3="_"/>
@@ -47,7 +47,7 @@ See srcs/juloo.keyboard2/KeyValue.java for the keys that have a special meaning.
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z"/> <key key0="z"/>
<key key0="x"/> <key key0="x" key2="loc †"/>
<key key0="c" key1="loc accent_cedille" key2="&lt;" key3="."/> <key key0="c" key1="loc accent_cedille" key2="&lt;" key3="."/>
<key key0="v" key2="&gt;" key3=","/> <key key0="v" key2="&gt;" key3=","/>
<key key0="b" key2="\?" key3="/"/> <key key0="b" key2="\?" key3="/"/>

View File

@@ -15,7 +15,7 @@
</row> </row>
<row> <row>
<key shift="0.5" key0="a" key1="tab" key2="ă" key3="â"/> <key shift="0.5" key0="a" key1="tab" key2="ă" key3="â"/>
<key key0="s" key1="accent_aigu"/> <key key0="s" key1="accent_aigu" key2="loc §"/>
<key key0="d" key1="accent_bar" key2="₫" key3="đ"/> <key key0="d" key1="accent_bar" key2="₫" key3="đ"/>
<key key0="f" key1="accent_grave"/> <key key0="f" key1="accent_grave"/>
<key key0="g" key2="-" key3="_"/> <key key0="g" key2="-" key3="_"/>
@@ -27,7 +27,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="z"/> <key key0="z"/>
<key key0="x" key1="accent_tilde"/> <key key0="x" key1="accent_tilde" key2="loc †"/>
<key key0="c" key2="&lt;" key3="."/> <key key0="c" key2="&lt;" key3="."/>
<key key0="v" key2="&gt;" key3=","/> <key key0="v" key2="&gt;" key3=","/>
<key key0="b" key2="\?" key3="/"/> <key key0="b" key2="\?" key3="/"/>

View File

@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="y" key1="&gt;" key2="|" key3="&lt;"/> <key key0="y" key1="&gt;" key2="|" key3="&lt;"/>
<key key0="x"/> <key key0="x" key1="loc †"/>
<key key0="c"/> <key key0="c"/>
<key key0="v" /> <key key0="v" />
<key key0="b" key1=";" key3=","/> <key key0="b" key1=";" key3=","/>

View File

@@ -14,7 +14,7 @@
</row> </row>
<row> <row>
<key shift="0.5" key0="a" key1="tab" key2="á" key3=";"/> <key shift="0.5" key0="a" key1="tab" key2="á" key3=";"/>
<key key0="s" key4="š"/> <key key0="s" key1="loc §" key4="š"/>
<key key0="d" key4="ď"/> <key key0="d" key4="ď"/>
<key key0="f" key3="["/> <key key0="f" key3="["/>
<key key0="g" key3="]"/> <key key0="g" key3="]"/>
@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="y" key2="ý"/> <key key0="y" key2="ý"/>
<key key0="x" key3="\#"/> <key key0="x" key1="loc †" key3="\#"/>
<key key0="c" key3="&amp;" key4="č"/> <key key0="c" key3="&amp;" key4="č"/>
<key key0="v" key3="\@"/> <key key0="v" key3="\@"/>
<key key0="b" key1="&lt;" key2="&gt;" key3="{" key4="}"/> <key key0="b" key1="&lt;" key2="&gt;" key3="{" key4="}"/>

View File

@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="y" key1="÷" key2="ý"/> <key key0="y" key1="÷" key2="ý"/>
<key key0="x" key1="∙" key3="×"/> <key key0="x" key1="∙" key3="×" key4="loc †"/>
<key key0="c" key1="\#" key2="γ" key3="&amp;" key4="č"/> <key key0="c" key1="\#" key2="γ" key3="&amp;" key4="č"/>
<key key0="v" key1="|" key3="\@"/> <key key0="v" key1="|" key3="\@"/>
<key key0="b" key1=";" key2="♭" key3=":" key4="β"/> <key key0="b" key1=";" key2="♭" key3=":" key4="β"/>

View File

@@ -30,7 +30,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key shift="0.5" key0="y" key1="&gt;" key2="|" key3="&lt;"/> <key shift="0.5" key0="y" key1="&gt;" key2="|" key3="&lt;"/>
<key key0="x"/> <key key0="x" key1="loc †"/>
<key key0="c"/> <key key0="c"/>
<key key0="v"/> <key key0="v"/>
<key key0="b" key1=";" key3=","/> <key key0="b" key1=";" key3=","/>

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Freely adapted from standard SN 074021:1999-01 by Eluc -->
<keyboard name="QWERTZ (Swiss French)" script="latin">
<row>
<key key0="q" key1="§" key2="1" key4="esc"/>
<key key0="w" key1="^" key2="2" key3="&quot;" key4="\@"/>
<key key0="e" key2="3" key3="\#" key4="€"/>
<key key0="r" key2="4" key3="$" key4="f11_placeholder"/>
<key key0="t" key2="5" key3="%" key4="f12_placeholder"/>
<key key0="z" key2="6" key3="&amp;"/>
<key key0="u" key1="ù" key2="7" key3="{" key4="}"/>
<key key0="i" key2="8" key3="[" key4="]"/>
<key key0="o" key1="œ" key2="9" key3="(" key4=")"/>
<key key0="p" key2="0" key3="=" key4="\?"/>
<key key0="è" key2="ü" key3="!"/>
</row>
<row>
<key key0="a" key1="æ" key2="tab"/>
<key key0="s" key1="`" key3="ß" key4="£"/>
<key key0="d"/>
<key key0="f" key1="~"/>
<key key0="g"/>
<key key0="h" key3="+"/>
<key key0="j" key3="*"/>
<key key0="k" key3="/"/>
<key key0="l" key1="'" key3="\\"/>
<key key0="é" key1="ë" key2="ö"/>
<key key0="à" key1="ï" key2="ä"/>
</row>
<row>
<key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="y" key1="&gt;" key2="|" key3="&lt;"/>
<key key0="x"/>
<key key0="c" key3="ç"/>
<key key0="v"/>
<key key0="b" key1=";" key3=","/>
<key key0="n" key1=":" key3="."/>
<key key0="m" key1="_" key3="-"/>
<key key0="ê" key1="â" key2="î" key3="ô" key4="û"/>
<key width="1.5" key0="backspace" key2="delete"/>
</row>
</keyboard>

View File

@@ -26,7 +26,7 @@
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock"/> <key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="y" key3="&lt;" key4="&gt;"/> <key key0="y" key3="&lt;" key4="&gt;"/>
<key key0="x" key4="\#"/> <key key0="x" key1="loc †" key4="\#"/>
<key key0="c" key4="&amp;"/> <key key0="c" key4="&amp;"/>
<key key0="v" key4="\@"/> <key key0="v" key4="\@"/>
<key key0="b" key1="\?" key3="," key4=";"/> <key key0="b" key1="\?" key3="," key4=";"/>

View File

@@ -14,7 +14,7 @@
</row> </row>
<row> <row>
<key key0="a" key1="tab" key3="á" key4="ä"/> <key key0="a" key1="tab" key3="á" key4="ä"/>
<key key0="s" key3="ś" key4="š"/> <key key0="s" key1="loc §" key3="ś" key4="š"/>
<key key0="d" key4="ď"/> <key key0="d" key4="ď"/>
<key key0="f" key1="%" key2="*"/> <key key0="f" key1="%" key2="*"/>
<key key0="g" key2="^"/> <key key0="g" key2="^"/>
@@ -27,7 +27,7 @@
<row> <row>
<key key0="shift" key2="loc capslock"/> <key key0="shift" key2="loc capslock"/>
<key key0="y" key1="$" key3="ý"/> <key key0="y" key1="$" key3="ý"/>
<key key0="x"/> <key key0="x" key1="loc †"/>
<key key0="c" key4="č"/> <key key0="c" key4="č"/>
<key key0="v" key4="\@"/> <key key0="v" key4="\@"/>
<key key0="b" key1="\#" key2="&amp;" key3="-" key4="_"/> <key key0="b" key1="\#" key2="&amp;" key3="-" key4="_"/>

View File

@@ -4,32 +4,34 @@
<subtype android:label="%s" android:languageTag="be" android:imeSubtypeLocale="be_BY" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_jcuken_ru,extra_keys=ґ|є|і|ї|ў"/> <subtype android:label="%s" android:languageTag="be" android:imeSubtypeLocale="be_BY" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_jcuken_ru,extra_keys=ґ|є|і|ї|ў"/>
<subtype android:label="%s" android:languageTag="bg" android:imeSubtypeLocale="bg_BG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_yaverti,extra_keys=€"/> <subtype android:label="%s" android:languageTag="bg" android:imeSubtypeLocale="bg_BG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_yaverti,extra_keys=€"/>
<subtype android:label="%s" android:languageTag="bn" android:imeSubtypeLocale="bn_BD" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=৳"/> <subtype android:label="%s" android:languageTag="bn" android:imeSubtypeLocale="bn_BD" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=৳"/>
<subtype android:label="%s" android:languageTag="cs" android:imeSubtypeLocale="cs_CZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_cz,extra_keys=a|accent_cedille|accent_circonflexe"/> <subtype android:label="%s" android:languageTag="cs" android:imeSubtypeLocale="cs_CZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_cz,extra_keys=accent_aigu:á:é:í:ó:ú:ý|accent_ring:ů|accent_caron:č:ě:ň:ř:š:ž:ď:ť"/>
<subtype android:label="%s" android:languageTag="de" android:imeSubtypeLocale="de_DE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_de,extra_keys=accent_trema|ß|€"/> <subtype android:label="%s" android:languageTag="de" android:imeSubtypeLocale="de_DE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_de,extra_keys=accent_trema:ä:ö:ü|ß|€"/>
<subtype android:label="%s" android:languageTag="el" android:imeSubtypeLocale="el" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=grek_qwerty,extra_keys=£|€"/> <subtype android:label="%s" android:languageTag="el" android:imeSubtypeLocale="el" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=grek_qwerty,extra_keys=£|€"/>
<subtype android:label="%s" android:languageTag="en-GB" android:imeSubtypeLocale="en_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=£|€"/> <subtype android:label="%s" android:languageTag="en-GB" android:imeSubtypeLocale="en_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=£|€"/>
<subtype android:label="%s" android:languageTag="en-US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/> <subtype android:label="%s" android:languageTag="en-US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
<subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_es,extra_keys=accent_grave|accent_aigu|accent_tilde|accent_trema|€"/> <subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_es,extra_keys=accent_aigu:á:é:í:ó:ú|accent_tilde:ñ|accent_grave|accent_trema|€"/>
<subtype android:label="%s" android:languageTag="fr" android:imeSubtypeLocale="fr_FR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave|accent_aigu|accent_circonflexe|accent_cedille|accent_trema|€"/> <subtype android:label="%s" android:languageTag="fa" android:imeSubtypeLocale="fa_IR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=arab_pc_ir"/>
<subtype android:label="%s" android:languageTag="fr-CH" android:imeSubtypeLocale="fr_CH" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_fr_ch,extra_keys=accent_grave:à:è:ù|accent_aigu:é|accent_circonflexe:â:ê:ô|accent_cedille:ç|accent_trema:ë:ï:ü:ÿ|€"/>
<subtype android:label="%s" android:languageTag="fr-FR" android:imeSubtypeLocale="fr_FR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:à:è:ù|accent_aigu:é|accent_circonflexe:â:ê:ô|accent_cedille:ç|accent_trema:ë:ï:ü:ÿ|€"/>
<subtype android:label="%s" android:languageTag="he" android:imeSubtypeLocale="he_IL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hebrew,default_layout=hebr_1_il,extra_keys=₪|€"/> <subtype android:label="%s" android:languageTag="he" android:imeSubtypeLocale="he_IL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hebrew,default_layout=hebr_1_il,extra_keys=₪|€"/>
<subtype android:label="%s" android:languageTag="hi" android:imeSubtypeLocale="hi_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/> <subtype android:label="%s" android:languageTag="hi" android:imeSubtypeLocale="hi_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/>
<subtype android:label="%s" android:languageTag="hu" android:imeSubtypeLocale="hu_HU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_hu,extra_keys=accent_aigu|accent_trema|accent_ogonek|€"/> <subtype android:label="%s" android:languageTag="hu" android:imeSubtypeLocale="hu_HU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_hu,extra_keys=accent_aigu:á:é:í:ó:ú|accent_trema:ö:ü|accent_ogonek|accent_double_aigu:ő:ű|€"/>
<subtype android:label="%s" android:languageTag="is" android:imeSubtypeLocale="is_IS" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=ð|þ|ö|æ|accent_aigu"/> <subtype android:label="%s" android:languageTag="is" android:imeSubtypeLocale="is_IS" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=ð|þ|æ|accent_trema:ö|accent_aigu:á:é:í:ó:ú:ý"/>
<subtype android:label="%s" android:languageTag="it" android:imeSubtypeLocale="it_IT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=accent_grave|accent_aigu|€|ə"/> <subtype android:label="%s" android:languageTag="it" android:imeSubtypeLocale="it_IT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=accent_grave:à:è:ì:ò:ù|accent_aigu:é:ó|accent_circonflexe:î|€|ə"/>
<subtype android:label="%s" android:languageTag="ko" android:imeSubtypeLocale="ko_KR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hangul,default_layout=latn_qwerty_us"/> <subtype android:label="%s" android:languageTag="ko" android:imeSubtypeLocale="ko_KR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hangul,default_layout=latn_qwerty_us"/>
<subtype android:label="%s" android:languageTag="lt" android:imeSubtypeLocale="lt_LT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=accent_ogonek|accent_caron|accent_dot_above|accent_macron|€"/> <subtype android:label="%s" android:languageTag="lt" android:imeSubtypeLocale="lt_LT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=accent_ogonek:ą:ę:į:ų|accent_caron:č:š:ž|accent_dot_above|accent_macron|€"/>
<subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lv,extra_keys=accent_caron|accent_cedille|accent_macron|€"/> <subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lv,extra_keys=accent_macron:ā:ē:ī:ū|accent_caron:č:š:ž|accent_ogonek:ķ:ļ:ņ|accent_cedille:ģ|€"/>
<subtype android:label="%s" android:languageTag="mr" android:imeSubtypeLocale="mr_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/> <subtype android:label="%s" android:languageTag="mr" android:imeSubtypeLocale="mr_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/>
<subtype android:label="%s" android:languageTag="ne" android:imeSubtypeLocale="ne_NE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/> <subtype android:label="%s" android:languageTag="ne" android:imeSubtypeLocale="ne_NE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/>
<subtype android:label="%s" android:languageTag="nl-BE" android:imeSubtypeLocale="nl_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave|accent_aigu|accent_circonflexe|accent_cedille|accent_trema|€"/> <subtype android:label="%s" android:languageTag="nl-BE" android:imeSubtypeLocale="nl_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave|accent_aigu:á:é:í:ó:ú:ý:j́|accent_circonflexe|accent_cedille|accent_trema|€"/>
<subtype android:label="%s" android:languageTag="no" android:imeSubtypeLocale="no_NO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_no,extra_keys=€|æ|å|ø"/> <subtype android:label="%s" android:languageTag="no" android:imeSubtypeLocale="no_NO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_no,extra_keys=€|æ|å|ø|accent_aigu:é:ó|accent_grave:è:ò:ù|accent_circonflexe:ê:ô"/>
<subtype android:label="%s" android:languageTag="pl" android:imeSubtypeLocale="pl_PL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pl"/> <subtype android:label="%s" android:languageTag="pl" android:imeSubtypeLocale="pl_PL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pl"/>
<subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pt,extra_keys=accent_aigu|accent_cedille|accent_circonflexe|accent_grave|accent_tilde|€"/> <subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pt,extra_keys=accent_aigu:á:é:í:ó:ú|accent_cedille|accent_circonflexe:â:ê:ô|accent_grave:à:ò|accent_tilde:ã:õ|€|ª|º"/>
<subtype android:label="%s" android:languageTag="ro" android:imeSubtypeLocale="ro_RO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_ro,extra_keys=ă|â|î|ș|ț|€|$"/> <subtype android:label="%s" android:languageTag="ro" android:imeSubtypeLocale="ro_RO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_ro,extra_keys=ă|â|î|ș|ț|€|$"/>
<subtype android:label="%s" android:languageTag="ru" android:imeSubtypeLocale="ru_RU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=cyrl_jcuken_ru"/> <subtype android:label="%s" android:languageTag="ru" android:imeSubtypeLocale="ru_RU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=cyrl_jcuken_ru"/>
<subtype android:label="%s" android:languageTag="sk" android:imeSubtypeLocale="sk_SK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_sk,extra_keys=é|ě|ŕ|ř|ť|ž|ü|ú|ů|í|ö|ó|ô|á|ä|ś|š|ď|ĺ|ľ|ý|č|ň"/> <subtype android:label="%s" android:languageTag="sk" android:imeSubtypeLocale="sk_SK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_sk,extra_keys=accent_caron:ě:ř:ž:š:č:ň:ď:ľ:ť|accent_ring:ů|accent_circonflexe:ô|accent_trema:ä:ü:ö|accent_aigu:á:é:í:ó:ú:ŕ:ś:ĺ:ý"/>
<subtype android:label="%s" android:languageTag="sv" android:imeSubtypeLocale="sv_SE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_se,extra_keys=accent_aigu|accent_trema|accent_ring|€"/> <subtype android:label="%s" android:languageTag="sv" android:imeSubtypeLocale="sv_SE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_se,extra_keys=accent_aigu|accent_trema:ä:ö|accent_ring|€"/>
<subtype android:label="%s" android:languageTag="tr" android:imeSubtypeLocale="tr_TR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_tr,extra_keys=accent_cedille|accent_trema|₺|ı|ğ"/> <subtype android:label="%s" android:languageTag="tr" android:imeSubtypeLocale="tr_TR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_tr,extra_keys=accent_cedille:ç:ş|accent_trema:ö:ü|accent_circonflexe:â:î:û|₺|ı|ğ"/>
<subtype android:label="%s" android:languageTag="uk" android:imeSubtypeLocale="uk_UA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_jcuken_uk,extra_keys=ґ|є|і|ї"/> <subtype android:label="%s" android:languageTag="uk" android:imeSubtypeLocale="uk_UA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_jcuken_uk,extra_keys=ґ|є|і|₴"/>
<subtype android:label="%s" android:languageTag="vi" android:imeSubtypeLocale="vi_VN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_vi"/> <subtype android:label="%s" android:languageTag="vi" android:imeSubtypeLocale="vi_VN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_vi"/>
</input-method> </input-method>

View File

@@ -10,7 +10,7 @@
<key shift="1.0" key0="4" indication="GHI"/> <key shift="1.0" key0="4" indication="GHI"/>
<key key0="5" indication="JKL"/> <key key0="5" indication="JKL"/>
<key key0="6" indication="MNO"/> <key key0="6" indication="MNO"/>
<key key0="(" key3=":" key4="-"/> <key key0="(" key2="=" key3=":" key4="-"/>
</row> </row>
<row> <row>
<key shift="1.0" key0="7" indication="PQRS"/> <key shift="1.0" key0="7" indication="PQRS"/>

View File

@@ -1,49 +1,15 @@
<?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">
<juloo.keyboard2.LayoutListPreference android:key="layout" android:title="@string/pref_layout_title" app:defaultString="@string/pref_layout_e_system"/> <juloo.keyboard2.LayoutsPreference/>
<juloo.keyboard2.LayoutListPreference android:key="second_layout" android:title="@string/pref_second_layout_title" app:defaultString="@string/pref_second_layout_none"/>
<ListPreference android:key="accents" android:title="@string/pref_accents_title" android:summary="%s" android:defaultValue="1" android:entries="@array/pref_accents_entries" android:entryValues="@array/pref_accents_values"/>
<ListPreference android:key="show_numpad" android:title="@string/pref_show_numpad_title" android:summary="%s" android:defaultValue="1" android:entries="@array/pref_show_numpad_entries" android:entryValues="@array/pref_show_numpad_values"/>
<CheckBoxPreference android:key="number_row" android:title="@string/pref_number_row_title" android:summary="@string/pref_number_row_summary" android:defaultValue="false"/>
<PreferenceScreen android:title="@string/pref_extra_keys_title"> <PreferenceScreen android:title="@string/pref_extra_keys_title">
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="0"/> <PreferenceCategory android:title="@string/pref_extra_keys_custom">
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="1"/> <juloo.keyboard2.CustomExtraKeysPreference/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="2"/> </PreferenceCategory>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="3"/> <juloo.keyboard2.ExtraKeysPreference android:title="@string/pref_extra_keys_internal"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="4"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="5"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="6"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="7"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="8"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="9"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="10"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="11"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="12"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="13"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="14"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="15"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="16"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="17"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="18"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="19"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="20"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="21"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="22"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="23"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="24"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="25"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="26"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="27"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="28"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="29"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="30"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="31"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="32"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="33"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="34"/>
<juloo.keyboard2.ExtraKeyCheckBoxPreference app:index="35"/>
</PreferenceScreen> </PreferenceScreen>
<CheckBoxPreference android:key="number_row" android:title="@string/pref_number_row_title" android:summary="@string/pref_number_row_summary" android:defaultValue="false"/>
<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="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"/> <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">
@@ -56,6 +22,7 @@
<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"/>
<CheckBoxPreference android:key="switch_input_immediate" android:title="@string/pref_switch_input_immediate_title" android:summary="@string/pref_switch_input_immediate_summary" android:defaultValue="false"/> <CheckBoxPreference android:key="switch_input_immediate" android:title="@string/pref_switch_input_immediate_title" android:summary="@string/pref_switch_input_immediate_summary" android:defaultValue="false"/>
<ListPreference android:key="vibration_behavior" android:title="@string/pref_vibrate_title" android:summary="@string/pref_vibrate_summary" android:defaultValue="system" android:entries="@array/pref_vibration_entries" android:entryValues="@array/pref_vibration_values"/> <ListPreference android:key="vibration_behavior" android:title="@string/pref_vibrate_title" android:summary="@string/pref_vibrate_summary" android:defaultValue="system" android:entries="@array/pref_vibration_entries" android:entryValues="@array/pref_vibration_values"/>
<CheckBoxPreference android:key="pin_entry_enabled" android:title="@string/pref_pin_entry_enabled_title" android:summary="@string/pref_pin_entry_enabled_summary" android:defaultValue="true"/>
</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"/>
@@ -79,7 +46,4 @@
<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>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<keyboard name="Urdu Phonetic" script="urdu">
<row>
<key key0="ق" key3=" " key4="esc" key7="1"/>
<key key0="و" key2="ؤ" key3="\@" key7="2"/>
<key key0="ع" key1="!" key3="\#" key7="3"/>
<key key0="ر" key2="ڑ" key3="$" key7="4"/>
<key key0="ت" key2="ٹ" key3="%" key7="5"/>
<key key0="ے" key3="^" key7="6"/>
<key key0="ئ" key2="ء" key3="&amp;" key7="7"/>
<key key0="ی" key3="*" key7="8"/>
<key key0="ہ" key1="'" key2="&quot;" key3="(" key4=")" key7="9" key8="ۃ"/>
<key key0="پ" key1="ٰ" key2="0" key3="؟" key5="ٓ" key7="ٗ" key8="ٖ"/>
</row>
<row>
<key width="1.1" key0="ا" key1="tab" key2="آ" key4="أ"/>
<key width="1.1" key0="س" key2="ص"/>
<key width="1.1" key0="د" key2="ڈ" key4=" "/>
<key width="1.1" key0="ف" key2="پھ"/>
<key width="1.15" key0="گ" key1="-" key2="غ" key3="_" key4="گھ"/>
<key width="1.1" key0="ھ" key1="=" key2="ح" key3="+"/>
<key width="1.1" key0="ج" key1="}" key2="ض" key3="{" key4="جھ"/>
<key width="1.1" key0="ک" key1="]" key2="خ" key3="[" key4="کھ"/>
<key width="1.15" key0="ل" key1="َ" key3="." key5="ْ" key7="ُ" key8="ِ"/>
</row>
<row>
<key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="ز" key2="ذ"/>
<key key0="ش" key2="ژ"/>
<key key0="چ" key2="ث" key3="۔" key4="چھ"/>
<key key0="ط" key2="ظ" key3=","/>
<key key0="ب" key2="بھ" key3="/" key4="\\"/>
<key key0="ن" key2="ں" key3=";" key4=":"/>
<key key0="م" key5="ّ" key6="ً" key7="ٌ" key8="ٍ"/>
<key width="1.5" key0="backspace" key2="delete"/>
</row>
</keyboard>

View File

@@ -3,11 +3,11 @@ package juloo.keyboard2;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Build; import android.os.Build;
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.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@@ -25,9 +25,8 @@ final class Config
public final float sublabelTextSize; public final float sublabelTextSize;
// From preferences // From preferences
public KeyboardData layout; // Or 'null' for the system defaults /** [null] represent the [system] layout. */
public KeyboardData second_layout; // Or 'null' for none public List<KeyboardData> layouts;
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. // From the 'numpad_layout' option, also apply to the numeric pane.
public boolean inverse_numpad = false; public boolean inverse_numpad = false;
@@ -48,20 +47,20 @@ final class Config
public int keyActivatedOpacity; // 0 - 255 public int keyActivatedOpacity; // 0 - 255
public boolean double_tap_lock_shift; public boolean double_tap_lock_shift;
public float characterSize; // Ratio public float characterSize; // Ratio
public int accents; // Values are R.values.pref_accents_v_*
public int theme; // Values are R.style.* public int theme; // Values are R.style.*
public boolean autocapitalisation; public boolean autocapitalisation;
public boolean switch_input_immediate; public boolean switch_input_immediate;
public boolean pin_entry_enabled;
// Dynamically set // Dynamically set
public boolean shouldOfferSwitchingToNextInputMethod; public boolean shouldOfferSwitchingToNextInputMethod;
public boolean shouldOfferSwitchingToSecond;
public boolean shouldOfferVoiceTyping; public boolean shouldOfferVoiceTyping;
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
public ExtraKeys extra_keys_subtype; public ExtraKeys extra_keys_subtype;
public Set<KeyValue> extra_keys_param; public Set<KeyValue> extra_keys_param;
public List<KeyValue> extra_keys_custom;
public final IKeyEventHandler handler; public final IKeyEventHandler handler;
public boolean orientation_landscape = false; public boolean orientation_landscape = false;
@@ -78,7 +77,6 @@ final class Config
refresh(res); refresh(res);
// initialized later // initialized later
shouldOfferSwitchingToNextInputMethod = false; shouldOfferSwitchingToNextInputMethod = false;
shouldOfferSwitchingToSecond = false;
shouldOfferVoiceTyping = false; shouldOfferVoiceTyping = false;
actionLabel = null; actionLabel = null;
actionId = 0; actionId = 0;
@@ -114,9 +112,7 @@ final class Config
{ {
keyboardHeightPercent = _prefs.getInt("keyboard_height", 35); keyboardHeightPercent = _prefs.getInt("keyboard_height", 35);
} }
layout = layout_of_string(res, _prefs.getString("layout", "none")); layouts = LayoutsPreference.load_from_preferences(res, _prefs);
second_layout = tweak_secondary_layout(layout_of_string(res, _prefs.getString("second_layout", "none")));
custom_layout = KeyboardData.load_string(_prefs.getString("custom_layout", ""));
inverse_numpad = _prefs.getString("numpad_layout", "default").equals("low_first"); inverse_numpad = _prefs.getString("numpad_layout", "default").equals("low_first");
number_row = _prefs.getBoolean("number_row", false); number_row = _prefs.getBoolean("number_row", false);
// The baseline for the swipe distance correspond to approximately the // The baseline for the swipe distance correspond to approximately the
@@ -150,11 +146,12 @@ final class Config
characterSize = characterSize =
_prefs.getFloat("character_size", 1.f) _prefs.getFloat("character_size", 1.f)
* characterSizeScale; * characterSizeScale;
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);
switch_input_immediate = _prefs.getBoolean("switch_input_immediate", false); switch_input_immediate = _prefs.getBoolean("switch_input_immediate", false);
extra_keys_param = ExtraKeyCheckBoxPreference.get_extra_keys(_prefs); extra_keys_param = ExtraKeysPreference.get_extra_keys(_prefs);
extra_keys_custom = CustomExtraKeysPreference.get(_prefs);
pin_entry_enabled = _prefs.getBoolean("pin_entry_enabled", true);
} }
KeyValue action_key() KeyValue action_key()
@@ -170,6 +167,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
* - Add the optional numpad and number row * - Add the optional numpad and number row
* - Add the extra keys
*/ */
public KeyboardData modify_layout(KeyboardData kw) public KeyboardData modify_layout(KeyboardData kw)
{ {
@@ -178,9 +176,17 @@ final class Config
// first iteration then automatically added. // first iteration then automatically added.
final Set<KeyValue> extra_keys = new HashSet<KeyValue>(); final Set<KeyValue> extra_keys = new HashSet<KeyValue>();
final Set<KeyValue> remove_keys = new HashSet<KeyValue>(); final Set<KeyValue> remove_keys = new HashSet<KeyValue>();
if (extra_keys_subtype != null)
extra_keys_subtype.compute(extra_keys, kw.script);
extra_keys.addAll(extra_keys_param); extra_keys.addAll(extra_keys_param);
extra_keys.addAll(extra_keys_custom);
if (extra_keys_subtype != null)
{
Set<KeyValue> present = new HashSet<KeyValue>();
kw.getKeys(present);
present.addAll(extra_keys_param);
present.addAll(extra_keys_custom);
extra_keys_subtype.compute(extra_keys,
new ExtraKeys.Query(kw.script, present));
}
boolean number_row = this.number_row && !show_numpad; boolean number_row = this.number_row && !show_numpad;
if (number_row) if (number_row)
KeyboardData.number_row.getKeys(remove_keys); KeyboardData.number_row.getKeys(remove_keys);
@@ -208,8 +214,10 @@ 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_SECOND: case SWITCH_FORWARD:
return shouldOfferSwitchingToSecond ? key : null; return (layouts.size() > 1) ? key : null;
case SWITCH_BACKWARD:
return (layouts.size() > 2) ? key : null;
case SWITCH_VOICE_TYPING: case SWITCH_VOICE_TYPING:
return shouldOfferVoiceTyping ? key : null; return shouldOfferVoiceTyping ? key : null;
} }
@@ -281,30 +289,13 @@ final class Config
}); });
} }
/** Modify a layout to turn it into a secondary layout by changing the
"switch_second" key. */
KeyboardData tweak_secondary_layout(KeyboardData layout)
{
if (layout == null)
return null;
return layout.mapKeys(new KeyboardData.MapKeyValues() {
public KeyValue apply(KeyValue key, boolean localized)
{
if (key.getKind() == KeyValue.Kind.Event
&& key.getEvent() == KeyValue.Event.SWITCH_SECOND)
return KeyValue.getKeyByName("switch_second_back");
return key;
}
});
}
private float get_dip_pref(DisplayMetrics dm, String pref_name, float def) private float get_dip_pref(DisplayMetrics dm, String pref_name, float def)
{ {
float value; float value;
try { value = _prefs.getInt(pref_name, -1); } try { value = _prefs.getInt(pref_name, -1); }
catch (Exception e) { value = _prefs.getFloat(pref_name, -1f); } catch (Exception e) { value = _prefs.getFloat(pref_name, -1f); }
if (value < 0f) if (value < 0f)
return (def); value = def;
return (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, dm)); return (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, dm));
} }
@@ -338,36 +329,6 @@ final class Config
} }
} }
/** Obtained from XML. */
static List<String> layout_ids_str = null;
static TypedArray layout_ids_res = null;
/** Might return [null] if the selected layout is "system", "custom" or if
the name is not recognized. */
public KeyboardData layout_of_string(Resources res, String name)
{
if (layout_ids_str == null)
{
layout_ids_str = Arrays.asList(res.getStringArray(R.array.pref_layout_values));
layout_ids_res = res.obtainTypedArray(R.array.layout_ids);
}
int i = layout_ids_str.indexOf(name);
if (i >= 0)
{
int id = layout_ids_res.getResourceId(i, 0);
if (id > 0)
return KeyboardData.load(res, id);
// Fallthrough
}
switch (name)
{
case "custom": return custom_layout;
case "system":
case "none":
default: return null;
}
}
char inverse_numpad_char(char c) char inverse_numpad_char(char c)
{ {
switch (c) switch (c)
@@ -387,6 +348,7 @@ final class Config
public static void initGlobalConfig(SharedPreferences prefs, Resources res, public static void initGlobalConfig(SharedPreferences prefs, Resources res,
IKeyEventHandler handler) IKeyEventHandler handler)
{ {
migrate(prefs);
_globalConfig = new Config(prefs, res, handler); _globalConfig = new Config(prefs, res, handler);
} }
@@ -399,4 +361,45 @@ final class Config
{ {
public void key_up(KeyValue value, Pointers.Modifiers flags); public void key_up(KeyValue value, Pointers.Modifiers flags);
} }
/** Config migrations. */
private static int CONFIG_VERSION = 1;
public static void migrate(SharedPreferences prefs)
{
int saved_version = prefs.getInt("version", 0);
Logs.debug_config_migration(saved_version, CONFIG_VERSION);
if (saved_version == CONFIG_VERSION)
return;
SharedPreferences.Editor e = prefs.edit();
e.putInt("version", CONFIG_VERSION);
// Migrations might run on an empty [prefs] for new installs, in this case
// they set the default values of complex options.
switch (saved_version) // Fallback switch
{
case 0:
// Primary, secondary and custom layout options are merged into the new
// Layouts option. This also sets the default value.
List<LayoutsPreference.Layout> l = new ArrayList<LayoutsPreference.Layout>();
l.add(migrate_layout(prefs.getString("layout", "system")));
String snd_layout = prefs.getString("second_layout", "none");
if (snd_layout != null && !snd_layout.equals("none"))
l.add(migrate_layout(snd_layout));
String custom_layout = prefs.getString("custom_layout", "");
if (custom_layout != null && !custom_layout.equals(""))
l.add(new LayoutsPreference.CustomLayout(custom_layout));
LayoutsPreference.save_to_preferences(e, l);
case 1:
default: break;
}
e.commit();
}
private static LayoutsPreference.Layout migrate_layout(String name)
{
if (name == null || name.equals("system"))
return new LayoutsPreference.SystemLayout();
return new LayoutsPreference.NamedLayout(name);
}
} }

View File

@@ -0,0 +1,67 @@
package juloo.keyboard2;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
/** Allows to enter custom keys to be added to the keyboard. This shows up at
the top of the "Add keys to the keyboard" option. */
public class CustomExtraKeysPreference extends ListGroupPreference<String>
{
/** This pref stores a list of strings encoded as JSON. */
static final String KEY = "custom_extra_keys";
static final ListGroupPreference.Serializer<String> SERIALIZER =
new ListGroupPreference.StringSerializer();
public CustomExtraKeysPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
setKey(KEY);
}
public static List<KeyValue> get(SharedPreferences prefs)
{
List<KeyValue> kvs = new ArrayList<KeyValue>();
List<String> key_names = load_from_preferences(KEY, prefs, null, SERIALIZER);
if (key_names != null)
{
for (String key_name : key_names)
kvs.add(KeyValue.makeStringKey(key_name));
}
return kvs;
}
String label_of_value(String value, int i) { return value; }
@Override
void select(final SelectionCallback<String> callback)
{
new AlertDialog.Builder(getContext())
.setView(R.layout.dialog_edit_text)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which)
{
EditText input = (EditText)((AlertDialog)dialog).findViewById(R.id.text);
final String k = input.getText().toString();
if (!k.equals(""))
callback.select(k);
}
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
@Override
Serializer<String> get_serializer() { return SERIALIZER; }
}

View File

@@ -1,110 +0,0 @@
package juloo.keyboard2;
import android.content.Context;
import android.content.res.TypedArray;
import android.content.SharedPreferences;
import android.preference.CheckBoxPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;
import java.util.HashSet;
import java.util.Set;
public class ExtraKeyCheckBoxPreference extends CheckBoxPreference
{
public static String[] extra_keys = new String[]
{
"alt",
"meta",
"voice_typing",
"accent_aigu",
"accent_grave",
"accent_double_aigu",
"accent_dot_above",
"accent_circonflexe",
"accent_tilde",
"accent_cedille",
"accent_trema",
"accent_ring",
"accent_caron",
"accent_macron",
"accent_ogonek",
"accent_breve",
"accent_slash",
"accent_bar",
"accent_dot_below",
"accent_hook_above",
"accent_horn",
"",
"ß",
"£",
"switch_greekmath",
"capslock",
"copy",
"paste",
"cut",
"selectAll",
"shareText",
"pasteAsPlainText",
"undo",
"redo",
"replaceText",
"textAssist",
"autofill",
};
public static boolean default_checked(String name)
{
switch (name)
{
case "voice_typing":
return true;
default:
return false;
}
}
boolean _key_font;
public ExtraKeyCheckBoxPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ExtraKeyCheckBoxPreference);
int index = a.getInteger(R.styleable.ExtraKeyCheckBoxPreference_index, 0);
a.recycle();
String key_name = extra_keys[index];
KeyValue kv = KeyValue.getKeyByName(key_name);
String title = kv.getString();
String descr = KeyValue.getKeyDescription(key_name);
if (descr != null)
title += " (" + descr + ")";
setKey(pref_key_of_key_name(key_name));
setDefaultValue(default_checked(key_name));
setTitle(title);
_key_font = kv.hasFlags(KeyValue.FLAG_KEY_FONT);
}
@Override
protected void onBindView(View view)
{
super.onBindView(view);
TextView title = (TextView)view.findViewById(android.R.id.title);
title.setTypeface(_key_font ? Theme.getKeyFont(getContext()) : null);
}
static String pref_key_of_key_name(String key_name)
{
return "extra_key_" + key_name;
}
public static Set<KeyValue> get_extra_keys(SharedPreferences prefs)
{
HashSet<KeyValue> ks = new HashSet<KeyValue>();
for (String key_name : extra_keys)
{
if (prefs.getBoolean(pref_key_of_key_name(key_name), default_checked(key_name)))
ks.add(KeyValue.getKeyByName(key_name));
}
return ks;
}
}

View File

@@ -1,6 +1,9 @@
package juloo.keyboard2; package juloo.keyboard2;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -8,50 +11,118 @@ import java.util.Set;
class ExtraKeys class ExtraKeys
{ {
Map<String, List<KeyValue>> _keys_per_script; public static final ExtraKeys EMPTY = new ExtraKeys(Collections.EMPTY_LIST);
public ExtraKeys() Collection<ExtraKey> _ks;
public ExtraKeys(Collection<ExtraKey> ks)
{ {
_keys_per_script = new HashMap<String, List<KeyValue>>(); _ks = ks;
} }
public void add_keys_for_script(String script, List<KeyValue> kvs) /** Add the keys that should be added to the keyboard into [dst]. Keys
already added to [dst] might have an impact, see [ExtraKey.compute]. */
public void compute(Set<KeyValue> dst, Query q)
{ {
List<KeyValue> ks = _keys_per_script.get(script); for (ExtraKey k : _ks)
if (ks == null) ks = new ArrayList<KeyValue>(); k.compute(dst, q);
ks.addAll(kvs);
_keys_per_script.put(script, ks);
} }
/** Add the keys that should be added to the keyboard into [dst]. [null] is public static ExtraKeys parse(String script, String str)
a valid script. */
public void compute(Set<KeyValue> dst, String script)
{ {
if (script == null) Collection<ExtraKey> dst = new ArrayList<ExtraKey>();
{
for (String sc : _keys_per_script.keySet())
get_keys_of_script(dst, sc);
}
else
{
get_keys_of_script(dst, null);
get_keys_of_script(dst, script);
}
}
void get_keys_of_script(Set<KeyValue> dst, String script)
{
List<KeyValue> ks = _keys_per_script.get(script);
if (ks != null)
dst.addAll(ks);
}
public static List<KeyValue> parse_extra_keys(String str)
{
List<KeyValue> dst = new ArrayList<KeyValue>();
String[] ks = str.split("\\|"); String[] ks = str.split("\\|");
for (int i = 0; i < ks.length; i++) for (int i = 0; i < ks.length; i++)
dst.add(KeyValue.getKeyByName(ks[i])); dst.add(ExtraKey.parse(ks[i], script));
return dst; return new ExtraKeys(dst);
}
/** Merge identical keys. This is required to decide whether to add
alternatives. Script is generalized (set to null) on any conflict. */
public static ExtraKeys merge(List<ExtraKeys> kss)
{
Map<KeyValue, ExtraKey> merged_keys = new HashMap<KeyValue, ExtraKey>();
for (ExtraKeys ks : kss)
for (ExtraKey k : ks._ks)
{
ExtraKey k2 = merged_keys.get(k.kv);
if (k2 != null)
k = k.merge_with(k2);
merged_keys.put(k.kv, k);
}
return new ExtraKeys(merged_keys.values());
}
final static class ExtraKey
{
/** The key to add. */
final KeyValue kv;
/** The key will be added to layouts of the same script. If null, might be
added to layouts of any script. */
final String script;
/** The key will not be added to layout that already contain all the
alternatives. */
final List<KeyValue> alternatives;
ExtraKey(KeyValue kv_, String script_, List<KeyValue> alts_)
{
kv = kv_;
script = script_;
alternatives = alts_;
}
/** Whether the key should be added to the keyboard. */
public void compute(Set<KeyValue> dst, Query q)
{
// Add the alternative if it's the only one. The list of alternatives is
// enforced to be complete by the merging step. The same [kv] will not
// appear again in the list of extra keys with a different list of
// alternatives.
// Selecting the dead key in the "Add key to the keyboard" option would
// disable this behavior for a key.
boolean use_alternative = (alternatives.size() == 1 && !dst.contains(kv));
if
((q.script == null || script == null || q.script.equals(script))
&& (alternatives.size() == 0 || !q.present.containsAll(alternatives)))
dst.add(use_alternative ? alternatives.get(0) : kv);
}
/** Return a new key from two. [kv] are expected to be equal. [script] is
generalized to [null] on any conflict. [alternatives] are concatenated.
*/
public ExtraKey merge_with(ExtraKey k2)
{
String script_ =
(script != null && k2.script != null && script.equals(k2.script))
? script : null;
List<KeyValue> alts = new ArrayList<KeyValue>(alternatives);
alts.addAll(k2.alternatives);
return new ExtraKey(kv, script_, alts);
}
/** Extra keys are of the form "key name" or "key name:alt 1:alt 2". */
public static ExtraKey parse(String str, String script)
{
String[] strs = str.split(":");
KeyValue kv = KeyValue.getKeyByName(strs[0]);
KeyValue[] alts = new KeyValue[strs.length-1];
for (int i = 1; i < strs.length; i++)
alts[i-1] = KeyValue.getKeyByName(strs[i]);
return new ExtraKey(kv, script, Arrays.asList(alts));
}
}
public final static class Query
{
/** Script of the current layout. Might be null. */
final String script;
/** Keys present on the layout. */
final Set<KeyValue> present;
public Query(String script_, Set<KeyValue> present_)
{
script = script_;
present = present_;
}
} }
} }

View File

@@ -0,0 +1,171 @@
package juloo.keyboard2;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.preference.CheckBoxPreference;
import android.preference.PreferenceCategory;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;
import java.util.HashSet;
import java.util.Set;
/** This class implements the "extra keys" preference but also defines the
possible extra keys. */
public class ExtraKeysPreference extends PreferenceCategory
{
/** Array of the keys that can be selected. */
public static String[] extra_keys = new String[]
{
"alt",
"meta",
"voice_typing",
"accent_aigu",
"accent_grave",
"accent_double_aigu",
"accent_dot_above",
"accent_circonflexe",
"accent_tilde",
"accent_cedille",
"accent_trema",
"accent_ring",
"accent_caron",
"accent_macron",
"accent_ogonek",
"accent_breve",
"accent_slash",
"accent_bar",
"accent_dot_below",
"accent_hook_above",
"accent_horn",
"",
"ß",
"£",
"§",
"",
"ª",
"º",
"switch_greekmath",
"capslock",
"copy",
"paste",
"cut",
"selectAll",
"shareText",
"pasteAsPlainText",
"undo",
"redo",
"replaceText",
"textAssist",
"autofill",
"superscript",
"subscript",
};
/** Whether an extra key is enabled by default. */
public static boolean default_checked(String name)
{
switch (name)
{
case "voice_typing":
return true;
default:
return false;
}
}
/** Text that describe a key. Might be null. */
static String key_description(Resources res, String name)
{
int id = 0;
switch (name)
{
case "capslock": id = R.string.key_descr_capslock; break;
case "switch_greekmath": id = R.string.key_descr_switch_greekmath; break;
case "voice_typing": id = R.string.key_descr_voice_typing; break;
case "copy": id = R.string.key_descr_copy; break;
case "paste": id = R.string.key_descr_paste; break;
case "cut": id = R.string.key_descr_cut; break;
case "selectAll": id = R.string.key_descr_selectAll; break;
case "shareText": id = R.string.key_descr_shareText; break;
case "pasteAsPlainText": id = R.string.key_descr_pasteAsPlainText; break;
case "undo": id = R.string.key_descr_undo; break;
case "redo": id = R.string.key_descr_redo; break;
case "textAssist": id = R.string.key_descr_textAssist; break;
case "autofill": id = R.string.key_descr_autofill; break;
case "ª": id = R.string.key_descr_ª; break;
case "º": id = R.string.key_descr_º; break;
case "superscript": id = R.string.key_descr_superscript; break;
case "subscript": id = R.string.key_descr_subscript; break;
}
if (id == 0)
return null;
return res.getString(id);
}
/** Get the set of enabled extra keys. */
public static Set<KeyValue> get_extra_keys(SharedPreferences prefs)
{
HashSet<KeyValue> ks = new HashSet<KeyValue>();
for (String key_name : extra_keys)
{
if (prefs.getBoolean(pref_key_of_key_name(key_name),
default_checked(key_name)))
ks.add(KeyValue.getKeyByName(key_name));
}
return ks;
}
boolean _attached = false; /** Whether it has already been attached. */
public ExtraKeysPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
setOrderingAsAdded(true);
}
@Override
protected void onAttachedToActivity()
{
if (_attached)
return;
_attached = true;
for (String key_name : extra_keys)
addPreference(new ExtraKeyCheckBoxPreference(getContext(), key_name,
default_checked(key_name)));
}
public static String pref_key_of_key_name(String key_name)
{
return "extra_key_" + key_name;
}
static class ExtraKeyCheckBoxPreference extends CheckBoxPreference
{
boolean _key_font;
public ExtraKeyCheckBoxPreference(Context ctx, String key_name,
boolean default_checked)
{
super(ctx);
KeyValue kv = KeyValue.getKeyByName(key_name);
String title = kv.getString();
String descr = key_description(ctx.getResources(), key_name);
if (descr != null)
title += " (" + descr + ")";
setKey(pref_key_of_key_name(key_name));
setDefaultValue(default_checked);
setTitle(title);
_key_font = kv.hasFlags(KeyValue.FLAG_KEY_FONT);
}
@Override
protected void onBindView(View view)
{
super.onBindView(view);
TextView title = (TextView)view.findViewById(android.R.id.title);
title.setTypeface(_key_font ? Theme.getKeyFont(getContext()) : null);
}
}
}

View File

@@ -3,6 +3,8 @@ package juloo.keyboard2;
import android.os.Looper; import android.os.Looper;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputConnection;
class KeyEventHandler implements Config.IKeyEventHandler class KeyEventHandler implements Config.IKeyEventHandler
@@ -39,33 +41,9 @@ class KeyEventHandler implements Config.IKeyEventHandler
case Char: send_text(String.valueOf(key.getChar())); break; case Char: send_text(String.valueOf(key.getChar())); break;
case String: send_text(key.getString()); break; case String: send_text(key.getString()); break;
case Event: _recv.handle_event_key(key.getEvent()); break; case Event: _recv.handle_event_key(key.getEvent()); break;
case Keyevent: case Keyevent: send_key_down_up(key.getKeyevent(), mods); break;
handleKeyUpWithModifier(key.getKeyevent(), mods); case Modifier: break;
break; case Editing: handle_editing_key(key.getEditing(), mods); break;
case Modifier:
break;
case Editing:
send_context_menu_action(action_of_editing_key(key.getEditing()));
break;
}
}
static int action_of_editing_key(KeyValue.Editing e)
{
switch (e)
{
case COPY: return android.R.id.copy;
case PASTE: return android.R.id.paste;
case CUT: return android.R.id.cut;
case SELECT_ALL: return android.R.id.selectAll;
case SHARE: return android.R.id.shareText;
case PASTE_PLAIN: return android.R.id.pasteAsPlainText;
case UNDO: return android.R.id.undo;
case REDO: return android.R.id.redo;
case REPLACE: return android.R.id.replaceText;
case ASSIST: return android.R.id.textAssist;
case AUTOFILL: return android.R.id.autofill;
default: return -1; // sad
} }
} }
@@ -108,7 +86,7 @@ class KeyEventHandler implements Config.IKeyEventHandler
/* /*
* Don't set KeyEvent.FLAG_SOFT_KEYBOARD. * Don't set KeyEvent.FLAG_SOFT_KEYBOARD.
*/ */
void handleKeyUpWithModifier(int keyCode, Pointers.Modifiers mods) void send_key_down_up(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++)
@@ -147,6 +125,88 @@ class KeyEventHandler implements Config.IKeyEventHandler
conn.performContextMenuAction(id); conn.performContextMenuAction(id);
} }
void handle_editing_key(KeyValue.Editing ev, Pointers.Modifiers mods)
{
switch (ev)
{
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;
case SHARE: send_context_menu_action(android.R.id.shareText); break;
case PASTE_PLAIN: send_context_menu_action(android.R.id.pasteAsPlainText); break;
case UNDO: send_context_menu_action(android.R.id.undo); break;
case REDO: send_context_menu_action(android.R.id.redo); break;
case REPLACE: send_context_menu_action(android.R.id.replaceText); break;
case ASSIST: send_context_menu_action(android.R.id.textAssist); break;
case AUTOFILL: send_context_menu_action(android.R.id.autofill); break;
case CURSOR_LEFT: move_cursor(-1, mods); break;
case CURSOR_RIGHT: move_cursor(1, mods); break;
}
}
static ExtractedTextRequest _move_cursor_req = null;
/** Query the cursor position. The extracted text is empty. Returns [null] if
the editor doesn't support this operation. */
ExtractedText get_cursor_pos(InputConnection conn)
{
if (_move_cursor_req == null)
{
_move_cursor_req = new ExtractedTextRequest();
_move_cursor_req.hintMaxChars = 0;
}
return conn.getExtractedText(_move_cursor_req, 0);
}
/** Move the cursor right or left, if possible without sending key events.
Unlike arrow keys, the selection is not removed even if shift is not on. */
void move_cursor(int d, Pointers.Modifiers mods)
{
InputConnection conn = _recv.getCurrentInputConnection();
if (conn == null)
return;
ExtractedText et = get_cursor_pos(conn);
if (et == null) // Editor doesn't support moving the cursor
{
move_cursor_fallback(d, mods);
return;
}
int sel_start = et.selectionStart;
int sel_end = et.selectionEnd;
// Continue expanding the selection even if shift is not pressed
if (sel_end != sel_start)
{
sel_end += d;
if (sel_end == sel_start) // Avoid making the selection empty
sel_end += d;
}
else
{
sel_end += d;
// Leave 'sel_start' where it is if shift is pressed
if (!mods.has(KeyValue.Modifier.SHIFT))
sel_start = sel_end;
}
conn.setSelection(sel_start, sel_end);
}
/** Send arrow keys as a fallback for editors that do not support
[getExtractedText] like Termux. */
void move_cursor_fallback(int d, Pointers.Modifiers mods)
{
while (d < 0)
{
send_key_down_up(KeyEvent.KEYCODE_DPAD_LEFT, mods);
d++;
}
while (d > 0)
{
send_key_down_up(KeyEvent.KEYCODE_DPAD_RIGHT, mods);
d--;
}
}
public static interface IReceiver public static interface IReceiver
{ {
public void handle_event_key(KeyValue.Event ev); public void handle_event_key(KeyValue.Event ev);

View File

@@ -237,6 +237,10 @@ class KeyModifier
case '!': return "¡"; case '!': return "¡";
case '?': return "¿"; case '?': return "¿";
case '|': return "¦"; case '|': return "¦";
case '§': return "";
case '†': return "";
case '×': return "";
case ' ': return "nbsp";
// arrows // arrows
case '↖': return ""; case '↖': return "";
case '↑': return ""; case '↑': return "";
@@ -255,6 +259,8 @@ class KeyModifier
case 'y': return "¥"; case 'y': return "¥";
case 'c': return "¢"; case 'c': return "¢";
case 'p': return ""; case 'p': return "";
case 'h': return "";
case 'b': return "";
case '€': case '£': return "removed"; // Avoid showing these twice case '€': case '£': return "removed"; // Avoid showing these twice
// alternating greek letters // alternating greek letters
case 'π': return "ϖ"; case 'π': return "ϖ";
@@ -352,8 +358,28 @@ class KeyModifier
case 'ं': return ""; case 'ं': return "";
case '़': return ""; case '़': return "";
case 'ऽ': return ""; case 'ऽ': return "";
// other // Persian numbers
case ' ': return "nbsp"; case '۱': return "f1";
case '۲': return "f2";
case '۳': return "f3";
case '۴': return "f4";
case '۵': return "f5";
case '۶': return "f6";
case '۷': return "f7";
case '۸': return "f8";
case '۹': return "f9";
case '۰': return "f10";
// Arabic numbers
case '١': return "f1";
case '٢': return "f2";
case '٣': return "f3";
case '٤': return "f4";
case '٥': return "f5";
case '٦': return "f6";
case '٧': return "f7";
case '٨': return "f8";
case '٩': return "f9";
case '٠': return "f10";
default: return null; default: return null;
} }
} }
@@ -704,13 +730,36 @@ class KeyModifier
case '8': return '⁸'; case '8': return '⁸';
case '9': return '⁹'; case '9': return '⁹';
case '0': return '⁰'; case '0': return '⁰';
case 'i': return 'ⁱ';
case '+': return '⁺'; case '+': return '⁺';
case '-': return '⁻'; case '-': return '⁻';
case '=': return '⁼'; case '=': return '⁼';
case '(': return '⁽'; case '(': return '⁽';
case ')': return '⁾'; case ')': return '⁾';
case 'a': return 'ᵃ';
case 'b': return 'ᵇ';
case 'c': return 'ᶜ';
case 'd': return 'ᵈ';
case 'e': return 'ᵉ';
case 'f': return 'ᶠ';
case 'g': return 'ᵍ';
case 'h': return 'ʰ';
case 'i': return 'ⁱ';
case 'j': return 'ʲ';
case 'k': return 'ᵏ';
case 'l': return 'ˡ';
case 'm': return 'ᵐ';
case 'n': return 'ⁿ'; case 'n': return 'ⁿ';
case 'o': return 'ᵒ';
case 'p': return 'ᵖ';
case 'r': return 'ʳ';
case 's': return 'ˢ';
case 't': return 'ᵗ';
case 'u': return 'ᵘ';
case 'v': return 'ᵛ';
case 'w': return 'ʷ';
case 'x': return 'ˣ';
case 'y': return 'ʸ';
case 'z': return 'ᶻ';
default: return c; default: return c;
} }
} }
@@ -737,10 +786,23 @@ class KeyModifier
case '=': return '₌'; case '=': return '₌';
case '(': return '₍'; case '(': return '₍';
case ')': return '₎'; case ')': return '₎';
case 'e': return 'ₑ';
case 'a': return 'ₐ'; case 'a': return 'ₐ';
case 'x': return ''; case 'e': return '';
case 'h': return 'ₕ';
case 'i': return 'ᵢ';
case 'j': return 'ⱼ';
case 'k': return 'ₖ';
case 'l': return 'ₗ';
case 'm': return 'ₘ';
case 'n': return 'ₙ';
case 'o': return 'ₒ'; case 'o': return 'ₒ';
case 'p': return 'ₚ';
case 'r': return 'ᵣ';
case 's': return 'ₛ';
case 't': return 'ₜ';
case 'u': return 'ᵤ';
case 'v': return 'ᵥ';
case 'x': return 'ₓ';
default: return c; default: return c;
} }
} }

View File

@@ -15,8 +15,8 @@ final class KeyValue
CHANGE_METHOD, CHANGE_METHOD,
CHANGE_METHOD_PREV, CHANGE_METHOD_PREV,
ACTION, ACTION,
SWITCH_SECOND, SWITCH_FORWARD,
SWITCH_SECOND_BACK, SWITCH_BACKWARD,
SWITCH_GREEKMATH, SWITCH_GREEKMATH,
CAPS_LOCK, CAPS_LOCK,
SWITCH_VOICE_TYPING, SWITCH_VOICE_TYPING,
@@ -70,6 +70,8 @@ final class KeyValue
SHARE, SHARE,
ASSIST, ASSIST,
AUTOFILL, AUTOFILL,
CURSOR_LEFT,
CURSOR_RIGHT,
} }
public static enum Placeholder public static enum Placeholder
@@ -278,10 +280,20 @@ final class KeyValue
return keyeventKey(String.valueOf((char)symbol), code, flags | FLAG_KEY_FONT); return keyeventKey(String.valueOf((char)symbol), code, flags | FLAG_KEY_FONT);
} }
private static KeyValue editingKey(String symbol, Editing action) private static KeyValue editingKey(String symbol, Editing action, int flags)
{ {
return new KeyValue(symbol, Kind.Editing, action.ordinal(), return new KeyValue(symbol, Kind.Editing, action.ordinal(),
FLAG_SPECIAL | FLAG_SECONDARY | FLAG_SMALLER_FONT); flags | FLAG_SPECIAL | FLAG_SECONDARY);
}
private static KeyValue editingKey(String symbol, Editing action)
{
return editingKey(symbol, action, FLAG_SMALLER_FONT);
}
private static KeyValue editingKey(int symbol, Editing action)
{
return editingKey(String.valueOf((char)symbol), action, FLAG_KEY_FONT);
} }
/** A key that do nothing but has a unique ID. */ /** A key that do nothing but has a unique ID. */
@@ -290,12 +302,13 @@ final class KeyValue
return new KeyValue("", Kind.Placeholder, id.ordinal(), 0); return new KeyValue("", Kind.Placeholder, id.ordinal(), 0);
} }
private static KeyValue fallbackMakeKey(String name) /** Make a key that types a string. */
public static KeyValue makeStringKey(String str)
{ {
if (name.length() == 1) if (str.length() == 1)
return new KeyValue(name, Kind.Char, name.charAt(0), 0); return new KeyValue(str, Kind.Char, str.charAt(0), 0);
else else
return new KeyValue(name, Kind.String, 0, 0); return new KeyValue(str, Kind.String, 0, FLAG_SMALLER_FONT);
} }
public static KeyValue getKeyByName(String name) public static KeyValue getKeyByName(String name)
@@ -305,33 +318,34 @@ final class KeyValue
/* These symbols have special meaning when in `res/xml` and are escaped in /* These symbols have special meaning when in `res/xml` and are escaped in
standard layouts. The backslash is not stripped when parsed from the standard layouts. The backslash is not stripped when parsed from the
custom layout option. */ custom layout option. */
case "\\?": return fallbackMakeKey("?"); case "\\?": return makeStringKey("?");
case "\\#": return fallbackMakeKey("#"); case "\\#": return makeStringKey("#");
case "\\@": return fallbackMakeKey("@"); case "\\@": return makeStringKey("@");
case "\\\\": return fallbackMakeKey("\\"); case "\\\\": return makeStringKey("\\");
case "shift": return modifierKey(0x0A, Modifier.SHIFT, 0); /* Modifiers and dead-keys */
case "shift": return modifierKey(0xE00A, Modifier.SHIFT, 0);
case "ctrl": return modifierKey("Ctrl", Modifier.CTRL, 0); case "ctrl": return modifierKey("Ctrl", Modifier.CTRL, 0);
case "alt": return modifierKey("Alt", Modifier.ALT, 0); case "alt": return modifierKey("Alt", Modifier.ALT, 0);
case "accent_aigu": return diacritic(0x50, Modifier.AIGU); case "accent_aigu": return diacritic(0xE050, Modifier.AIGU);
case "accent_caron": return diacritic(0x51, Modifier.CARON); case "accent_caron": return diacritic(0xE051, Modifier.CARON);
case "accent_cedille": return diacritic(0x52, Modifier.CEDILLE); case "accent_cedille": return diacritic(0xE052, Modifier.CEDILLE);
case "accent_circonflexe": return diacritic(0x53, Modifier.CIRCONFLEXE); case "accent_circonflexe": return diacritic(0xE053, Modifier.CIRCONFLEXE);
case "accent_grave": return diacritic(0x54, Modifier.GRAVE); case "accent_grave": return diacritic(0xE054, Modifier.GRAVE);
case "accent_macron": return diacritic(0x55, Modifier.MACRON); case "accent_macron": return diacritic(0xE055, Modifier.MACRON);
case "accent_ring": return diacritic(0x56, Modifier.RING); case "accent_ring": return diacritic(0xE056, Modifier.RING);
case "accent_tilde": return diacritic(0x57, Modifier.TILDE); case "accent_tilde": return diacritic(0xE057, Modifier.TILDE);
case "accent_trema": return diacritic(0x58, Modifier.TREMA); case "accent_trema": return diacritic(0xE058, Modifier.TREMA);
case "accent_ogonek": return diacritic(0x59, Modifier.OGONEK); case "accent_ogonek": return diacritic(0xE059, Modifier.OGONEK);
case "accent_dot_above": return diacritic(0x5A, Modifier.DOT_ABOVE); case "accent_dot_above": return diacritic(0xE05A, Modifier.DOT_ABOVE);
case "accent_double_aigu": return diacritic(0x5B, Modifier.DOUBLE_AIGU); case "accent_double_aigu": return diacritic(0xE05B, Modifier.DOUBLE_AIGU);
case "accent_slash": return diacritic(0x5C, Modifier.SLASH); case "accent_slash": return diacritic(0xE05C, Modifier.SLASH);
case "accent_arrow_right": return diacritic(0x5D, Modifier.ARROW_RIGHT); case "accent_arrow_right": return diacritic(0xE05D, Modifier.ARROW_RIGHT);
case "accent_breve": return diacritic(0x5E, Modifier.BREVE); case "accent_breve": return diacritic(0xE05E, Modifier.BREVE);
case "accent_bar": return diacritic(0x5F, Modifier.BAR); case "accent_bar": return diacritic(0xE05F, Modifier.BAR);
case "accent_dot_below": return diacritic(0x60, Modifier.DOT_BELOW); case "accent_dot_below": return diacritic(0xE060, Modifier.DOT_BELOW);
case "accent_horn": return diacritic(0x61, Modifier.HORN); case "accent_horn": return diacritic(0xE061, Modifier.HORN);
case "accent_hook_above": return diacritic(0x62, Modifier.HOOK_ABOVE); case "accent_hook_above": return diacritic(0xE062, Modifier.HOOK_ABOVE);
case "superscript": return modifierKey("Sup", Modifier.SUPERSCRIPT, 0); case "superscript": return modifierKey("Sup", Modifier.SUPERSCRIPT, 0);
case "subscript": return modifierKey("Sub", Modifier.SUBSCRIPT, 0); case "subscript": return modifierKey("Sub", Modifier.SUBSCRIPT, 0);
case "ordinal": return modifierKey("Ord", Modifier.ORDINAL, 0); case "ordinal": return modifierKey("Ord", Modifier.ORDINAL, 0);
@@ -340,32 +354,34 @@ final class KeyValue
case "fn": return modifierKey("Fn", Modifier.FN, 0); case "fn": return modifierKey("Fn", Modifier.FN, 0);
case "meta": return modifierKey("Meta", Modifier.META, 0); case "meta": return modifierKey("Meta", Modifier.META, 0);
case "config": return eventKey(0x04, Event.CONFIG, FLAG_SMALLER_FONT); /* Special event keys */
case "config": return eventKey(0xE004, Event.CONFIG, FLAG_SMALLER_FONT);
case "switch_text": return eventKey("ABC", Event.SWITCH_TEXT, FLAG_SMALLER_FONT); case "switch_text": return eventKey("ABC", Event.SWITCH_TEXT, FLAG_SMALLER_FONT);
case "switch_numeric": return eventKey("123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT); case "switch_numeric": return eventKey("123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT);
case "switch_emoji": return eventKey(0x01, Event.SWITCH_EMOJI, FLAG_SMALLER_FONT); case "switch_emoji": return eventKey(0xE001, Event.SWITCH_EMOJI, FLAG_SMALLER_FONT);
case "switch_back_emoji": return eventKey("ABC", Event.SWITCH_BACK_EMOJI, 0); case "switch_back_emoji": return eventKey("ABC", Event.SWITCH_BACK_EMOJI, 0);
case "switch_second": return eventKey(0x13, Event.SWITCH_SECOND, FLAG_SMALLER_FONT); case "switch_forward": return eventKey(0xE013, Event.SWITCH_FORWARD, FLAG_SMALLER_FONT);
case "switch_second_back": return eventKey(0x14, Event.SWITCH_SECOND_BACK, FLAG_SMALLER_FONT); case "switch_backward": return eventKey(0xE014, Event.SWITCH_BACKWARD, FLAG_SMALLER_FONT);
case "switch_greekmath": return eventKey("πλ∇¬", Event.SWITCH_GREEKMATH, FLAG_SMALLER_FONT); case "switch_greekmath": return eventKey("πλ∇¬", Event.SWITCH_GREEKMATH, FLAG_SMALLER_FONT);
case "change_method": return eventKey(0x09, Event.CHANGE_METHOD, FLAG_SMALLER_FONT); case "change_method": return eventKey(0xE009, Event.CHANGE_METHOD, FLAG_SMALLER_FONT);
case "change_method_prev": return eventKey(0x09, Event.CHANGE_METHOD_PREV, FLAG_SMALLER_FONT); case "change_method_prev": return eventKey(0xE009, Event.CHANGE_METHOD_PREV, FLAG_SMALLER_FONT);
case "action": return eventKey("Action", Event.ACTION, FLAG_SMALLER_FONT); // Will always be replaced case "action": return eventKey("Action", Event.ACTION, FLAG_SMALLER_FONT); // Will always be replaced
case "capslock": return eventKey(0x12, Event.CAPS_LOCK, 0); case "capslock": return eventKey(0xE012, Event.CAPS_LOCK, 0);
case "voice_typing": return eventKey(0x15, Event.SWITCH_VOICE_TYPING, FLAG_SMALLER_FONT); case "voice_typing": return eventKey(0xE015, Event.SWITCH_VOICE_TYPING, FLAG_SMALLER_FONT);
/* Key events */
case "esc": return keyeventKey("Esc", KeyEvent.KEYCODE_ESCAPE, FLAG_SMALLER_FONT); case "esc": return keyeventKey("Esc", KeyEvent.KEYCODE_ESCAPE, FLAG_SMALLER_FONT);
case "enter": return keyeventKey(0x0E, KeyEvent.KEYCODE_ENTER, 0); case "enter": return keyeventKey(0xE00E, KeyEvent.KEYCODE_ENTER, 0);
case "up": return keyeventKey(0x05, KeyEvent.KEYCODE_DPAD_UP, 0); case "up": return keyeventKey(0xE005, KeyEvent.KEYCODE_DPAD_UP, 0);
case "right": return keyeventKey(0x06, KeyEvent.KEYCODE_DPAD_RIGHT, 0); case "right": return keyeventKey(0xE006, KeyEvent.KEYCODE_DPAD_RIGHT, 0);
case "down": return keyeventKey(0x07, KeyEvent.KEYCODE_DPAD_DOWN, 0); case "down": return keyeventKey(0xE007, KeyEvent.KEYCODE_DPAD_DOWN, 0);
case "left": return keyeventKey(0x08, KeyEvent.KEYCODE_DPAD_LEFT, 0); case "left": return keyeventKey(0xE008, KeyEvent.KEYCODE_DPAD_LEFT, 0);
case "page_up": return keyeventKey(0x02, KeyEvent.KEYCODE_PAGE_UP, 0); case "page_up": return keyeventKey(0xE002, KeyEvent.KEYCODE_PAGE_UP, 0);
case "page_down": return keyeventKey(0x03, KeyEvent.KEYCODE_PAGE_DOWN, 0); case "page_down": return keyeventKey(0xE003, KeyEvent.KEYCODE_PAGE_DOWN, 0);
case "home": return keyeventKey(0x0B, KeyEvent.KEYCODE_MOVE_HOME, 0); case "home": return keyeventKey(0xE00B, KeyEvent.KEYCODE_MOVE_HOME, 0);
case "end": return keyeventKey(0x0C, KeyEvent.KEYCODE_MOVE_END, 0); case "end": return keyeventKey(0xE00C, KeyEvent.KEYCODE_MOVE_END, 0);
case "backspace": return keyeventKey(0x11, KeyEvent.KEYCODE_DEL, 0); case "backspace": return keyeventKey(0xE011, KeyEvent.KEYCODE_DEL, 0);
case "delete": return keyeventKey(0x10, KeyEvent.KEYCODE_FORWARD_DEL, 0); case "delete": return keyeventKey(0xE010, KeyEvent.KEYCODE_FORWARD_DEL, 0);
case "insert": return keyeventKey("Ins", KeyEvent.KEYCODE_INSERT, FLAG_SMALLER_FONT); case "insert": return keyeventKey("Ins", KeyEvent.KEYCODE_INSERT, FLAG_SMALLER_FONT);
case "f1": return keyeventKey("F1", KeyEvent.KEYCODE_F1, 0); case "f1": return keyeventKey("F1", KeyEvent.KEYCODE_F1, 0);
case "f2": return keyeventKey("F2", KeyEvent.KEYCODE_F2, 0); case "f2": return keyeventKey("F2", KeyEvent.KEYCODE_F2, 0);
@@ -379,8 +395,9 @@ final class KeyValue
case "f10": return keyeventKey("F10", KeyEvent.KEYCODE_F10, 0); case "f10": return keyeventKey("F10", KeyEvent.KEYCODE_F10, 0);
case "f11": return keyeventKey("F11", KeyEvent.KEYCODE_F11, FLAG_SMALLER_FONT); case "f11": return keyeventKey("F11", KeyEvent.KEYCODE_F11, FLAG_SMALLER_FONT);
case "f12": return keyeventKey("F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT); case "f12": return keyeventKey("F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT);
case "tab": return keyeventKey(0x0F, KeyEvent.KEYCODE_TAB, FLAG_SMALLER_FONT); case "tab": return keyeventKey(0xE00F, KeyEvent.KEYCODE_TAB, FLAG_SMALLER_FONT);
/* Spaces */
case "\\t": return charKey("\\t", '\t', 0); // Send the tab character case "\\t": return charKey("\\t", '\t', 0); // Send the tab character
case "space": return charKey("\r", ' ', FLAG_KEY_FONT | FLAG_SECONDARY); case "space": return charKey("\r", ' ', FLAG_KEY_FONT | FLAG_SECONDARY);
case "nbsp": return charKey("\u237d", '\u00a0', FLAG_SMALLER_FONT); case "nbsp": return charKey("\u237d", '\u00a0', FLAG_SMALLER_FONT);
@@ -397,10 +414,6 @@ final class KeyValue
case "blt": return charKey("<", '>', 0); case "blt": return charKey("<", '>', 0);
case "bgt": return charKey(">", '<', 0); case "bgt": return charKey(">", '<', 0);
case "removed": return placeholderKey(Placeholder.REMOVED);
case "f11_placeholder": return placeholderKey(Placeholder.F11);
case "f12_placeholder": return placeholderKey(Placeholder.F12);
/* hebrew niqqud */ /* hebrew niqqud */
case "qamats": return charKey("\u05E7\u05B8", '\u05B8', 0); // kamatz case "qamats": return charKey("\u05E7\u05B8", '\u05B8', 0); // kamatz
case "patah": return charKey("\u05E4\u05B7", '\u05B7', 0); // patach case "patah": return charKey("\u05E4\u05B7", '\u05B7', 0); // patach
@@ -432,41 +445,31 @@ final class KeyValue
case "zwj": return charKey("zwj", '\u200D', 0); // zero-width joiner (provides ligature) case "zwj": return charKey("zwj", '\u200D', 0); // zero-width joiner (provides ligature)
case "zwnj": return charKey("zwnj", '\u200C', 0); // zero-width non joiner (prevents unintended ligature) case "zwnj": return charKey("zwnj", '\u200C', 0); // zero-width non joiner (prevents unintended ligature)
case "copy": return editingKey("copy", Editing.COPY); /* Editing keys */
case "paste": return editingKey("paste", Editing.PASTE); case "copy": return editingKey(0xE030, Editing.COPY);
case "cut": return editingKey("cut", Editing.CUT); case "paste": return editingKey(0xE032, Editing.PASTE);
case "selectAll": return editingKey("s. all", Editing.SELECT_ALL); case "cut": return editingKey(0xE031, Editing.CUT);
case "shareText": return editingKey("share", Editing.SHARE); case "selectAll": return editingKey(0xE033, Editing.SELECT_ALL);
case "pasteAsPlainText": return editingKey("<paste>", Editing.PASTE_PLAIN); case "shareText": return editingKey(0xE034, Editing.SHARE);
case "undo": return editingKey("undo", Editing.UNDO); case "pasteAsPlainText": return editingKey(0xE035, Editing.PASTE_PLAIN);
case "redo": return editingKey("redo", Editing.REDO); case "undo": return editingKey(0xE036, Editing.UNDO);
case "replaceText": return editingKey("repl.", Editing.REPLACE); case "redo": return editingKey(0xE037, Editing.REDO);
case "textAssist": return editingKey("assist", Editing.ASSIST); case "replaceText": return editingKey("repl", Editing.REPLACE);
case "autofill": return editingKey("auto.", Editing.AUTOFILL); case "textAssist": return editingKey(0xE038, Editing.ASSIST);
default: return fallbackMakeKey(name); case "autofill": return editingKey("auto", Editing.AUTOFILL);
case "cursor_left": return editingKey(0xE008, Editing.CURSOR_LEFT);
case "cursor_right": return editingKey(0xE006, Editing.CURSOR_RIGHT);
/* Placeholder keys */
case "removed": return placeholderKey(Placeholder.REMOVED);
case "f11_placeholder": return placeholderKey(Placeholder.F11);
case "f12_placeholder": return placeholderKey(Placeholder.F12);
/* Fallback to a string key that types its name */
default: return makeStringKey(name);
} }
} }
static final HashMap<String, String> keys_descr = new HashMap<String, String>();
/* Some keys have a description attached. Return [null] if otherwise. */
public static String getKeyDescription(String name)
{
return keys_descr.get(name);
}
static void addKeyDescr(String name, String descr)
{
keys_descr.put(name, descr);
}
static {
/* Keys description is shown in the settings. */
addKeyDescr("capslock", "Caps lock");
addKeyDescr("switch_greekmath", "Greek & math symbols");
addKeyDescr("voice_typing", "Voice typing");
}
// Substitute for [assert], which has no effect on Android. // Substitute for [assert], which has no effect on Android.
private static void check(boolean b) private static void check(boolean b)
{ {

View File

@@ -18,6 +18,7 @@ import android.view.inputmethod.InputMethodSubtype;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import java.util.AbstractMap.SimpleEntry; import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@@ -26,13 +27,12 @@ import java.util.Set;
public class Keyboard2 extends InputMethodService public class Keyboard2 extends InputMethodService
implements SharedPreferences.OnSharedPreferenceChangeListener implements SharedPreferences.OnSharedPreferenceChangeListener
{ {
static private final String TAG = "Keyboard2";
private Keyboard2View _keyboardView; private Keyboard2View _keyboardView;
private KeyEventHandler _keyeventhandler; private KeyEventHandler _keyeventhandler;
// If not 'null', the layout to use instead of [_currentTextLayout]. // If not 'null', the layout to use instead of [_currentTextLayout].
private KeyboardData _currentSpecialLayout; private KeyboardData _currentSpecialLayout;
private Current_text_layout _currentTextLayout; /** Current layout index in [Config.layouts]. */
private int _currentTextLayout;
// Layout associated with the currently selected locale. Not 'null'. // Layout associated with the currently selected locale. Not 'null'.
private KeyboardData _localeTextLayout; private KeyboardData _localeTextLayout;
private ViewGroup _emojiPane = null; private ViewGroup _emojiPane = null;
@@ -40,30 +40,36 @@ public class Keyboard2 extends InputMethodService
private Config _config; private Config _config;
private boolean _debug_logs = false;
/** Layout currently visible. */ /** Layout currently visible. */
KeyboardData current_layout() KeyboardData current_layout()
{ {
if (_currentSpecialLayout != null) if (_currentSpecialLayout != null)
return _currentSpecialLayout; return _currentSpecialLayout;
KeyboardData layout; KeyboardData layout = null;
if (_currentTextLayout == Current_text_layout.SECONDARY) if (_currentTextLayout >= _config.layouts.size())
layout = _config.second_layout; _currentTextLayout = 0;
else if (_config.layout == null) if (_currentTextLayout < _config.layouts.size())
layout = _config.layouts.get(_currentTextLayout);
if (layout == null)
layout = _localeTextLayout; layout = _localeTextLayout;
else
layout = _config.layout;
return _config.modify_layout(layout); return _config.modify_layout(layout);
} }
void setTextLayout(Current_text_layout layout) void setTextLayout(int l)
{ {
_currentTextLayout = layout; if (l == _currentTextLayout)
return;
_currentTextLayout = l;
_currentSpecialLayout = null; _currentSpecialLayout = null;
_keyboardView.setKeyboard(current_layout()); _keyboardView.setKeyboard(current_layout());
} }
void incrTextLayout(int delta)
{
int s = _config.layouts.size();
setTextLayout((_currentTextLayout + delta + s) % s);
}
void setSpecialLayout(KeyboardData l) void setSpecialLayout(KeyboardData l)
{ {
_currentSpecialLayout = l; _currentSpecialLayout = l;
@@ -75,19 +81,25 @@ public class Keyboard2 extends InputMethodService
return KeyboardData.load(getResources(), layout_id); return KeyboardData.load(getResources(), layout_id);
} }
/** Load a layout that contains a numpad (eg. the pin entry). */
KeyboardData loadNumpad(int layout_id)
{
return _config.modify_numpad(KeyboardData.load(getResources(), layout_id));
}
@Override @Override
public void onCreate() public void onCreate()
{ {
super.onCreate(); super.onCreate();
KeyboardData.init(getResources()); KeyboardData.init(getResources());
SharedPreferences prefs = DirectBootAwarePreferences.get_shared_preferences(this); SharedPreferences prefs = DirectBootAwarePreferences.get_shared_preferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
_keyeventhandler = new KeyEventHandler(getMainLooper(), this.new Receiver()); _keyeventhandler = new KeyEventHandler(getMainLooper(), this.new Receiver());
Config.initGlobalConfig(prefs, getResources(), _keyeventhandler); Config.initGlobalConfig(prefs, getResources(), _keyeventhandler);
prefs.registerOnSharedPreferenceChangeListener(this);
_config = Config.globalConfig(); _config = Config.globalConfig();
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard); _keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
_keyboardView.reset(); _keyboardView.reset();
_debug_logs = getResources().getBoolean(R.bool.debug_logs); Logs.set_debug_logs(getResources().getBoolean(R.bool.debug_logs));
} }
private List<InputMethodSubtype> getEnabledSubtypes(InputMethodManager imm) private List<InputMethodSubtype> getEnabledSubtypes(InputMethodManager imm)
@@ -99,34 +111,24 @@ public class Keyboard2 extends InputMethodService
return Arrays.asList(); return Arrays.asList();
} }
private void extra_keys_of_subtype(ExtraKeys dst, InputMethodSubtype subtype) private ExtraKeys extra_keys_of_subtype(InputMethodSubtype subtype)
{ {
String extra_keys = subtype.getExtraValueOf("extra_keys"); String extra_keys = subtype.getExtraValueOf("extra_keys");
String script = subtype.getExtraValueOf("script"); String script = subtype.getExtraValueOf("script");
if (extra_keys == null) if (extra_keys != null)
return; return ExtraKeys.parse(script, extra_keys);
dst.add_keys_for_script(script, ExtraKeys.parse_extra_keys(extra_keys)); return ExtraKeys.EMPTY;
} }
private void refreshAccentsOption(InputMethodManager imm, InputMethodSubtype subtype) private void refreshAccentsOption(InputMethodManager imm, InputMethodSubtype subtype)
{ {
ExtraKeys extra_keys = new ExtraKeys();
List<InputMethodSubtype> enabled_subtypes = getEnabledSubtypes(imm); List<InputMethodSubtype> enabled_subtypes = getEnabledSubtypes(imm);
switch (_config.accents) List<ExtraKeys> extra_keys = new ArrayList<ExtraKeys>();
{ // Gather extra keys from all enabled subtypes
// '3' was "all accents", now unused extra_keys.add(extra_keys_of_subtype(subtype));
case 1: case 3: for (InputMethodSubtype s : enabled_subtypes)
extra_keys_of_subtype(extra_keys, subtype); extra_keys.add(extra_keys_of_subtype(s));
for (InputMethodSubtype s : enabled_subtypes) _config.extra_keys_subtype = ExtraKeys.merge(extra_keys);
extra_keys_of_subtype(extra_keys, s);
break;
case 2:
extra_keys_of_subtype(extra_keys, subtype);
break;
case 4: break;
default: throw new IllegalArgumentException();
}
_config.extra_keys_subtype = extra_keys;
if (enabled_subtypes.size() > 1) if (enabled_subtypes.size() > 1)
_config.shouldOfferSwitchingToNextInputMethod = true; _config.shouldOfferSwitchingToNextInputMethod = true;
} }
@@ -153,22 +155,13 @@ public class Keyboard2 extends InputMethodService
{ {
String s = subtype.getExtraValueOf("default_layout"); String s = subtype.getExtraValueOf("default_layout");
if (s != null) if (s != null)
default_layout = _config.layout_of_string(getResources(), s); default_layout = LayoutsPreference.layout_of_string(getResources(), s);
refreshAccentsOption(imm, subtype); refreshAccentsOption(imm, subtype);
} }
} }
if (default_layout == null) if (default_layout == null)
default_layout = KeyboardData.load(getResources(), R.xml.latn_qwerty_us); default_layout = loadLayout(R.xml.latn_qwerty_us);
_localeTextLayout = default_layout; _localeTextLayout = default_layout;
if (_config.second_layout == null)
{
_config.shouldOfferSwitchingToSecond = false;
_currentTextLayout = Current_text_layout.PRIMARY;
}
else
{
_config.shouldOfferSwitchingToSecond = true;
}
} }
private String actionLabel_of_imeAction(int action) private String actionLabel_of_imeAction(int action)
@@ -239,30 +232,21 @@ public class Keyboard2 extends InputMethodService
return null; return null;
} }
private void log_editor_info(EditorInfo info) private KeyboardData refresh_special_layout(EditorInfo info)
{
LogPrinter p = new LogPrinter(Log.DEBUG, TAG);
info.dump(p, "");
if (info.extras != null)
Log.d(TAG, "extras: "+info.extras.toString());
Log.d(TAG, "swapEnterActionKey: "+_config.swapEnterActionKey);
Log.d(TAG, "actionLabel: "+_config.actionLabel);
}
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:
case InputType.TYPE_CLASS_PHONE: case InputType.TYPE_CLASS_PHONE:
case InputType.TYPE_CLASS_DATETIME: case InputType.TYPE_CLASS_DATETIME:
_currentSpecialLayout = if (_config.pin_entry_enabled)
_config.modify_numpad(KeyboardData.load(getResources(), R.xml.pin)); return loadNumpad(R.xml.pin);
break; else
return loadNumpad(R.xml.numeric);
default: default:
_currentSpecialLayout = null;
break; break;
} }
return null;
} }
@Override @Override
@@ -270,12 +254,11 @@ public class Keyboard2 extends InputMethodService
{ {
refresh_config(); refresh_config();
refresh_action_label(info); refresh_action_label(info);
refresh_special_layout(info); _currentSpecialLayout = refresh_special_layout(info);
_keyboardView.setKeyboard(current_layout()); _keyboardView.setKeyboard(current_layout());
_keyeventhandler.started(info); _keyeventhandler.started(info);
setInputView(_keyboardView); setInputView(_keyboardView);
if (_debug_logs) Logs.debug_startup_input_view(info, _config);
log_editor_info(info);
} }
@Override @Override
@@ -397,7 +380,7 @@ public class Keyboard2 extends InputMethodService
break; break;
case SWITCH_NUMERIC: case SWITCH_NUMERIC:
setSpecialLayout(_config.modify_numpad(loadLayout(R.xml.numeric))); setSpecialLayout(loadNumpad(R.xml.numeric));
break; break;
case SWITCH_EMOJI: case SWITCH_EMOJI:
@@ -427,17 +410,16 @@ public class Keyboard2 extends InputMethodService
conn.performEditorAction(actionId); conn.performEditorAction(actionId);
break; break;
case SWITCH_SECOND: case SWITCH_FORWARD:
if (_config.second_layout != null) incrTextLayout(1);
setTextLayout(Current_text_layout.SECONDARY);
break; break;
case SWITCH_SECOND_BACK: case SWITCH_BACKWARD:
setTextLayout(Current_text_layout.PRIMARY); incrTextLayout(-1);
break; break;
case SWITCH_GREEKMATH: case SWITCH_GREEKMATH:
setSpecialLayout(_config.modify_numpad(loadLayout(R.xml.greekmath))); setSpecialLayout(loadNumpad(R.xml.greekmath));
break; break;
case CAPS_LOCK: case CAPS_LOCK:
@@ -477,10 +459,4 @@ public class Keyboard2 extends InputMethodService
{ {
return View.inflate(new ContextThemeWrapper(this, _config.theme), layout, null); return View.inflate(new ContextThemeWrapper(this, _config.theme), layout, null);
} }
private static enum Current_text_layout
{
PRIMARY,
SECONDARY
}
} }

View File

@@ -407,7 +407,12 @@ public class Keyboard2View extends View
x += keyW / 2f; x += keyW / 2f;
else else
x += (a == Paint.Align.LEFT) ? subPadding : keyW - subPadding; x += (a == Paint.Align.LEFT) ? subPadding : keyW - subPadding;
canvas.drawText(kv.getString(), x, y, p); String label = kv.getString();
int label_len = label.length();
// Limit the label of string keys to 3 characters
if (label_len > 3 && kv.getKind() == KeyValue.Kind.String)
label_len = 3;
canvas.drawText(label, 0, label_len, x, y, p);
} }
private void drawIndication(Canvas canvas, String indication, float x, private void drawIndication(Canvas canvas, String indication, float x,

View File

@@ -398,7 +398,8 @@ class KeyboardData
public Key withKeyValue(int i, KeyValue kv) public Key withKeyValue(int i, KeyValue kv)
{ {
KeyValue[] ks = Arrays.copyOf(keys, keys.length); KeyValue[] ks = new KeyValue[keys.length];
for (int j = 0; j < keys.length; j++) ks[j] = keys[j];
ks[i] = kv; ks[i] = kv;
int flags = (keysflags & ~(ALL_FLAGS << i)); int flags = (keysflags & ~(ALL_FLAGS << i));
return new Key(ks, flags, width, shift, slider, indication); return new Key(ks, flags, width, shift, slider, indication);

View File

@@ -1,25 +0,0 @@
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");
}
}

View File

@@ -0,0 +1,266 @@
package juloo.keyboard2;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
public class LayoutsPreference extends ListGroupPreference<LayoutsPreference.Layout>
{
static final String KEY = "layouts";
static final List<Layout> DEFAULT =
Collections.singletonList((Layout)new SystemLayout());
static final ListGroupPreference.Serializer<Layout> SERIALIZER =
new Serializer();
/** Text displayed for each layout in the dialog list. */
String[] _layout_display_names;
public LayoutsPreference(Context ctx, AttributeSet attrs)
{
super(ctx, attrs);
setKey(KEY);
Resources res = ctx.getResources();
_layout_display_names = res.getStringArray(R.array.pref_layout_entries);
}
/** Obtained from [res/values/layouts.xml]. */
static List<String> _unsafe_layout_ids_str = null;
static TypedArray _unsafe_layout_ids_res = null;
/** Layout internal names. Contains "system" and "custom". */
public static List<String> get_layout_names(Resources res)
{
if (_unsafe_layout_ids_str == null)
_unsafe_layout_ids_str = Arrays.asList(
res.getStringArray(R.array.pref_layout_values));
return _unsafe_layout_ids_str;
}
/** Layout resource id for a layout name. [-1] if not found. */
public static int layout_id_of_name(Resources res, String name)
{
if (_unsafe_layout_ids_res == null)
_unsafe_layout_ids_res = res.obtainTypedArray(R.array.layout_ids);
int i = get_layout_names(res).indexOf(name);
if (i >= 0)
return _unsafe_layout_ids_res.getResourceId(i, 0);
return -1;
}
/** [null] for the "system" layout. */
public static List<KeyboardData> load_from_preferences(Resources res, SharedPreferences prefs)
{
List<KeyboardData> layouts = new ArrayList<KeyboardData>();
for (Layout l : load_from_preferences(KEY, prefs, DEFAULT, SERIALIZER))
{
if (l instanceof NamedLayout)
layouts.add(layout_of_string(res, ((NamedLayout)l).name));
else if (l instanceof CustomLayout)
layouts.add(KeyboardData.load_string(((CustomLayout)l).xml));
else // instanceof SystemLayout
layouts.add(null);
}
return layouts;
}
/** Does not call [prefs.commit()]. */
public static void save_to_preferences(SharedPreferences.Editor prefs, List<Layout> items)
{
save_to_preferences(KEY, prefs, items, SERIALIZER);
}
public static KeyboardData layout_of_string(Resources res, String name)
{
int id = layout_id_of_name(res, name);
if (id > 0)
return KeyboardData.load(res, id);
// Might happen when the app is downgraded, return the system layout.
return null;
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue)
{
super.onSetInitialValue(restoreValue, defaultValue);
if (_values.size() == 0)
set_values(new ArrayList<Layout>(DEFAULT), false);
}
String label_of_layout(Layout l)
{
if (l instanceof NamedLayout)
{
String lname = ((NamedLayout)l).name;
int value_i = get_layout_names(getContext().getResources()).indexOf(lname);
return value_i < 0 ? lname : _layout_display_names[value_i];
}
else if (l instanceof CustomLayout)
return getContext().getString(R.string.pref_layout_e_custom);
else // instanceof SystemLayout
return getContext().getString(R.string.pref_layout_e_system);
}
@Override
String label_of_value(Layout value, int i)
{
return getContext().getString(R.string.pref_layouts_item, i + 1,
label_of_layout(value));
}
@Override
AddButton on_attach_add_button(AddButton prev_btn)
{
if (prev_btn == null)
return new LayoutsAddButton(getContext());
return prev_btn;
}
@Override
boolean should_allow_remove_item(Layout value)
{
return (_values.size() > 1 && !(value instanceof CustomLayout));
}
@Override
ListGroupPreference.Serializer<Layout> get_serializer() { return SERIALIZER; }
@Override
void select(final SelectionCallback callback)
{
ArrayAdapter layouts = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, _layout_display_names);
new AlertDialog.Builder(getContext())
.setView(R.layout.dialog_edit_text)
.setAdapter(layouts, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface _dialog, int which)
{
String name = get_layout_names(getContext().getResources()).get(which);
switch (name)
{
case "system":
callback.select(new SystemLayout());
break;
case "custom":
select_custom(callback, "");
break;
default:
callback.select(new NamedLayout(name));
break;
}
}
})
.show();
}
/** Dialog for specifying a custom layout. [initial_text] is the layout
description when modifying a layout. */
void select_custom(final SelectionCallback callback, String initial_text)
{
final EditText input = new EditText(getContext());
input.setText(initial_text);
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext())
.setView(input)
.setTitle(R.string.pref_custom_layout_title)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface _dialog, int _which)
{
callback.select(new CustomLayout(input.getText().toString()));
}
})
.setNegativeButton(android.R.string.cancel, null);
// Might be true when modifying an existing layout
if (callback.allow_remove() && _values.size() > 1)
dialog.setNeutralButton(R.string.pref_layouts_remove_custom, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface _dialog, int _which)
{
callback.select(null);
}
});
dialog.show();
}
/** Called when modifying a layout. Custom layouts behave differently. */
@Override
void select(final SelectionCallback callback, Layout prev_layout)
{
if (prev_layout instanceof CustomLayout)
select_custom(callback, ((CustomLayout)prev_layout).xml);
else
select(callback);
}
class LayoutsAddButton extends AddButton
{
public LayoutsAddButton(Context ctx)
{
super(ctx);
setLayoutResource(R.layout.pref_layouts_add_btn);
}
}
/** A layout selected by the user. The only implementations are
[NamedLayout], [SystemLayout] and [CustomLayout]. */
interface Layout {}
static final class SystemLayout implements Layout
{
public SystemLayout() {}
}
/** The name of a layout defined in [res/xml]. */
static final class NamedLayout implements Layout
{
public final String name;
public NamedLayout(String n) { name = n; }
}
/** The XML description of a custom layout. */
static final class CustomLayout implements Layout
{
public final String xml;
public CustomLayout(String c) { xml = c; }
}
/** Named layouts are serialized to strings and custom layouts to JSON
objects with a [kind] field. */
static class Serializer implements ListGroupPreference.Serializer<Layout>
{
public Layout load_item(Object obj) throws JSONException
{
if (obj instanceof String)
{
String name = (String)obj;
if (name.equals("system"))
return new SystemLayout();
return new NamedLayout(name);
}
JSONObject obj_ = (JSONObject)obj;
switch (obj_.getString("kind"))
{
case "custom": return new CustomLayout(obj_.getString("xml"));
case "system": default: return new SystemLayout();
}
}
public Object save_item(Layout v) throws JSONException
{
if (v instanceof NamedLayout)
return ((NamedLayout)v).name;
if (v instanceof CustomLayout)
return new JSONObject().put("kind", "custom")
.put("xml", ((CustomLayout)v).xml);
return new JSONObject().put("kind", "system");
}
}
}

View File

@@ -0,0 +1,293 @@
package juloo.keyboard2;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
/** A list of preferences where the users can add items to the end and modify
and remove items. Backed by a string list. Implement user selection in
[select()]. */
public abstract class ListGroupPreference<E> extends PreferenceGroup
{
boolean _attached = false;
List<E> _values;
/** The "add" button currently displayed. */
AddButton _add_button = null;
public ListGroupPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
setOrderingAsAdded(true);
setLayoutResource(R.layout.pref_listgroup_group);
_values = new ArrayList<E>();
}
/** Overrideable */
/** The label to display on the item for a given value. */
abstract String label_of_value(E value, int i);
/** Called every time the list changes and allows to change the "Add" button
appearance.
[prev_btn] is the previously attached button, might be null. */
AddButton on_attach_add_button(AddButton prev_btn)
{
if (prev_btn == null)
return new AddButton(getContext());
return prev_btn;
}
/** Called every time the list changes and allows to disable the "Remove"
buttons on every items. Might be used to enforce a minimum number of
items. */
boolean should_allow_remove_item(E _value)
{
return true;
}
/** Called when an item is added or modified. */
abstract void select(SelectionCallback<E> callback);
/** Called when an item is modified. */
void select(SelectionCallback<E> callback, E _old_value)
{
select(callback);
}
/** A separate class is used as the same serializer must be used in the
static context. See [Serializer] below. */
abstract Serializer<E> get_serializer();
/** Load/save utils */
/** Read a value saved by preference from a [SharedPreferences] object.
[serializer] must be the same that is returned by [get_serializer()].
Returns [null] on error. */
static <E> List<E> load_from_preferences(String key,
SharedPreferences prefs, List<E> def, Serializer<E> serializer)
{
String s = prefs.getString(key, null);
return (s != null) ? load_from_string(s, serializer) : def;
}
/** Save items into the preferences. Does not call [prefs.commit()]. */
static <E> void save_to_preferences(String key, SharedPreferences.Editor prefs, List<E> items, Serializer<E> serializer)
{
prefs.putString(key, save_to_string(items, serializer));
}
/** Decode a list of string previously encoded with [save_to_string]. Returns
[null] on error. */
static <E> List<E> load_from_string(String inp, Serializer<E> serializer)
{
try
{
List<E> l = new ArrayList<E>();
JSONArray arr = new JSONArray(inp);
for (int i = 0; i < arr.length(); i++)
l.add(serializer.load_item(arr.get(i)));
return l;
}
catch (JSONException e)
{
Logs.exn("load_from_string", e);
return null;
}
}
/** Encode a list of string so it can be passed to
[Preference.persistString()]. Decode with [load_from_string]. */
static <E> String save_to_string(List<E> items, Serializer<E> serializer)
{
List<Object> serialized_items = new ArrayList<Object>();
for (E it : items)
{
try
{
serialized_items.add(serializer.save_item(it));
}
catch (JSONException e)
{
Logs.exn("save_to_string", e);
}
}
return (new JSONArray(serialized_items)).toString();
}
/** Protected API */
/** Set the values. If [persist] is [true], persist into the store. */
void set_values(List<E> vs, boolean persist)
{
_values = vs;
reattach();
if (persist)
persistString(save_to_string(vs, get_serializer()));
}
void add_item(E v)
{
_values.add(v);
set_values(_values, true);
}
void change_item(int i, E v)
{
_values.set(i, v);
set_values(_values, true);
}
void remove_item(int i)
{
_values.remove(i);
set_values(_values, true);
}
/** Internal */
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue)
{
String input = (restoreValue) ? getPersistedString(null) : (String)defaultValue;
if (input != null)
{
List<E> values = load_from_string(input, get_serializer());
if (values != null)
set_values(values, false);
}
}
@Override
protected void onAttachedToActivity()
{
super.onAttachedToActivity();
if (_attached)
return;
_attached = true;
reattach();
}
void reattach()
{
if (!_attached)
return;
removeAll();
int i = 0;
for (E v : _values)
{
addPreference(this.new Item(getContext(), i, v));
i++;
}
_add_button = on_attach_add_button(_add_button);
_add_button.setOrder(Preference.DEFAULT_ORDER);
addPreference(_add_button);
}
class Item extends Preference
{
final E _value;
final int _index;
public Item(Context ctx, int index, E value)
{
super(ctx);
_value = value;
_index = index;
setPersistent(false);
setTitle(label_of_value(value, index));
if (should_allow_remove_item(value))
setWidgetLayoutResource(R.layout.pref_listgroup_item_widget);
}
@Override
protected View onCreateView(ViewGroup parent)
{
View v = super.onCreateView(parent);
View remove_btn = v.findViewById(R.id.pref_listgroup_remove_btn);
if (remove_btn != null)
remove_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View _v)
{
remove_item(_index);
}
});
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View _v)
{
select(new SelectionCallback<E>() {
public void select(E value)
{
if (value == null)
remove_item(_index);
else
change_item(_index, value);
}
public boolean allow_remove() { return true; }
}, _value);
}
});
return v;
}
}
class AddButton extends Preference
{
public AddButton(Context ctx)
{
super(ctx);
setPersistent(false);
setLayoutResource(R.layout.pref_listgroup_add_btn);
}
@Override
protected void onClick()
{
select(new SelectionCallback<E>() {
public void select(E value)
{
add_item(value);
}
public boolean allow_remove() { return false; }
});
}
}
public interface SelectionCallback<E>
{
public void select(E value);
/** If this method returns [true], [null] might be passed to [select] to
remove the item. */
public boolean allow_remove();
}
/** Methods for serializing and deserializing abstract items.
[StringSerializer] is an implementation. */
public interface Serializer<E>
{
/** [obj] is an object returned by [save_item()]. */
E load_item(Object obj) throws JSONException;
/** Serialize an item into JSON. Might return an object that can be inserted
in a [JSONArray]. */
Object save_item(E v) throws JSONException;
}
public static class StringSerializer implements Serializer<String>
{
public String load_item(Object obj) { return (String)obj; }
public Object save_item(String v) { return v; }
}
}

View File

@@ -0,0 +1,51 @@
package juloo.keyboard2;
import android.util.Log;
import android.util.LogPrinter;
import android.view.inputmethod.EditorInfo;
import org.json.JSONException;
public final class Logs
{
static final String TAG = "juloo.keyboard2";
static LogPrinter _debug_logs = null;
public static void set_debug_logs(boolean d)
{
_debug_logs = d ? new LogPrinter(Log.DEBUG, TAG) : null;
}
public static void debug_startup_input_view(EditorInfo info, Config conf)
{
if (_debug_logs == null)
return;
info.dump(_debug_logs, "");
if (info.extras != null)
_debug_logs.println("extras: "+info.extras.toString());
_debug_logs.println("swapEnterActionKey: "+conf.swapEnterActionKey);
_debug_logs.println("actionLabel: "+conf.actionLabel);
}
public static void debug_config_migration(int from_version, int to_version)
{
debug("Migrating config version from " + from_version + " to " + to_version);
}
public static void debug(String s)
{
if (_debug_logs != null)
_debug_logs.println(s);
}
public static void exn(String msg, Exception e)
{
Log.e(TAG, msg, e);
}
public static void trace()
{
if (_debug_logs != null)
_debug_logs.println(Log.getStackTraceString(new Exception()));
}
}

View File

@@ -16,7 +16,12 @@ public class SettingsActivity extends PreferenceActivity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// The preferences can't be read when in direct-boot mode. Avoid crashing // The preferences can't be read when in direct-boot mode. Avoid crashing
// and don't allow changing the settings. // and don't allow changing the settings.
try { getPreferenceManager().getSharedPreferences(); } // Run the config migration on this prefs as it might be different from the
// one used by the keyboard, which have been migrated.
try
{
Config.migrate(getPreferenceManager().getSharedPreferences());
}
catch (Exception _e) { fallbackEncrypted(); return; } catch (Exception _e) { fallbackEncrypted(); return; }
addPreferencesFromResource(R.xml.settings); addPreferencesFromResource(R.xml.settings);
} }

View File

@@ -20,13 +20,13 @@ public final class VibratorCompat
HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
break; break;
case STRONG: case STRONG:
vibrator_vibrate(v, 60); vibrator_vibrate(v, 90);
break; break;
case MEDIUM: case MEDIUM:
vibrator_vibrate(v, 30); vibrator_vibrate(v, 45);
break; break;
case LIGHT: case LIGHT:
vibrator_vibrate(v, 15); vibrator_vibrate(v, 20);
break; break;
} }
} }

2
srcs/special_font/30.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>content-copy</title><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" /></svg>

After

Width:  |  Height:  |  Size: 260 B

2
srcs/special_font/31.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>content-cut</title><path d="M19,3L13,9L15,11L22,4V3M12,12.5A0.5,0.5 0 0,1 11.5,12A0.5,0.5 0 0,1 12,11.5A0.5,0.5 0 0,1 12.5,12A0.5,0.5 0 0,1 12,12.5M6,20A2,2 0 0,1 4,18C4,16.89 4.9,16 6,16A2,2 0 0,1 8,18C8,19.11 7.1,20 6,20M6,8A2,2 0 0,1 4,6C4,4.89 4.9,4 6,4A2,2 0 0,1 8,6C8,7.11 7.1,8 6,8M9.64,7.64C9.87,7.14 10,6.59 10,6A4,4 0 0,0 6,2A4,4 0 0,0 2,6A4,4 0 0,0 6,10C6.59,10 7.14,9.87 7.64,9.64L10,12L7.64,14.36C7.14,14.13 6.59,14 6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22A4,4 0 0,0 10,18C10,17.41 9.87,16.86 9.64,16.36L12,14L19,21H22V20L9.64,7.64Z" /></svg>

After

Width:  |  Height:  |  Size: 648 B

2
srcs/special_font/32.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>content-paste</title><path d="M19,20H5V4H7V7H17V4H19M12,2A1,1 0 0,1 13,3A1,1 0 0,1 12,4A1,1 0 0,1 11,3A1,1 0 0,1 12,2M19,2H14.82C14.4,0.84 13.3,0 12,0C10.7,0 9.6,0.84 9.18,2H5A2,2 0 0,0 3,4V20A2,2 0 0,0 5,22H19A2,2 0 0,0 21,20V4A2,2 0 0,0 19,2Z" /></svg>

After

Width:  |  Height:  |  Size: 353 B

2
srcs/special_font/33.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>select-all</title><path d="M9,9H15V15H9M7,17H17V7H7M15,5H17V3H15M15,21H17V19H15M19,17H21V15H19M19,9H21V7H19M19,21A2,2 0 0,0 21,19H19M19,13H21V11H19M11,21H13V19H11M9,3H7V5H9M3,17H5V15H3M5,21V19H3A2,2 0 0,0 5,21M19,3V5H21A2,2 0 0,0 19,3M13,3H11V5H13M3,9H5V7H3M7,21H9V19H7M3,13H5V11H3M3,5H5V3A2,2 0 0,0 3,5Z" /></svg>

After

Width:  |  Height:  |  Size: 413 B

2
srcs/special_font/34.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>share</title><path d="M21,12L14,5V9C7,10 4,15 3,20C5.5,16.5 9,14.9 14,14.9V19L21,12Z" /></svg>

After

Width:  |  Height:  |  Size: 193 B

2
srcs/special_font/35.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>clipboard-multiple-outline</title><path d="M4 7V21H18V23H4C2.9 23 2 22.1 2 21V7H4M20 3C21.1 3 22 3.9 22 5V17C22 18.1 21.1 19 20 19H8C6.9 19 6 18.1 6 17V5C6 3.9 6.9 3 8 3H11.18C11.6 1.84 12.7 1 14 1C15.3 1 16.4 1.84 16.82 3H20M14 3C13.45 3 13 3.45 13 4C13 4.55 13.45 5 14 5C14.55 5 15 4.55 15 4C15 3.45 14.55 3 14 3M10 7V5H8V17H20V5H18V7H10Z" /></svg>

After

Width:  |  Height:  |  Size: 449 B

2
srcs/special_font/36.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>undo-variant</title><path d="M13.5,7A6.5,6.5 0 0,1 20,13.5A6.5,6.5 0 0,1 13.5,20H10V18H13.5C16,18 18,16 18,13.5C18,11 16,9 13.5,9H7.83L10.91,12.09L9.5,13.5L4,8L9.5,2.5L10.92,3.91L7.83,7H13.5M6,18H8V20H6V18Z" /></svg>

After

Width:  |  Height:  |  Size: 315 B

2
srcs/special_font/37.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>redo-variant</title><path d="M10.5,7A6.5,6.5 0 0,0 4,13.5A6.5,6.5 0 0,0 10.5,20H14V18H10.5C8,18 6,16 6,13.5C6,11 8,9 10.5,9H16.17L13.09,12.09L14.5,13.5L20,8L14.5,2.5L13.08,3.91L16.17,7H10.5M18,18H16V20H18V18Z" /></svg>

After

Width:  |  Height:  |  Size: 317 B

2
srcs/special_font/38.svg Normal file
View File

@@ -0,0 +1,2 @@
<!-- Material Design Icons -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>assistant</title><path d="M19,2H5A2,2 0 0,0 3,4V18A2,2 0 0,0 5,20H9L12,23L15,20H19A2,2 0 0,0 21,18V4A2,2 0 0,0 19,2M13.88,12.88L12,17L10.12,12.88L6,11L10.12,9.12L12,5L13.88,9.12L18,11" /></svg>

After

Width:  |  Height:  |  Size: 292 B

View File

@@ -1,11 +1,12 @@
# The special font is used for the symbols of some keys. It is built from SVG # The special font is used for the symbols of some keys. It is built from SVG
# files, one for each glyph. # files, one for each glyph.
New() New()
Reencode("unicode")
# Imports glyphs, first argument is file name for the generated font # Imports glyphs, first argument is file name for the generated font
i = 2 i = 2
while (i < $argc) while (i < $argc)
Select(Strtol($argv[i]:t:r, 16)) Select(Strtol($argv[i]:t:r, 16) + 0xE000)
Import($argv[i], 0, 0, 4.0, 0.1) Import($argv[i], 0, 0, 4.0, 0.1)
AutoWidth(150) AutoWidth(150)
i++ i++

Binary file not shown.

View File

@@ -7,31 +7,41 @@ import glob
# - Sort in the same order as the baseline # - Sort in the same order as the baseline
# The baseline is 'values/strings.xml', which is english. # The baseline is 'values/strings.xml', which is english.
# Dict of strings. Key is the pair string name and product field (often None).
def parse_strings_file(file): def parse_strings_file(file):
def key(ent): return ent.get("name"), ent.get("product") def key(ent): return ent.get("name"), ent.get("product")
resrcs = ET.parse(file).getroot() resrcs = ET.parse(file).getroot()
return { key(ent): ent for ent in resrcs if ent.tag == "string" } return { key(ent): ent for ent in resrcs if ent.tag == "string" }
def dump_entry(out, entry, comment): # Print the XML file back autoformatted. Takes the output of [sync].
out.write(" ") def write_updated_strings(out, strings):
if comment: out.write("<!-- ")
out.write(ET.tostring(entry, "unicode").strip())
if comment: out.write(" -->")
out.write("\n")
def write_updated_strings(out, baseline, strings):
out.write('<?xml version="1.0" encoding="utf-8"?>\n<resources>\n') out.write('<?xml version="1.0" encoding="utf-8"?>\n<resources>\n')
for key, baseline_entry in baseline.items(): for key, string, comment in strings:
if key in strings: out.write(" ")
dump_entry(out, strings[key], False) if comment: out.write("<!-- ")
else: out.write(ET.tostring(string, "unicode").strip())
dump_entry(out, baseline_entry, True) if comment: out.write(" -->")
out.write("\n")
out.write('</resources>\n') out.write('</resources>\n')
# Print whether string file is uptodate.
def print_status(fname, strings):
# Number of commented-out strings
c = sum(1 for _, _, comment in strings if comment)
status = "uptodate" if c == 0 else "missing %d strings" % c
print("%s: %s" % (fname, status))
# Returns a list of tuples (key, string, commented).
def sync(baseline, strings):
return [
(key, strings[key], False) if key in strings else
(key, base_string, True)
for key, base_string in baseline.items() ]
baseline = parse_strings_file("res/values/strings.xml") baseline = parse_strings_file("res/values/strings.xml")
for strings_file in glob.glob("res/values-*/strings.xml"): for strings_file in glob.glob("res/values-*/strings.xml"):
print(strings_file) strings = sync(baseline, dict(parse_strings_file(strings_file)))
strings = dict(parse_strings_file(strings_file))
with open(strings_file, "w", encoding="utf-8") as out: with open(strings_file, "w", encoding="utf-8") as out:
write_updated_strings(out, baseline, strings) write_updated_strings(out, strings)
print_status(strings_file, strings)