Compare commits

..

457 Commits

Author SHA1 Message Date
Jules Aguillon
82f347043a Release 1.23.0 (35) 2023-07-01 17:27:08 +02:00
frimdo
d79f87420f New default Czech layout (#380)
The previous default layout is renamed `latn_qwertz_cz_multifunctional`.
2023-07-01 17:04:31 +02:00
Jules Aguillon
bd39137c28 Add extra keys to Norwegian
The added keys are also placed on the Dvorak layout.
2023-07-01 16:38:36 +02:00
Jules Aguillon
e025fddf2f Accept some escaped keys in custom layouts
These symbols have special meaning when in `res/xml` and are escaped in
standard layouts.
The backslash is not stripped when parsed from the custom layout option.

Treat these backslashed keys specifically to allow standard layouts to
be passed back to the custom layout option.
2023-06-28 18:04:32 +02:00
Jules Aguillon
434f9aaf2d Fix crash when the layout has less than 3 rows 2023-06-28 17:50:32 +02:00
Jules Aguillon
c0833de37c Add hardcoded charmaps for most accents
`KeyCharacterMap.getDeadChar` may not be aware of the same dead keys in
older version of Android.
Hardcoded charmaps are more predictable.
2023-06-25 20:00:29 +02:00
Jules Aguillon
c1b7503239 CI: Check that 'gen_layouts.py' output is uptodate 2023-06-25 16:52:48 +02:00
Jules Aguillon
de6c3b024d Update guidelines about adding layouts
to reflect the recent changes. Also, change `gen_layouts.py` to not
generate warnings for file that are known not to be layouts.
2023-06-25 16:48:18 +02:00
Jules Aguillon
15c608b8cd Use generated arrays in Config.layout_of_string
This function is no longer an hardcoded list of layout ids. It's
replaced by a linear scan of the previously generated array and a new
corresponding array of resource ids.
2023-06-25 16:34:05 +02:00
Jules Aguillon
8ba82d2555 Generate layouts arrays used in settings
`gen_layouts.py` lists the layouts in `res/xml` and generate the
`pref_layout_values` and `pref_layout_entries` arrays into
`res/values/layouts.xml`.

These arrays are hard to maintain as the order has to match, which is
fragile.

This relies on every layouts having a `name` attribute.
2023-06-25 15:52:24 +02:00
Jules Aguillon
f36864533c Standard layout names (#386)
The names are comprised of: script, layout name, country code.

Co-authored-by: grim <verdastelo9604@hotmail.com>
2023-06-25 13:40:20 +02:00
Vasile Chelban
5cfbc6ed5b Added Romanian layout and translations with special romanian characters (#358)
Added Romanian characters to the keyboard layout and changed the positioning
corner for the secondary characters that were conflicting with the
newly-introduced romanian characters

Added Romanian translations
2023-06-25 12:19:00 +02:00
Jules Aguillon
49fbfa71eb Update check_layout.output 2023-06-25 12:13:46 +02:00
Sabbir
8160b1ac05 Add Bengali Provat Layout (#357)
* Add Bengali Provat Layout

I added bengali_provat layout and renamed old bengali to actual layout name.
2023-06-25 12:12:46 +02:00
Jules Aguillon
f1a8e7c04c Specify the script of every layouts and locales
This new information will avoid showing é on a cyrillic layout and ґ on
a latin layout.
2023-06-24 23:46:14 +02:00
Jules Aguillon
9bcfec8bd1 Per-script extra keys
Allows to define a locale's script in 'method.xml' and use that to add
the extra keys for a locale to layouts of the same script only.

A locale of an undefined script will add its extra keys to every
layouts. A layout of an undefined script will have the extra keys of all
the enabled locales.
2023-06-24 23:29:24 +02:00
Jules Aguillon
5fc68373d3 Allow to specify a layout script
Add the `script` attribute, which will be used to implement
script-specific extra keys.
2023-06-22 20:14:20 +02:00
Jules Aguillon
9f90b807f8 Add ə to the extra keys for Italian 2023-06-22 19:24:25 +02:00
Jules Aguillon
a26a535729 Fix _localeTextLayout null on API < 12
On API level < 12 or on some rare cases, `refreshSubtypeLayout` was not
called, making `_localeTextLayout` uninitialized.

This might also happen if `getExtraValueOf` returns an invalid layout name.
eg. `method.xml` contains an invalid layout name.
2023-06-10 18:07:23 +02:00
six-6
b4177b5267 Use utf-8 encoding while formatting translations on Windows. (#376)
When running sync_translations.py on Windows, an error will show because it use gbk encoding by default. Using utf-8 encoding explicitly can fix it.
2023-06-07 18:14:41 +02:00
six-6
b05dfd10d2 Update translations of Simplified Chinese (#377) 2023-06-07 18:13:57 +02:00
Jules Aguillon
3400a96c4f Increase vibration values 2023-06-04 23:33:04 +02:00
KuRa KuRd
53acdf7df7 Add Kurdish Layout (#353)
Add Kurdish Keyboard Layout Qwerty Based Without Shift.
2023-06-04 23:21:14 +02:00
Jules Aguillon
01bfe73fc7 Explicitly map dead key for ñ
`KeyCharacterMap.getDeadChar` seems to not give the expected result on
Android 4.0. This might affect many more dead key combinations that are
not fixed by this commit.
2023-06-04 23:07:35 +02:00
Chasm Solacer
75e6add091 Updated pl (Polish) translation (#374) 2023-06-03 21:07:14 +02:00
Jules Aguillon
e5ae4816df Add automated checks on layouts
The script `check_layout.py` checks some properties about layouts.
No check is an error.

The result of running this script on every layouts is stored in the file
`check_layout.output`, which is useful to track changes.

Add make rules to run this script as well as `sync_translations`.
2023-06-03 21:03:05 +02:00
Jules Aguillon
f451902efa Refactor: Remove dimens used as option defaults
The conversion into px was done twice, leading to wrong values.
2023-06-03 20:20:09 +02:00
Jules Aguillon
a83a19a0a8 Refactor: Handle Event keys in Keyboard2
The `KeyEventHandler` class is intended to handle every keys and to call
into the main class through a limited API.
However, this is not true for `Event` keys, which in practice had each a
corresponding API call.
2023-06-03 20:06:44 +02:00
Jules Aguillon
bd9e25d298 CONTRIBUTING: Translation updates link 2023-06-03 19:38:42 +02:00
Jules Aguillon
77d09cd9ec Fix escaping in values-fr/strings.xml 2023-06-03 19:03:45 +02:00
Jules Aguillon
06633841c0 Update fr translations 2023-06-03 18:46:50 +02:00
Jules Aguillon
59b3341eaf Hide the voice typing key if no suitable IM
Implemented similarly to the IM switching key.
2023-06-03 18:35:16 +02:00
Jules Aguillon
85cdb9b2b5 Add Voice Typing key
The new key switches to any installed "voice" input method.
If several input methods matches, no effort is made to choose.
Might misbehave with some input methods other than Google's on API < 28.

It is placed on the middle of the arrows on the bottom bar. It is
enabled by default and can be removed in the "Extra keys" option.

The key is not removed from the keyboard if no voice input method
exists.
2023-06-03 18:11:42 +02:00
Jules Aguillon
69e0b4c2a2 More control over vibration
The newer haptic feedback API that is used instead of the vibrator
service since ef03dfe doesn't work for everyone.

The new vibration option allow to choose both the newer API ("system")
and the older API ("strong", "medium", "light").
2023-06-03 11:15:19 +02:00
Jules Aguillon
6f418727cf Launcher activity: Don't handle the back button 2023-06-03 10:00:16 +02:00
Jules Aguillon
22d407c46a Per-layout shift modmap
Specify the behavior of shift for a layout. This is intended for locales
that use the same alphabet but have different capital letters (eg.
Bengali).

The modmap is defined like this:

    <keyboard>
      <modmap>
        <shift a="a" b="A"/>
      </modmap>
    </keyboard>
2023-06-03 09:37:59 +02:00
Jules Aguillon
d2a92795e9 Mention Lixquid's editor in CONTRIBUTING.md 2023-05-28 22:57:54 +02:00
marciozomb13
e46535dc1c Update pt-br translation (#367)
Update pt-br translation
2023-05-28 22:24:37 +02:00
marciozomb13
0dd77b5f7a Update pt-BR title.txt (#368)
Updated to Match the translated name
2023-05-28 22:22:39 +02:00
Reza Hosseinzadeh
7558a0f5e3 Modify persian layout and add some new characters (#348)
- Add character پ and ژ
- Change math operators and symbols location
2023-05-24 19:43:30 +02:00
vladgba
62943ba4d3 Fix gravity of keyboard in full screen (#363)
Set keyboard bottom gravity and adjust inputArea height so it doesn't appear on top in fullscreen.
2023-05-24 19:23:28 +02:00
Jules Aguillon
649aea8c79 Increase the range of the "label size" option 2023-05-12 21:37:43 +02:00
Reza Hosseinzadeh
68104e8856 Complete Farsi translation (#346) 2023-04-23 18:57:49 +02:00
Reza Hosseinzadeh
e3347a166f Pull request to add new layout Persian (#342)
* Add persian layout

* Change layoutId_of_string to layout_of_string

* Add translation for Persian
2023-04-23 01:47:25 +02:00
rVnPower
145f209189 Translation update for Vietnamese (#344) 2023-04-21 17:00:56 +02:00
polyctena
cd92086a4d Update German strings.xml (#337) 2023-04-19 19:05:34 +02:00
Moini
a8c2f14394 Update German translation for app descriptions (#336)
* Update short description for German

* Update German translation for long description.
2023-04-17 13:01:09 +02:00
Maki Nishikino
6a2e064faa Updated russian description and strings.xml (#334) 2023-04-16 17:38:28 +02:00
Edgars
3d27ece0a5 Update translation for description in Latvian (#335) 2023-04-16 17:37:10 +02:00
Chasm Solacer
41b6d869c2 Updated pl (Polish) translation (#333) 2023-04-16 14:03:27 +02:00
Jules Aguillon
866b37ca52 Add language: Icelandic 2023-04-15 16:25:45 +02:00
Jules Aguillon
dd51a4c0df New app description 2023-04-15 16:24:11 +02:00
Jules Aguillon
02f4795d2d Update contributing guidelines 2023-04-15 16:11:23 +02:00
Jules Aguillon
73737e5148 Release 1.22.1 2023-04-10 13:18:24 +02:00
Jules Aguillon
fc901bae9b Launcher activity: Fix crash on API < 28 2023-04-10 13:15:59 +02:00
doak
d4be979696 Do not lock modifiers if sliding a key
This unconditionally removes all pointers (touches) pressing modifiers
which are not already locked, avoiding that the (currently) latched
modifier will be locked aventually.

This can be verfified while sliding the space bar to move the cursor
left or right.

Closes #319.
2023-04-10 13:14:50 +02:00
Jules Aguillon
1aaf427883 Release 1.22.0 2023-04-02 17:27:44 +02:00
Jules Aguillon
a662934afc Bump targetSdkVersion to 33
No change needed.
2023-04-02 17:16:56 +02:00
Jules Aguillon
351355b3a7 Launcher activity: Input box
For trying the keyboard without having to mess with an other app.
2023-04-02 13:29:53 +02:00
Jules Aguillon
3caca59ff4 Refactor: Remove unecessary method KeyboardData.load_pin_entry 2023-03-28 11:55:24 +02:00
Jules Aguillon
35b4e442ab Add a launchable explanatory activity
This activity points to the system settings page for enabling input
methods. This is purely a shortcut but is expected by many users.

It could be made more useful in the future or hidden whenever the
keyboard is enabled.
2023-03-28 11:22:17 +02:00
Jules Aguillon
c4de1ec267 sync_translations.py: Output sub-elements 2023-03-28 11:11:41 +02:00
Chasm Solacer
59b0b60f3f Updated pl (Polish) translation (#316) 2023-03-24 01:26:14 +01:00
Jules Aguillon
2f938dc6f4 Correct pointer direction
The previous algorithm did not cut the circle into 16 equal parts.
The division by 2pi yielded numbers smaller than 16, which no longer
made sense after the cast to int.
2023-03-13 03:06:43 +01:00
Mostafa Ayesh
ce51df6f5a Add Arabic layout (#314)
* add arabic keyboard
* use unicode values for special characters
* add alternate layout
* use arabic numbers
2023-03-11 16:54:20 +01:00
Luke Videckis
6aaa497393 New Hindi layout (#313)
* New Hindi layout
* Update default layout for Marathi, Nepali
* Consistent naming for Devanagari layouts
2023-03-11 16:43:17 +01:00
Jules Aguillon
bac228e6fb Add extra keys for Ukrainian 2023-03-05 23:36:15 +01:00
Jules Aguillon
d7e4840f4d Add support for Belarusian
It uses the russian layout with placed extra keys.
2023-03-05 23:34:26 +01:00
Jules Aguillon
18d3fd3c84 Refactor: Remove KeyboardData.Corner
The Corner class is removed. The "localized" flag for all the corners is
held in a bitfield.
2023-03-05 23:08:35 +01:00
Jules Aguillon
c56ad425f6 Remove the 'edgekeys' attribute 2023-03-05 20:08:56 +01:00
Jules Aguillon
a6fe5cae00 Allow 8 symbols per key
'Keyboard.Key' now contains an array of size 9, giving each keyvalue an
index. The algorithm for finding the nearest key during a swipe now
needs 16 segments, which are now calculated as an angle.

The algorithm does one more interation instead of 2 more, slightly
reducing the sensitivity of corner values. The 'getAtDirection' function
is moved into the Pointers class to clearly separate the two systems.

The 'edgekey' attribute is now obsolete but is kept for compatibility.
The flag is removed internally, key index are simply translated.
Similarly, the 'slider' attribute now act on keys at index 5 and 6
instead of 2 and 3.
2023-03-03 19:44:05 +01:00
Jules Aguillon
1f9e92ed60 Fix caps lock stopped by auto-capitalisation
Auto-capitalisation triggers when the backspace key is used. Make sure
to not remove a locked shift pointer.
2023-03-02 11:40:22 +01:00
Jules Aguillon
0da02d60c4 Do not remove numpad keys from the layout
This removes keys like '.' and '-' from their usual place, which is
pretty annoying.

The feature is retained for the number row.
2023-03-02 10:57:58 +01:00
Edgars
70754aa3eb Update LV translation 2023-03-02 10:41:46 +01:00
Jules Aguillon
2244c46af1 Allow key and keyboard opacity to be 0 2023-02-26 11:52:10 +01:00
Jules Aguillon
798494e701 Fix miscalculated keyboard height with number row
The 'keysHeight' field needs to be updated. As this class is not
intended to be mutable, copy the list of rows and call the constructor.

Also remove an unecessary component of the keyboard height calculation.
2023-02-26 11:31:08 +01:00
mscheidemann
0d902aa334 Update values-de/strings.xml (#295)
Missing German translation completed
2023-02-26 09:54:47 +01:00
Jules Aguillon
91f27a1432 Update translations
Outdated since 0f62b30
2023-02-26 09:49:06 +01:00
JackDotJS
9523b158b3 Add theme "Alternative Black" (#297)
* Add alternative black theme
2023-02-26 09:47:31 +01:00
Jules Aguillon
2ca7b4427d Release 1.21.0 (32) 2023-02-12 23:38:37 +01:00
Jules Aguillon
0f62b3044c Option to switch to the previous input method
A new option changes the "change_method" into the new
"change_method_prev". It switch to the previously used input method.

A long press on "change_method_prev" sends "change_method".

A new section is added in the settings and existing options are moved.
2023-02-12 23:20:11 +01:00
Jules Aguillon
c46e3b6c61 Modify keys after a long press 2023-02-12 23:14:57 +01:00
Kazoku
5fac3459aa Added missing accent that can combine with horn_accent (#293) 2023-02-09 23:38:55 +01:00
Kazoku
b54f9c5797 Vietnamese keyboard (#291)
Added missing accent (horn, hook, dot below)
Added layout
Added accent font svg (by modified existing accent)
2023-02-09 18:40:48 +01:00
Jules Aguillon
72249b8a42 Fix arrow keys not repeating
The special handling of arrow keys have been removed in 854eff2. Key
repeat was not starting when the key0 was empty.
2023-02-08 22:38:01 +01:00
rVnPower
82b2bf6dfb Complete Vietnamese translation (#292) 2023-02-08 16:35:44 +01:00
Ram Kromberg
0fe27ef486 Add theme 'ePaper' (#287)
* Add theme 'ePaper'
2023-01-31 20:11:36 +01:00
Ram Kromberg
51ce2ccdf1 Add layouts 'he_il_1452_1' and 'he_il_1452_2' 2023-01-31 20:07:30 +01:00
Jules Aguillon
eb0df72ba1 Update French translation 2023-01-31 00:07:17 +01:00
Jules Aguillon
540384bb0a Add optional number row
An option is added to enable an extra number row at the top of the
keyboard. Digits are removed from the keyboard while the number row is
visible.
2023-01-30 23:58:47 +01:00
Jules Aguillon
c7184303e9 Remove the digits when numpad is visible 2023-01-30 23:54:39 +01:00
Jules Aguillon
78a461f740 Modification step for the special layout
Refactor, follow up of 90b7944. Add a modification step to the "special"
layouts: numpad, greekmath, pin entry.

Remove the apply_key0 function, which is not expressive enough.
Add an enum instead of yet an other "switch_" function.
2023-01-30 23:46:02 +01:00
Jules Aguillon
90b7944129 Apply modify_layout to text layout only
Refactor. Allows to remove the 'extra_keys' and 'num_pad' flags and to
implement more complicated transformations to the layouts.
2023-01-30 22:33:01 +01:00
Jules Aguillon
2539feadcd Fix placeholder key not replaced
Since fecc4dd, placeholder keys can't be compared by reference.
Add a placeholder kind and defined placeholder values.
2023-01-30 21:29:59 +01:00
Jules Aguillon
5f283cd0cd Slightly increase the width of the spacebar
The left and right arrows are less often needed and the key can be
shorter.
2023-01-29 19:46:56 +01:00
Jules Aguillon
fecc4dd70a Remove the explicit hashmap in KeyValue
Refactoring. Predefined keys are represented by a big switch statement
rather than added into a hashmap.
2023-01-29 19:38:54 +01:00
Jules Aguillon
7bc93c470e Don't send event at end of sliding
A sliding pointer going up must not cause a key event to be sent. This
caused an extra cursor movement and cleared the latched modifiers.
2023-01-29 18:49:44 +01:00
Jules Aguillon
854eff211d Move cursor by sliding on the space bar
Send key events for the left or right arrow as the finger slides on the
space bar.
Can be used to select text by holding shift. Works under Termux.

Events are sent linearly as the finger travels. The distance between
each events is defined from the swiping distance divided by 4.

'slider="true"' can be set on a key that have 'edgekeys="true"'.
'key2' and 'key3' represent the right and left keys.
2023-01-22 23:21:21 +01:00
Jules Aguillon
f4032e3be9 Remove the modulated repeat
It allowed to modulate the repeat speed of some keys (arrow, backspace,
delete) by move the finger farther or closer to the key.

In practice, this wasn't pratical and doesn't seem popular. It is
removed in favor of a better mechanism for moving the cursor.
2023-01-22 23:20:04 +01:00
Maki Nishikino
f7f4d4d6aa Update russian strings.xml (#280) 2023-01-21 15:56:32 +01:00
Jules Aguillon
de5571d428 Release 1.20.2 (31) 2023-01-15 23:34:04 +01:00
Jules Aguillon
6126578111 Avoid switching back from secondary layout automatically
Stay on the secondary layout after a config refresh or onStartInputView.
The information is kept until the keyboard is restarted.

Additionally, move tweaking the secondary layout to the Config class now
that physical equality is not needed.
2023-01-15 23:19:09 +01:00
Jules Aguillon
046416389a Present the "keyboard height" option similarly to the margin options 2023-01-15 19:37:03 +01:00
Jules Aguillon
fd0f0d5476 Separate option for bottom margin in landscape mode
A large margin in portrait mode is desirable but generally not in
landscape mode.
2023-01-15 19:19:07 +01:00
Jules Aguillon
a199962117 Separate option for horizontal margin in landscape mode
A separate option is needed, the +25dp offset wasn't enough.
2023-01-15 19:11:08 +01:00
Maki Nishikino
8a3c0566e7 Update Russian translation and add Russain description (#279)
* Add ru-RU market description

* Add russian settings translate
2023-01-15 17:20:04 +01:00
Jules Aguillon
e190394b47 Add layout 'qwertz_sk'
Co-authored-by: Jozef Kundlak <ingjozefkundlak@gmail.com>
2023-01-14 23:31:37 +01:00
Jules Aguillon
dcc4a640f7 Remove borders on the black theme 2023-01-07 14:55:43 +01:00
Jules Aguillon
c5f5a23d75 Fix dimensions going off after rotation
Values like 'characterSize' and 'horizontalMargin' can't be fed back into the default value because they are not of the same unit.
To avoid this happening again, change the way the default value is defined for every options.
The 'key_height' dimension was no longer used.
2022-12-31 14:00:38 +01:00
Jules Aguillon
73ef7c6765 Improve the description of the app
"swipe gesture" is not clearly defined and can be confused with the
one from the Swype keyboard. Also remove the useless part that is
repeated below.
2022-12-31 13:47:38 +01:00
Jules Aguillon
e333eb06fd Add keys for every context menu actions
The most requested keys are undo and redo. Unfortunatly redo doesn't
work reliably.

The other context menu actions like share, assist and autofill are added
even thought they are rarely useful or implemented.
2022-12-30 15:29:18 +01:00
Jules Aguillon
764cd882d2 Fix inaccessible text layout from pin
The "main" layout can now be pin layout. 'SWITCH_TEXT' and
'SWITCH_SECOND_BACK' don't mean to use that.
2022-12-29 12:43:02 +01:00
Jules Aguillon
a891a3a99b Release 1.20.1 2022-12-14 15:36:04 +01:00
Jules Aguillon
8f972113ca Fix pin entry layout not showing up
The regular text layout was showing instead of the pin entry due to a
misuse of the 'switch' syntax.
2022-12-14 15:33:44 +01:00
Jules Aguillon
c61b31168c Fix a crash on API < 12
'extra_keys_subtype' can be none on API level < 12 when the "accents"
option is tweaked.
2022-12-14 15:09:46 +01:00
Chasm Solacer
c182f3d829 qwerty_pl layout is default for Polish language (#253) 2022-12-14 15:07:40 +01:00
Jules Aguillon
7d6306fbc9 Fix keyboard not showing up after rotation
'setInputView()' must be called on every 'onStartInputView()', not just
when the view is re-created.

This is broken since bf31872.
2022-12-14 15:04:11 +01:00
Jules Aguillon
cb2ea83f8a Release 1.20.0 2022-12-11 22:17:20 +01:00
Chasm Solacer
90cad963ec Make the keyboard transparent (#252)
* Add option for keyboard opacity (transparency). Keyboard background, keys and pressed keys can be adjusted separately.

* Make the borders transparent as well

* Moved setAlphas outside drawKeyFrame to top of onDraw method
2022-12-11 22:10:00 +01:00
Jules Aguillon
bf31872955 Handle configuration change quickly
setInputView() was not called when the view was re-created through
refresh_config(). Also, the refresh_config() function was not able to
properly set the current layout.

Now keep the default layout (_localeTextLayout) and the current non-text
layout (if any, _currentSpecialLayout) separately to be able to refresh
them later.

setInputView() is called everytime the view is created instead of by
onStartInputView() specifically.

The setting activity now save the preferences to the protected storage
in onStop() instead of listening for onSharedPreferenceChanged.
2022-12-11 21:57:40 +01:00
Jules Aguillon
199ca5cf03 Improve emoji pane layout
The measurement function was wrong in some situations. Set a width for
columns and properly configure the GridView.
2022-12-11 16:26:50 +01:00
Jules Aguillon
87d21685ca Fix keyboard not reacting to changed preferences
The callback might not be called if the "default" shared preferences is
different from the shared preferences actually used. This is unexpected
but seems to happen half of the time on Android 12.

Since f1ce6ab, this callback is critical to update the keyboard.
Restarting the application can no longer solve these issues.
2022-12-11 14:55:32 +01:00
Chasm Solacer
8665d002bf Added qwerty_pl layout (#251)
* Updated pl translation

* Added qwerty_pl.xml – QWERTY (Polski) layout
2022-12-11 14:49:22 +01:00
Jules Aguillon
f0fcd791ec Fix syntax error in values-fr 2022-12-11 14:47:28 +01:00
Jules Aguillon
cd2c2357ed Update translation: fr 2022-12-10 20:10:12 +01:00
Jules Aguillon
c17b53ce7f Add option 'numpad_layout'
Allow choosing whether to show the high or the low digits first. The
numeric pane and the numpad are affected by the option.
2022-12-10 19:39:22 +01:00
Chasm Solacer
940fc81193 Added pl_PL (Polish) translation (#250) 2022-12-10 19:01:42 +01:00
Jules Aguillon
523de040be Settings: Allow the keyboard to be smaller
Some users reported that 25% of the screen height is too high on their
screen. This doesn't seem to be a good way to define the height but
until it is improved, allow smaller values.
2022-12-10 18:46:05 +01:00
Jules Aguillon
804ea84981 Correctly handle pointer cancel events
The cancel event ends the motion, it doesn't apply to a single pointer
like it was previously expected.
2022-12-04 18:21:59 +01:00
Jules Aguillon
aaf3d8b630 Update French translation
Also, sync all the translations since the added option.
2022-11-26 23:13:04 +01:00
Jules Aguillon
19c38ca6a2 Improve glyph of accent_bar
The small bar on the middle of the dotted circle looked like a small
arrow. Make the bar span the whole circle, not on the middle.
2022-11-26 23:05:55 +01:00
Jules Aguillon
e745c81269 Allow using a custom layout
Add an option for specifying an XML layout description as a string.

The option is a bit rough at the moment:

- No documentation, users have to be aware of the keyboard's code to use
  this option.
- No error are shown, the layout will fallback to qwerty on error.
2022-11-26 22:30:45 +01:00
Jules Aguillon
09d984a1ab Refactor: Use XmlPullParser directly
XmlResourceParser is convenient but cannot be easily instantiated.
2022-11-26 22:16:48 +01:00
Jules Aguillon
69994a55c5 Refactor: Pass layout as a KeyboardData instead of ID
Parse layouts sooner.
2022-11-26 22:14:29 +01:00
Jules Aguillon
ebdacbc2b2 Make sure translation are in sync
The new script makes sure that strings files don't contain obsolete
strings but also ease the job of contributors by adding missing
translations as comments.

A Github Action ensures that translations stay in sync over time.
2022-11-26 18:11:28 +01:00
Jules Aguillon
122a9c23d0 Make fake pointers not lockable
Especially annoying now that modifiers are not locked by a double tap.
2022-11-26 17:22:31 +01:00
Jules Aguillon
6fb15b3f16 Stop using deprecated 'shouldOfferSwitchingToNextInputMethod'
This function has been introduced in API 19 and deprecated in API 28.
There was no version check for API 19 but instead of adding these,
simply remove the feature for API under 28.
2022-11-26 15:46:45 +01:00
six-6
9a0e03f644 Update Simplified Chinese translation (#245) 2022-11-26 15:39:01 +01:00
Jules Aguillon
f7e16c0345 Fix missing version check
setSystemGestureExclusionRects is API 29. Broken since d644d2b, which
almost got into the release!
2022-11-13 20:59:40 +01:00
Jules Aguillon
64c7c8ce20 Draw borders and update themes
Themes can define the color of each borders independently. Every borders
must have the same width for now. It's possible to set a different width
when the key is activated, thought this is only used to remove borders.

The 4 themes are updated to take advantage of borders.
2022-11-13 20:53:06 +01:00
Jules Aguillon
c1751578ef Highlight activated keys label
Rendering change only.
2022-11-13 18:03:01 +01:00
Jules Aguillon
2aa98de7aa Add editing keys: copy, paste, cut, select all 2022-11-13 16:45:57 +01:00
Jules Aguillon
078dbcd5ff Refactor: Move editing code from to KeyEventHandler
Remove the code dealing with InputMethodConnection from 'Keyboard2' and
move it into 'KeyEventHandler', where more editing actions can now be
implemented.

Autocapitalisation is also moved, the IReceiver interface is simplified.
2022-11-13 16:28:39 +01:00
Jules Aguillon
22a7df6632 Refactor: Use enum values in KeyValue.Kind
instead of maintaining a separate set of constants and a conversion
function.
2022-11-13 15:19:50 +01:00
Jules Aguillon
e213834f67 Don't depend on dpi values in swipe distance
The dpi values "xdpi" and "ydpi" can have wildly different values on
different devices.

The new computation defines a baseline and only take into account the
dpi values as a ratio.

On a 480dpi screen (in both directions), this decrease the value by
about 18%. This new distance felt better during testing.
2022-11-13 14:43:53 +01:00
Jules Aguillon
b102ad9078 Fix localized keys appearing on secondary layout 2022-11-13 00:39:31 +01:00
Jules Aguillon
51b330c616 Allow switching quickly between two layouts
A new option allow to choose a secondary layout, the switching key is
placed on the top edge of the space bar.

The "Programming layout" option was basically doing that but it was
possible to choose from a few layouts only. It is improved and renamed.

The 'LayoutListPreference' allows setting the string for the first entry
but otherwise share the rest of the array.

Add nice icons from materialdesignicons.
2022-11-13 00:24:23 +01:00
Jules Aguillon
815e30a505 Add option for brightness of labels
The brightness value is used as the alpha value when drawing the labels.
2022-11-11 19:47:37 +01:00
Jules Aguillon
4d99bd4f4b Dim secondary keys
Reduce the constrast of "secondary" labels. Modifiers (except
diacritics), event and keyevent keys are considered secondary.
2022-11-11 19:18:22 +01:00
Jules Aguillon
d644d2bf0e Disable the back-gesture on the keyboard area
as well as other system gestures that would interfere with the
keyboard's own swipe gesture.
2022-11-11 16:14:44 +01:00
Jules Aguillon
fc68f2e07d Relase 1.19.1 2022-11-11 15:51:51 +01:00
Edgars
8350efaa83 Add missing Latvian translations 2022-11-11 15:43:34 +01:00
Jules Aguillon
ef34303c7e Avoid crashing in direct-boot mode
The settings activity can't open in direct-boot mode. The emoji pane
opens without the "last used" data.
2022-11-11 15:39:28 +01:00
Jules Aguillon
f1ce6abe5a Direct-boot aware preferences
Store preferences in device protected storage, which is available before
the device is unlocked.
The keyboard was crashing when trying to access the encrypted
preferences.

The emoji pane uses a separate preferences file, the old data is lost.

The SettingsActivity can't easily use the new preferences storage.
Instead, it continues to use the "default" preferences store, which is
copied back to the protected storage when needed.
2022-11-11 14:27:02 +01:00
Jules Aguillon
29fbb27a8a Increase the targetSdkVersion to 31 2022-11-11 10:17:47 +01:00
Jules Aguillon
fdebae929b Release 1.19.0 2022-11-06 21:20:15 +01:00
Jules Aguillon
25cefc5890 Allow to type password on boot
The "android.permission.RECEIVE_BOOT_COMPLETED" permission doesn't seem
useful on Android 12 but is added just in case.
2022-11-06 21:06:04 +01:00
Jules Aguillon
30198acddd Enable pin layout for decimal and signed inputs
Decimal and signed inputs are more common than expected. Adding a few
keys is enough to support these.
2022-11-06 19:54:55 +01:00
Jules Aguillon
96db0397f0 Fix adding two pointers for the same key 2022-11-06 19:49:30 +01:00
Jules Aguillon
d2128e777e Remove option "Lockable modifiers" 2022-11-06 19:34:57 +01:00
Jules Aguillon
6a7fbf5e50 Add combinations to 'accent_slash' and show in settings
The 'accent_slash' was missing in the extra keys setting.

Allow to type more latin letters "with oblique stroke" or "with stroke"
that visually have an oblique bar, that were not added to 'accent_bar'.
2022-11-05 19:33:46 +01:00
Jules Aguillon
1e067c9863 Add the bar diacritic dead key
Allows to type many of the "with stroke" or "with bar" latin letters.
2022-11-05 19:26:49 +01:00
Jules Aguillon
ebe66eb740 Apply Fn first
It's otherwise impossible to type Ctrl+F keys.
2022-11-05 10:29:36 +01:00
Jules Aguillon
d2328d4b9a Automatic day night theme in settings activity
There seems to be no "DayNight" theme compatible with older version of
android outside of the androidx library.

Using 'Theme.DeviceDefault' which is a dark theme, even if it doesn't
sounds like. Detect if a light theme should be used at activity
creation.
2022-11-05 10:13:35 +01:00
Jules Aguillon
7edfd81db1 Use '₹' instead of '₨' in Hindi
₨ is Shift+₹.
2022-11-01 21:44:49 +01:00
Jules Aguillon
67e46e2da3 Add 'qwertz_cs' to the settings
The layout was added in 5169472d but was not present in the settings.
2022-11-01 21:32:58 +01:00
Jules Aguillon
4f3fcfe64b Add the 'qwertz_de' layout
Similar to 'qwertz' but is wider to show äöü on dedicated keys. Some
punctuations are rebalanced to use the space better.
The default layout for de_DE is changed.
2022-11-01 21:29:18 +01:00
Jules Aguillon
2e598a4d47 Draw letter indication on the pin layout
There is no way to type letters on the pin layout, the indication are
decoration only.
Use the E.161 standard.
2022-10-24 00:27:49 +02:00
Jules Aguillon
e01a2733b1 Add the pin entry layout
The layout is used for phone number and datetime input boxes as well as
some numbers.
It is easier to use when the full numeric layout is not needed.
2022-10-24 00:17:55 +02:00
Jules Aguillon
e1145d3851 Disable Alt and Meta by default
The Meta key is not useful.
The Alt key can be used in a terminal but is not useful to a part of
terminal users.
2022-10-23 23:09:58 +02:00
Gero Streng
baec5a76ee Add optional NumPad
Shows a NumPad depending on preference:
   Never/Landscape/Always
2022-10-23 22:51:36 +02:00
Jules Aguillon
ea0b873dd8 Make the shift symbol bigger 2022-10-23 22:02:41 +02:00
Jules Aguillon
6aa4740702 Clarify the double tap option text
Also update a bit the README.
2022-10-23 22:01:43 +02:00
Jules Aguillon
ff0c0354d6 Show keys description in settings
The symbols alone might be hard to understand when scrolling through the
"extra keys" option.
2022-10-23 21:51:43 +02:00
Jules Aguillon
344df4c5c1 Refactor: Remove boilerplate for symbol keys 2022-10-23 21:42:03 +02:00
Jules Aguillon
36e10a792f Add the capslock key
The key enable caps lock immediately. It does nothing if caps lock is
already enabled.

It is not present on the keyboard by default but a place is defined on
every layout, top-right of the shift key. It can be enabled in the
settings.

The icon is from materialdesignicons.com.
2022-10-23 21:37:04 +02:00
Jules Aguillon
55cece7965 Remove cruft
This old script will not help to upgrade to the newer unicode standards.
2022-10-16 22:55:01 +02:00
Jules Aguillon
167c63ee25 Release 1.18.0 2022-10-16 22:42:14 +02:00
Jules Aguillon
f56b926857 Autocapitalisation: Avoid trigerring when Ctrl+Del
Autocapitalisation could trigger while repeatedly typing Ctrl+Del to
remove several words.
2022-10-16 22:34:21 +02:00
Jules Aguillon
75df3afda6 Allow to disable Alt and Meta keys
The keys are marked "loc" in the layouts and are handled like the other
extra keys.
The only difference is that they are enabled by default (for now).
2022-10-16 01:07:24 +02:00
Rapha
7fb5c992b6 Rename resulting CI artifact (#180)
* Rename resulting CI artifact
Add details to the name of the artifact, to distiguish downloads of it between multiple branches while testing

* Update CI to nodejs16 and improve artifact naming
2022-10-16 00:53:04 +02:00
Jules Aguillon
158a3577be Disable fullscreen mode
This mode is annoying to some users and is disabled in most text views.

The keyboard has a fixed sized relative to the height of the screen in
landscape mode. The keyboard can't take more space than expected,
currently.

This might cause problems in the future and might be hidden behind an
option if one is found. Every text views so far seemed to behave fine.
2022-10-16 00:42:28 +02:00
Jules Aguillon
138e59f13a Fix literal tab key
Broken since 31d6a70d.
2022-10-16 00:04:06 +02:00
Jules Aguillon
db347c665c Add the breve diacritic 2022-10-15 23:28:36 +02:00
lpv
8be80eecd4 Basic greek layout. (#207)
* Basic greek layout.
2022-10-15 23:22:19 +02:00
Jules Aguillon
d9a8688237 Fix crash due to auto capitalisation
It is unclear how _autocap.started is not called first but nothing is
preventing to initialize things earlier.
2022-10-15 16:19:27 +02:00
Jules Aguillon
7f51cf001a Mention long press in lockable modifiers option
More documentation about this feature would be appropriate.
2022-10-15 15:55:48 +02:00
Raj9039852537
1909f2fcb4 Added Hindi language layout (#211)
* Hindi Keyboard Layout

Hindi keyboard layout added
Basic symbols like brackets, colons etc are useful. This includes ( ) { } [ ] \ / ÷ - + = ! % : ; . , ?
2022-10-11 22:13:40 +02:00
Jules Aguillon
fc8bb3a539 Allow to type İ on the Turkish layout
In Turkish, upper case of 'iı' is 'İI' but Java's toUpperCase will
return 'II'.
To make 'İ' accessible, make it the shift of 'ı'. This has the
inconvenient of swapping i and ı on the keyboard.
2022-10-04 10:12:22 +02:00
Jules Aguillon
dda8f0314d Contributing: clarify layouts 2022-10-04 10:12:22 +02:00
polyctena
5873b7315d German translation (#208)
Co-authored-by: Benjamin <f.weiss@stud.uni-goettingen.de>
2022-10-04 09:56:15 +02:00
Jules Aguillon
64e263a1af Fix an unexplained crash encountered in the wild
For some reason, 'subtype' can be null. Perhaps because the keyboard is
started before the IMM is ready.
2022-09-24 23:34:50 +02:00
Jules Aguillon
90b9b0e399 Release 1.17.0 2022-09-24 23:07:02 +02:00
Validbit
5169472dfc Added Czech translation and layout (#198)
* Added Czech translation and layout

Translated keyboard and created Czech multilingual "practical" layout for faster typing and typing in commonly used languages (German, Slovak + French w/accents)

* Update (Rephrase) full_description.txt

... to better suit the language and naturally promote keyboard's features and possibilities to a wider audience.
2022-09-24 22:44:10 +02:00
Jules Aguillon
3081af5190 Improve the auto capitalisation
- Detect when the input box is cleared
- Avoid looking up keys on the keyboard every time the shift state needs
  to change.
2022-09-24 22:36:06 +02:00
Jules Aguillon
c778b4e8a2 Fix autocapitalisation randomly not triggered
The autocapitalisation is asking the editor about whether to enable
shift and must make sure to ask after the editor is done processing the
events.
2022-09-24 18:53:37 +02:00
Quantenzitrone
65210fb14f Bone keyboard layout (#155) 2022-09-24 16:17:10 +02:00
Jules Aguillon
d8882c87ae Add support for Polish 2022-09-24 16:08:24 +02:00
Jules Aguillon
2fc40512c6 Add switch_greekmath to the extra keys
The Fn+switch_numeric shortcut might be hard to discover or too slow for
heavy users.

A location is allocated for the key so it has a consistent placement.
2022-09-24 16:02:54 +02:00
Jules Aguillon
5811643562 Add more possible locations for extra keys
Avoid dropping some keys on crowded layouts.
2022-09-24 16:02:54 +02:00
Piotrek Marciniak
a365fdc6a3 Add white e-ink oriented theme (#193)
* Add white e-ing oriented theme

Co-authored-by: Jules Aguillon <jules@j3s.fr>
2022-09-24 13:13:51 +02:00
Edgars
9fc1565065 Add missing Latvian translations (#203) 2022-09-24 11:45:24 +02:00
ChristianGynnild
b0a2298899 Added Norwegian keyboard layout (#202) 2022-09-24 11:44:01 +02:00
Md Rasel Hossain
81f07b427f Bengali Keyboard Layout (#201)
* Bangla Layout
2022-09-24 11:40:10 +02:00
Jules Aguillon
0b388b93c7 Add translations for Russian
Co-authored-by: @94KONG
2022-09-24 11:31:25 +02:00
Jules Aguillon
25a6e71ee8 Add the Extra Keys option
Allows to add more keys to the keyboard from a predefined list.
The implementation doesn't use MultiSelectListPreference because it
doesn't seem possible to change the item layout to properly show the
rendered symbols.
2022-09-19 11:41:18 +02:00
castix
617f0878bc italian translation 2022-09-03 17:33:35 +02:00
igorSilCar
773194ca4a Brazilian portuguese translations (#187)
* Translations for new setting, lockable modifier keys

Co-authored-by: Igor da Silva de Carvalho <igu@coiso.meanhouse>
2022-09-03 12:06:47 +02:00
Jules Aguillon
bc8bcce82a Fix crash when auto-capitalisation runs too soon
This is unexpected but happens once.
2022-07-30 18:19:28 +02:00
Jules Aguillon
4f5ce66347 Fix auto-capitalisation interfering with caps lock
Add a flag to recognize fake pointers and avoid clearing the
intentionally locked shift key.
2022-07-30 18:14:05 +02:00
Jules Aguillon
85d798299e Standard auto-capitalisation only after space
Change the capitalisation algorithm to use Android's
'getCursorCapsMode'. This requires a bit of cursor calculations but
should feel more standard.

The auto completion only triggers after a space is typed or backspace is
pressed.
2022-07-30 17:56:31 +02:00
Jules Aguillon
dec0a7471b Option "Lockable modifiers" is deprecated
Mark that it is planned to be removed, remove corresponding translations.
2022-07-24 23:57:32 +02:00
Jules Aguillon
53b9afa973 Hold any modifier to lock
Modifiers can be locked with a long press. The key repeat mechanism is re-used
and the press timeout is the same.
Every modifiers can be locked that way, not only the "lockable" ones.

The previous behavior can be enabled in the settings (for shift only)
but the default is changed.
2022-07-24 23:55:00 +02:00
Jules Aguillon
081e9a6e53 Add an option to control auto capitalisation 2022-07-24 23:44:37 +02:00
Jules Aguillon
bfde31da6e Avoid automatic capitalisation when using arrows
Disable capitalisation just after an arrow kind is pressed to avoid
interrupting navigation.
2022-07-24 23:32:14 +02:00
Jules Aguillon
324756535e Automatic capitalisation at beginning of sentences
Keep track of end-of-sentence characters while typing and automatically
enable shift when appropriate.

The last few characters just before the cursor need to be queried in
some cases: Begin of input, cursor has moved or text is deleted.
This might have a performance cost.

This normally only enable shift but it also needs to disable shift when
the cursor moves.
2022-07-24 20:02:48 +02:00
Jules Aguillon
2d8ed2d858 Add missing ascii characters to the Hungarian layouts
Was missing '~' and '$'.
2022-07-09 17:55:58 +02:00
Jules Aguillon
929b30f723 Add '#' to the numeric pane
On the bottom-left of the '*' key.
2022-07-09 17:50:13 +02:00
quantenzitrone
3033091f9d Add alternative greek and math symbols 2022-07-09 17:40:20 +02:00
Quantenzitrone
fdd640ef09 added uppercase ẞ of ß 2022-07-09 17:35:17 +02:00
Jules Aguillon
13a13ecbb6 Switch to greekmath with Fn+switch_numeric
Add a shortcut to switch to the greekmath pane directly from the main
layout.
2022-07-09 17:31:44 +02:00
Jules Aguillon
d5836ebb97 Add key for switching to the greekmath pane
The key is placed on the 3rd row of the numeric pane, by taking some
space from the shift key.
2022-07-09 17:30:26 +02:00
quantenzitrone
db8ebc2f4d Add the greekmath pane
The greek and math symbols from the Bone keyboard layout.
2022-07-09 17:27:23 +02:00
Andrew Cat
1d406e948f Add ukrainian layout (#172) 2022-07-03 23:07:06 +02:00
Jules Aguillon
1ddd089166 Compatibility with API level < 24
The Math.floorMod method was added on API level 24.
2022-07-03 22:59:05 +02:00
Jules Aguillon
1951448f9e Release 1.16.1 2022-06-24 22:11:53 +02:00
Jules Aguillon
ff01678ba6 Revert "Remove the vibration settings"
Bring back the "Vibration" option.

The duration option isn't added back because the vibration settings are
still handled by Android. In fact, the option has no effect if the
vibration are disabled in the system settings.

This partially reverts commit ef03dfed5c.
2022-06-24 22:00:23 +02:00
Jules Aguillon
d74e8f3b08 Fix F12 being turned into F11
The "f11_placeholder" and "f12_placeholder" keys were equals since
31d6a70.

Add an incrementing id into the unused key value to differentiate
placeholder values.
2022-06-24 20:56:04 +02:00
Jules Aguillon
ab987c776c Fix localized key not in predefined position
The "loc " prefix for predefining a place for an "extra key" was broken
since 31d6a70.

The FLAG_LOCALIZED flag cannot be used anymore, as adding it to any key
would turn it into a different key that wouldn't be recognized by parts
of the code comparing the keys (placing the extra keys).

Add an other layer in KeyboardData to store such informations.
2022-06-24 20:26:27 +02:00
Thunder-Squirrel
6e5be63e25 Move 'ъ' where it belongs and increase the width of the keys (#160) 2022-06-19 23:04:06 +02:00
Jules Aguillon
402bf4990e Remove the interval between vibrations
This is no longer necessary since repeating key no longer cause a
vibration.
2022-06-06 20:40:53 +02:00
Jules Aguillon
fda53e3952 Release 1.16.0 2022-06-06 20:23:09 +02:00
Jules Aguillon
ef03dfed5c Remove the vibration settings
Instead of using the vibrator directly, use performHapticFeedback, which
will integrate better with the system settings.
2022-06-06 17:04:50 +02:00
Jules Aguillon
e0131fa6b0 Fix inconsistent text size in landscape mode
Dimens weren't refreshed when the orientation changed. Dimens are not
the right solution anyway, use scaling factors instead.
2022-06-06 16:17:43 +02:00
Jules Aguillon
b236a74b64 Increase horizontal spacing in landscape mode
Space between the keys and margin on the left and right edges of the
screen.
2022-06-06 16:15:35 +02:00
Jules Aguillon
f6338a652b New setting: Keyboard height in landscape mode
The previous fixed value of 55% was too high. The new default value is
50% and it is customizable.
2022-06-06 15:33:39 +02:00
Jules Aguillon
9a42fa4dca Don't add extra keys to the numeric pane 2022-06-06 01:02:30 +02:00
Jules Aguillon
4d104eacf3 Remove the option "Show every accents"
This option cannot be implemented easily now that the set of "accents"
(localized keys) isn't defined.
2022-06-06 00:55:16 +02:00
Jules Aguillon
31d6a70dfb Refactor: Remove KeyValue.name
This makes KeyValue objects smaller. 'equals' and 'hashCode' are now
implemented too. Key names are still used to recognise keys with special
meaning, but not for comparing keys anymore.
2022-06-06 00:23:45 +02:00
Jules Aguillon
7462955507 Fix "REMOVED" key appearing when typing Fn and Shift
Since cc571ea
2022-06-05 20:15:11 +02:00
Jules Aguillon
9aac7900c0 Refactor: Make KeyValue final
The class has a complicated internal logic, it is no longer reasonable
to extend it.
2022-06-05 20:14:16 +02:00
Jules Aguillon
088d46d6e6 Refactor: Merge KeyValue._code and _flags fields
With a small number of flags now, it's possible to remove one more
field.
2022-06-05 19:55:55 +02:00
Jules Aguillon
5cc7fdf6d7 Refactor: Separate Events and Keyevents and use enums
Negative values for internal events are preventing further refactoring.

Add a new kind of key and split internal events (now Event) and
Android's key events (now Keyevent).

Use enums events and modifiers outside of the KeyValue class.
Internally, they are converted to and from integer.
2022-06-05 19:30:53 +02:00
Jules Aguillon
cc571ea1ca Refactor: Merge KeyValue.char and code fields
These two fields couldn't have an interesting value at the same time.

As we can no longer rely on a special value to distinguish between
what's the kind, the kind of the key is explicitly encoded in the two
most significative bits of the _flags field.

Extra nice thing: This removes the special values 'EVENT_NONE' and 'CHAR_NONE'.
2022-06-05 18:14:50 +02:00
Jules Aguillon
c1a816d3d4 Refactor: Associate key events in KeyModifier
Two advantages:
- No need to distinguish modifiers in KeyEventHandler. The KeyValue is
  enough to decide what action to do.
- Keys are never a Char and Event at the same time, fields can be
  merged.
2022-06-05 17:46:28 +02:00
Jules Aguillon
e10c587dc5 Refactor: Abstract KeyValue fields
The meaning of the public fields of KeyValue was quite complicated and
not handled consistently accross the app.

Make these fields private and add a more abstract API on top.

The meaning of these fields changed recently and it wasn't an easy
change. I plan on making more changes in the future.
2022-06-05 17:46:22 +02:00
erqan
d03e96da3e Turkish layout & translation (#151)
* Turkish layout & translation
2022-06-05 15:04:54 +02:00
draxaris1010
b3b7877a3b Added support for Dutch(Belgium) (#156) 2022-06-05 14:47:10 +02:00
Jules Aguillon
02124dd71f Add combining 'accent_arrow_right'
It's the first modifier that uses combining diacritics. Whether it
should be represented as a modifier or a new kind of key can be
reconsidered later.
2022-06-05 13:51:09 +02:00
Jules Aguillon
e4e54628b7 Add the 'accent_slash' modifier
Might be useful for some math characters.
2022-06-05 12:02:35 +02:00
Jules Aguillon
4127aa6f03 Stop using flags for modifiers
There was no free bits left to add new modifiers. Instead of increasing
the width of the 'flags' field, refactor the way modifiers are
represented and used.

Modifers are now represented as independent values and stored in the
'code' field. A flag is added to distinguish between modifiers and keys
with a key event.

The most notable change is that modifiers can no longer be or-ed into a
single value but have to be represented as an array.
2022-06-05 01:43:58 +02:00
Jules Aguillon
4f9375373e Colemak: Don't show uncessary dead keys
Hide the dead keys that don't correspond to installed languages.
2022-06-04 16:03:24 +02:00
Djuric
9b154a2495 Add colemak layout (#135) 2022-06-04 15:23:52 +02:00
Jules Aguillon
646ff4834d Move the '0' back to where it was
The '0' has been moved because it was hard to type due to being close to
the edge of the screen.
This is fixed in a more elegant way in a27c644, there's no reason to
keep the '0' in an inconsistent place anymore.
2022-05-29 17:39:48 +02:00
Jules Aguillon
815025aaa9 Add layout: QWERTY (Hungarian) 2022-05-29 17:31:12 +02:00
Jules Aguillon
d9f2fdf8bf Remove some localized keys from the layouts
These keys are not placed in a particular way, the automatic placement
will do a better job.
2022-05-29 12:34:10 +02:00
Jules Aguillon
2e81cb5cf7 Automatically place localized keys on the layouts
Layouts no longer need to mention every localized keys and dead keys.
They are now placed automatically starting from the second row on the
bottom-right corner.

The "loc " prefix is not removed to still be able to define a more
optimal and consistent placement for some extra keys (eg. 'ß' near 's').

Programming layouts no longer need to place every dead keys.
2022-05-29 12:27:46 +02:00
Anindra
89dfc782a7 Update readme (#146)
* add screenshots
2022-05-11 14:45:51 +02:00
Jules Aguillon
eb42943327 Specify localized keys in each layouts
Each layouts can chose which key are localized instead of specifying it
globally for each key.

Important keys are no longer removed from layouts if the 'extra_keys'
mechanism is not working properly. This can happen if language tags
specified in method.xml don't match the user's language.

Removed some currency symbols from some layouts. They are all in the Fn
layer.
2022-05-08 17:35:24 +02:00
Jules Aguillon
121a2ba76f Find closest key further
The previous limit was checking d-1 and d+1, the new limit also tries
d-2 and d+2.
2022-05-08 16:56:34 +02:00
Jules Aguillon
82d3290c6a Fix vibration when pointer move slightly
Fix the bug introduced in the parent commit.
2022-05-08 16:55:03 +02:00
Jules Aguillon
b15ca662c2 Better handling of removed keys and swipe geture
The "closest key" logic must be careful not to reveal keys removed by a
modifier.

Must check [_handler.onPointerSwipe] for every candidate values.
[selected_value] is changed back to [selected_direction].

This adds a new bug: When the direction change, the selected value might
not change but a vibration will be triggered anyway.
2022-05-08 16:55:03 +02:00
Jules Aguillon
9a48acfe3e Improve nearest key computation
getAtDirection was too hard to maintain and might contain bugs.
Change slightly the meaning of directions and implement a the nearest
key calculation as a loop.
2022-05-08 16:55:03 +02:00
Rodrigo Batista de Moraes
bce0a98f62 only vibrate when the swipe key changes 2022-05-08 16:55:03 +02:00
Rodrigo Batista de Moraes
a27c64479f use the closest swipe key on swipe
fix a direction
2022-05-08 16:55:03 +02:00
Jules Aguillon
7da7a5082d Set the color of the navigation bar
Since SDK 21, applications can set the background color of the
navigation bar. This is normally simply an item in a theme but it is
more complicated for keyboards.
2022-05-07 23:51:00 +02:00
Edgars
80600ed659 Add missing LV translations (#136) 2022-05-07 18:57:25 +02:00
Jules Aguillon
3b1c652370 Release 1.15.0 (22) 2022-05-01 23:06:18 +02:00
Tibor Billes
8cb1789eeb Add support for Hungarian layout (#127) 2022-05-01 22:51:11 +02:00
Jules Aguillon
04a7ec4bb8 Fix latched pointers accumulating on the same key
It was possible to latch and lock the same modifier several time at the
same time independently. Remove that.
2022-05-01 00:11:52 +02:00
Jules Aguillon
8e0d38c257 Fix crash when IME not enabled
This is unexpected but happened to a user. Perhaps because the OS
returned bogus or fake results in imm.getEnabledInputMethodList ?
2022-05-01 00:00:15 +02:00
Jules Aguillon
b72635b887 Fix modifiers not cleared when presses overlap
When typing fast, a second key might be pressed before the first is
released.

Clearing modifiers earlier would prevent this but would break modifiers
placed in corners (especially the accent keys). Instead, don't take
latched modifiers into account when registering the second press.

A new flag is needed to not interfere with holding modifers, which is
merged with the norepeat flag.
2022-04-30 23:47:09 +02:00
Jules Aguillon
84af72c222 Record activated modifiers on key down
The View no longer keeps flags for something other than rendering.
2022-04-30 23:17:20 +02:00
marciozomb13
2df4764557 Strings PT: App partially renamed to improve globalization (#134) 2022-04-30 11:01:03 +02:00
Jules Aguillon
39952f8bdf Remove build dependency on Fontforge
The required version of fontforge (from 2020!) is not available in many
distros. This is an annoying for contributors and greatly complicated
the CI and F-Droid scripts.

The generated font file is now included in the sources. Fontforge is
still needed when adding new glyphs but this is not a common operation.
2022-04-24 20:52:36 +02:00
Djuric
ab4c73f9f3 Add build instructions to the contributing page (#130) 2022-04-24 19:59:36 +02:00
matthiakl
e52e537fd7 Added neo 2 layout (#125)
* Added neo 2 layout

* Move accents away from screen edge into second row
2022-04-24 19:58:33 +02:00
Jules Aguillon
2900e8d197 Add Double acute diacritic
Will be used by the Hungarian language.
2022-04-24 01:15:41 +02:00
Jules Aguillon
d8e475467a Fix cedilla glyph is inverted 2022-04-24 00:49:48 +02:00
Jules Aguillon
fec3f109c9 Add support for Lithuanian
Requires two new diacritics: ogonek and dot_above.

The new accents are also added to the Latvian layout as the two language
can be close but not to the other localized layouts. A new mechanism is
needed to reproducibly add extra keys to layouts without manual
placement.
2022-04-24 00:41:49 +02:00
Jules Aguillon
f9f44fbd7d Update contributing guidelines
- Improve layout guidelines
- Adding a locale
- Mention character close to the edges of the screen
- Allow partially translating the app title
2022-04-24 00:41:49 +02:00
Benjamin
914599f16a German translation update 2022-04-23 20:12:52 +02:00
Jules Aguillon
65cc0c736e Release 1.14.2 (21) 2022-04-16 23:43:25 +02:00
Jules Aguillon
2cce0fed67 Makefile: Pass -r to adb install
Fails to update on some versions of Android without it.
2022-04-16 23:38:16 +02:00
Jules Aguillon
9a8c4f291d Fix compatibility with Android 6
Android 6 uses Java 1.7, the only incompatible feature in use was
lambdas.
2022-04-16 23:36:54 +02:00
marciozomb13
14cc318a0e Update PT strings (#121)
Tiny fixes and improvements.
2022-04-16 23:17:17 +02:00
Jules Aguillon
8d8a58462c Release 1.14.1 (20) 2022-04-06 09:50:33 +02:00
Jules Aguillon
5562ee1391 Fix mismatch layout name
The Korean layout id was not consistent and this caused a crash.
2022-04-06 09:50:33 +02:00
Jules Aguillon
120c0a9d23 Fix compat with older version of Android
Resources.getFloat is new from API 29.
2022-04-06 09:50:33 +02:00
Jules Aguillon
aaff8689e3 Release 1.14.0 (19) 2022-04-03 20:59:42 +02:00
Jules Aguillon
2b348b7a31 Revert "Swap Ctrl and switch_numeric keys"
This reverts commit b85b67c2f0.

The Ctrl key was too hard to use in the new position, especially in
combination with arrows or backspace.

Leave the switching key in the numeric layout however, where the Ctrl
key is not very useful. Put Ctrl on the top-right because bottom-right
is where the switching key is in the other layouts.
2022-04-03 20:27:25 +02:00
Jules Aguillon
19289bec27 Update screenshots
Many things changed since: new keys, better font, sizes and colors
changed, keys moved.
2022-04-03 18:09:23 +02:00
Jules Aguillon
aa78229b2a Add the Programming Layout option
Allow specifying a layout for programming and add a key for switching to
it easily.

The switching key is placed on the top edge of the space bar.

The option has no effect by default because the ergonomic isn't ideal,
it needs to be enabled explicitly.
Users of Latin-script languages certainly prefer to use one layout (for
programming or not). This feature might be removed in favor of a better
language-switching mechanisms in the future.
2022-04-03 17:15:12 +02:00
Jules Aguillon
d62e7647e0 Move keys away from the edges of the screen
These keys are harder to hit as the finger might exit the screen before
traveling enough to hit a corner. It might be particularly harder for
people that use a phone case.

Every layouts are changed, the notable changes are:

- The Escape key is in the bottom-right corner of the first key.
  This position looks weird at first but is a lot easier to type.

- The 0 key is on the top-left of the last key on the first row.
  It is not like the other digits.

- The Tab key is on the top-right. This might be hard to re-learn.

- Some layouts had more changes to accomodate these new positions.

Co-authored-by: Raphael <rapha.a.r@gmail.com>
2022-04-03 13:30:24 +02:00
Jules Aguillon
9411f59ed5 Rename the Meta key
The symbol isn't clear enough.
2022-04-03 12:49:14 +02:00
Jules Aguillon
b85b67c2f0 Swap Ctrl and switch_numeric keys
The switch_numeric key is generally more important, especially in the
numeric pane.
2022-04-03 12:48:29 +02:00
Jules Aguillon
695f5b4371 Swap Fn and Alt
Fn is increasingly more important while Alt is generally not.
2022-04-03 12:42:50 +02:00
Raphael
b995da9985 Update Space Glyph
Revert to previous version, the original google material icon,
which is not rounded, and it looks better with the rest of the keyboard,
also more correct to represent the open box unicode space char,
instead of a smile
2022-04-02 17:36:10 +02:00
Jules Aguillon
5f47beb5b0 Add currency symbols under the Fn key
Fn+e = €
Fn+l = £
Fn+r = ₹
Fn+y = ¥
Fn+c = ¢
Fn+p = ₱
2022-04-02 16:56:40 +02:00
Raphael
2dda39f453 Arrows and Box system (#114)
* Add `Arrows` and `Box` accent system
2022-04-02 16:42:40 +02:00
nickid
fbf8901bdb Add Korean layout (#115)
* Add Korean layout
2022-04-02 16:33:32 +02:00
Raphael
723c7e9aec Upgrade CI workflow (#111)
* Cache dependencies on CI workflow

* Use available fontforge version for CI action
Avoid a dirty OS upgrade to get a newer version of FontForge,
use what is available at Ubuntu 20.04

* Upgrade CI Workflow
By using an appimage of FontForge, it's easier to install the latest version, to cache it, and there is no extra dependencies clashes with  Ubuntu 20.04

* Make paths for fontforge absolute in makefile
It's necessary because fontforge is an AppImage and requires it

* Improve cache step on CI

wget don't download a duplicate if file already exists

* Generate base64 ascii encoded debug keystore

That can be used to transfer the keystore to a Github Secret

* Restore debug.keystore from github secrets

Get the asc encoded keystore from github secrets, 
and decode it back to a bynary file inside the CI run.

* Cleanup redundant lines and add explanation comment

* runs-on  ubuntu-latest

Co-authored-by: Jules Aguillon <jules@j3s.fr>

* add *.keystore.asc to .gitignore

* Clean up lines, adjust documentation

* use CURDIR automatic makefile variable

Co-authored-by: Jules Aguillon <jules@j3s.fr>
2022-04-02 16:33:12 +02:00
Jules Aguillon
2b6c2b98e0 Compute the swipe distance from the physical dpi
The previous computation was very different depending on the device's
screen and accessibility options.
Given that the keyboard is supposed to fill all the space in one
dimension, the dpi unit makes little sense.

The formula doesn't mean anything in particular, it takes into account
both dimensions (x and y) and should be close to the dpi in the
diagonals (which is the direction of swipe).

This changes the actual value, on a 1920x1080 480dpi screen, the value
is increased by 20%.
2022-04-02 16:16:24 +02:00
ArenaL5
281f779121 µ, æ and œ also generated by Fn 2022-03-31 19:05:40 +02:00
ArenaL5
6b3123090c Add arrows
Add simple arrows to the numeric keypad. Using the Fn key with these arrows will
output double arrows.
2022-03-31 19:05:40 +02:00
ArenaL5
363a65223c Add non-breaking space as Fn+Space 2022-03-31 19:05:40 +02:00
ArenaL5
4355225646 Add extra symbols to Fn
Also removed almost all combinations of diacritics and symbols to create extra
symbols.
2022-03-31 19:05:40 +02:00
ArenaL5
21c76b5b41 Add interpunct and move Tab in Spanish keyboard
Added the middle dot (·) to the Spanish keyboard, in order to be able to type
Catalan words and names. Catalan is spoken in Eastern Spain, and the middle top
is therefore included in standard PC Spanish keyboards.

Also changed the Tab key to an upwards-leftwards swipe, as to follow more closely
the programmer's layout qwerty.xml
2022-03-31 19:05:40 +02:00
Jules Aguillon
ed2dea9630 CI: Install fontforge with Nix
And cache the nix store.
2022-03-27 16:26:58 +02:00
Jules Aguillon
67487d0ef0 Fix CI since recent font changes
Requires the latest version of fontforge.
Re-order the steps to improve caching.
2022-03-25 00:51:11 +01:00
Michael Levi
611f2c8111 More reliable CI without Nix 2022-03-25 00:16:40 +01:00
Jules Aguillon
6db57500ee Add glyphs for Tab, Backspace and Delete
Tab is from IcoMoon. Backspace and Delete are from materialdesignicons.
2022-03-25 00:12:41 +01:00
Jules Aguillon
1b6deb7fed Improve glyphs for accents
The accents are taken from the Roboto Regular font (Apache 2.0), added
the dotted circle and exported with FontForge.

The argument to FontForge's Import function are changed, the fifth
argument controls the accuracy and needed to be lowered otherwise the
grave accent wouldn't be rendered at all.
2022-03-24 23:55:20 +01:00
Raphael
94751bae3e Update Home and End glyphs
Revert them to previous version, but now using SVG icons
instead of a ttf font file
2022-03-24 18:54:41 +01:00
Jules Aguillon
0fb7150a06 Revert to the previous CI
The new CI script doesn't work on forks.

This reverts commit f3aa218de4.
This reverts commit 3373c59b90.
2022-03-24 18:43:09 +01:00
Jules Aguillon
f3aa218de4 Improve CI script
Upgrade nixbuild-action to put back spaces in the workflow name.
Improve the script for retrieving the result, thanks to @rickynils.
2022-03-23 16:27:07 +01:00
nickid
c093b45c96 Korean translations 2022-03-23 15:47:14 +01:00
Jules Aguillon
3373c59b90 CI: Use nixbuild.net
The build takes place on the remote, which takes advantage of Nix's
caching.
The previous workflow used a remote cache but in order to build locally,
all the dependencies needed to be downloaded from the cache everytime.
The dependencies are 462M, downloading took most of the time.
2022-03-23 13:02:38 +01:00
six-6
0d1ddcce3f Translate into Chinese-Simplified 2022-03-21 00:44:57 +01:00
ArenaL5
f736a169a4 Update Spanish translation
and fix a couple typos
2022-03-21 00:39:40 +01:00
ArenaL5
743f6cbc91 Add dead macron to Spanish layout
This is only to make this layout more similar to the default English layout.
Macrons are not actually used in any language spoken in Spain, but they
appear to be used in some varieties of Nahuatl?

Also added C-cedilla to the N-tilde key. Even if both C-cedilla and N-tilde
are redundant in this keyboard, both letters are a staple of Spain keyboards,
and Spaniards are used to have a dedicated key for C-cedilla in PC keyboards.
2022-03-21 00:39:40 +01:00
ArenaL5
47f9043096 Correct displayed value when cancelling settings modification
When changing any numeric setting and cancelling this change, the change would not
be persisted, but the summary in the setting screen would show the last position
of the slider instead of the correct unchanged value.

This commit fixes this on the most simple way by resetting the slider position to
the persisted value.
2022-03-21 00:39:40 +01:00
ArenaL5
a516246e52 Increase vibration maximum from 50 ms to 100 ms 2022-03-21 00:39:40 +01:00
Jules Aguillon
ba6d62dee2 Add F11 and F12
These keys are shown only when Fn is activated, "placeholder" keys are
placed in the layouts.
2022-03-19 16:27:57 +01:00
Jules Aguillon
e872c58788 Allow modifiers to hide keys
Modifiers can temporarily remove a key from the layout by returning
'null'.
Make sure pointer handling code handle these modified keys gracefully
and doesn't trigger a key event and a vibration for the removed key.
2022-03-19 15:39:20 +01:00
Jules Aguillon
57c6208b50 Add glyphs for accent keys
The "dotted circle" character combined with the accent was badly
rendered on many devices.
2022-03-18 17:31:23 +01:00
Jules Aguillon
d733f8c78c Build all special glyphs from SVG
Recover the provenance of each glyphs and remove the base_font.ttf file.
2022-03-18 12:55:08 +01:00
Jules Aguillon
e63ff8f837 Stateless build of the special font file
Keep the glyphs in SVG format and build the font using a FontForge
script.
A part of the previous font is kept because the sources is lost.

This adds a new dependency to the build system, fontforge.
2022-03-17 20:23:28 +01:00
Jules Aguillon
fe35d5fd5a Avoid ghost touches while holding modulated keys
On some devices, bogus touch events can be sent while holding a key.
With modulated keys, it can happens on top of other keys.
Ignore every new pointers when a modulated key is pressed.
2022-03-17 11:24:33 +01:00
Jules Aguillon
2eb615dbf6 Show the switching key if there's several languages
Ensure the switching key is shown when there's several subtypes enabled,
even if Android says not to show it.
2022-03-16 13:09:10 +01:00
igorSilCar
2dae2105b2 Brazilian portuguese layout (#91)
* Providing a comprehensible Brazilian Portuguese keyboard layout

removed cedille as it is already provided by an independent key;
changed layout to correspond to the locale
2022-03-15 21:05:16 +01:00
Jules Aguillon
d53ee811d9 Handle CANCEL touch events
Handling this event is part of the API but was never done. This caused
unstoppable key-repeat.

This event isn't common, the only way I found on Android 10 is to switch
to the emoji keyboard while holding a key. Some apps might cause this
event more often.
2022-03-15 20:44:02 +01:00
Jacob Strömgren
fadedfd58f Add Swedish layout 2022-03-15 18:42:29 +01:00
Jules Aguillon
f9cd4ca2d8 Log editor infos while debugging
Useful when debugging why the keyboard doesn't work as expected with a
specific app.
2022-03-15 18:42:29 +01:00
Jules Aguillon
9bb7c7e66f Identify debug version in app name
Using the --product option of aapt.

Remove the app name from translations because it is never translated. It
is still possible to translate it by specifying 'product="default"'.
2022-03-14 18:37:37 +01:00
Jules Aguillon
f4978f5266 Fix crash since 2ea256e 2022-03-13 00:45:16 +01:00
Jules Aguillon
a0d90496c1 Improve symbols for Sup, Sub and Ord 2022-03-13 00:43:11 +01:00
Jules Aguillon
7aa241b10a Make superscript and subscript modifiers lockable 2022-03-13 00:40:39 +01:00
Jules Aguillon
a57bdf8cfb Avoid showing some symbols twice in Fn mode 2022-03-13 00:35:15 +01:00
Jules Aguillon
ee6e892ef4 Define localized keys as a set instead of flags
Using flags for removing keys like € and ß need too many flags and won't
scale to more localized keys.
2022-03-13 00:14:18 +01:00
Jules Aguillon
2ea256e769 Fix inconsistent highlighting of lockable keys
Pointers.getKeyFlags might receive a different KeyValue than what's
stored in the pointer due to caching. Compare names instead.
2022-03-12 21:38:47 +01:00
igorSilCar
5665d6a7c5 Brazilian portuguese translations (#100)
* Translations for new setting, lockable modifier keys

Co-authored-by: Igor da Silva de Carvalho <igu@coiso.meanhouse>
2022-03-09 10:49:13 +01:00
Jules Aguillon
534e4cb843 Make the font smaller for the action key 2022-03-06 19:36:09 +01:00
Jules Aguillon
e303008e66 Fix action key not updating when switching field
The keyboard was updated before the action key is.
2022-03-05 20:21:37 +01:00
Raphael
5404e7432d Clicking twice on CTRL or ALT will lock them in 'ON' state (#72)
* Clicking twice on CTRL or ALT will lock them in 'ON' state

* Make Locking behaviour optional, configurable in preferences

* Nest the new settings into a different page

To avoid spamming the settings page and repetition in the summaries.
Cannot be a popup unfortunately because that would require API >= 11.

* Add Fn and Meta

Co-authored-by: Jules Aguillon <jules@j3s.fr>
2022-03-05 20:17:45 +01:00
Jules Aguillon
e92504ae92 Improve the code for dynamic updates of the layout 2022-03-05 19:22:01 +01:00
igorSilCar
4964bfb87f Brazilian portuguese translations (#87)
* Added brazilian portuguese translations for app description and settings

* making the swiping option more intelligible

* fix typo on full_description pt-BR translation

Co-authored-by: Igor da Silva de Carvalho <igu@coiso.meanhouse>
2022-03-05 17:33:04 +01:00
Jules Aguillon
39da035135 Release 1.13.1 (18) 2022-02-27 18:41:03 +01:00
Jules Aguillon
4ee29f355e Use the Material theme for the settings activity
This is a dark theme. It's probably better than the default theme for
most users.
2022-02-27 18:31:17 +01:00
Jules Aguillon
87144fd3a8 Reduce the text size for some keys
The symbols are now smaller for Shift, Space, Backspace, Delete and
some keys on the bottom row.

The previous rule was to make the text smaller for symbols made of
several characters.
This is changed to a flag approach.
2022-02-27 15:23:36 +01:00
Jules Aguillon
f6d4554669 Increase contrasts
For the Dark and Light theme. At the same time, use only "web safe
colors" to have nice round numbers and ensure enough contrasts between
colors.

The background color is kept at the previous value, there's not enough
contrast between the background and the keys but that's better than a
solid black background.
2022-02-27 15:08:38 +01:00
Jules Aguillon
1451857c92 Compute text size depending on actual row height
Use the height of the row currently being rendered instead of the base
row size.
Concretely, the bottom row is slightly smaller and will get slightly
smaller text.

Also:
- Rewrite the label rendering code
- Render labels at the middle of the key (was slightly off)
2022-02-27 02:26:45 +01:00
Jules Aguillon
23685ddb3c Compute text size relative to key height
Instead of a fixed size that don't work at all for bigger screens.

Other tweaks:
- Use the value-land dimens to vary 'extra_horizontal_margin'
- Move label size to Config, because it can change at runtime (rotation)
- Slightly decrease the size of "long" symbols
2022-02-27 01:50:24 +01:00
Jules Aguillon
ce5cee42a1 Add attributions for font glyphs 2022-02-26 20:49:09 +01:00
Raphael
067ab90847 Update symbols from unicode to font-Icon 2022-02-26 20:49:09 +01:00
Jules Aguillon
937d5d728e Fix typo in subtype description for Bulgarian
This causes a crash.
2022-02-26 20:27:08 +01:00
Edgars
d6757019dc Add a missing full stop to Latvian QWERTY layout
`res/xml/qwerty_lv.xml` was updated to add the missing full stop
character (`.`) as it got lost when the bottom row was moved to a
separate XML `res/xml/bottom_row.xml` as it was placed on the
arrows key.

Additionally `?` was relocated, giving its place to the full stop.
2022-02-26 13:12:10 +01:00
Jules Aguillon
5581cf33f9 Merge pull request #81 from polyctena/german
German translation
2022-02-26 13:06:00 +01:00
Benjamin
35058628c1 German translation 2022-02-25 17:29:52 +01:00
Benjamin
d581c8b1e4 German translation strings.xml and full_description.txt 2022-02-25 17:14:58 +01:00
Jules Aguillon
44b1086be9 Release 1.13.0 (17) 2022-02-22 20:06:31 +01:00
Jules Aguillon
d277ed1a8a Remove translated changelogs
A single changelog is easier to write. The existence of translated older
changelogs is probably not a good idea either.
2022-02-22 19:52:09 +01:00
Jules Aguillon
7aa280b888 Tweak repeat timing for modulated keys
Make modulated keys repeat twice as slow by default and start repeating
twice as early.
2022-02-22 19:46:41 +01:00
Jules Aguillon
14dabb6f51 Send key events for the modifiers
Before sending a key event while modifiers are active, send events for
the modifier keys.

Some applications don't look at the "metaState" flags but instead keep
track of the up and down events for the modifiers.

For example, the basic text views that are in every applications
correctly handle the "metaState" flags except for one binding:
Selecting text with the arrows while pressing shift.
2022-02-22 19:32:16 +01:00
Jules Aguillon
84bce23fec Merge pull request #75 from gh0ste/master
spanish translation and layout
2022-02-22 19:10:10 +01:00
Jules Aguillon
583aa55259 Update the spanish locale
To use the new layout.
2022-02-22 19:08:44 +01:00
Invert White
4873b8e22a spanish translation and layout 2022-02-22 00:20:11 -03:00
Jules Aguillon
c85e9a91d1 Improve modulated key repeat
Change the formula: don't use an external constant, add a state.
It's now the ratio between where the finger is at the first repeat and
where it is now.

Keep the repeat going when swiping into an other key. Currently only for
arrows: It's now possible to go from an arrow to an other without
waiting again for the key repeat timeout.

The backspace and delete keys don't work well with this.
2022-02-21 00:24:57 +01:00
Jules Aguillon
51ff795be4 Move pointer handling code to its own class
Separate the concerns and have a clearer interface between the two parts
of the code.
2022-02-20 13:09:39 +01:00
Jules Aguillon
632a9ac590 Localize € and £
Show these characters only for users that have the corresponding locale
installed (a supported eu language for €, en-GB for £).
Add these characters to most layouts.
2022-02-19 21:48:48 +01:00
Raphael
d73be58c1a add colon key to numeric keyboard 2022-02-19 21:02:39 +01:00
Jules Aguillon
04c84a8f66 Add Ord+* = ° 2022-02-19 21:01:52 +01:00
Raphael
d2570bc2ea add-ordinal-numbers-symbol-system 2022-02-19 20:59:49 +01:00
Raphael
4b1a6e4b92 Create github action to compile debug_APK (#60)
* Create github action to make debug apk

* Cache debug signing certificate

* Setup cachix

* Run on pull request

Co-authored-by: Jules Aguillon <jules@j3s.fr>
2022-02-14 00:42:41 +01:00
Jules Aguillon
c05fdea765 Define the height of the keyboard relative to the screen size
Depending on the pixel density isn't ideal for a keyboard, which would
render differently depending on the "scaling" accessibility option.

Landscape mode needs a special values. At the same time, increase the
horizontal margin when landscape.
2022-02-13 15:58:30 +01:00
Vladimir Chernov
4e98ab7515 Add Russian layout (#66)
* Add Russian layout

Co-authored-by: Jules Aguillon <jules@j3s.fr>
2022-02-13 13:56:46 +01:00
Jules Aguillon
fda6895dc8 Use the improved font for shift, globe, enter and space
These glyph were available in the custom font but not used yet.
2022-02-13 13:46:37 +01:00
Jules Aguillon
b488c766b1 Add ю to the bulgarian layout
Thanks Zdravko for pointing out.
2022-02-13 13:23:49 +01:00
Jules Aguillon
94fed03a67 Scale the bottom row depending on the host layout
1ff8526 added a bug for layouts that weren't 10 units wide.
2022-02-13 13:20:22 +01:00
Jules Aguillon
adb77466f5 Fix forced inverted colors on Xiaomi phones
MIUI inverts the colors of the app it thinks doesn't implement dark
themes correctly. Also, it inverts the colors in the dumbest possible
way: it doesn't invert all the colors the same way.

It thinks that presumably because I don't use the Material base themes.
2022-02-13 11:45:13 +01:00
Roy-Orbison
6ab6a6811b Invert return key in TTF (#67)
Was a "level-up" symbol, now looks like a return key in identical style.
2022-02-13 11:25:59 +01:00
Jules Aguillon
b1ef21f62f Improve QWERTZ
- Add the umlauts back.
- Remove the accents. QWERTZ changes from "programming layout" to
  "localized layout".
- Move the '?' away from the edge of the screen.
2022-02-07 01:22:42 +01:00
Jules Aguillon
75c736709d build: Use d8 instead of dx
dx have been removed in android build tools >30.0.3 in favor of d8.
Lift the version constraint on the build tools.
2022-02-07 01:11:55 +01:00
Jules Aguillon
1ff8526d24 Define the bottom row separately
Avoid divergences when the bottom row is modified.
2022-02-07 00:55:32 +01:00
AlexandraAlter
a76541458d Dvorak layout (#16) 2022-02-07 00:06:49 +01:00
Max Schillinger
d014a7dd8c Replace unusual return symbol 2022-02-06 23:58:17 +01:00
Max Schillinger
93edc4ac42 Allow egde keys instead of corner keys (swipe vertically/horizontally)
Add a new boolean parameter "edgekeys" for defining keys that have the
additional (swipe) keys on the edges (top, right, left, bottom) instead
of at the corners (top left, top right, bottom left, bottom right).
2022-02-06 23:49:43 +01:00
Jules Aguillon
7383cc4b68 Add the Meta key to every layouts
To follow soon: Define the bottom row separately from layouts.
2022-02-06 23:12:24 +01:00
Jules Aguillon
95c8acc31e Add the Meta key
Currently using the diamond symbol like the history meta key: https://en.wikipedia.org/wiki/Meta_key
However, this key is actually interpreted as the Super/Windows key but
Android calls it "meta" internally.
2022-02-06 23:01:35 +01:00
Jules Aguillon
e86173b895 Use apksigner from the build tools for release builds too 2022-02-05 20:22:40 +01:00
Max Schillinger
be0f4a1fc9 Makefile: Pass full path when calling apksigner 2022-02-05 20:15:29 +01:00
Raphael
b913d6842f Add supoort to show accents for Portuguese language 2022-02-05 20:07:32 +01:00
Jules Aguillon
93b4cc2e7b Release 1.12.0 (16) 2022-01-31 00:24:44 +01:00
Jules Aguillon
7a451d5a36 Turn the key spacing options to ints
Float values were not rendered properly and the granularity isn't
needed.
2022-01-31 00:04:02 +01:00
Jules Aguillon
2d2f0dd51d Add options for the spacing between the keys
Two options: vertical and horizontal.
2022-01-30 23:55:15 +01:00
Jules Aguillon
8631dfb723 Select theme depending on system settings
Automatically choose between the Dark and Light themes.
2022-01-30 23:29:50 +01:00
Jules Aguillon
c9f7f2cfc8 Avoid color inversion in dark theme 2022-01-30 20:39:09 +01:00
Jules Aguillon
f2893437d2 Contributing guidelines for layouts and translations 2022-01-30 13:10:37 +01:00
Jules Aguillon
2f47d2400b Improve Action key detection
There were two problems:
- The Action key was swapped when it shouldn't be. The flag
  'IME_FLAG_NO_ENTER_ACTION' wasn't interpreted correctly for inputs
  that specified both an action and this flag.
- The value 'IME_ACTION_UNSPECIFIED' should remove the Action key.
2022-01-30 12:17:31 +01:00
Jules Aguillon
348c278eae Missing Action key in the QWERTZ layout
This caused an even bigger problem: The Enter key would disappear
instead of being swapped with the Action key.
2022-01-30 12:02:49 +01:00
Jules Aguillon
7af579a1bc Fn+Tab to send the tab character 2022-01-29 20:03:17 +01:00
Jules Aguillon
4333575bb9 Add support for the Bulgarian language and layout
Thanks Zdravko Iskrenov for the contribution.
2022-01-29 19:27:33 +01:00
Jules Aguillon
e0217c650d Fix modifier not working on non-ASCII
Characters defined in layouts that aren't defined in KeyValue weren't
recognized as character keys. Not working with modifiers.
2022-01-29 18:56:10 +01:00
Edgars
1723288f5d Add Latvian translation 2022-01-29 18:00:52 +01:00
Edgars
88e21758bc Add Latvian specific QWERTY layout
A customised Latvian specific QWERTY layout (QWERTY (Latvian)) was added
to access all Latvian diacritic characters with a swipe.

Additionally caron, cedille and macron accents were enabled for this
layout.
2022-01-29 17:56:25 +01:00
Jules Aguillon
e031de6b57 Globe key: Open keyboard switching dialog
instead of immediately switching to the next input method.
2022-01-23 19:40:45 +01:00
Jules Aguillon
baf867a9f9 Translate to French 2022-01-23 19:20:28 +01:00
Jules Aguillon
04f15fbfee Improve some strings 2022-01-23 19:20:11 +01:00
Jules Aguillon
cb95e99f50 Make action key labels translatable 2022-01-23 19:20:02 +01:00
Jules Aguillon
28f98cc129 Update feature graphic according to Google's guidelines 2022-01-22 21:23:33 +01:00
Edgars
3ab2228065 Use symbols for configuration and emoji keys
`srcs/juloo.keyboard2/KeyValue.java` was updated to replace `Conf` with
`⛭` (`\u2699`) and `:)` with `☻` (`\u263B`).
2022-01-22 21:13:46 +01:00
Poussinou
eda171d57a Update README.md 2022-01-22 20:54:27 +01:00
Edgars
0bf7ff5f34 Add keys for Latvian
New accents - caron and macron - were defined and QWERTY layout was
updated to add accents for Latvian specific characters.
2022-01-20 22:01:34 +01:00
Jules Aguillon
aa12466767 Release 1.11.1 (15) 2022-01-20 21:34:35 +01:00
Jules Aguillon
100e0b270d Fix crash when switching app 2022-01-20 21:22:09 +01:00
Jules Aguillon
38adf7d7b9 Makefile: Sign the debug apk with scheme v2 2022-01-20 21:21:27 +01:00
Jules Aguillon
9485770372 Update doc for Android 11 2022-01-20 21:21:07 +01:00
Raphael
c489b5aba7 Fix broken link (because of case sensitivity) 2022-01-17 18:59:02 +01:00
Jules Aguillon
96c4b165ac Release 1.11.0 (14) 2022-01-16 23:50:11 +01:00
Jules Aguillon
40897f2c26 Update and improve the description
Explain better what the app is and mention some of the features.

Unfortunately, the German translation needs to be dropped because I
can't maintain it.
2022-01-16 23:44:04 +01:00
Moini
133b6ec2c1 German keyboard added (#20)
* Add German metadata translation

* Add German keyboard

Co-authored-by: Jules Aguillon <jules@j3s.fr>
2022-01-15 20:56:08 +01:00
Jules Aguillon
833dfa31bb Fix miscalculation of the space between the keys
'keyVerticalInterval' was mistakenly used to compute the height of the
keyboard and the vertical position of keys.
While the code handling pointers did not use this value, the hit box of
the bottom row was shifted by several pixels.

Make sure 'keyVerticalInterval' is only used for rendering and not for
placing the keys.
2022-01-15 20:24:27 +01:00
Jules Aguillon
fa9250a89e Contributing: Mention enabling the virtual keyboard 2022-01-15 19:51:40 +01:00
Jules Aguillon
854eb431f3 CONTRIBUTING: Document debug installation failure 2022-01-15 19:03:53 +01:00
Jules Aguillon
d4eef00a8a Add a CONTRIBUTING guide 2022-01-15 18:55:05 +01:00
Jules Aguillon
f22d040eda Update screenshots 2022-01-10 01:02:14 +01:00
Jules Aguillon
dfec26a93b Swap the Enter and Action keys when needed
When IME_FLAG_NO_ENTER_ACTION is set.
2022-01-10 00:27:22 +01:00
Jules Aguillon
53113cadd9 Add the Action key
It is placed on the top-right of the enter key on every layouts.
It sends a special event (performEditorAction) instead of writing a
newline.

The "actionId" is passed through the EditorInfo object in an obfuscated
way so it's not clear whether it's using the right one.
2022-01-09 20:26:06 +01:00
Moini
4b43645c4b Fix a few strings 2022-01-09 12:53:14 +01:00
Jules Aguillon
93e84ba7e9 Add the German language
Add the 'ß' character on the bottom-left corner of the 's' key, which is
hidden for other languages.

Co-authored-by: Moini <moini@noreply.invalid>
2022-01-09 12:49:28 +01:00
Jules Aguillon
23e59c6b09 Allow to hide more keys than just accents
Add the "FLAGS_LANGS" set of flags, which will be used to hide
individual keys that are not accents.
2022-01-09 12:47:47 +01:00
Jules Aguillon
2764e96eb1 Change the key combination for °
To Fn+*

Was previously accent^+*, which was not available for most languages.
2022-01-01 19:00:27 +01:00
Jules Aguillon
9c82c9cfdc Improve the "precision" option
Now named "swiping distance". Changed to a dropdown.
2021-12-30 22:22:25 +01:00
Jules Aguillon
8bef0728ae Turn the "precision" option to dp instead of px 2021-12-30 21:59:48 +01:00
Jules Aguillon
b05f6e8447 Simplify string definitions
Inline constants in settings.xml, strings.xml is only for strings that
can be translated.
2021-12-30 21:37:34 +01:00
Jules Aguillon
f69a0605a8 Add the Black theme
Friendly to Amoled screens.
The background of keys is the same as the background of the whole
keyboard: pure black.
Colors are also slightly stronger.
2021-12-30 00:53:48 +01:00
Jules Aguillon
29367f127d Move the border radius from Config to Theme
Also, draw activated keys with a round border too.
2021-12-30 00:52:50 +01:00
Jules Aguillon
093a00c572 Add themes
Add a "Theme" option to choose between a dark and light theme.
The light theme uses the colors of the dark theme with the luminance
inversed.

The reloading after a configuration change is changed slightly:
- Special handling is needed when the Theme is changed (recreate the views)
- The default implementation of 'onConfigurationChanged' is used
  Which triggers more refresh (but don't recreate the views)
- 'onCreateInputView' is no longer needed
2021-12-30 00:26:05 +01:00
Jules Aguillon
40b1ec63a9 Use the themes abstraction
Themes replace 'colors.xml' and soon will replace 'dimens.xml'.
2021-12-28 19:12:50 +01:00
Jules Aguillon
93704cca0a Reference the "special key font" in the Theme object
Remove the last cast of the context.
2021-12-28 17:53:58 +01:00
Jules Aguillon
15ce200ce3 Separate "handler" code
As with the previous commit, remove casts of the context.
The "handler" object is referenced in the "config" object for now.
2021-12-28 17:47:18 +01:00
Jules Aguillon
0190cfc29a Turn Config into a singleton object
The goal is to remove a cast of the 'context' into 'Keyboard2'.
2021-12-28 16:47:19 +01:00
Jules Aguillon
dd24ad323b Move Theme code to its own class 2021-12-26 23:55:18 +01:00
Jules Aguillon
86655d4959 Always send the keycode for the tab key
Don't write the tab character and always send the keycode, which is most
probably handled by applications.
2021-12-22 20:40:39 +01:00
Jules Aguillon
3e332dbf54 Use the right keycode for the home key
The previous keycode wasn't the classical "home" movement key but
Android's actual home key, which has no effect when generated from the
keyboard.
2021-12-22 20:19:59 +01:00
Jules Aguillon
d721cc86d1 Avoid crash when removing a layout
Might happen when downgrading the app.
2021-12-19 20:04:17 +01:00
Jules Aguillon
1cfecbdf48 Auto-format Java and XML files
Use xmllint.
Re-indent Java files using spaces.
2021-12-19 19:44:27 +01:00
Jules Aguillon
988d8db7e8 Use apksigner for signing the apk
The Play Store now requires the "Signing Scheme V2", which is
implemented by apksigner.
2021-12-14 00:13:34 +01:00
Jules Aguillon
e5fa23e1f7 Upgrade to Android SDK version 30 2021-12-12 23:48:05 +01:00
Jules Aguillon
d787d982cf Release 1.10.0 (13) 2021-12-12 23:36:19 +01:00
Jules Aguillon
573c13fb82 Add Swedish
First add the 'ring' accent.
The swedish language uses the qwerty layout and three accents (aigu,
trema, ring)
2021-12-11 17:05:49 +01:00
Jules Aguillon
58e37b484c Fix Android's builtin shortcut not working
The 'repeat' field of generated key events was incorrectly set to '1'.
2021-12-11 01:03:36 +01:00
Jules Aguillon
cca832954e Increase the maximum value of the key height option 2021-12-05 21:00:38 +01:00
Jules Aguillon
0727ea38e9 Fix swapped page_up/page_down 2021-12-05 20:55:52 +01:00
Jules Aguillon
5e5c7ef86a Add the euro and pound symbols
Fn+$ and Fn+# respectively.
2021-12-05 20:16:01 +01:00
Jules Aguillon
d8d3cf85e5 Avoid using getWidth() from onMeasure() 2021-12-05 19:38:46 +01:00
Poussinou
7775213504 Update README.md 2021-12-05 18:22:20 +01:00
223 changed files with 9516 additions and 2956 deletions

19
.github/workflows/check-layouts.yml vendored Normal file
View File

@@ -0,0 +1,19 @@
name: Check layouts
# Runs 'gen_layouts.py' and checks that the generated file were uptodate.
# This doesn't run 'check_layout.py'.
on:
workflow_dispatch:
push:
pull_request:
jobs:
check-layouts:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- run: python3 gen_layouts.py
- name: Check that the generated layouts.xml is uptodate, run python3 gen_layouts.py otherwise
run: git diff --exit-code

View File

@@ -0,0 +1,16 @@
name: Check translations
on:
workflow_dispatch:
push:
pull_request:
jobs:
check-translations:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- run: python3 sync_translations.py
- name: Check that strings files are uptodate, run python3 sync_translations.py otherwise
run: git diff --exit-code

47
.github/workflows/make-apk.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
name: Make Apk CI
on:
workflow_dispatch:
push:
pull_request:
jobs:
Build-Apk:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-java@v3
with:
distribution: 'zulu' # See 'Supported distributions' for available options
java-version: '11'
- name: Checkout repo
uses: actions/checkout@v3
- name: Cache debug certificate
uses: actions/cache@v3
with:
path: _build/debug.keystore
key: debug-keystore
- name: Restore debug keystore from github Secrets
run: |
mkdir -p _build
cd "_build"
# Check if exist and use the secret named DEBUG_KEYSTORE
# The contents of the secret can be obtained -
# from the debug.keystore.asc from you local _build folder
if [[ ! "${{ secrets.DEBUG_KEYSTORE }}" = "" ]]; then
echo "${{ secrets.DEBUG_KEYSTORE }}" > "debug.keystore.asc"
if [[ -s "debug.keystore.asc" ]]; then
gpg -d --passphrase "debug0" --batch "debug.keystore.asc" > "debug.keystore"
fi
fi
- name: Build
run: make
- name: Artifact naming
run: |
artifact="${{github.repository_owner}} ${{github.ref_name}}"
artifact="${artifact//\//-}" # replace slashes
echo "artifact=${artifact}" >> $GITHUB_ENV
- name: Save debug apk
uses: actions/upload-artifact@v3
with:
name: "${{env.artifact}} debug_apk"
path: _build/*.apk

2
.gitignore vendored
View File

@@ -1,2 +1,4 @@
*.keystore
*.keystore.asc
_build
/*-keystore.conf

View File

@@ -1,38 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="juloo.keyboard2"
android:versionCode="12"
android:versionName="1.9.2"
android:hardwareAccelerated="false">
<uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="29" />
<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">
<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>
<meta-data android:name="android.view.im"
android:resource="@xml/method" />
</service>
<activity android:name="juloo.keyboard2.SettingsActivity"
android:icon="@drawable/ic_launcher"
android:label="@string/settings_activity_label">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.VIBRATE" />
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="35" android:versionName="1.23.0" android:hardwareAccelerated="false">
<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">
<service android:name="juloo.keyboard2.Keyboard2" android:label="@string/app_name" android:permission="android.permission.BIND_INPUT_METHOD" android:exported="true" android:directBootAware="true">
<intent-filter>
<action android:name="android.view.InputMethod"/>
</intent-filter>
<meta-data android:name="android.view.im" android:resource="@xml/method"/>
</service>
<activity android:name="juloo.keyboard2.SettingsActivity" android:icon="@drawable/ic_launcher" android:label="@string/settings_activity_label" android:theme="@style/android:Theme.DeviceDefault" android:exported="true" android:directBootAware="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
<activity android:name="juloo.keyboard2.LauncherActivity" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/android:Theme.DeviceDefault" android:exported="true" android:directBootAware="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
</manifest>

169
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,169 @@
# Contributing
Thanks for contributing :)
## Building the app
The application doesn't use Gradle and it might be hard to use some features of
Android Studio.
Fortunately, there's not many dependencies:
- OpenJDK 8
- Android SDK: build tools (minimum `28.0.1`), platform `30`
- Make sure to have the `$ANDROID_HOME` environment variable set.
For Nix users, the right environment can be obtained with `nix-shell ./shell.nix`.
Instructions to install Nix are [here](https://nixos.wiki/wiki/Nix_Installation_Guide).
Building the debug apk:
```sh
make
```
If the build succeed, the debug apk is located in `_build/juloo.keyboard2.debug.apk`.
## Using the local debug.keystore on the Github CI actions
It's possible to save the local debug.keystore into a github secret, so the same keystore is utilized to build the debug apk in the CI github actions.
Doing this, they wil have the same signature, thus the debug apk can be updated without having to uninstall it first.
After you sucessfully run `make`, (thus a debug.keystore exists) you can use this second command to generate a base64 stringified version of it
```sh
cd _build
gpg -c --armor --pinentry-mode loopback --passphrase debug0 --yes "debug.keystore"
```
A file will be generated inside the local `_build/` folder, called `debug.keystore.asc`
You can copy the content of this file, and with that, paste it into a new github secret in your repo settings.
The secret must be named `DEBUG_KEYSTORE`
## Debugging on your phone
First [Enable adb debugging on your device](https://developer.android.com/studio/command-line/adb#Enabling).
Then connect your phone to your computer using an USB cable or wireless
debugging.
And finally, install the application with:
```sh
make installd
```
The released version of the application won't be removed, both versions will
be installed at the same time.
## Debugging the application: INSTALL_FAILED_UPDATE_INCOMPATIBLE
`make installd` can fail with the following error message:
```
adb: failed to install _build/juloo.keyboard2.debug.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package juloo.keyboard2.debug signatures do not match previously installed version; ignoring!]
make: *** [Makefile:20: installd] Error 1
```
The application can't be "updated" because the temporary certificate has been
lost. The solution is to uninstall and install again.
The application must be enabled again in the settings.
```sh
adb uninstall juloo.keyboard2.debug
make installd
```
## Guidelines
### Adding a layout
Layouts are defined in XML, see `res/xml/latn_qwerty_us.xml`.
An online tool for editing layout files written by @Lixquid is available
[here](https://unexpected-keyboard-layout-editor.lixquid.com/).
Makes sure to specify the `name` attribute like in `latn_qwerty_us.xml`,
otherwise the layout won't be added to the app.
The layout file must be placed in the `res/xml/` directory and named according to:
- script (`latn` for latin, etc..)
- layout name (eg. the name of a standard)
- country code (or language code if more adequate)
Then, run `make gen_layouts` to add the layout to the app.
The last step will update the file `res/values/layouts.xml`, that you should
not edit directly.
Run `make check_layouts` to check some properties about your layout. This will
change the file `check_layout.output`, which you should commit.
#### Adding a programming layout
A programming layout must contains every ASCII characters.
The current programming layouts are: QWERTY, Dvorak and Colemak.
See for example, Dvorak, added in https://github.com/Julow/Unexpected-Keyboard/pull/16
It's best to leave free spots on the layout for language-specific symbols that
are added automatically when necessary.
These symbols are defined in `res/xml/method.xml` (`extra_keys`).
It's possible to place extra keys with the `loc` prefix. These keys are
normally hidden unless they are needed.
Some users cannot easily type the characters close the the edges of the screen
due to a bulky phone case. It is best to avoid placing important characters
there (such as the digits or punctuation).
#### Adding a localized layout
Localized layouts (a layout specific to a language) are gladly accepted.
See for example: 4333575 (Bulgarian), 88e2175 (Latvian), 133b6ec (German).
They don't need to contain every ASCII characters (although it's useful in
passwords) and dead-keys.
### Adding support for a language
Supported locales are defined in `res/xml/method.xml`.
The attributes `languageTag` and `imeSubtypeLocale` define a locale, the
attribute `imeSubtypeExtraValue` defines the default layout and the dead-keys
and other extra keys to show.
The list of language tags (generally two letters)
and locales (generally of the form `xx_XX`)
can be found in this stackoverflow answer: https://stackoverflow.com/a/7989085
### Translations
Translations are always welcome !
See for example: 1723288 (Latvian), baf867a (French).
The app can be translated by writing `res/values-<language code>/strings.xml`
(for example `values-fr`, `values-lv`), based on the default:
`res/values/strings.xml` (English).
To check that `strings.xml` is formatted correctly, run
`python sync_translations.py`. This will modify your files.
The store description is found in `metadata/android/<locale>/`,
`short_description.txt` and `full_description.txt`.
Translating changelogs is not useful.
The app name might be partially translated, the "unexpected" word should remain
untranslated.
As translations need to be updated regularly, you can subscribe to this issue
to receive a notification when an update is needed:
https://github.com/Julow/Unexpected-Keyboard/issues/373
### Adding key combinations
Key combinations are defined in `srcs/juloo.keyboard2/KeyModifier.java`.
For example, keys modified by the `Fn` key are defined in method
`apply_fn_char`.
Keys with special meaning are defined in `KeyValue.java` in method
`getKeyByName`. Their special action are defined in `KeyEventHandler.java` in
method `key_up`

View File

@@ -2,11 +2,10 @@
PACKAGE_NAME = juloo.keyboard2
ANDROID_PLATFORM_VERSION = android-29
ANDROID_PLATFORM_VERSION = android-30
JAVA_VERSION = 1.7
SRC_DIR = srcs
ASSETS_DIR = assets
RES_DIR = res
EXTRA_JARS =
@@ -17,9 +16,29 @@ debug: _build/$(PACKAGE_NAME).debug.apk
release: _build/$(PACKAGE_NAME).apk
installd: _build/$(PACKAGE_NAME).debug.apk
adb install "$<"
adb install -r "$<"
.PHONY: release debug installd
clean:
rm -rf _build/*.dex _build/class _build/gen _build/*.apk _build/*.unsigned-apk \
_build/*.idsig _build/assets
rebuild_special_font: _build/special_font.ttf
cp "$<" srcs/special_font/result.ttf
sync_translations:
python sync_translations.py
check_layouts:
python check_layout.py $(wildcard res/xml/*.xml) > check_layout.output
gen_layouts:
python gen_layouts.py
# Will modify the source tree.
runtest: rebuild_special_font sync_translations check_layouts gen_layouts
.PHONY: release debug installd clean rebuild_special_font check_layouts \
sync_translations runtest gen_layouts
$(shell mkdir -p _build)
@@ -42,12 +61,6 @@ JAVAC_FLAGS = -source $(JAVA_VERSION) -target $(JAVA_VERSION) -encoding utf8
MANIFEST_FILE = AndroidManifest.xml
JAVA_FILES = $(shell find $(SRC_DIR) -name '*.java')
RES_FILES = $(shell find $(RES_DIR) -type f)
ASSETS_FILES = $(shell find $(ASSETS_DIR) -type f 2>/dev/null)
# Align
_build/%.apk: _build/%.signed-apk
$(ANDROID_BUILD_TOOLS)/zipalign -fp 4 "$<" "$@"
# Debug signing
@@ -59,31 +72,39 @@ $(DEBUG_KEYSTORE):
-alias debug -keypass $(DEBUG_PASSWD) -keystore "$@" \
-keyalg rsa -storepass $(DEBUG_PASSWD) -validity 10000
_build/%.debug.signed-apk: _build/%.debug.unsigned-apk $(DEBUG_KEYSTORE)
jarsigner -keystore $(DEBUG_KEYSTORE) \
-storepass $(DEBUG_PASSWD) -keypass $(DEBUG_PASSWD) \
-signedjar "$@" "$<" debug
_build/%.debug.apk: _build/%.debug.unsigned-apk $(DEBUG_KEYSTORE)
$(ANDROID_BUILD_TOOLS)/apksigner sign --in "$<" --out "$@" \
--ks $(DEBUG_KEYSTORE) --ks-key-alias debug --ks-pass "pass:$(DEBUG_PASSWD)"
# Debug apk
_build/$(PACKAGE_NAME).debug.unsigned-apk: AAPT_PACKAGE_FLAGS+=--rename-manifest-package $(PACKAGE_NAME).debug
_build/$(PACKAGE_NAME).debug.unsigned-apk: AAPT_PACKAGE_FLAGS+=--rename-manifest-package $(PACKAGE_NAME).debug --product debug
# Release signing
# %-keystore.conf should declare KEYSTORE, KEYNAME and OPTS
# %-keystore.conf should declare KEYSTORE, KEYNAME and KEYSTOREPASS
# it is interpreted as a shell script
# OPTS can be used to pass -storepass or -keypass options to jarsigner
_build/%.signed-apk: _build/%.unsigned-apk %-keystore.conf
_build/%.apk: _build/%.unsigned-apk %-keystore.conf
eval `cat $(word 2,$^)` && \
jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore "$$KEYSTORE" $$OPTS -signedjar "$@" "$<" "$$KEYNAME"
$(ANDROID_BUILD_TOOLS)/apksigner sign --in "$<" --out "$@" \
--ks "$$KEYSTORE" --ks-key-alias "$$KEYNAME" --ks-pass "pass:$$KEYSTOREPASS"
# Package
_build/%.unsigned-apk: _build/classes.dex $(MANIFEST_FILE) $(ASSETS_FILES)
_build/%.unsigned-apk: _build/%.unaligned-apk
$(ANDROID_BUILD_TOOLS)/zipalign -fp 4 "$<" "$@"
APK_EXTRA_FILES = classes.dex assets/special_font.ttf
_build/%.unaligned-apk: $(addprefix _build/,$(APK_EXTRA_FILES)) $(MANIFEST_FILE)
$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(MANIFEST_FILE) -S $(RES_DIR) \
-I $(ANDROID_PLATFORM)/android.jar -F "$@" $(AAPT_PACKAGE_FLAGS)
[ -z "$(ASSETS_FILES)" ] || $(ANDROID_BUILD_TOOLS)/aapt add "$@" $(ASSETS_FILES)
cd $(@D) && $(ANDROID_BUILD_TOOLS)/aapt add $(@F) classes.dex
cd $(@D) && $(ANDROID_BUILD_TOOLS)/aapt add $(@F) $(APK_EXTRA_FILES)
# Copy the special font file into _build because aapt requires relative paths
_build/assets/special_font.ttf: srcs/special_font/result.ttf
mkdir -p $(@D)
cp "$<" "$@"
# R.java
@@ -108,4 +129,11 @@ _build/classes.dex: $(JAVA_FILES) $(R_FILE)
-classpath $(ANDROID_PLATFORM)/android.jar:$(EXTRA_JARS) \
-sourcepath $(SRC_DIR):$(GEN_DIR) \
$^
$(ANDROID_BUILD_TOOLS)/dx --dex --output="$@" $(OBJ_DIR) $(subst :, ,$(EXTRA_JARS))
$(ANDROID_BUILD_TOOLS)/d8 --output $(@D) $(OBJ_DIR)/*/*/* $(subst :, ,$(EXTRA_JARS))
# Font file
FONT_GLYPHS = $(wildcard srcs/special_font/*.svg)
_build/special_font.ttf: srcs/special_font/build.pe $(FONT_GLYPHS)
fontforge -lang=ff -script $< "$@" $(FONT_GLYPHS)

View File

@@ -1,12 +1,26 @@
# Unexpected Keyboard
A lightweight virtual keyboard for developers.
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
alt="Get it on F-Droid"
height="80">](https://f-droid.org/packages/juloo.keyboard2/)
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png"
alt="Get it on Google Play"
height="80">](https://play.google.com/store/apps/details?id=juloo.keyboard2)
![Unexpected Keyboard](play_store/capture1.png)
Lightweight and privacy-conscious virtual keyboard for Android.
All the characters you might need are available on a single screen, as well as control, alt, escape and many others.
| <img src="/metadata/android/en-US/images/phoneScreenshots/1.png" alt="Screenshot-1" /> | <img src="/metadata/android/en-US/images/phoneScreenshots/2.png" alt="Screenshot-2"/> | <img src="/metadata/android/en-US/images/phoneScreenshots/3.png" alt="Screenshot-3"/> |
| --- | --- | --- |
| <img src="/metadata/android/en-US/images/phoneScreenshots/4.png" alt="Screenshot-4" /> | <img src="/metadata/android/en-US/images/phoneScreenshots/5.png" alt="Screenshot-5" /> | <img src="/metadata/android/en-US/images/phoneScreenshots/6.png" alt="Screenshot-6" /> |
Several characters are displayed on each key. Get the one in the middle with a press and the ones in the corners by sliding your finger.
The main feature is that you can type more characters by swiping the keys towards the corners.
Like any other keyboard app, you will need to activate it in the system settings to be able to use it.
This can be found in the System Settings > System > Languages & Input > Virtual keyboard > Manage keyboards.
This application was originally designed for programmers using Termux.
Now perfect for everyday use.
This application contains no ads, doesn't make any network requests and is Open Source.
## Contributing
For instructions on building the application, see
[Contributing](CONTRIBUTING.md).

Binary file not shown.

116
check_layout.output Normal file
View File

@@ -0,0 +1,116 @@
# res/xml/arab_alt.xml
Layout includes some ASCII punctuation but not all, missing: !, ", ', +, -, /, :, ;, <, =, >, ?, [, \, ], _, |, ~
1 warnings
# res/xml/arab_pc_ckb.xml
Layout includes some ASCII punctuation but not all, missing: ", %, ', +, ,, ., :, ;, <, =, >, ?, `, |, ~
1 warnings
# res/xml/arab_pc_ir.xml
Layout includes some ASCII punctuation but not all, missing: ", $, %, ', *, ,, /, ;, <, =, >, ?, [, \, ], ^, _, `, {, |, }, ~
1 warnings
# res/xml/arab_pc.xml
Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, |
1 warnings
# res/xml/beng_national.xml
Layout includes some ASCII punctuation but not all, missing: $
Layout doesn't specify a script.
2 warnings
# res/xml/beng_provat.xml
Layout includes some ASCII punctuation but not all, missing: $, &, *, ., /, <, >, [, \, ], `, {, |, }
Layout doesn't specify a script.
2 warnings
Not a layout file: res/xml/bottom_row.xml
# res/xml/cyrl_jcuken_ru.xml
0 warnings
# res/xml/cyrl_jcuken_uk.xml
0 warnings
# res/xml/cyrl_yaverti.xml
Layout includes some ASCII punctuation but not all, missing: ~
1 warnings
# res/xml/deva_alt.xml
Layout includes some ASCII punctuation but not all, missing: #, $, %, &, ', (, ), *, +, ., /, :, <, =, >, @, [, \, ], ^, _, `, {, |, }, ~
1 warnings
# res/xml/deva_inscript.xml
Layout includes some ASCII punctuation but not all, missing: ", $, ', ^, _, `, |
1 warnings
# 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
# res/xml/grek_qwerty.xml
0 warnings
# res/xml/hang_dubeolsik_kr.xml
0 warnings
# res/xml/hebr_1_il.xml
Layout includes some ASCII punctuation but not all, missing: (, ), <, >, [, ], {, }
1 warnings
# res/xml/hebr_2_il.xml
Layout includes some ASCII punctuation but not all, missing: (, ), <, >, [, ], {, }
1 warnings
# res/xml/latn_azerty_fr.xml
0 warnings
# res/xml/latn_bone.xml
Layout includes some ASCII punctuation but not all, missing: $
1 warnings
# res/xml/latn_colemak.xml
0 warnings
# res/xml/latn_dvorak.xml
0 warnings
# res/xml/latn_neo2.xml
0 warnings
# res/xml/latn_qwerty_br.xml
0 warnings
# res/xml/latn_qwerty_es.xml
0 warnings
# res/xml/latn_qwerty_hu.xml
0 warnings
# res/xml/latn_qwerty_lv.xml
0 warnings
# res/xml/latn_qwerty_no.xml
0 warnings
# res/xml/latn_qwerty_pl.xml
0 warnings
# res/xml/latn_qwerty_ro.xml
0 warnings
# res/xml/latn_qwerty_se.xml
0 warnings
# res/xml/latn_qwerty_tr.xml
0 warnings
# res/xml/latn_qwerty_us.xml
0 warnings
# res/xml/latn_qwerty_vi.xml
Layout includes some ASCII punctuation but not all, missing: \
1 warnings
# res/xml/latn_qwertz_cz_multifunctional.xml
Layout includes some ASCII punctuation but not all, missing: `
1 warnings
# res/xml/latn_qwertz_cz.xml
0 warnings
# res/xml/latn_qwertz_de.xml
0 warnings
# res/xml/latn_qwertz_hu.xml
0 warnings
# res/xml/latn_qwertz_sk.xml
Layout includes some ASCII punctuation but not all, missing: \, `
1 warnings
# res/xml/latn_qwertz.xml
0 warnings
Not a layout file: res/xml/method.xml
Not a layout file: res/xml/number_row.xml
# res/xml/numeric.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, switch_emoji, switch_numeric, switch_second
Layout doesn't specify a script.
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

75
check_layout.py Normal file
View File

@@ -0,0 +1,75 @@
import xml.etree.ElementTree as ET
import sys
warning_count = 0
def warn(msg):
global warning_count
print(msg)
warning_count += 1
def key_list_str(keys):
return ", ".join(sorted(list(keys)))
def missing_some_of(keys, symbols, class_name=None):
if class_name is None:
class_name = "of [" + ", ".join(symbols) + "]"
missing = set(symbols).difference(keys)
if len(missing) > 0 and len(missing) != len(symbols):
warn("Layout includes some %s but not all, missing: %s" % (
class_name, key_list_str(missing)))
def missing_required(keys, symbols, msg):
missing = set(symbols).difference(keys)
if len(missing) > 0:
warn("%s, missing: %s" % (msg, key_list_str(missing)))
def unexpected_keys(keys, symbols, msg):
unexpected = set(symbols).intersection(keys)
if len(unexpected) > 0:
warn("%s, unexpected: %s" % (msg, key_list_str(unexpected)))
def parse_layout(fname):
keys = set()
root = ET.parse(fname).getroot()
if root.tag != "keyboard":
return None
for row in root:
for key in row:
for attr in key.keys():
keys.add(key.get(attr).removeprefix("\\"))
return root, keys
def check_layout(layout):
root, keys = layout
missing_some_of(keys, "~!@#$%^&*(){}`[]=\\-_;:/.,?<>'\"+|", "ASCII punctuation")
missing_some_of(keys, "0123456789", "digits")
missing_some_of(keys, ["f11_placeholder", "f12_placeholder"])
missing_some_of(keys, ["esc", "tab"])
missing_required(keys, ["backspace", "delete"], "Layout doesn't define some important keys")
bottom_row_keys = [
"ctrl", "fn", "switch_numeric", "change_method", "switch_emoji",
"config", "switch_second", "enter", "action", "left", "up", "right",
"down", "space"
]
if root.get("bottom_row") == "false":
missing_required(keys, bottom_row_keys,
"Layout redefines the bottom row but some important keys are missing")
else:
unexpected_keys(keys, bottom_row_keys,
"Layout contains keys present in the bottom row")
if root.get("script") == None:
warn("Layout doesn't specify a script.")
for fname in sys.argv[1:]:
layout = parse_layout(fname)
if layout == None:
print("Not a layout file: %s" % fname)
else:
print("# %s" % fname)
warning_count = 0
check_layout(layout)
print("%d warnings" % warning_count)

View File

@@ -1,908 +0,0 @@
from enum import Enum
import sys
class Line(Enum):
IGNORE = 0
GROUP = 1
ENTRY = 2
def parse_line(line):
if line.startswith("# group:"):
return (Line.GROUP, line.split(":")[1].strip())
else:
lr = line.split("#", 1)
if lr[0] == "" or len(lr) != 2:
return (Line.IGNORE, line)
else:
code, status = lr[0].split(";", 1)
desc = lr[1].strip().split(" ", 2)[2]
return (Line.ENTRY, (code.strip(), status.strip(), desc))
def parse_lines(inp):
entries = {}
group = "none"
for line in inp:
tok, k = parse_line(line)
if tok == Line.GROUP:
group = k
elif tok == Line.ENTRY:
entries.setdefault(group, []).append(k)
return entries
name_map = {
"1F44D": ":+1:",
"1F44E": ":-1:",
"1F4AF": ":100:",
"1F522": ":1234:",
"1F3B1": ":8ball:",
"1F170": ":a:",
"1F18E": ":ab:",
"1F524": ":abc:",
"1F521": ":abcd:",
"1F251": ":accept:",
"1F6A1": ":aerial_tramway:",
"02708": ":airplane:",
"023F0": ":alarm_clock:",
"1F47D": ":alien:",
"1F691": ":ambulance:",
"02693": ":anchor:",
"1F47C": ":angel:",
"1F4A2": ":anger:",
"1F620": ":angry:",
"1F627": ":anguished:",
"1F41C": ":ant:",
"1F34E": ":apple:",
"02652": ":aquarius:",
"02648": ":aries:",
"025C0": ":arrow_backward:",
"023EC": ":arrow_double_down:",
"023EB": ":arrow_double_up:",
"02B07": ":arrow_down:",
"1F53D": ":arrow_down_small:",
"025B6": ":arrow_forward:",
"02935": ":arrow_heading_down:",
"02934": ":arrow_heading_up:",
"02B05": ":arrow_left:",
"02199": ":arrow_lower_left:",
"02198": ":arrow_lower_right:",
"027A1": ":arrow_right:",
"021AA": ":arrow_right_hook:",
"02B06": ":arrow_up:",
"02195": ":arrow_up_down:",
"1F53C": ":arrow_up_small:",
"02196": ":arrow_upper_left:",
"02197": ":arrow_upper_right:",
"1F503": ":arrows_clockwise:",
"1F504": ":arrows_counterclockwise:",
"1F3A8": ":art:",
"1F69B": ":articulated_lorry:",
"1F632": ":astonished:",
"1F45F": ":athletic_shoe:",
"1F3E7": ":atm:",
"1F171": ":b:",
"1F476": ":baby:",
"1F37C": ":baby_bottle:",
"1F424": ":baby_chick:",
"1F6BC": ":baby_symbol:",
"1F519": ":back:",
"1F6C4": ":baggage_claim:",
"1F388": ":balloon:",
"02611": ":ballot_box_with_check:",
"1F38D": ":bamboo:",
"1F34C": ":banana:",
"0203C": ":bangbang:",
"1F3E6": ":bank:",
"1F4CA": ":bar_chart:",
"1F488": ":barber:",
"026BE": ":baseball:",
"1F3C0": ":basketball:",
"1F6C0": ":bath:",
"1F6C1": ":bathtub:",
"1F50B": ":battery:",
"1F43B": ":bear:",
"1F41D": ":bee:",
"1F37A": ":beer:",
"1F37B": ":beers:",
"1F41E": ":beetle:",
"1F530": ":beginner:",
"1F514": ":bell:",
"1F371": ":bento:",
"1F6B4": ":bicyclist:",
"1F6B2": ":bike:",
"1F459": ":bikini:",
"1F426": ":bird:",
"1F382": ":birthday:",
"026AB": ":black_circle:",
"1F0CF": ":black_joker:",
"02B1B": ":black_large_square:",
"025FE": ":black_medium_small_square:",
"025FC": ":black_medium_square:",
"02712": ":black_nib:",
"025AA": ":black_small_square:",
"1F532": ":black_square_button:",
"1F33C": ":blossom:",
"1F421": ":blowfish:",
"1F4D8": ":blue_book:",
"1F699": ":blue_car:",
"1F499": ":blue_heart:",
"1F60A": ":blush:",
"1F417": ":boar:",
"026F5": ":boat:",
"1F4A3": ":bomb:",
"1F4D6": ":book:",
"1F516": ":bookmark:",
"1F4D1": ":bookmark_tabs:",
"1F4DA": ":books:",
"1F4A5": ":boom:",
"1F462": ":boot:",
"1F490": ":bouquet:",
"1F647": ":bow:",
"1F3B3": ":bowling:",
"1F466": ":boy:",
"1F35E": ":bread:",
"1F470": ":bride_with_veil:",
"1F309": ":bridge_at_night:",
"1F4BC": ":briefcase:",
"1F494": ":broken_heart:",
"1F41B": ":bug:",
"1F4A1": ":bulb:",
"1F685": ":bullettrain_front:",
"1F684": ":bullettrain_side:",
"1F68C": ":bus:",
"1F68F": ":busstop:",
"1F464": ":bust_in_silhouette:",
"1F465": ":busts_in_silhouette:",
"1F335": ":cactus:",
"1F370": ":cake:",
"1F4C6": ":calendar:",
"1F4F2": ":calling:",
"1F42B": ":camel:",
"1F4F7": ":camera:",
"0264B": ":cancer:",
"1F36C": ":candy:",
"1F520": ":capital_abcd:",
"02651": ":capricorn:",
"1F697": ":car:",
"1F4C7": ":card_index:",
"1F3A0": ":carousel_horse:",
"1F431": ":cat:",
"1F408": ":cat2:",
"1F4BF": ":cd:",
"1F4B9": ":chart:",
"1F4C9": ":chart_with_downwards_trend:",
"1F4C8": ":chart_with_upwards_trend:",
"1F3C1": ":checkered_flag:",
"1F352": ":cherries:",
"1F338": ":cherry_blossom:",
"1F330": ":chestnut:",
"1F414": ":chicken:",
"1F6B8": ":children_crossing:",
"1F36B": ":chocolate_bar:",
"1F384": ":christmas_tree:",
"026EA": ":church:",
"1F3A6": ":cinema:",
"1F3AA": ":circus_tent:",
"1F307": ":city_sunrise:",
"1F306": ":city_sunset:",
"1F191": ":cl:",
"1F44F": ":clap:",
"1F3AC": ":clapper:",
"1F4CB": ":clipboard:",
"1F550": ":clock1:",
"1F559": ":clock10:",
"1F565": ":clock1030:",
"1F55A": ":clock11:",
"1F566": ":clock1130:",
"1F55B": ":clock12:",
"1F567": ":clock1230:",
"1F55C": ":clock130:",
"1F551": ":clock2:",
"1F55D": ":clock230:",
"1F552": ":clock3:",
"1F55E": ":clock330:",
"1F553": ":clock4:",
"1F55F": ":clock430:",
"1F554": ":clock5:",
"1F560": ":clock530:",
"1F555": ":clock6:",
"1F561": ":clock630:",
"1F556": ":clock7:",
"1F562": ":clock730:",
"1F557": ":clock8:",
"1F563": ":clock830:",
"1F558": ":clock9:",
"1F564": ":clock930:",
"1F4D5": ":closed_book:",
"1F510": ":closed_lock_with_key:",
"1F302": ":closed_umbrella:",
"02601": ":cloud:",
"02663": ":clubs:",
"1F378": ":cocktail:",
"02615": ":coffee:",
"1F630": ":cold_sweat:",
"1F4A5": ":collision:",
"1F4BB": ":computer:",
"1F38A": ":confetti_ball:",
"1F616": ":confounded:",
"1F615": ":confused:",
"03297": ":congratulations:",
"1F6A7": ":construction:",
"1F477": ":construction_worker:",
"1F3EA": ":convenience_store:",
"1F36A": ":cookie:",
"1F192": ":cool:",
"1F46E": ":cop:",
"000A9": ":copyright:",
"1F33D": ":corn:",
"1F46B": ":couple:",
"1F491": ":couple_with_heart:",
"1F48F": ":couplekiss:",
"1F42E": ":cow:",
"1F404": ":cow2:",
"1F4B3": ":credit_card:",
"1F319": ":crescent_moon:",
"1F40A": ":crocodile:",
"1F38C": ":crossed_flags:",
"1F451": ":crown:",
"1F622": ":cry:",
"1F63F": ":crying_cat_face:",
"1F52E": ":crystal_ball:",
"1F498": ":cupid:",
"027B0": ":curly_loop:",
"1F4B1": ":currency_exchange:",
"1F35B": ":curry:",
"1F36E": ":custard:",
"1F6C3": ":customs:",
"1F300": ":cyclone:",
"1F483": ":dancer:",
"1F46F": ":dancers:",
"1F361": ":dango:",
"1F3AF": ":dart:",
"1F4A8": ":dash:",
"1F4C5": ":date:",
"1F333": ":deciduous_tree:",
"1F3EC": ":department_store:",
"1F4A0": ":diamond_shape_with_a_dot_inside:",
"02666": ":diamonds:",
"1F61E": ":disappointed:",
"1F625": ":disappointed_relieved:",
"1F4AB": ":dizzy:",
"1F635": ":dizzy_face:",
"1F6AF": ":do_not_litter:",
"1F436": ":dog:",
"1F415": ":dog2:",
"1F4B5": ":dollar:",
"1F38E": ":dolls:",
"1F42C": ":dolphin:",
"1F6AA": ":door:",
"1F369": ":doughnut:",
"1F409": ":dragon:",
"1F432": ":dragon_face:",
"1F457": ":dress:",
"1F42A": ":dromedary_camel:",
"1F4A7": ":droplet:",
"1F4C0": ":dvd:",
"1F4E7": ":e-mail:",
"1F442": ":ear:",
"1F33E": ":ear_of_rice:",
"1F30D": ":earth_africa:",
"1F30E": ":earth_americas:",
"1F30F": ":earth_asia:",
"1F373": ":egg:",
"1F346": ":eggplant:",
"02734": ":eight_pointed_black_star:",
"02733": ":eight_spoked_asterisk:",
"1F50C": ":electric_plug:",
"1F418": ":elephant:",
"02709": ":email:",
"1F51A": ":end:",
"02709": ":envelope:",
"1F4E9": ":envelope_with_arrow:",
"1F4B6": ":euro:",
"1F3F0": ":european_castle:",
"1F3E4": ":european_post_office:",
"1F332": ":evergreen_tree:",
"02757": ":exclamation:",
"1F611": ":expressionless:",
"1F453": ":eyeglasses:",
"1F440": ":eyes:",
"1F44A": ":facepunch:",
"1F3ED": ":factory:",
"1F342": ":fallen_leaf:",
"1F46A": ":family:",
"023E9": ":fast_forward:",
"1F4E0": ":fax:",
"1F628": ":fearful:",
"1F43E": ":feet:",
"1F3A1": ":ferris_wheel:",
"1F4C1": ":file_folder:",
"1F525": ":fire:",
"1F692": ":fire_engine:",
"1F386": ":fireworks:",
"1F313": ":first_quarter_moon:",
"1F31B": ":first_quarter_moon_with_face:",
"1F41F": ":fish:",
"1F365": ":fish_cake:",
"1F3A3": ":fishing_pole_and_fish:",
"0270A": ":fist:",
"1F38F": ":flags:",
"1F526": ":flashlight:",
"1F42C": ":flipper:",
"1F4BE": ":floppy_disk:",
"1F3B4": ":flower_playing_cards:",
"1F633": ":flushed:",
"1F301": ":foggy:",
"1F3C8": ":football:",
"1F463": ":footprints:",
"1F374": ":fork_and_knife:",
"026F2": ":fountain:",
"1F340": ":four_leaf_clover:",
"1F193": ":free:",
"1F364": ":fried_shrimp:",
"1F35F": ":fries:",
"1F438": ":frog:",
"1F626": ":frowning:",
"026FD": ":fuelpump:",
"1F315": ":full_moon:",
"1F31D": ":full_moon_with_face:",
"1F3B2": ":game_die:",
"1F48E": ":gem:",
"0264A": ":gemini:",
"1F47B": ":ghost:",
"1F381": ":gift:",
"1F49D": ":gift_heart:",
"1F467": ":girl:",
"1F310": ":globe_with_meridians:",
"1F410": ":goat:",
"026F3": ":golf:",
"1F347": ":grapes:",
"1F34F": ":green_apple:",
"1F4D7": ":green_book:",
"1F49A": ":green_heart:",
"02755": ":grey_exclamation:",
"02754": ":grey_question:",
"1F62C": ":grimacing:",
"1F601": ":grin:",
"1F600": ":grinning:",
"1F482": ":guardsman:",
"1F3B8": ":guitar:",
"1F52B": ":gun:",
"1F487": ":haircut:",
"1F354": ":hamburger:",
"1F528": ":hammer:",
"1F439": ":hamster:",
"0270B": ":hand:",
"1F45C": ":handbag:",
"1F4A9": ":hankey:",
"1F425": ":hatched_chick:",
"1F423": ":hatching_chick:",
"1F3A7": ":headphones:",
"1F649": ":hear_no_evil:",
"02764": ":heart:",
"1F49F": ":heart_decoration:",
"1F60D": ":heart_eyes:",
"1F63B": ":heart_eyes_cat:",
"1F493": ":heartbeat:",
"1F497": ":heartpulse:",
"02665": ":hearts:",
"02714": ":heavy_check_mark:",
"02797": ":heavy_division_sign:",
"1F4B2": ":heavy_dollar_sign:",
"02757": ":heavy_exclamation_mark:",
"02796": ":heavy_minus_sign:",
"02716": ":heavy_multiplication_x:",
"02795": ":heavy_plus_sign:",
"1F681": ":helicopter:",
"1F33F": ":herb:",
"1F33A": ":hibiscus:",
"1F506": ":high_brightness:",
"1F460": ":high_heel:",
"1F52A": ":hocho:",
"1F36F": ":honey_pot:",
"1F41D": ":honeybee:",
"1F434": ":horse:",
"1F3C7": ":horse_racing:",
"1F3E5": ":hospital:",
"1F3E8": ":hotel:",
"02668": ":hotsprings:",
"0231B": ":hourglass:",
"023F3": ":hourglass_flowing_sand:",
"1F3E0": ":house:",
"1F3E1": ":house_with_garden:",
"1F62F": ":hushed:",
"1F368": ":ice_cream:",
"1F366": ":icecream:",
"1F194": ":id:",
"1F250": ":ideograph_advantage:",
"1F47F": ":imp:",
"1F4E5": ":inbox_tray:",
"1F4E8": ":incoming_envelope:",
"1F481": ":information_desk_person:",
"02139": ":information_source:",
"1F607": ":innocent:",
"02049": ":interrobang:",
"1F4F1": ":iphone:",
"1F3EE": ":izakaya_lantern:",
"1F383": ":jack_o_lantern:",
"1F5FE": ":japan:",
"1F3EF": ":japanese_castle:",
"1F47A": ":japanese_goblin:",
"1F479": ":japanese_ogre:",
"1F456": ":jeans:",
"1F602": ":joy:",
"1F639": ":joy_cat:",
"1F511": ":key:",
"1F51F": ":keycap_ten:",
"1F458": ":kimono:",
"1F48B": ":kiss:",
"1F617": ":kissing:",
"1F63D": ":kissing_cat:",
"1F61A": ":kissing_closed_eyes:",
"1F618": ":kissing_heart:",
"1F619": ":kissing_smiling_eyes:",
"1F428": ":koala:",
"1F201": ":koko:",
"1F3EE": ":lantern:",
"1F535": ":large_blue_circle:",
"1F537": ":large_blue_diamond:",
"1F536": ":large_orange_diamond:",
"1F317": ":last_quarter_moon:",
"1F31C": ":last_quarter_moon_with_face:",
"1F606": ":laughing:",
"1F343": ":leaves:",
"1F4D2": ":ledger:",
"1F6C5": ":left_luggage:",
"02194": ":left_right_arrow:",
"021A9": ":leftwards_arrow_with_hook:",
"1F34B": ":lemon:",
"0264C": ":leo:",
"1F406": ":leopard:",
"0264E": ":libra:",
"1F688": ":light_rail:",
"1F517": ":link:",
"1F444": ":lips:",
"1F484": ":lipstick:",
"1F512": ":lock:",
"1F50F": ":lock_with_ink_pen:",
"1F36D": ":lollipop:",
"027BF": ":loop:",
"1F4E2": ":loudspeaker:",
"1F3E9": ":love_hotel:",
"1F48C": ":love_letter:",
"1F505": ":low_brightness:",
"024C2": ":m:",
"1F50D": ":mag:",
"1F50E": ":mag_right:",
"1F004": ":mahjong:",
"1F4EB": ":mailbox:",
"1F4EA": ":mailbox_closed:",
"1F4EC": ":mailbox_with_mail:",
"1F4ED": ":mailbox_with_no_mail:",
"1F468": ":man:",
"1F472": ":man_with_gua_pi_mao:",
"1F473": ":man_with_turban:",
"1F45E": ":mans_shoe:",
"1F341": ":maple_leaf:",
"1F637": ":mask:",
"1F486": ":massage:",
"1F356": ":meat_on_bone:",
"1F4E3": ":mega:",
"1F348": ":melon:",
"1F4DD": ":memo:",
"1F6B9": ":mens:",
"1F687": ":metro:",
"1F3A4": ":microphone:",
"1F52C": ":microscope:",
"1F30C": ":milky_way:",
"1F690": ":minibus:",
"1F4BD": ":minidisc:",
"1F4F4": ":mobile_phone_off:",
"1F4B8": ":money_with_wings:",
"1F4B0": ":moneybag:",
"1F412": ":monkey:",
"1F435": ":monkey_face:",
"1F69D": ":monorail:",
"1F314": ":moon:",
"1F393": ":mortar_board:",
"1F5FB": ":mount_fuji:",
"1F6B5": ":mountain_bicyclist:",
"1F6A0": ":mountain_cableway:",
"1F69E": ":mountain_railway:",
"1F42D": ":mouse:",
"1F401": ":mouse2:",
"1F3A5": ":movie_camera:",
"1F5FF": ":moyai:",
"1F4AA": ":muscle:",
"1F344": ":mushroom:",
"1F3B9": ":musical_keyboard:",
"1F3B5": ":musical_note:",
"1F3BC": ":musical_score:",
"1F507": ":mute:",
"1F485": ":nail_care:",
"1F4DB": ":name_badge:",
"1F454": ":necktie:",
"0274E": ":negative_squared_cross_mark:",
"1F610": ":neutral_face:",
"1F195": ":new:",
"1F311": ":new_moon:",
"1F31A": ":new_moon_with_face:",
"1F4F0": ":newspaper:",
"1F196": ":ng:",
"1F515": ":no_bell:",
"1F6B3": ":no_bicycles:",
"026D4": ":no_entry:",
"1F6AB": ":no_entry_sign:",
"1F645": ":no_good:",
"1F4F5": ":no_mobile_phones:",
"1F636": ":no_mouth:",
"1F6B7": ":no_pedestrians:",
"1F6AD": ":no_smoking:",
"1F6B1": ":non-potable_water:",
"1F443": ":nose:",
"1F4D3": ":notebook:",
"1F4D4": ":notebook_with_decorative_cover:",
"1F3B6": ":notes:",
"1F529": ":nut_and_bolt:",
"02B55": ":o:",
"1F17E": ":o2:",
"1F30A": ":ocean:",
"1F419": ":octopus:",
"1F362": ":oden:",
"1F3E2": ":office:",
"1F197": ":ok:",
"1F44C": ":ok_hand:",
"1F646": ":ok_woman:",
"1F474": ":older_man:",
"1F475": ":older_woman:",
"1F51B": ":on:",
"1F698": ":oncoming_automobile:",
"1F68D": ":oncoming_bus:",
"1F694": ":oncoming_police_car:",
"1F696": ":oncoming_taxi:",
"1F4D6": ":open_book:",
"1F4C2": ":open_file_folder:",
"1F450": ":open_hands:",
"1F62E": ":open_mouth:",
"026CE": ":ophiuchus:",
"1F4D9": ":orange_book:",
"1F4E4": ":outbox_tray:",
"1F402": ":ox:",
"1F4E6": ":package:",
"1F4C4": ":page_facing_up:",
"1F4C3": ":page_with_curl:",
"1F4DF": ":pager:",
"1F334": ":palm_tree:",
"1F43C": ":panda_face:",
"1F4CE": ":paperclip:",
"1F17F": ":parking:",
"0303D": ":part_alternation_mark:",
"026C5": ":partly_sunny:",
"1F6C2": ":passport_control:",
"1F43E": ":paw_prints:",
"1F351": ":peach:",
"1F350": ":pear:",
"1F4DD": ":pencil:",
"0270F": ":pencil2:",
"1F427": ":penguin:",
"1F614": ":pensive:",
"1F3AD": ":performing_arts:",
"1F623": ":persevere:",
"1F64D": ":person_frowning:",
"1F471": ":person_with_blond_hair:",
"1F64E": ":person_with_pouting_face:",
"0260E": ":phone:",
"1F437": ":pig:",
"1F416": ":pig2:",
"1F43D": ":pig_nose:",
"1F48A": ":pill:",
"1F34D": ":pineapple:",
"02653": ":pisces:",
"1F355": ":pizza:",
"1F447": ":point_down:",
"1F448": ":point_left:",
"1F449": ":point_right:",
"0261D": ":point_up:",
"1F446": ":point_up_2:",
"1F693": ":police_car:",
"1F429": ":poodle:",
"1F4A9": ":poop:",
"1F3E3": ":post_office:",
"1F4EF": ":postal_horn:",
"1F4EE": ":postbox:",
"1F6B0": ":potable_water:",
"1F45D": ":pouch:",
"1F357": ":poultry_leg:",
"1F4B7": ":pound:",
"1F63E": ":pouting_cat:",
"1F64F": ":pray:",
"1F478": ":princess:",
"1F44A": ":punch:",
"1F49C": ":purple_heart:",
"1F45B": ":purse:",
"1F4CC": ":pushpin:",
"1F6AE": ":put_litter_in_its_place:",
"02753": ":question:",
"1F430": ":rabbit:",
"1F407": ":rabbit2:",
"1F40E": ":racehorse:",
"1F4FB": ":radio:",
"1F518": ":radio_button:",
"1F621": ":rage:",
"1F683": ":railway_car:",
"1F308": ":rainbow:",
"0270B": ":raised_hand:",
"1F64C": ":raised_hands:",
"1F64B": ":raising_hand:",
"1F40F": ":ram:",
"1F35C": ":ramen:",
"1F400": ":rat:",
"0267B": ":recycle:",
"1F697": ":red_car:",
"1F534": ":red_circle:",
"000AE": ":registered:",
"0263A": ":relaxed:",
"1F60C": ":relieved:",
"1F501": ":repeat:",
"1F502": ":repeat_one:",
"1F6BB": ":restroom:",
"1F49E": ":revolving_hearts:",
"023EA": ":rewind:",
"1F380": ":ribbon:",
"1F35A": ":rice:",
"1F359": ":rice_ball:",
"1F358": ":rice_cracker:",
"1F391": ":rice_scene:",
"1F48D": ":ring:",
"1F680": ":rocket:",
"1F3A2": ":roller_coaster:",
"1F413": ":rooster:",
"1F339": ":rose:",
"1F6A8": ":rotating_light:",
"1F4CD": ":round_pushpin:",
"1F6A3": ":rowboat:",
"1F3C9": ":rugby_football:",
"1F3C3": ":runner:",
"1F3C3": ":running:",
"1F3BD": ":running_shirt_with_sash:",
"1F202": ":sa:",
"02650": ":sagittarius:",
"026F5": ":sailboat:",
"1F376": ":sake:",
"1F461": ":sandal:",
"1F385": ":santa:",
"1F4E1": ":satellite:",
"1F606": ":satisfied:",
"1F3B7": ":saxophone:",
"1F3EB": ":school:",
"1F392": ":school_satchel:",
"02702": ":scissors:",
"0264F": ":scorpius:",
"1F631": ":scream:",
"1F640": ":scream_cat:",
"1F4DC": ":scroll:",
"1F4BA": ":seat:",
"03299": ":secret:",
"1F648": ":see_no_evil:",
"1F331": ":seedling:",
"1F367": ":shaved_ice:",
"1F411": ":sheep:",
"1F41A": ":shell:",
"1F6A2": ":ship:",
"1F455": ":shirt:",
"1F4A9": ":shit:",
"1F45E": ":shoe:",
"1F6BF": ":shower:",
"1F4F6": ":signal_strength:",
"1F52F": ":six_pointed_star:",
"1F3BF": ":ski:",
"1F480": ":skull:",
"1F634": ":sleeping:",
"1F62A": ":sleepy:",
"1F3B0": ":slot_machine:",
"1F539": ":small_blue_diamond:",
"1F538": ":small_orange_diamond:",
"1F53A": ":small_red_triangle:",
"1F53B": ":small_red_triangle_down:",
"1F604": ":smile:",
"1F638": ":smile_cat:",
"1F603": ":smiley:",
"1F63A": ":smiley_cat:",
"1F608": ":smiling_imp:",
"1F60F": ":smirk:",
"1F63C": ":smirk_cat:",
"1F6AC": ":smoking:",
"1F40C": ":snail:",
"1F40D": ":snake:",
"1F3C2": ":snowboarder:",
"02744": ":snowflake:",
"026C4": ":snowman:",
"1F62D": ":sob:",
"026BD": ":soccer:",
"1F51C": ":soon:",
"1F198": ":sos:",
"1F509": ":sound:",
"1F47E": ":space_invader:",
"02660": ":spades:",
"1F35D": ":spaghetti:",
"02747": ":sparkle:",
"1F387": ":sparkler:",
"02728": ":sparkles:",
"1F496": ":sparkling_heart:",
"1F64A": ":speak_no_evil:",
"1F50A": ":speaker:",
"1F4AC": ":speech_balloon:",
"1F6A4": ":speedboat:",
"02B50": ":star:",
"1F31F": ":star2:",
"1F303": ":stars:",
"1F689": ":station:",
"1F5FD": ":statue_of_liberty:",
"1F682": ":steam_locomotive:",
"1F372": ":stew:",
"1F4CF": ":straight_ruler:",
"1F353": ":strawberry:",
"1F61B": ":stuck_out_tongue:",
"1F61D": ":stuck_out_tongue_closed_eyes:",
"1F61C": ":stuck_out_tongue_winking_eye:",
"1F31E": ":sun_with_face:",
"1F33B": ":sunflower:",
"1F60E": ":sunglasses:",
"02600": ":sunny:",
"1F305": ":sunrise:",
"1F304": ":sunrise_over_mountains:",
"1F3C4": ":surfer:",
"1F363": ":sushi:",
"1F69F": ":suspension_railway:",
"1F613": ":sweat:",
"1F4A6": ":sweat_drops:",
"1F605": ":sweat_smile:",
"1F360": ":sweet_potato:",
"1F3CA": ":swimmer:",
"1F523": ":symbols:",
"1F489": ":syringe:",
"1F389": ":tada:",
"1F38B": ":tanabata_tree:",
"1F34A": ":tangerine:",
"02649": ":taurus:",
"1F695": ":taxi:",
"1F375": ":tea:",
"0260E": ":telephone:",
"1F4DE": ":telephone_receiver:",
"1F52D": ":telescope:",
"1F3BE": ":tennis:",
"026FA": ":tent:",
"1F4AD": ":thought_balloon:",
"1F44E": ":thumbsdown:",
"1F44D": ":thumbsup:",
"1F3AB": ":ticket:",
"1F42F": ":tiger:",
"1F405": ":tiger2:",
"1F62B": ":tired_face:",
"02122": ":tm:",
"1F6BD": ":toilet:",
"1F5FC": ":tokyo_tower:",
"1F345": ":tomato:",
"1F445": ":tongue:",
"1F51D": ":top:",
"1F3A9": ":tophat:",
"1F69C": ":tractor:",
"1F6A5": ":traffic_light:",
"1F683": ":train:",
"1F686": ":train2:",
"1F68A": ":tram:",
"1F6A9": ":triangular_flag_on_post:",
"1F4D0": ":triangular_ruler:",
"1F531": ":trident:",
"1F624": ":triumph:",
"1F68E": ":trolleybus:",
"1F3C6": ":trophy:",
"1F379": ":tropical_drink:",
"1F420": ":tropical_fish:",
"1F69A": ":truck:",
"1F3BA": ":trumpet:",
"1F455": ":tshirt:",
"1F337": ":tulip:",
"1F422": ":turtle:",
"1F4FA": ":tv:",
"1F500": ":twisted_rightwards_arrows:",
"1F495": ":two_hearts:",
"1F46C": ":two_men_holding_hands:",
"1F46D": ":two_women_holding_hands:",
"1F239": ":u5272:",
"1F234": ":u5408:",
"1F23A": ":u55b6:",
"1F22F": ":u6307:",
"1F237": ":u6708:",
"1F236": ":u6709:",
"1F235": ":u6e80:",
"1F21A": ":u7121:",
"1F238": ":u7533:",
"1F232": ":u7981:",
"1F233": ":u7a7a:",
"02614": ":umbrella:",
"1F612": ":unamused:",
"1F51E": ":underage:",
"1F513": ":unlock:",
"1F199": ":up:",
"0270C": ":v:",
"1F6A6": ":vertical_traffic_light:",
"1F4FC": ":vhs:",
"1F4F3": ":vibration_mode:",
"1F4F9": ":video_camera:",
"1F3AE": ":video_game:",
"1F3BB": ":violin:",
"0264D": ":virgo:",
"1F30B": ":volcano:",
"1F19A": ":vs:",
"1F6B6": ":walking:",
"1F318": ":waning_crescent_moon:",
"1F316": ":waning_gibbous_moon:",
"026A0": ":warning:",
"0231A": ":watch:",
"1F403": ":water_buffalo:",
"1F349": ":watermelon:",
"1F44B": ":wave:",
"03030": ":wavy_dash:",
"1F312": ":waxing_crescent_moon:",
"1F314": ":waxing_gibbous_moon:",
"1F6BE": ":wc:",
"1F629": ":weary:",
"1F492": ":wedding:",
"1F433": ":whale:",
"1F40B": ":whale2:",
"0267F": ":wheelchair:",
"02705": ":white_check_mark:",
"026AA": ":white_circle:",
"1F4AE": ":white_flower:",
"02B1C": ":white_large_square:",
"025FD": ":white_medium_small_square:",
"025FB": ":white_medium_square:",
"025AB": ":white_small_square:",
"1F533": ":white_square_button:",
"1F390": ":wind_chime:",
"1F377": ":wine_glass:",
"1F609": ":wink:",
"1F43A": ":wolf:",
"1F469": ":woman:",
"1F45A": ":womans_clothes:",
"1F452": ":womans_hat:",
"1F6BA": ":womens:",
"1F61F": ":worried:",
"1F527": ":wrench:",
"0274C": ":x:",
"1F49B": ":yellow_heart:",
"1F4B4": ":yen:",
"1F60B": ":yum:",
"026A1": ":zap:",
"1F4A4": ":zzz:",
}
# Decode hex numbers separated by spaces into a string
def decode_points(code):
return "".join(map(lambda c: chr(int(c, 16)), code.split()))
def make_name(code):
return ":" + "".join(map(lambda c: "u" + c, code.split())) + ":"
# def fetch(url):
# return request.urlopen(url).read().decode().split("\n")
# https://unicode.org/Public/emoji/13.1/emoji-test.txt
with open(sys.argv[1]) as f:
entries = parse_lines(f)
def keep_emoji(e):
code, status, _ = e
code = code.split()
# Keep only interesting emojis (others are duplicates or won't render well)
# Remove skin tone variants, they are accessible through combinations
return status in [ "fully-qualified", "component" ] and \
not (len(code) > 1 and code[-1] in [ "1F3FB", "1F3FC", "1F3FD", "1F3FE", "1F3FF" ])
for group in entries.values():
group = list(filter(keep_emoji, group))
print("%d" % len(group))
for code, status, desc in group:
name = name_map[code] if code in name_map else make_name(code)
print("%s %s %s" % (name, decode_points(code), desc))

71
gen_layouts.py Normal file
View File

@@ -0,0 +1,71 @@
#!/usr/bin/env python
# Generates the list of layouts in res/values/layouts.xml from the layout files
# in res/xml. Every layouts must have a 'name' attribute to be listed.
import itertools as it
import sys, os, glob
import xml.etree.ElementTree as XML
# Layouts first in the list (these are the programming layouts). Other layouts
# are sorted alphabetically.
FIRST_LAYOUTS = [ "latn_qwerty_us", "latn_colemak", "latn_dvorak" ]
# File names that are known not to be layouts. Avoid warning about them.
KNOWN_NOT_LAYOUT = set([
"number_row", "numpad", "pin", "bottom_row", "settings", "method",
"greekmath", "numeric" ])
# Read a layout from a file. Returns [None] if [fname] is not a layout.
def read_layout(fname):
root = XML.parse(fname).getroot()
if root.tag != "keyboard":
return None
return { "name": root.get("name") }
# Yields the id (based on the file name) and the display name for every layouts
def read_layouts(files):
for layout_file in files:
layout_id, _ = os.path.splitext(os.path.basename(layout_file))
layout = read_layout(layout_file)
if layout_id in KNOWN_NOT_LAYOUT:
continue
elif layout == None:
print("Not a layout file: %s" % layout_file)
elif layout["name"] == None:
print("Layout doesn't have a name: %s" % layout_id)
else:
yield (layout_id, layout["name"])
# Sort layouts alphabetically, except for layouts in FIRST_LAYOUTS, which are
# placed at the top.
# Returns a list. 'layouts' can be an iterator.
def sort_layouts(layouts):
layouts = dict(layouts)
head = [ (lid, layouts.pop(lid)) for lid in FIRST_LAYOUTS ]
return head + sorted(layouts.items())
# Write the XML arrays used in the preferences.
def generate_arrays(out, layouts):
def mk_array(tag, name, strings_items):
elem = XML.Element(tag, name=name)
for s in strings_items:
item = XML.Element("item")
item.text = s
elem.append(item)
return elem
none_item = [ ("none", "None") ]
custom_item = [ ("custom", "@string/pref_layout_e_custom") ]
values_items, entries_items = zip(*(none_item + layouts + custom_item)) # unzip
ids_items = map(lambda s: "@xml/%s" % s if s not in ["none", "custom"] else "-1", values_items)
root = XML.Element("resources")
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_entries", entries_items))
root.append(mk_array("integer-array", "layout_ids", ids_items))
XML.indent(root)
XML.ElementTree(element=root).write(out, encoding="unicode", xml_declaration=True)
layouts = sort_layouts(read_layouts(glob.glob("res/xml/*.xml")))
with open("res/values/layouts.xml", "w") as out:
generate_arrays(out, layouts)

View File

@@ -0,0 +1,18 @@
Tato aplikace je virtuální klávesnící pro Android. Umožňuje rychlejší a plynulejší psaní písmen i symbolů (vč. diakritiky), a to ve vícero jazycích a vlastních rozloženích. To vše zdarma, bez reklam a bez plýtvání vašeho uložiště. Můžete psát libovolné znaky pomocí gest (ASCII i Unicode), používat mrtvé (univerzální) klávesy pro diakritická znaménka a mnohem více.
Klávesnice zobrazuje až 4 další znaky v rozích každé klávesy. Tyto znaky jsou vyvolány přejetím prstu do vybraného rohu.
No zkrátka...:
- Obsahuje každý znak a speciální klávesu, která je běžnou součástí počítačové klávesnice. To přijde vhod obzvláště při používání aplikací jako např. Termux
- Můžete používat modifikační klávesy, obohaceny o speciální klávesy (např. Tab, Esc, šipky, F klávesy, ale také Ctrl nebo Alt !)
- Můžete psát vícero jazyky rychleji a bez chyb. Diakritická znaménka mohou být vyvolána i za pomocí mrtvých kláves. Nejdříve zvolte diakritické znaménko a pak znak, který chcete obohatit o toto znaménko.
- Je vysoce nenáročná a rychlá. Zabere 500x méně místa než klávesnice od Googlu (Gboard) a 15x méně než výchozí klávesnice systému. Bez reklam, bez sledování.
- Má vícero rozložení: QWERTY, QWERTZ, AZERTY. Motivy: Bílá, Tmavá, OLED Černá. A mnoho dalších které si s drobnou znalostí programování můžete upravovat dle libosti.
Nezapomeňte... Jako každá virtuální klávesnice, i tato musí být aktivována v nastavení systému (zařízení). Otevřte (Systémové) Nastavení a přejděte na:
(Další nastavení NEBO Nastavení systému) > Jazyk & způsob zadávání > Spravovat klávesnice.

View File

@@ -0,0 +1 @@
Nenáročná virtuální klávesnice pro vývojáře.

View File

@@ -0,0 +1 @@
Klávesnice Unexpected

View File

@@ -0,0 +1,6 @@
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.
Mittlerweile ist sie auch für den täglichen Gebrauch perfekt geeignet.
Diese App enthält keine Werbung, benötigt keinen Netzwerkzugriff und ist quelloffen.

View File

@@ -0,0 +1 @@
Eine schlanke, datenschutzfreundliche Bildschirmtastatur für Android.

View File

@@ -0,0 +1 @@
Unexpected Keyboard

View File

@@ -1 +1 @@
First open-source release !
First open-source release!

View File

@@ -0,0 +1,3 @@
- Add support for Swedish
- Fix keyboard shortcuts not working in some applications
- Fix a graphical bug and add some tweaks

View File

@@ -0,0 +1,8 @@
New languages: German
New keyboard layouts: QWERTZ
Added themes: White, Dark and OLED Black
Added the Action key near the Enter key, required for some app.
Improved some options and fixed a few bugs.

View File

@@ -0,0 +1,8 @@
New languages: German
New keyboard layouts: QWERTZ
Added themes: White, Dark and OLED Black
Added the Action key near the Enter key, required for some app.
Improved some options and fixed a few bugs.

View File

@@ -0,0 +1,13 @@
New languages: Latvian (thanks @eandersons), Bulgarian (thanks Zdravko Iskrenov)
New layouts: Bulgarian traditional, Latvian
The application can now be translated.
Translations: French, Latvian (thanks @eandersons)
Improve the behavior of the Action key.
The globe key now opens the keyboard switching dialog.
The literal tab character can be typed with Fn+Tab.
Add options to control the spacing between the keys.
Better integration with the system theme.
Thanks to all the contributors: @Moini, @sdrapha, @eandersons, @Poussinou, Zdravko Iskrenov

View File

@@ -0,0 +1,13 @@
New languages: Portuguese (thanks @sdrapha), Russian (thanks @carrot-cookie), Spanish (thanks @gh0ste)
New layouts: Dvorak (thanks @AlexandraAlter), Russian Jcuken, Spanish Qwerty
Added the Meta key (the equivalent of the Win on Windows)
Added ordinal symbols on the number pane (thanks @sdrapha)
Better position for the arrow keys (thanks @MaxGyver83)
Improvements to some of the symbols (thanks @MaxGyver83, @Roy-Orbison)
Improvements to the layouts
Improvements to the key-repeat for arrows
Fixed Shift+Arrows for selecting text
Fixed dark theme bugs on Xiaomi phones
Thanks to all the contributors: @sdrapha, @MaxGyver83, @AlexandraAlter, @Roy-Orbison, @carrot-cookie, @gh0ste

View File

@@ -0,0 +1,5 @@
Improved text size, especially on large screens
Increased contrasts
Improved symbols (thanks @sdrapha)
German translation (thanks @polyctena)
Fix to some layouts.

View File

@@ -0,0 +1,21 @@
Translations: Brazilian portuguese (@igorSilCar), Chinese-Simplified (@9-2-1), Korean (@notnickid)
New layouts: Swedish (@thabubble), Korean (@notnickid)
Improved computation of the swipe gesture and fix unstoppable key-repeat on
some devices.
Moved keys away from the edges of the screen and other improvements to the layouts.
Improved rendering of some symbols.
Added more characters to the keyboard:
- New combinations to Fn (@ArenaL5)
- Currency symbols
- Added arrow and box symbols (@sdrapha)
- F11 and F12.
Option for making modifiers lockable. (@sdrapha)
Fixes to the Spanish layout and other fixes. (@ArenaL5)
Many other fixes.
Huge thanks to the contributors: @igorSilCar, @sdrapha, @ArenaL5, @notnickid, @9-2-1, @thabubble

View File

@@ -0,0 +1,25 @@
Quick fix release.
Previously:
Translations: Brazilian portuguese (@igorSilCar), Chinese-Simplified (@9-2-1), Korean (@notnickid)
New layouts: Swedish (@thabubble), Korean (@notnickid)
Improved computation of the swipe gesture and fix unstoppable key-repeat on
some devices.
Moved keys away from the edges of the screen and other improvements to the layouts.
Improved rendering of some symbols.
Added more characters to the keyboard:
- New combinations to Fn (@ArenaL5)
- Currency symbols
- Added arrow and box symbols (@sdrapha)
- F11 and F12.
Option for making modifiers lockable. (@sdrapha)
Fixes to the Spanish layout and other fixes. (@ArenaL5)
Many other fixes.
Huge thanks to the contributors: @igorSilCar, @sdrapha, @ArenaL5, @notnickid, @9-2-1, @thabubble

View File

@@ -0,0 +1,4 @@
Fix compatibility with Android 6.
Translation improvements.
Huge thanks to the contributors: @marciozomb13

View File

@@ -0,0 +1,7 @@
Support languages: Lithuanian, Hungarian (@tbilles)
New layouts: Neo2 (@matthiakl)
Translation improvements (@polyctena, @marciozomb13)
Fix modifiers applied twice when typing quickly. Some other fixes.
Many thanks to the contributors: @matthiakl, @polyctena, @marciozomb13, @dircsem

View File

@@ -0,0 +1,9 @@
New languages: Turkish (@erqan), Dutch (Belgium) (@draxaris1010)
New layouts: Turkish (@erqan), Colemak (@dircsem), Hungarian QWERTY
Less typos: Select the closest key on swipe (@Rodrigodd)
Removed settings: Vibration, Show every accents
More tweaks to the layouts
Fixes to landscape mode, updated translations and more tweaks.
Thanks to the contributors: @erqan, @draxaris1010, @dircsem, @Rodrigodd, @meanindra

View File

@@ -0,0 +1,5 @@
Add back the vibration option.
Fix localized keys not in predefined positions.
Improvements to layouts.
Thanks to the contributors: @Thunder-Squirrel

View File

@@ -0,0 +1,12 @@
New supported languages: Polish, Ukrainian, Bengali, Norwegian
New layouts: Ukrainian, Bengali, Norwegian, Bone, Czech
New translations: Brazilian Portuguese, Italian, Russian, Czech
Hold modifiers to lock, double tap on shift disabled by default.
Option to add more keys to the keyboard.
Automatic capitalisation at beginning of sentences.
Added e-ink oriented theme.
New pane for greek letters and mathematical symbols.
Improvements to the layouts and various bug fixes.
Thanks to the contributors: @nanno, @Quantenzitrone, @eandersons, @iamrasel, @ChristianGynnild, @igorSilCar, @CastixGitHub, @94KONG, @ptrm, @Validbit

View File

@@ -0,0 +1,7 @@
New supported languages: Hindi, Greek
Disable fullscreen mode.
Improvements to layouts and translations.
Various fixes and improvements.
Thanks to the contributors: @sdrapha, @lpv11, @Raj9039852537, @polyctena

View File

@@ -0,0 +1,11 @@
New layouts: QWERTZ (Deutsch)
Add optional numpad for wide screens.
Add pin entry layout for numbers.
Remove option "Lockable modifiers".
Hide Alt and Meta keys by default.
Added more optional keys.
Allow typing password on boot.
Improvements to the layouts and bug fixes.
Thanks to the contributors: @geroxyz

View File

@@ -0,0 +1,6 @@
Updated translations: Latvian
Fix crash when typing device password
Increase target SDK version to 31
Thanks to the contributors: @eandersons

View File

@@ -0,0 +1,10 @@
New layouts: QWERTY (Polski)
Allow switching quickly between two layouts.
Allow choosing opacity of the keyboard.
Improved themes and rendering.
Updated translations.
Fixed key repeat bug when holding 3 keys.
Tweaked the swipe gesture. Added some options.
Thanks to the contributors: @9-2-1, @ChasmSolacer

View File

@@ -0,0 +1 @@
Bug fix release.

View File

@@ -0,0 +1,7 @@
New layouts: QWERTZ (Slovak)
Bugs fixed.
Updated translations.
Tweaked themes and settings.
Thanks to the contributors: Jozef Kundlak, @MAKI1LOVE

View File

@@ -0,0 +1,10 @@
New translations: Vietnamese
New layouts: Hebrew, Vietnamese
Move the cursor by sliding on the space bar.
New ePaper theme.
Added number row.
Option to switch to the previous keyboard.
Updated translations.
Thanks to the contributors: @K4zoku, @rVnPower, @RamKromberg, @MAKI1LOVE

View File

@@ -0,0 +1,7 @@
New layouts: Arabic, Devanagari
Updated translations.
Updated layouts.
Bugs fixed.
Thanks to the contributors: @ChasmSolacer, @mostafaayesh, @lrvideckis, @eandersons, @mscheidemann, @JackDotJS

View File

@@ -0,0 +1,3 @@
Bug fixes.
Thanks to the contributors: @doak

View File

@@ -0,0 +1,9 @@
New layouts: Persian, Kurdish, Bengali Provat, Romanian, Czech
New languages support: Icelandic
Updated translations: Polish, Latvian, Russian, German, Vietnamese, Farsi, Brazilian, French, Simplified Chinese, Romanian
Voice typing shortcut (can be disabled in settings).
Improved vibration settings.
Many bug fixes and improvements.
Thanks to the contributors: @ChasmSolacer, @eandersons, @MAKI1LOVE, @Moini, @polyctena, @rVnPower, @RZHSSNZDH, @vladgba, @marciozomb13, @GoRaN909, @9-2-1, @shmVirus, @GrimPixel, @frimdo

View File

@@ -1,6 +1,6 @@
All the characters you might need are available on a single screen, as well as control, alt, escape and many others.
The main feature is that you can type more characters by swiping the keys towards the corners.
Several characters are displayed on each key. Get the one in the middle with a press and the ones in the corners by sliding your finger.
This application was originally designed for programmers using Termux.
Now perfect for everyday use.
Like any other keyboard app, you will need to activate it in the system settings to be able to use it.
This can be found in the System Settings > System > Languages & Input > Virtual keyboard > Manage keyboards.
This application contains no ads, doesn't make any network requests and is Open Source.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -1 +1 @@
A lightweight virtual keyboard for developers.
Lightweight and privacy-conscious virtual keyboard for Android.

View File

@@ -0,0 +1 @@
Un teclado virtual ligero para desarrolladores.

View File

@@ -0,0 +1 @@
Unexpected Keyboard

View File

@@ -1,3 +0,0 @@
- Ajout de l'Espagnol et l'Italien
- Nouvel emplacement pour les accents (encore) et ajout de nouveaux caratères
- Correction de bugs (un crash sur d'anciennes versions d'Android et un rare glitch graphique après une rotation)

View File

@@ -1 +0,0 @@
Première version open-source !

View File

@@ -1,3 +1,6 @@
Tous les caractères dont vous pourriez avoir besoin sont disponibles sur un seul écran, ainsi que les touches control, alt, escape et bien d'autres.
La fonctionnalité principale est l'accès rapide à plus de caractères en balayant les touches vers les coins.
Plusieurs caractères sont affichés sur chaque touche. Tapez celui du milieu par une simple pression et ceux des coins en faisant glisser votre doigt.
Cette application a été conçue à l'origine pour les programmeurs utilisant Termux.
Elle est maintenant parfaite pour une utilisation quotidienne.
Cette application ne contient pas de publicité, n'accède pas au réseau et est Open Source.

View File

@@ -1 +1 @@
Le meilleur clavier pour les développeurs.
Clavier virtuel léger et respectueux de la vie privée pour Android.

View File

@@ -0,0 +1 @@
Una Tastiera Virtuale Leggera Per La Programmazione

View File

@@ -0,0 +1 @@
Unexpected Keyboard

View File

@@ -0,0 +1,18 @@
이 앱은 안드로이드용 가상 키보드입니다. 주요 기능은 스와이프 제스처를 사용하여 모든 ASCII 문자를 쉽게 입력할 수 있다는 점과 악센트 및 수정자 키를 위한 데드 키와 특수 키(tab, esc, 방향키 등)이 있다는 것입니다.
키보드는 각 키의 모서리에 최대 4개의 추가 문자를 표시합니다. 이러한 추가 문자는 키에서 손가락을 스와이프하여 적중됩니다.
일부 하이라이트 기능:
- PC 키보드에서 사용할 수 있는 모든 문자 및 특수 키를 사요 가능합니다. 이것은 Termux와 같은 앱을 사용하는 데 효과적입니다.
- 여기에는 Tab, Esc, 방향키 및 function 키뿐만이 아닌 Ctrl 및 Alt 키도 포함되어 있습니다 !
- 악센트 키는 데드 키를 사용하여 액세스할 수 있습니다. 먼저 악센트 키를 활성화한 다음 악센트 문자를 입력합니다.
- 매우 가볍고 빠릅니다. Google 키보드보다 500배, 기본 키보드보다 15배 적은 공간을 사용합니다. 광고와 사용 기록 추적 없음.
- 다중 레이아웃: QWERTY, QWERTZ, AZERTY. 다양한 테마: White, Dark, OLED Black. 또한 다른 많은 옵션들.
다른 가상 키보드와 마찬가지로 시스템 설정에서 활성화해야 합니다. 시스템 설정을 열고 다음으로 이동합니다.
시스템 > 언어 및 입력 > 키보드 > 키보드 관리.

View File

@@ -0,0 +1 @@
개발자들을 위한 가벼운 가상 키보드.

View File

@@ -0,0 +1 @@
Unexpected Keyboard

View File

@@ -0,0 +1,6 @@
Galvenā iezīme ir iespēja ievadīt vairāk rakstzīmju ar pavilkšanu uz taustiņu stūriem.
Šī lietotne sākotnēji tika izstrādāta programmētājiem, kas izmanto Termux.
Tagad lieliski piemērota izmantošanai ikdienā.
Šī lietotne nesatur reklāmas, neveic nekādus tīkla pieprasījumus, un tās pirmkods ir pieejams visiem.

View File

@@ -0,0 +1 @@
Mazizmēra un privātumu ievērojoša virtuālā Android tastatūra.

View File

@@ -0,0 +1,6 @@
Główną cechą tej klawiatury jest możliwość wprowadzania więcej znaków poprzez przesuwanie po klawiszach do ich rogów.
Ta aplikacja została pierwotnie zaprojektowana z myślą o programistach używających Termuxa.
Obecnie nadaje się doskonale do codziennego użytku.
Aplikacja nie zawiera reklam, nie żąda dostępu do internetu, a jej kod źródłowy jest dostępny publicznie.

View File

@@ -0,0 +1 @@
Lekka i dbająca o prywatność klawiatura wirtualna dla Androida.

View File

@@ -0,0 +1,18 @@
Um teclado virtual para aparelhos Android. Os recursos principais são facilidade de digitar todos os caracteres ASCII deslizando o dedo, teclas "mortas" para acentos e teclas modificadoras e a presença de teclas especiais (tab, esc, setas, etc..).
O teclado mostra até 4 caracteres extras nos cantos de cada tecla. Esses caracteres são digitáveis com o deslizar do dedo na tecla.
Alguns dos recursos interessantes:
- Todos caracteres e teclas especiais que também estão disponíveis num teclado de PC. Perfeito para usar com aplicativos como Termux.
- Incluindo Tab, Esc, as setas e teclas de função, e também Ctrl e Alt!
- Caracteres acentuados são digitáveis usando teclas "mortas". Primeiro ative o acento e depois digite a letra.
- Muito leve e rápido. Ocupa 500x menos espaço que o teclado da Google e 15x menos espaço que o teclado padrão. Sem propaganda, sem rastreio.
- Vários layouts: QWERTY, QWERTZ, AZERTY. Temas: Branco, Escuro, Preto OLED. E muitas outras opções.
Como qualquer outro teclado virtual, tem de ser ativado nas configurações de sistema. Abra as configurações e vá para:
Sistema > Idioma e entrada > Teclado virtual > Gerenciar teclados virtuais.

View File

@@ -0,0 +1 @@
Um teclado virtual leve para desenvolvedores.

View File

@@ -0,0 +1 @@
Teclado Unexpected

View File

@@ -0,0 +1,6 @@
Funcționalitatea principală este accesul rapid la o mulțime de caractere ASCII prin glisarea către colțurile tastelor.
Această aplicație a fost concepută inițial pentru programatori care folosec Termux.
Este perfectă pentru uzul cotidian.
Această aplicație nu conține publicitate, nu folosește rețeaua deloc și e Open Source.

View File

@@ -0,0 +1 @@
Tastatură virtuală pentru Android, ușoară și respectuoasă cu viața privată.

View File

@@ -0,0 +1 @@
Unexpected Keyboard

View File

@@ -0,0 +1,6 @@
Главная особенность клавиатуры - это возможность легко напечатать любой ASCII символ за счет свайпов в углы клавиш.
Приложение изначально было разработано для использования Termux.
На данный момент, оно также удобно в повседневном использовании.
Приложение не содержит рекламы, не осуществляет никаких запросов в сеть и имеет открытый исходный код.

View File

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

View File

@@ -0,0 +1 @@
Unexpected Keyboard

View File

@@ -0,0 +1,6 @@
Chức năng chính là dễ dàng gõ nhiều ký tự bằng cách kéo phím về góc của nó.
Ứng dụng này ban đầu được thiết kế cho các lập trình viên dùng Termux.
Bây giờ đã hoàn hảo cho việc sử dụng hàng ngày.
Ứng dụng này không chứa quảng cáo, không cần đến mạng, và có mã nguồn mở.

View File

@@ -0,0 +1 @@
Bàn phím ảo gọn nhẹ và tôn trọng quyền riêng tư cho Android.

View File

@@ -1,38 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:hardwareAccelerated="false">
<juloo.keyboard2.EmojiGroupButtonsBar
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<juloo.keyboard2.EmojiGridView
android:id="@+id/emoji_grid"
android:background="@color/bg"
android:layout_width="fill_parent"
android:layout_height="@dimen/emoji_grid_height"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<juloo.keyboard2.EmojiKeyButton
style="@style/emojiKeyButton"
key="switch_back_emoji"
/>
<juloo.keyboard2.EmojiKeyButton
style="@style/emojiKeyButton"
android:layout_weight="4"
key="space"
/>
<juloo.keyboard2.EmojiKeyButton
style="@style/emojiKeyButton"
key="backspace"
/>
<juloo.keyboard2.EmojiKeyButton
style="@style/emojiKeyButton"
key="enter"
/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:hardwareAccelerated="false">
<juloo.keyboard2.EmojiGroupButtonsBar android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
<juloo.keyboard2.EmojiGridView android:id="@+id/emoji_grid" android:layout_width="fill_parent" android:layout_height="@dimen/emoji_grid_height" android:orientation="vertical" android:numColumns="auto_fit" android:columnWidth="45sp" android:background="?attr/colorKeyboard"/>
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" key="switch_back_emoji"/>
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" android:layout_weight="4" key="space"/>
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" key="backspace"/>
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" key="enter"/>
</LinearLayout>
</LinearLayout>

View File

@@ -1,5 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<juloo.keyboard2.Keyboard2View xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/bg"
android:hardwareAccelerated="false"
/>
<juloo.keyboard2.Keyboard2View xmlns:android="http://schemas.android.com/apk/res/android" android:hardwareAccelerated="false" android:background="?attr/colorKeyboard"/>

View File

@@ -0,0 +1,8 @@
<?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="vertical">
<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"/>
<TextView style="@style/paragraph" android:text="@string/launcher_sourcecode" android:autoLink="web"/>
<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"/>
</LinearLayout>

85
res/values-cs/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Klávesnice Unexpected (pro ladění)</string>
<string name="app_name" product="default">Klávesnice Unexpected</string>
<string name="settings_activity_label">Nastavení Klávesnice Unexpected</string>
<!-- <string name="pref_portrait">In portrait mode</string> -->
<!-- <string name="pref_landscape">In landscape mode</string> -->
<string name="pref_category_layout">Rozvržení</string>
<!-- <string name="pref_label_brightness">Adjust label brightness</string> -->
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
<!-- <string name="pref_key_opacity">Adjust key opacity</string> -->
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> -->
<string name="pref_layout_title">Změnit rozvržení klávesnice</string>
<string name="pref_layout_e_system">V nastavení systému</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
<string name="pref_accents_title">(Univerzální) Diakritická znaménka</string>
<string name="pref_accents_e_all_installed">Zobrazovat znaménka pro všechny instalované systémové jazyky</string>
<string name="pref_accents_e_selected">Zobrazovat znaménka pouze pro současně zvolený jazyk</string>
<string name="pref_accents_e_none">Skrýt (univerzální) diakritická znaménka</string>
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
<!-- <string name="pref_show_numpad_never">Never</string> -->
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
<!-- <string name="pref_show_numpad_always">Always</string> -->
<!-- <string name="pref_number_row_title">Show number row</string> -->
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
<!-- <string name="pref_extra_keys_title">Add keys to the keyboard</string> -->
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
<string name="pref_second_layout_none">Žádné</string>
<string name="pref_category_typing">Psaní</string>
<string name="pref_swipe_dist_title">Vzdálenost posunutí prstem</string>
<string name="pref_swipe_dist_summary">Jak daleko je třeba posunout prst pro napsaní znaku/diakritiky v rozích klávey (%s)</string>
<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_lock_double_tap_title">Dvojklik pro aktivaci caps lock(u)</string>
<string name="pref_lock_double_tap_summary">Dvojklik namísto držení modifikačních kláves po nějakou dobu</string>
<!-- <string name="pref_category_behavior">Behavior</string> -->
<string name="pref_autocapitalisation_title">Automatická kapitalizace</string>
<string name="pref_autocapitalisation_summary">Stiskne Shift na začátku věty</string>
<!-- <string name="pref_switch_input_immediate_title">Switch to the last used keyboard</string> -->
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">Vibrace</string>
<string name="pref_vibrate_summary">Zapnout/Vypnout vibrace při stisku klávesy</string>
<string name="pref_category_style">Styl</string>
<string name="pref_margin_bottom_title">Spodní odsazení</string>
<string name="pref_keyboard_height_title">Výška klávesnice</string>
<string name="pref_horizontal_margin_title">Boční odsazení</string>
<string name="pref_character_size_title">Velikost znaků</string>
<string name="pref_character_size_summary">Velikost znaků zobrazených na klávesnici (%.2fx)</string>
<string name="pref_theme">Motiv</string>
<string name="pref_theme_e_system">Dle systému</string>
<string name="pref_theme_e_dark">Tmavý</string>
<string name="pref_theme_e_light">Světlý</string>
<string name="pref_theme_e_black">Černý</string>
<!-- <string name="pref_theme_e_altblack">Alternative Black</string> -->
<!-- <string name="pref_theme_e_white">White</string> -->
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
<string name="pref_swipe_dist_e_very_short">Velmi krátká</string>
<string name="pref_swipe_dist_e_short">Krátká</string>
<string name="pref_swipe_dist_e_default">Běžná</string>
<string name="pref_swipe_dist_e_far">Dlouhá</string>
<string name="pref_swipe_dist_e_very_far">Velmi dlouhá</string>
<string name="pref_key_horizontal_space">Horizontální mezery mezi klávesami</string>
<string name="pref_key_vertical_space">Vertikální mezery mezi klávesami</string>
<!-- <string name="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_system">System</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_done">Dokončit</string>
<string name="key_action_go">Spustit</string>
<string name="key_action_prev">Předchozí</string>
<string name="key_action_search">Hledat</string>
<string name="key_action_send">Odeslat</string>
<!-- <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_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_tryhere">After enabling, you can try the keyboard here:</string> -->
</resources>

85
res/values-de/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (Debug)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Unexpected Keyboard - Einstellungen</string>
<string name="pref_portrait">Im Hochformatmodus</string>
<string name="pref_landscape">Im Querformatmodus</string>
<string name="pref_category_layout">Layout</string>
<string name="pref_label_brightness">Helligkeit der Beschriftung 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_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_custom">Eigenes Layout</string>
<string name="pref_accents_title">Akzente</string>
<string name="pref_accents_e_all_installed">Akzente für alle installierten Sprachen anzeigen</string>
<string name="pref_accents_e_selected">Akzente nur für die gewählte Sprache anzeigen</string>
<string name="pref_accents_e_none">Akzente verbergen</string>
<string name="pref_show_numpad_title">Ziffernblock anzeigen</string>
<string name="pref_show_numpad_never">Nie</string>
<string name="pref_show_numpad_landscape">Nur im Querformat</string>
<string name="pref_show_numpad_always">Immer</string>
<string name="pref_number_row_title">Zahlenreihe anzeigen</string>
<string name="pref_number_row_summary">Eine Zahlenreihe oben an der Tastatur hinzufügen, wenn der Ziffernblock ausgeblendet ist</string>
<string name="pref_numpad_layout">Zahlenblock-Layout</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_extra_keys_title">Zusätzliche Zeichen zur Tastatur hinzufügen</string>
<string name="pref_second_layout_title">Zweites Layout</string>
<string name="pref_second_layout_none">Keines</string>
<string name="pref_category_typing">Tippen</string>
<string name="pref_swipe_dist_title">Länge der Wischgeste</string>
<string name="pref_swipe_dist_summary">Abstand der Zeichen in den Ecken der Tasten (%s)</string>
<string name="pref_long_timeout_title">Zeitüberschreitung bei Tastenwiederholung</string>
<string name="pref_long_interval_title">Intervall der Tastenwiederholung</string>
<string name="pref_lock_double_tap_title">Umschalttaste mit Doppeltippen einrasten</string>
<string name="pref_lock_double_tap_summary">Anstatt Taste längere Zeit gedrückt zu halten</string>
<string name="pref_category_behavior">Verhalten</string>
<string name="pref_autocapitalisation_title">Automatische Großschreibung</string>
<string name="pref_autocapitalisation_summary">Umschalttaste am Satzanfang aktivieren</string>
<string name="pref_switch_input_immediate_title">Sofort zur nächsten Tastatur wechseln</string>
<string name="pref_switch_input_immediate_summary">Verhalten der Tastaturumschalttaste</string>
<string name="pref_vibrate_title">Vibration</string>
<string name="pref_vibrate_summary">Vibration bei Tastendruck ein-/ausschalten</string>
<string name="pref_category_style">Design</string>
<string name="pref_margin_bottom_title">Unterer Abstand</string>
<string name="pref_keyboard_height_title">Höhe der Tastatur</string>
<string name="pref_horizontal_margin_title">Horizontaler Abstand</string>
<string name="pref_character_size_title">Größe der Beschriftung</string>
<string name="pref_character_size_summary">Größe der Buchstaben auf den Tasten (%.2fx)</string>
<string name="pref_theme">Thema</string>
<string name="pref_theme_e_system">Systemeinstellung</string>
<string name="pref_theme_e_dark">Dunkel</string>
<string name="pref_theme_e_light">Hell</string>
<string name="pref_theme_e_black">Schwarz</string>
<string name="pref_theme_e_altblack">Alternatives Schwarz</string>
<string name="pref_theme_e_white">Weiß</string>
<string name="pref_theme_e_epaper">ePaper</string>
<string name="pref_swipe_dist_e_very_short">Sehr kurz</string>
<string name="pref_swipe_dist_e_short">Kurz</string>
<string name="pref_swipe_dist_e_default">Normal</string>
<string name="pref_swipe_dist_e_far">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_vertical_space">Vertikaler Abstand zwischen den Tasten</string>
<string name="pref_category_advanced">Erweitert</string>
<string name="pref_custom_layout_title">Eigenes Layout</string>
<string name="pref_custom_layout_summary">Bitte Sourcecode ansehen. Diese Option ist nicht zur Verwendung vorgesehen.</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</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_done">Fertig</string>
<string name="key_action_go">Los</string>
<string name="key_action_prev">Vorheriges</string>
<string name="key_action_search">Suchen</string>
<string name="key_action_send">Senden</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_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_tryhere">Nach Aktivierung kannst du die Tastatur hier ausprobieren:</string>
</resources>

85
res/values-es/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- <string name="app_name" product="debug">Unexpected Keyboard (debug)</string> -->
<!-- <string name="app_name" product="default">Unexpected Keyboard</string> -->
<string name="settings_activity_label">Ajustes de Unexpected Keyboard</string>
<!-- <string name="pref_portrait">In portrait mode</string> -->
<!-- <string name="pref_landscape">In landscape mode</string> -->
<string name="pref_category_layout">Formato</string>
<!-- <string name="pref_label_brightness">Adjust label brightness</string> -->
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
<!-- <string name="pref_key_opacity">Adjust key opacity</string> -->
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> -->
<string name="pref_layout_title">Cambiar formato de teclado</string>
<string name="pref_layout_e_system">Ajustes del sistema</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
<string name="pref_accents_title">Acentos</string>
<string name="pref_accents_e_all_installed">Mostrar acentos para todos los lenguajes instalados</string>
<string name="pref_accents_e_selected">Solo mostrar acentos para el lenguaje seleccionado</string>
<string name="pref_accents_e_none">Ocultar acentos</string>
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
<!-- <string name="pref_show_numpad_never">Never</string> -->
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
<!-- <string name="pref_show_numpad_always">Always</string> -->
<!-- <string name="pref_number_row_title">Show number row</string> -->
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
<!-- <string name="pref_extra_keys_title">Add keys to the keyboard</string> -->
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
<!-- <string name="pref_second_layout_none">None</string> -->
<string name="pref_category_typing">Escribiendo</string>
<string name="pref_swipe_dist_title">Distancia para deslizar</string>
<string name="pref_swipe_dist_summary">Distancia de caracteres en las esquinas de las letras (%s)</string>
<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_lock_double_tap_title">Double tap on shift for caps lock</string> -->
<!-- <string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string> -->
<!-- <string name="pref_category_behavior">Behavior</string> -->
<!-- <string name="pref_autocapitalisation_title">Automatic capitalisation</string> -->
<!-- <string name="pref_autocapitalisation_summary">Press Shift at the beginning of a sentence</string> -->
<!-- <string name="pref_switch_input_immediate_title">Switch to the last used keyboard</string> -->
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">Vibración</string>
<string name="pref_vibrate_summary">Habilitar/deshabilitar vibración al presionar una tecla</string>
<string name="pref_category_style">Estilo</string>
<string name="pref_margin_bottom_title">Margen del pie</string>
<string name="pref_keyboard_height_title">Altura del teclado</string>
<string name="pref_horizontal_margin_title">Margen horizontal</string>
<string name="pref_character_size_title">Tamaño de etiqueta</string>
<string name="pref_character_size_summary">Tamaño de caracteres mostrados en el teclado (%.2fx)</string>
<string name="pref_theme">Tema</string>
<string name="pref_theme_e_system">Ajustes de sistema</string>
<string name="pref_theme_e_dark">Oscuro</string>
<string name="pref_theme_e_light">Claro</string>
<string name="pref_theme_e_black">Negro</string>
<!-- <string name="pref_theme_e_altblack">Alternative Black</string> -->
<!-- <string name="pref_theme_e_white">White</string> -->
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
<string name="pref_swipe_dist_e_very_short">Muy corto</string>
<string name="pref_swipe_dist_e_short">Corto</string>
<string name="pref_swipe_dist_e_default">Normal</string>
<string name="pref_swipe_dist_e_far">Lejano</string>
<string name="pref_swipe_dist_e_very_far">Muy lejano</string>
<string name="pref_key_horizontal_space">Espaciado horizontal entre las teclas</string>
<string name="pref_key_vertical_space">Espaciado vertical entre las teclas</string>
<!-- <string name="pref_category_advanced">Advanced</string> -->
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
<!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</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_done">Hecho</string>
<string name="key_action_go">Ir</string>
<string name="key_action_prev">Anterior</string>
<string name="key_action_search">Buscar</string>
<string name="key_action_send">Enviar</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_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_tryhere">After enabling, you can try the keyboard here:</string> -->
</resources>

85
res/values-fa/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">صفحه کلید غیرمنتظره</string>
<string name="app_name" product="default">صفحه کلید غیرمنتظره</string>
<string name="settings_activity_label">تنظیمات صفحه کلید غیرمنتظره</string>
<string name="pref_portrait">در حالت عمودی</string>
<string name="pref_landscape">در حالت افقی</string>
<string name="pref_category_layout">طرح</string>
<string name="pref_label_brightness">تنظیم برچسب روشنایی</string>
<string name="pref_keyboard_opacity">تنظیم کدر بودن پس‌زمینه صفحه کلید</string>
<string name="pref_key_opacity">تنظیم کدر بودن کلید</string>
<string name="pref_key_activated_opacity">تنظیم کدر بودن کلید فشرده شده</string>
<string name="pref_layout_title">تغییر طرح صفحه کلید</string>
<string name="pref_layout_e_system">تنظیمات سامانه</string>
<string name="pref_layout_e_custom">طرح صفارشی</string>
<string name="pref_accents_title">لهجه‌ها</string>
<string name="pref_accents_e_all_installed">نمایش لهجه‌ها برای تمام زبان‌هی نصب شده</string>
<string name="pref_accents_e_selected">فقط نمایش لهجه‌ها برای زبان‌های انتخاب شده</string>
<string name="pref_accents_e_none">پنهان کردن لهجه‌ها</string>
<string name="pref_show_numpad_title">نمایش پد شماره‌ها</string>
<string name="pref_show_numpad_never">هرگز</string>
<string name="pref_show_numpad_landscape">فقط در حالت افقی</string>
<string name="pref_show_numpad_always">همیشه</string>
<string name="pref_number_row_title">نمایش ردیف اعداد</string>
<string name="pref_number_row_summary">افزودن ردیف اعداد زمانیکه پد شماره‌ها پنهان است</string>
<string name="pref_numpad_layout">طرح پد شماره‌ها</string>
<string name="pref_numpad_layout_e_high_first">ابتدا اعداد بزرگ</string>
<string name="pref_numpad_layout_e_low_first">ابتدا اعداد کوچک</string>
<string name="pref_extra_keys_title">افزودن کلیدها به صفحه کلید</string>
<string name="pref_second_layout_title">طرح دوم</string>
<string name="pref_second_layout_none">هیچ</string>
<string name="pref_category_typing">درحال نوشتن</string>
<string name="pref_swipe_dist_title">فاصله کشیدن</string>
<string name="pref_swipe_dist_summary">فاصله حروف از گوشه‌های کلیدها )(%s)</string>
<string name="pref_long_timeout_title">درنگ تکرار کلید</string>
<string name="pref_long_interval_title">فاصله تکرار کلید</string>
<string name="pref_lock_double_tap_title">دوبار ضربه روی دگرساز برای فعال شدن کپس لاک</string>
<string name="pref_lock_double_tap_summary">شما میتوانید قفل کنید هر میانبری را با نگه داشتن آن</string>
<string name="pref_category_behavior">ٰرفتار</string>
<string name="pref_autocapitalisation_title">بزرگسازی خودکار</string>
<string name="pref_autocapitalisation_summary">در شروع جملات دگرساز را فشار دهید</string>
<string name="pref_switch_input_immediate_title">انتقال به آخرین صفحه کلید استفاده شده</string>
<string name="pref_switch_input_immediate_summary">رفتار کلید تغییردهنده صفحه کلید</string>
<string name="pref_vibrate_title">لرزش</string>
<string name="pref_vibrate_summary">فعال/غیرفعال کردن لرزش در زمان فشار دادن کلیدها</string>
<string name="pref_category_style">سبک</string>
<string name="pref_margin_bottom_title">حاشیه پایین</string>
<string name="pref_keyboard_height_title">ارتفاع صفحه کلید</string>
<string name="pref_horizontal_margin_title">حاشیه افقی</string>
<string name="pref_character_size_title">اندازه برچسب</string>
<string name="pref_character_size_summary">اندازه نویسه‌های نشان داده شده روی صفحه کلید (%.2fx)</string>
<string name="pref_theme">زمینه</string>
<string name="pref_theme_e_system">تنظیمات سامانه</string>
<string name="pref_theme_e_dark">تاریک</string>
<string name="pref_theme_e_light">روشن</string>
<string name="pref_theme_e_black">سیاه</string>
<string name="pref_theme_e_altblack">سیاه مشابه</string>
<string name="pref_theme_e_white">سفید</string>
<string name="pref_theme_e_epaper">ای-پیپر</string>
<string name="pref_swipe_dist_e_very_short">بسیار کوتاه</string>
<string name="pref_swipe_dist_e_short">کوتاه</string>
<string name="pref_swipe_dist_e_default">عادی</string>
<string name="pref_swipe_dist_e_far">دور</string>
<string name="pref_swipe_dist_e_very_far">بسیار دور</string>
<string name="pref_key_horizontal_space">فاصله افقی بین کلیدها</string>
<string name="pref_key_vertical_space">فاصله عمودی بین کلیدها</string>
<string name="pref_category_advanced">پیشرفته</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_system">System</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">بعدی</string>
<string name="key_action_done">اتمام</string>
<string name="key_action_go">برو</string>
<string name="key_action_prev">قبلی</string>
<string name="key_action_search">جستجو</string>
<string name="key_action_send">ارسال</string>
<string name="launcher_button_imesettings">فعال کردن صفحه کلید</string>
<string name="launcher_description">این برنامه یک صفحه کلید مجازی است. با کلیک روی گزینه زیر به تنظیمات سامانه بروید و صفحه کلید غیرمنتظره را فعال کنید.</string>
<string name="launcher_sourcecode">این یک برنامه آزاد و منبع‌باز است. شما میتوانید پیدا کنید کد منبع را و گزارش کنید باگ‌ها را در <a href="https://github.com/Julow/Unexpected-Keyboard/">گیت‌هاب</a>.</string>
<string name="launcher_tryhere">بعد از فعالسازی، صفحه کلید را اینجا امتحان کنید:</string>
</resources>

85
res/values-fr/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Unexpected Keyboard Paramètres</string>
<string name="pref_portrait">En mode portrait</string>
<string name="pref_landscape">En mode landscape</string>
<string name="pref_category_layout">Disposition</string>
<string name="pref_label_brightness">Luminosité des symboles</string>
<string name="pref_keyboard_opacity">Transparence du clavier</string>
<string name="pref_key_opacity">Transparence des touches</string>
<string name="pref_key_activated_opacity">Transparence des touches pressées</string>
<string name="pref_layout_title">Disposition des touches</string>
<string name="pref_layout_e_system">Paramètre système</string>
<string name="pref_layout_e_custom">Disposition personnalisée</string>
<string name="pref_accents_title">Accents</string>
<string name="pref_accents_e_all_installed">Afficher les accents pour les langues installées</string>
<string name="pref_accents_e_selected">Afficher les accents pour la langue sélectionnée</string>
<string name="pref_accents_e_none">Cacher les accents</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_landscape">Seulement en mode paysage</string>
<string name="pref_show_numpad_always">Toujour</string>
<string name="pref_number_row_title">Rangée de nombres</string>
<string name="pref_number_row_summary">Ajoute une rangée de nombres en haut du clavier quand le pavé numérique est caché</string>
<string name="pref_numpad_layout">Disposition du pavé numérique</string>
<string name="pref_numpad_layout_e_high_first">Du plus haut au plus bas</string>
<string name="pref_numpad_layout_e_low_first">Du plus bas au plus haut</string>
<string name="pref_extra_keys_title">Ajouter des touches au clavier</string>
<string name="pref_second_layout_title">Disposition secondaire</string>
<string name="pref_second_layout_none">Aucune</string>
<string name="pref_category_typing">Saisie</string>
<string name="pref_swipe_dist_title">Distance de swipe</string>
<string name="pref_swipe_dist_summary">La distance des caractères dans les coins (%s)</string>
<string name="pref_long_timeout_title">Délai avant répétition</string>
<string name="pref_long_interval_title">Écart entre les répétitions</string>
<string name="pref_lock_double_tap_title">Appuyer deux fois pour bloquer la majuscule</string>
<string name="pref_lock_double_tap_summary">Un appui long bloque la majuscule</string>
<string name="pref_category_behavior">Comportement</string>
<string name="pref_autocapitalisation_title">Majuscule automatique</string>
<string name="pref_autocapitalisation_summary">Activer Shift au début des phrases</string>
<string name="pref_switch_input_immediate_title">Changer vers le clavier utilisé en dernier</string>
<string name="pref_switch_input_immediate_summary">Comportement de la touche de changement de clavier</string>
<string name="pref_vibrate_title">Vibreur</string>
<string name="pref_vibrate_summary">Vibration a chaque touche</string>
<string name="pref_category_style">Style</string>
<string name="pref_margin_bottom_title">Marge du bas</string>
<string name="pref_keyboard_height_title">Hauteur du clavier</string>
<string name="pref_horizontal_margin_title">Marge des côtés</string>
<string name="pref_character_size_title">Taille des symboles</string>
<string name="pref_character_size_summary">Taille des caractères affichés sur les touches (%.2fx)</string>
<string name="pref_theme">Thème</string>
<string name="pref_theme_e_system">Paramètre système</string>
<string name="pref_theme_e_dark">Sombre</string>
<string name="pref_theme_e_light">Clair</string>
<string name="pref_theme_e_black">Noir</string>
<string name="pref_theme_e_altblack">Noir 2</string>
<string name="pref_theme_e_white">Blanc</string>
<string name="pref_theme_e_epaper">ePaper</string>
<string name="pref_swipe_dist_e_very_short">Très courte</string>
<string name="pref_swipe_dist_e_short">Courte</string>
<string name="pref_swipe_dist_e_default">Normale</string>
<string name="pref_swipe_dist_e_far">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_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_system">Système</string>
<string name="pref_vibration_e_strong">Fort</string>
<string name="pref_vibration_e_medium">Moyen</string>
<string name="pref_vibration_e_light">Léger</string>
<string name="key_action_next">Suiv.</string>
<string name="key_action_done">Fin</string>
<string name="key_action_go">Aller</string>
<string name="key_action_prev">Prec.</string>
<string name="key_action_search">Chercher</string>
<string name="key_action_send">Envoyer</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_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_tryhere">Après l\'avoir activé, vous pouvez l\'essayer ici:</string>
</resources>

85
res/values-it/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Impostazioni di Unexpected Keyboard</string>
<!-- <string name="pref_portrait">In portrait mode</string> -->
<!-- <string name="pref_landscape">In landscape mode</string> -->
<string name="pref_category_layout">Layout</string>
<!-- <string name="pref_label_brightness">Adjust label brightness</string> -->
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
<!-- <string name="pref_key_opacity">Adjust key opacity</string> -->
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> -->
<string name="pref_layout_title">Cambia layout tastiera</string>
<string name="pref_layout_e_system">Impostazioni di sistema</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
<string name="pref_accents_title">Accenti</string>
<string name="pref_accents_e_all_installed">Mostra accenti per tutte le lingue installate</string>
<string name="pref_accents_e_selected">Mostra accenti solo per le lingue selezionate</string>
<string name="pref_accents_e_none">Nascondi accenti</string>
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
<!-- <string name="pref_show_numpad_never">Never</string> -->
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
<!-- <string name="pref_show_numpad_always">Always</string> -->
<!-- <string name="pref_number_row_title">Show number row</string> -->
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
<!-- <string name="pref_extra_keys_title">Add keys to the keyboard</string> -->
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
<string name="pref_second_layout_none">Nessuno</string>
<string name="pref_category_typing">Digitando</string>
<string name="pref_swipe_dist_title">Distanza swipe</string>
<string name="pref_swipe_dist_summary">Distanza dei caratteri negli angoli dei tasti (%s)</string>
<string name="pref_long_timeout_title">Timeout ripetizione tasto</string>
<string name="pref_long_interval_title">Intervallo ripetizione tasto</string>
<string name="pref_lock_double_tap_title">Doppio tocco su Shift per attivare CapsLock</string>
<string name="pref_lock_double_tap_summary">Invece di premere i modificatori a lungo</string>
<!-- <string name="pref_category_behavior">Behavior</string> -->
<string name="pref_autocapitalisation_title">Maiuscole Automatiche</string>
<string name="pref_autocapitalisation_summary">Premi Shift all\'inizio di una frase</string>
<!-- <string name="pref_switch_input_immediate_title">Switch to the last used keyboard</string> -->
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">Vibrazione</string>
<string name="pref_vibrate_summary">Abilita/Disabilita Vibrazione alla pressione dei tasti</string>
<string name="pref_category_style">Stile</string>
<string name="pref_margin_bottom_title">Margine inferiore</string>
<string name="pref_keyboard_height_title">Altezza tastiera</string>
<string name="pref_horizontal_margin_title">Margine orizzontale</string>
<string name="pref_character_size_title">Dimensione Caratteri</string>
<string name="pref_character_size_summary">Dimensione dei caratteri mostrati sulla tastiera (%.2fx)</string>
<string name="pref_theme">Tema</string>
<string name="pref_theme_e_system">Impostazioni di sistema</string>
<string name="pref_theme_e_dark">Scuro</string>
<string name="pref_theme_e_light">Chiaro</string>
<string name="pref_theme_e_black">Nero</string>
<!-- <string name="pref_theme_e_altblack">Alternative Black</string> -->
<!-- <string name="pref_theme_e_white">White</string> -->
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
<string name="pref_swipe_dist_e_very_short">Veramente breve</string>
<string name="pref_swipe_dist_e_short">Breve</string>
<string name="pref_swipe_dist_e_default">Normale</string>
<string name="pref_swipe_dist_e_far">Distante</string>
<string name="pref_swipe_dist_e_very_far">Molto distante</string>
<string name="pref_key_horizontal_space">Spazio orizzontale tra i tasti</string>
<string name="pref_key_vertical_space">Spazio verticale tra i tasti</string>
<!-- <string name="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_system">System</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">Prossimo</string>
<string name="key_action_done">Fatto</string>
<string name="key_action_go">Vai</string>
<string name="key_action_prev">Precedente</string>
<string name="key_action_search">Cerca</string>
<string name="key_action_send">Invia</string>
<!-- <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_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_tryhere">After enabling, you can try the keyboard here:</string> -->
</resources>

85
res/values-ko/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- <string name="app_name" product="debug">Unexpected Keyboard (debug)</string> -->
<!-- <string name="app_name" product="default">Unexpected Keyboard</string> -->
<string name="settings_activity_label">Unexpected Keyboard 설정</string>
<!-- <string name="pref_portrait">In portrait mode</string> -->
<!-- <string name="pref_landscape">In landscape mode</string> -->
<string name="pref_category_layout">레이아웃</string>
<!-- <string name="pref_label_brightness">Adjust label brightness</string> -->
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
<!-- <string name="pref_key_opacity">Adjust key opacity</string> -->
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> -->
<string name="pref_layout_title">키보드 레이아웃 변경</string>
<string name="pref_layout_e_system">시스템 세팅</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
<string name="pref_accents_title">악센트</string>
<string name="pref_accents_e_all_installed">설치된 모든 언어의 악센트 표시</string>
<string name="pref_accents_e_selected">선택한 언어의 악센트만 표시</string>
<string name="pref_accents_e_none">모든 언어의 악센트 숨기기</string>
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
<!-- <string name="pref_show_numpad_never">Never</string> -->
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
<!-- <string name="pref_show_numpad_always">Always</string> -->
<!-- <string name="pref_number_row_title">Show number row</string> -->
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
<!-- <string name="pref_extra_keys_title">Add keys to the keyboard</string> -->
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
<!-- <string name="pref_second_layout_none">None</string> -->
<string name="pref_category_typing">타자</string>
<string name="pref_swipe_dist_title">스와이프 범위</string>
<string name="pref_swipe_dist_summary">키 모서리 문자의 입력 범위 (%s)</string>
<string name="pref_long_timeout_title">키 길게 누르기 지연</string>
<string name="pref_long_interval_title">키 반복 간격</string>
<!-- <string name="pref_lock_double_tap_title">Double tap on shift for caps lock</string> -->
<!-- <string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string> -->
<!-- <string name="pref_category_behavior">Behavior</string> -->
<!-- <string name="pref_autocapitalisation_title">Automatic capitalisation</string> -->
<!-- <string name="pref_autocapitalisation_summary">Press Shift at the beginning of a sentence</string> -->
<!-- <string name="pref_switch_input_immediate_title">Switch to the last used keyboard</string> -->
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">진동</string>
<string name="pref_vibrate_summary">키 누를 때 진동 키거/끄기</string>
<string name="pref_category_style">스타일</string>
<string name="pref_margin_bottom_title">아래 넓이</string>
<string name="pref_keyboard_height_title">키보드 높이</string>
<string name="pref_horizontal_margin_title">양 옆 넓이</string>
<string name="pref_character_size_title">폰트 크기</string>
<string name="pref_character_size_summary">키보드의 표시되는 폰트 크기 (%.2fx)</string>
<string name="pref_theme">테마</string>
<string name="pref_theme_e_system">시스템 테마</string>
<string name="pref_theme_e_dark">Dark</string>
<string name="pref_theme_e_light">Light</string>
<string name="pref_theme_e_black">Black</string>
<!-- <string name="pref_theme_e_altblack">Alternative Black</string> -->
<!-- <string name="pref_theme_e_white">White</string> -->
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
<string name="pref_swipe_dist_e_very_short">매우 짧음</string>
<string name="pref_swipe_dist_e_short">짧음</string>
<string name="pref_swipe_dist_e_default">보통</string>
<string name="pref_swipe_dist_e_far">넓음</string>
<string name="pref_swipe_dist_e_very_far">매우 넓음</string>
<string name="pref_key_horizontal_space">키보드 양 옆 간격</string>
<string name="pref_key_vertical_space">키보드 세로 간격</string>
<!-- <string name="pref_category_advanced">Advanced</string> -->
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
<!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</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">다음</string>
<string name="key_action_done">확인</string>
<string name="key_action_go">Go</string>
<string name="key_action_prev">이전</string>
<string name="key_action_search">검색</string>
<string name="key_action_send">보내기</string>
<!-- <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_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_tryhere">After enabling, you can try the keyboard here:</string> -->
</resources>

View File

@@ -1,10 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="horizontal_margin">12dp</dimen>
<dimen name="margin_bottom">3dp</dimen>
<dimen name="key_padding">3dp</dimen>
<dimen name="key_height">36dp</dimen>
<dimen name="label_text_size">18dp</dimen>
<dimen name="sublabel_text_size">11dp</dimen>
<dimen name="emoji_type_button_height">48dp</dimen>
<dimen name="emoji_type_button_height">48dp</dimen>
</resources>

85
res/values-lv/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (atkļūdošana)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Unexpected Keyboard iestatījumi</string>
<string name="pref_portrait">Stateniski</string>
<string name="pref_landscape">Guleniski</string>
<string name="pref_category_layout">Izkārtojums</string>
<string name="pref_label_brightness">Pielāgot iezīmju spilgtumu</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_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_custom">Pielāgots izkārtojums</string>
<string name="pref_accents_title">Uzsvara zīmes</string>
<string name="pref_accents_e_all_installed">Rādīt uzsvara zīmes visām uzstādītajām valodām</string>
<string name="pref_accents_e_selected">Rādīt uzsvara zīmes tikai atlasītajām valodām</string>
<string name="pref_accents_e_none">Paslēpt uzsvara zīmes</string>
<string name="pref_show_numpad_title">Rādīt ciparnīcu</string>
<string name="pref_show_numpad_never">Nekad</string>
<string name="pref_show_numpad_landscape">Tikai guleniskajā skatā</string>
<string name="pref_show_numpad_always">Vienmēr</string>
<string name="pref_number_row_title">Rādīt ciparu rindu</string>
<string name="pref_number_row_summary">Pievienot ciparu rindu virs tastatūras, kad ciparnīca ir paslēpta</string>
<string name="pref_numpad_layout">Ciparnīcas izkārtojums</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_extra_keys_title">Pievienot tastatūrai taustiņus</string>
<string name="pref_second_layout_title">Otrējais izkārtojums</string>
<string name="pref_second_layout_none">Neviens</string>
<string name="pref_category_typing">Rakstīšana</string>
<string name="pref_swipe_dist_title">Pavilkšanas attālums</string>
<string name="pref_swipe_dist_summary">Taustiņu stūros esošo rakstzīmju attālums (%s)</string>
<string name="pref_long_timeout_title">Taustiņa atkārtošanās ātrums</string>
<string name="pref_long_interval_title">Taustiņa atkārtošanās aizture</string>
<string name="pref_lock_double_tap_title">Divkāršs piesitiens burtslēgam</string>
<string name="pref_lock_double_tap_summary">Tā vietā, lai ilstoši piespiestu pārveidotāju</string>
<string name="pref_category_behavior">Uzvedība</string>
<string name="pref_autocapitalisation_title">Automātiski lielie burti</string>
<string name="pref_autocapitalisation_summary">Piespiest Shift teikuma sākumā</string>
<string name="pref_switch_input_immediate_title">Pārslēgties uz pēdējo izmantoto tastatūru</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_summary">Iespējot/atspējot taustiņa piespiešanas trīcēšanu</string>
<string name="pref_category_style">Izskata pielāgojumi</string>
<string name="pref_margin_bottom_title">Apakšējā apmale</string>
<string name="pref_keyboard_height_title">Tastatūras augstums</string>
<string name="pref_horizontal_margin_title">Līmeniskā apmale</string>
<string name="pref_character_size_title">Iezīmes izmērs</string>
<string name="pref_character_size_summary">Tastatūrā attēloto rakstzīmju izmērs (%.2fx)</string>
<string name="pref_theme">Izskats</string>
<string name="pref_theme_e_system">Ierīces iestatījumi</string>
<string name="pref_theme_e_dark">Tumšs</string>
<string name="pref_theme_e_light">Gaišs</string>
<string name="pref_theme_e_black">Melns</string>
<string name="pref_theme_e_altblack">Citādi melns</string>
<string name="pref_theme_e_white">Balts</string>
<string name="pref_theme_e_epaper">ePapīrs</string>
<string name="pref_swipe_dist_e_very_short">Ļoti tuvs</string>
<string name="pref_swipe_dist_e_short">Tuvs</string>
<string name="pref_swipe_dist_e_default">Vidējs</string>
<string name="pref_swipe_dist_e_far">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_vertical_space">Stateniskais attālums starp taustiņiem</string>
<string name="pref_category_advanced">Papildu</string>
<string name="pref_custom_layout_title">Pielāgots izkārtojums</string>
<string name="pref_custom_layout_summary">Skatīt pirmkodu. Šī iespēja nav paredzēta izmantošanai.</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</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_done">Darīts</string>
<string name="key_action_go">Aiziet</string>
<string name="key_action_prev">Iepriekšējais</string>
<string name="key_action_search">Meklēt</string>
<string name="key_action_send">Sūtīt</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_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_tryhere">After enabling, you can try the keyboard here:</string> -->
</resources>

85
res/values-pl/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Ustawienia Unexpected Keyboard</string>
<string name="pref_portrait">W widoku pionowym</string>
<string name="pref_landscape">W widoku poziomym</string>
<string name="pref_category_layout">Układ</string>
<string name="pref_label_brightness">Dostosuj jasność znaków</string>
<string name="pref_keyboard_opacity">Nieprzezroczystość tła klawiatury</string>
<string name="pref_key_opacity">Nieprzezroczystość klawisza</string>
<string name="pref_key_activated_opacity">Nieprzezroczystość naciśniętego klawisza</string>
<string name="pref_layout_title">Zmień układ klawiatury</string>
<string name="pref_layout_e_system">Systemowy</string>
<string name="pref_layout_e_custom">Własny układ</string>
<string name="pref_accents_title">Znaki diakrytyczne</string>
<string name="pref_accents_e_all_installed">Pokaż znaki diakryt. dla wszystkich zainstalowanych języków</string>
<string name="pref_accents_e_selected">Pokaż znaki diakryt. tylko dla wybranego języka</string>
<string name="pref_accents_e_none">Ukryj znaki diakrytyczne</string>
<string name="pref_show_numpad_title">Pokaż klawiaturę numeryczną</string>
<string name="pref_show_numpad_never">Nigdy</string>
<string name="pref_show_numpad_landscape">Tylko w orientacji poziomej</string>
<string name="pref_show_numpad_always">Zawsze</string>
<string name="pref_number_row_title">Pokaż rząd cyfr</string>
<string name="pref_number_row_summary">Dodaj rząd cyfr na górze klawiatury, kiedy klaw. numeryczna jest schowana</string>
<string name="pref_numpad_layout">Układ klawiatury numerycznej</string>
<string name="pref_numpad_layout_e_high_first">Od największej cyfry</string>
<string name="pref_numpad_layout_e_low_first">Od najmniejszej cyfry</string>
<string name="pref_extra_keys_title">Dodaj klawisze do klawiatury</string>
<string name="pref_second_layout_title">Drugi układ</string>
<string name="pref_second_layout_none">Żaden</string>
<string name="pref_category_typing">Pisanie</string>
<string name="pref_swipe_dist_title">Odległość przesuwania</string>
<string name="pref_swipe_dist_summary">Odległość znaków od rogów klawiszy (%s)</string>
<string name="pref_long_timeout_title">Opóźnienie powtarzania naciśnięć klawisza</string>
<string name="pref_long_interval_title">Czas pomiędzy powtórzeniami</string>
<string name="pref_lock_double_tap_title">Naciśnij Shift podwójnie, aby włączyć caps lock</string>
<string name="pref_lock_double_tap_summary">Możesz zablokować modyfikator poprzez jego długie naciśnięcie</string>
<string name="pref_category_behavior">Zachowanie</string>
<string name="pref_autocapitalisation_title">Automatyczne wielkie litery</string>
<string name="pref_autocapitalisation_summary">Naciśnij Shift na początku zdania</string>
<string name="pref_switch_input_immediate_title">Przełącz na ostatnio używaną 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_summary">Wł./wył. wibrację przy naciśnięciu klawisza</string>
<string name="pref_category_style">Styl</string>
<string name="pref_margin_bottom_title">Margines dolny</string>
<string name="pref_keyboard_height_title">Wysokość klawiatury</string>
<string name="pref_horizontal_margin_title">Margines poziomy</string>
<string name="pref_character_size_title">Wielkość znaku</string>
<string name="pref_character_size_summary">Wielkość znaków widocznych na klawiaturze (%.2fx)</string>
<string name="pref_theme">Motyw</string>
<string name="pref_theme_e_system">Systemowy</string>
<string name="pref_theme_e_dark">Ciemny</string>
<string name="pref_theme_e_light">Jasny</string>
<string name="pref_theme_e_black">Czarny</string>
<string name="pref_theme_e_altblack">Alternatywny Czarny</string>
<string name="pref_theme_e_white">Biały</string>
<string name="pref_theme_e_epaper">e-paper</string>
<string name="pref_swipe_dist_e_very_short">Bardzo mała</string>
<string name="pref_swipe_dist_e_short">Mała</string>
<string name="pref_swipe_dist_e_default">Normalna</string>
<string name="pref_swipe_dist_e_far">Duża</string>
<string name="pref_swipe_dist_e_very_far">Bardzo duża</string>
<string name="pref_key_horizontal_space">Odległość pomiędzy klawiszami w poziomie</string>
<string name="pref_key_vertical_space">Odległość pomiędzy klawiszami w pionie</string>
<string name="pref_category_advanced">Zaawansowane</string>
<string name="pref_custom_layout_title">Własny układ</string>
<string name="pref_custom_layout_summary">Zobacz kod źródłowy. Ta opcja nie jest przeznaczona do użycia.</string>
<string name="pref_vibration_e_disabled">Wyłączone</string>
<string name="pref_vibration_e_system">Systemowe</string>
<string name="pref_vibration_e_strong">Silne</string>
<string name="pref_vibration_e_medium">Normalne</string>
<string name="pref_vibration_e_light">Słabe</string>
<string name="key_action_next">Dalej</string>
<string name="key_action_done">OK</string>
<string name="key_action_go">Przejdź</string>
<string name="key_action_prev">Wstecz</string>
<string name="key_action_search">Szukaj</string>
<string name="key_action_send">Wyślij</string>
<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_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_tryhere">Po jej włączeniu, możesz wypróbować klawiaturę tutaj:</string>
</resources>

85
res/values-pt/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Teclado Unexpected</string>
<string name="app_name" product="default">Teclado Unexpected</string>
<string name="settings_activity_label">Configurações</string>
<string name="pref_portrait">No modo retrato</string>
<string name="pref_landscape">No modo paisagem</string>
<string name="pref_category_layout">Layout</string>
<string name="pref_label_brightness">Ajustar brilho dos rótulos</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_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_custom">Layout personalizado</string>
<string name="pref_accents_title">Acentos</string>
<string name="pref_accents_e_all_installed">Mostrar acentos para todos os idiomas instalados</string>
<string name="pref_accents_e_selected">Mostrar acentos só para o idioma selecionado</string>
<string name="pref_accents_e_none">Ocultar acentos</string>
<string name="pref_show_numpad_title">Mostrar Teclado Numérico</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_always">Sempre</string>
<string name="pref_number_row_title">Mostrar fileira de números</string>
<string name="pref_number_row_summary">Adicionar uma linha de números no topo do teclado quando o teclado numérico estiver oculto</string>
<string name="pref_numpad_layout">Layout do teclado numérico</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_extra_keys_title">Adicionar teclas ao teclado</string>
<string name="pref_second_layout_title">Layout secundário</string>
<string name="pref_second_layout_none">Nenhum</string>
<string name="pref_category_typing">Digitação</string>
<string name="pref_swipe_dist_title">Distância a deslizar</string>
<string name="pref_swipe_dist_summary">Distância até acionar os cantos das teclas (%s)</string>
<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_lock_double_tap_title">Tecle duas vezes no shift para caixa alta</string>
<string name="pref_lock_double_tap_summary">Ao invés de apertar e segurar por um tempo</string>
<string name="pref_category_behavior">Comportamento</string>
<string name="pref_autocapitalisation_title">Capitalização automática</string>
<string name="pref_autocapitalisation_summary">Aciona o shift no início de cada frase</string>
<string name="pref_switch_input_immediate_title">Alternar para o último teclado usado</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_summary">Ativar/desativar vibração ao digitar</string>
<string name="pref_category_style">Estilo</string>
<string name="pref_margin_bottom_title">Margem inferior</string>
<string name="pref_keyboard_height_title">Altura do teclado</string>
<string name="pref_horizontal_margin_title">Margem horizontal</string>
<string name="pref_character_size_title">Tamanho dos indicadores</string>
<string name="pref_character_size_summary">Tamanho dos caracteres visíveis no teclado (%.2fx)</string>
<string name="pref_theme">Tema</string>
<string name="pref_theme_e_system">Mesmo do sistema</string>
<string name="pref_theme_e_dark">Escuro</string>
<string name="pref_theme_e_light">Claro</string>
<string name="pref_theme_e_black">Preto</string>
<string name="pref_theme_e_altblack">Preto Alternativo</string>
<string name="pref_theme_e_white">Branco</string>
<string name="pref_theme_e_epaper">Papel Eletrônico</string>
<string name="pref_swipe_dist_e_very_short">Muito curto</string>
<string name="pref_swipe_dist_e_short">Curto</string>
<string name="pref_swipe_dist_e_default">Normal</string>
<string name="pref_swipe_dist_e_far">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_vertical_space">Distância vertical entre teclas</string>
<string name="pref_category_advanced">Avançado</string>
<string name="pref_custom_layout_title">Layout personalizado</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_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</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_done">Pronto</string>
<string name="key_action_go">Ir</string>
<string name="key_action_prev">Anterior</string>
<string name="key_action_search">Buscar</string>
<string name="key_action_send">Enviar</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_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_tryhere">Após ativar, experimente aqui:</string>
</resources>

85
res/values-ro/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Tastatură Unexpected (depanare)</string>
<string name="app_name" product="default">Tastatură Unexpected</string>
<string name="settings_activity_label">Setări Tastatură Unexpected</string>
<string name="pref_portrait">În mod portret</string>
<string name="pref_landscape">În mod panoramă</string>
<string name="pref_category_layout">Aspect</string>
<string name="pref_label_brightness">Modifică luminozitatea denumirii</string>
<string name="pref_keyboard_opacity">Modifică opacitatea fundalului tastaturii</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_layout_title">Schimbă aranjamentul tastaturii</string>
<string name="pref_layout_e_system">Setări de Sistem</string>
<string name="pref_layout_e_custom">Aranjament personalizat</string>
<string name="pref_accents_title">Accente</string>
<string name="pref_accents_e_all_installed">Arată accentele pentru toate limbile instalate</string>
<string name="pref_accents_e_selected">Aratp accentele doar pentru limba selectată</string>
<string name="pref_accents_e_none">Ascunde accentele</string>
<string name="pref_show_numpad_title">Arată NumPad</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_always">Întotdeanuna</string>
<string name="pref_number_row_title">Arată rândul cu numere</string>
<string name="pref_number_row_summary">Adaugă un rând deasupra tastaturii când numpad-ul este ascuns</string>
<string name="pref_numpad_layout">Aspect NumPad</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_extra_keys_title">Adaugă taste pe tastatură</string>
<string name="pref_second_layout_title">Aranjament secundar</string>
<string name="pref_second_layout_none">Nimic</string>
<string name="pref_category_typing">Tipărire</string>
<string name="pref_swipe_dist_title">Distanța de glisare</string>
<string name="pref_swipe_dist_summary">Distanța dintre caracterele din colțurile tastelor (%s)</string>
<string name="pref_long_timeout_title">Timeout pentru repetarea tastelor</string>
<string name="pref_long_interval_title">Intervalul de repetare a tastelor</string>
<string name="pref_lock_double_tap_title">Apăsare dublă pe Shift activează Caps Lock</string>
<string name="pref_lock_double_tap_summary">Puteți activa orice modificator, ținându-l apăsat</string>
<string name="pref_category_behavior">Comportament</string>
<string name="pref_autocapitalisation_title">Scriere automată cu majuscule</string>
<string name="pref_autocapitalisation_summary">Autoapăsare Shift la începutul fiecărei propoziții</string>
<string name="pref_switch_input_immediate_title">Schimbă la ultima tastatură folosită</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_summary">Activați/dezactivați vibrația la apăsarea tastelor</string>
<string name="pref_category_style">Stil</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_horizontal_margin_title">Marginea orizontală</string>
<string name="pref_character_size_title">Dimensiunea simbolurilor</string>
<string name="pref_character_size_summary">Dimensiumea caracterelor afișate pe tastatură (%.2fx)</string>
<string name="pref_theme">Tema</string>
<string name="pref_theme_e_system">Setări de sistem</string>
<string name="pref_theme_e_dark">Întunecată</string>
<string name="pref_theme_e_light">Luminoasă</string>
<string name="pref_theme_e_black">Neagră</string>
<string name="pref_theme_e_altblack">Negru Alternativ</string>
<string name="pref_theme_e_white">Albă</string>
<string name="pref_theme_e_epaper">ePaper</string>
<string name="pref_swipe_dist_e_very_short">Foarte apropiată</string>
<string name="pref_swipe_dist_e_short">Apropiată</string>
<string name="pref_swipe_dist_e_default">Normală</string>
<string name="pref_swipe_dist_e_far">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_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_system">System</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">Următor</string>
<string name="key_action_done">Gata</string>
<string name="key_action_go">Go</string>
<string name="key_action_prev">Precedent</string>
<string name="key_action_search">Caută</string>
<string name="key_action_send">Trimite</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_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_tryhere">După activare, puteți să încercați tastatura aici:</string>
</resources>

85
res/values-ru/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (отладка)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Unexpected Keyboard Настройки</string>
<string name="pref_portrait">В портретном режиме</string>
<string name="pref_landscape">В ландшафтном режиме</string>
<string name="pref_category_layout">Расположение</string>
<string name="pref_label_brightness">Изменить яркость клавиатуры</string>
<string name="pref_keyboard_opacity">Изменить прозрачность фона</string>
<string name="pref_key_opacity">Изменить прозрачность клавиш</string>
<string name="pref_key_activated_opacity">Изменить прозрачность нажатой клавиши</string>
<string name="pref_layout_title">Изменить раскладку клавиатуры</string>
<string name="pref_layout_e_system">Системные настройки</string>
<string name="pref_layout_e_custom">Пользовательская раскладка</string>
<string name="pref_accents_title">Акцент</string>
<string name="pref_accents_e_all_installed">Показывать акценты для всех установленных языков</string>
<string name="pref_accents_e_selected">Показывать акценты только для выбранного языка</string>
<string name="pref_accents_e_none">Скрыть акценты</string>
<string name="pref_show_numpad_title">Показывать NumPad</string>
<string name="pref_show_numpad_never">Никогда</string>
<string name="pref_show_numpad_landscape">Только в ландшафтном режиме</string>
<string name="pref_show_numpad_always">Всегда</string>
<string name="pref_number_row_title">Показывать номер ряда</string>
<string name="pref_number_row_summary">Добавить ряд цифр над клавиатурой, когда numpad не активен</string>
<string name="pref_numpad_layout">NumPad раскладка</string>
<string name="pref_numpad_layout_e_high_first">Старшие цифры сверху</string>
<string name="pref_numpad_layout_e_low_first">Младшие цифры сверху</string>
<string name="pref_extra_keys_title">Добавить клавиши на клавиатуру</string>
<string name="pref_second_layout_title">Дополнительная раскладка</string>
<string name="pref_second_layout_none">Нет</string>
<string name="pref_category_typing">Печать</string>
<string name="pref_swipe_dist_title">Расстояние пролистывания</string>
<string name="pref_swipe_dist_summary">Расстояние между символами в углах клавиш (%s)</string>
<string name="pref_long_timeout_title">Тайм-аут повтора клавиш</string>
<string name="pref_long_interval_title">Интервал повтора клавиш</string>
<string name="pref_lock_double_tap_title">Двойное нажатие на Shift активирует Caps lock</string>
<string name="pref_lock_double_tap_summary">Вы можете активировать модификатор, удерживая клавишу</string>
<string name="pref_category_behavior">Поведение</string>
<string name="pref_autocapitalisation_title">Автоматическая смена регистра</string>
<string name="pref_autocapitalisation_summary">Автонажатие Shift в начале каждого предложения</string>
<string name="pref_switch_input_immediate_title">Переключаться к последней используемой клавиатуре</string>
<string name="pref_switch_input_immediate_summary">Поведение клавиши переключения клавиатуры</string>
<string name="pref_vibrate_title">Вибрация</string>
<string name="pref_vibrate_summary">Включение/выключение вибрации при нажатии клавиши</string>
<string name="pref_category_style">Стиль</string>
<string name="pref_margin_bottom_title">Нижняя граница поля</string>
<string name="pref_keyboard_height_title">Высота клавиатуры</string>
<string name="pref_horizontal_margin_title">Горизонтальное поле</string>
<string name="pref_character_size_title">Размер символов</string>
<string name="pref_character_size_summary">Размер символов, отображаемых на клавиатуре (%.2fx)</string>
<string name="pref_theme">Тема</string>
<string name="pref_theme_e_system">Системные настройки</string>
<string name="pref_theme_e_dark">Темная</string>
<string name="pref_theme_e_light">Светлая</string>
<string name="pref_theme_e_black">Черная</string>
<string name="pref_theme_e_altblack">Альтернативный черный</string>
<string name="pref_theme_e_white">Белая</string>
<string name="pref_theme_e_epaper">ePaper</string>
<string name="pref_swipe_dist_e_very_short">Очень близко</string>
<string name="pref_swipe_dist_e_short">Близко</string>
<string name="pref_swipe_dist_e_default">Нормально</string>
<string name="pref_swipe_dist_e_far">Далеко</string>
<string name="pref_swipe_dist_e_very_far">Очень далеко</string>
<string name="pref_key_horizontal_space">Горизонтальное расстояние между клавишами</string>
<string name="pref_key_vertical_space">Расстояние по вертикали между клавишами</string>
<string name="pref_category_advanced">Расширенные настройки</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_system">System</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">Далее</string>
<string name="key_action_done">Ввод</string>
<string name="key_action_go">Go</string>
<string name="key_action_prev">Предыдущий</string>
<string name="key_action_search">Поиск</string>
<string name="key_action_send">Отправить</string>
<string name="launcher_button_imesettings">Включить клавиатуру</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_tryhere">После активации вы можете попробовать клавиатуру прямо здесь:</string>
</resources>

85
res/values-tr/strings.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Unexpected Keyboard Ayarları</string>
<!-- <string name="pref_portrait">In portrait mode</string> -->
<!-- <string name="pref_landscape">In landscape mode</string> -->
<string name="pref_category_layout">Düzen</string>
<!-- <string name="pref_label_brightness">Adjust label brightness</string> -->
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
<!-- <string name="pref_key_opacity">Adjust key opacity</string> -->
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> -->
<string name="pref_layout_title">Klavye Düzenini Değiştir</string>
<string name="pref_layout_e_system">Sistem Ayarları</string>
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
<string name="pref_accents_title">Aksanlar</string>
<string name="pref_accents_e_all_installed">Yüklü tüm dillerin aksanlarını göster</string>
<string name="pref_accents_e_selected">Sadece seçili dilin aksanlarını göster</string>
<string name="pref_accents_e_none">Aksanları gizle</string>
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
<!-- <string name="pref_show_numpad_never">Never</string> -->
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
<!-- <string name="pref_show_numpad_always">Always</string> -->
<!-- <string name="pref_number_row_title">Show number row</string> -->
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
<!-- <string name="pref_extra_keys_title">Add keys to the keyboard</string> -->
<!-- <string name="pref_second_layout_title">Secondary layout</string> -->
<string name="pref_second_layout_none">Hiçbiri</string>
<string name="pref_category_typing">Yazma</string>
<string name="pref_swipe_dist_title">Kaydırma mesafesi</string>
<string name="pref_swipe_dist_summary">Tuşların köşelerindeki karakterlerin uzaklıkları (%s)</string>
<string name="pref_long_timeout_title">Tuş tekrarlama beklemesi</string>
<string name="pref_long_interval_title">Tuş tekrarlama aralığı</string>
<!-- <string name="pref_lock_double_tap_title">Double tap on shift for caps lock</string> -->
<!-- <string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string> -->
<!-- <string name="pref_category_behavior">Behavior</string> -->
<!-- <string name="pref_autocapitalisation_title">Automatic capitalisation</string> -->
<!-- <string name="pref_autocapitalisation_summary">Press Shift at the beginning of a sentence</string> -->
<!-- <string name="pref_switch_input_immediate_title">Switch to the last used keyboard</string> -->
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">Titreşim</string>
<string name="pref_vibrate_summary">Tuşa basıldığında titreşimi etkinleştir</string>
<string name="pref_category_style">Stil</string>
<string name="pref_margin_bottom_title">Alt boşluk</string>
<string name="pref_keyboard_height_title">Klavye yüksekliği</string>
<string name="pref_horizontal_margin_title">Yatay boşluk</string>
<string name="pref_character_size_title">Etiket boyutu</string>
<string name="pref_character_size_summary">Klavye üzerinde gösterilecek karakter boyutu (%.2fx)</string>
<string name="pref_theme">Tema</string>
<string name="pref_theme_e_system">Sistem Ayarları</string>
<string name="pref_theme_e_dark">Koyu</string>
<string name="pref_theme_e_light">ık</string>
<string name="pref_theme_e_black">Siyah</string>
<!-- <string name="pref_theme_e_altblack">Alternative Black</string> -->
<!-- <string name="pref_theme_e_white">White</string> -->
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
<string name="pref_swipe_dist_e_very_short">Çok kısa</string>
<string name="pref_swipe_dist_e_short">Kısa</string>
<string name="pref_swipe_dist_e_default">Normal</string>
<string name="pref_swipe_dist_e_far">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_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_system">System</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">İleri</string>
<string name="key_action_done">Bitti</string>
<string name="key_action_go">İlerle</string>
<string name="key_action_prev">Geri</string>
<string name="key_action_search">Ara</string>
<string name="key_action_send">Gönder</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_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_tryhere">After enabling, you can try the keyboard here:</string> -->
</resources>

87
res/values-vi/strings.xml Normal file
View File

@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (gỡ lỗi)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Cài đặt Unexpected Keyboard</string>
<string name="pref_portrait">Trong chế độ chân dung</string>
<string name="pref_landscape">Trong chế độ phong cảnh</string>
<string name="pref_category_layout">Bố cục</string>
<string name="pref_label_brightness">Tùy chỉnh độ sáng của phím</string>
<string name="pref_keyboard_opacity">Tùy chỉnh độ trong suốt của bàn phím</string>
<string name="pref_key_opacity">Tùy chỉnh độ trong suốt của phím</string>
<string name="pref_key_activated_opacity">Tùy chỉnh độ trong suốt của phím khi nhấn</string>
<string name="pref_layout_title">Thay đổi bố cục bàn phím</string>
<string name="pref_layout_e_system">Hệ thống</string>
<string name="pref_layout_e_custom">Tùy chỉnh bố cục</string>
<string name="pref_accents_title">Dấu phụ</string>
<string name="pref_accents_e_all_installed">Hiển thị cho các ngôn ngữ đã cài đặt</string>
<string name="pref_accents_e_selected">Chỉ hiển thị cho các ngôn ngữ đã chọn</string>
<string name="pref_accents_e_none">
Ẩn dấu phụ
</string>
<string name="pref_show_numpad_title">Hiện NumPad</string>
<string name="pref_show_numpad_never">Không bao giờ</string>
<string name="pref_show_numpad_landscape">Chỉ trong chế độ phong cảnh</string>
<string name="pref_show_numpad_always">Luôn luôn</string>
<string name="pref_number_row_title">Hiện số dòng</string>
<string name="pref_number_row_summary">Hiện số dòng trên đầu bàn phím khi NumPad ẩn</string>
<string name="pref_numpad_layout">Bố cục NumPad</string>
<string name="pref_numpad_layout_e_high_first">Số lớn nhất trước</string>
<string name="pref_numpad_layout_e_low_first">Số nhỏ nhất trước</string>
<string name="pref_extra_keys_title">Thêm phím vào bàn phím</string>
<string name="pref_second_layout_title">Bố cục phụ</string>
<string name="pref_second_layout_none">Không</string>
<string name="pref_category_typing"></string>
<string name="pref_swipe_dist_title">Khoảng cách vuốt</string>
<string name="pref_swipe_dist_summary">Khoảng cách giữa các ký tự ở góc phím (%s)</string>
<string name="pref_long_timeout_title">Thời hạn lặp phím</string>
<string name="pref_long_interval_title">Khoảng thời gian lặp phím</string>
<string name="pref_lock_double_tap_title">Nhấn hai lần Shift để bật Caps Lock</string>
<string name="pref_lock_double_tap_summary">Bạn có thể khóa phím hỗ trợ bằng cách giữ vào nó</string>
<!-- <string name="pref_category_behavior">Behavior</string> -->
<string name="pref_autocapitalisation_title">Tự động viết hoa</string>
<string name="pref_autocapitalisation_summary">Nhấn Shift ở đầu câu</string>
<!-- <string name="pref_switch_input_immediate_title">Switch to the last used keyboard</string> -->
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<string name="pref_vibrate_title">Sự rung</string>
<string name="pref_vibrate_summary">Bật/tắt rung khi nhấn</string>
<string name="pref_category_style">Kiểu cách</string>
<string name="pref_margin_bottom_title">Căn lề dưới</string>
<string name="pref_keyboard_height_title">Chiều cao bàn phím</string>
<string name="pref_horizontal_margin_title">Căn lề chiều ngang</string>
<string name="pref_character_size_title">Kích cỡ ký tự phím</string>
<string name="pref_character_size_summary">Kích cỡ các ký tự hiển thị trên bàn phím (%.2fx)</string>
<string name="pref_theme">Chủ đề</string>
<string name="pref_theme_e_system">Hệ thống</string>
<string name="pref_theme_e_dark">Tối</string>
<string name="pref_theme_e_light">Sáng</string>
<string name="pref_theme_e_black">Đen</string>
<!-- <string name="pref_theme_e_altblack">Alternative Black</string> -->
<string name="pref_theme_e_white">Trắng</string>
<string name="pref_theme_e_epaper">ePaper</string>
<string name="pref_swipe_dist_e_very_short">Rất gần</string>
<string name="pref_swipe_dist_e_short">Gần</string>
<string name="pref_swipe_dist_e_default">Trungbình</string>
<string name="pref_swipe_dist_e_far">Xa</string>
<string name="pref_swipe_dist_e_very_far">Rất xa</string>
<string name="pref_key_horizontal_space">Khoảng cách giữa các phím theo chiều ngang</string>
<string name="pref_key_vertical_space">Khoảng cách giữa các phím theo chiều dọc</string>
<string name="pref_category_advanced">Nâng cao</string>
<string name="pref_custom_layout_title">Tùy chỉnh bố cục</string>
<string name="pref_custom_layout_summary">Hãy xem mã nguồn. Lựa chọn này không có mục đích sử dụng.</string>
<!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
<!-- <string name="pref_vibration_e_system">System</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">Tiếp</string>
<string name="key_action_done">Xong</string>
<string name="key_action_go">Đi</string>
<string name="key_action_prev">Trước</string>
<string name="key_action_search">Tìm</string>
<string name="key_action_send">Gửi</string>
<!-- <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_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_tryhere">After enabling, you can try the keyboard here:</string> -->
</resources>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
<string name="app_name" product="default">Unexpected Keyboard</string>
<string name="settings_activity_label">Unexpected Keyboard 设置</string>
<string name="pref_portrait">在竖屏模式下</string>
<string name="pref_landscape">在横屏模式下</string>
<string name="pref_category_layout">布局</string>
<string name="pref_label_brightness">调整字母亮度</string>
<string name="pref_keyboard_opacity">调整键盘背景透明度</string>
<string name="pref_key_opacity">调整按键透明度</string>
<string name="pref_key_activated_opacity">调整按下的按键的透明度</string>
<string name="pref_layout_title">改变键盘布局</string>
<string name="pref_layout_e_system">系统设置</string>
<string name="pref_layout_e_custom">自定义布局</string>
<string name="pref_accents_title">声调</string>
<string name="pref_accents_e_all_installed">显示所有安装的语言的声调符号</string>
<string name="pref_accents_e_selected">只显示选择的语言的声调符号</string>
<string name="pref_accents_e_none">隐藏声调符号</string>
<string name="pref_show_numpad_title">显示数字小键盘</string>
<string name="pref_show_numpad_never">从不</string>
<string name="pref_show_numpad_landscape">只在横屏显示</string>
<string name="pref_show_numpad_always">一直显示</string>
<string name="pref_number_row_title">显示数字行</string>
<string name="pref_number_row_summary">当数字小键盘隐藏时,在键盘上方显示数字按键</string>
<string name="pref_numpad_layout">数字小键盘布局</string>
<string name="pref_numpad_layout_e_high_first">大数字在上方</string>
<string name="pref_numpad_layout_e_low_first">小数字在上方</string>
<string name="pref_extra_keys_title">选择要显示的按键</string>
<string name="pref_second_layout_title">第二键盘布局</string>
<string name="pref_second_layout_none"></string>
<string name="pref_category_typing">输入</string>
<string name="pref_swipe_dist_title">滑动触发距离</string>
<string name="pref_swipe_dist_summary">输入按键四角的符号需要滑动的距离 (%s)</string>
<string name="pref_long_timeout_title">长按到开始重复输入的时间</string>
<string name="pref_long_interval_title">长按后每次重复输入的时间间隔</string>
<string name="pref_lock_double_tap_title">双击Shift键锁定大写</string>
<string name="pref_lock_double_tap_summary">任何时候都可以长按修改键以锁定</string>
<string name="pref_category_behavior">行为</string>
<string name="pref_autocapitalisation_title">句首自动大写</string>
<string name="pref_autocapitalisation_summary">在句子的开头自动按下Shift</string>
<string name="pref_switch_input_immediate_title">切换到最近使用的键盘</string>
<string name="pref_switch_input_immediate_summary">切换键盘按钮的行为</string>
<string name="pref_vibrate_title">振动</string>
<string name="pref_vibrate_summary">启用或者禁用按下按键时振动</string>
<string name="pref_category_style">样式</string>
<string name="pref_margin_bottom_title">键盘下边距</string>
<string name="pref_keyboard_height_title">键盘高度</string>
<string name="pref_horizontal_margin_title">键盘左右边距</string>
<string name="pref_character_size_title">字符大小</string>
<string name="pref_character_size_summary">按键上显示的字符的大小 (%.2fx)</string>
<string name="pref_theme">主题</string>
<string name="pref_theme_e_system">跟随系统设置</string>
<string name="pref_theme_e_dark">暗色</string>
<string name="pref_theme_e_light">亮色</string>
<string name="pref_theme_e_black">黑色</string>
<string name="pref_theme_e_altblack">黑色带边框</string>
<string name="pref_theme_e_white">白色</string>
<string name="pref_theme_e_epaper">白色带边框</string>
<string name="pref_swipe_dist_e_very_short">非常短</string>
<string name="pref_swipe_dist_e_short"></string>
<string name="pref_swipe_dist_e_default">中(默认)</string>
<string name="pref_swipe_dist_e_far"></string>
<string name="pref_swipe_dist_e_very_far">非常长</string>
<string name="pref_key_horizontal_space">按键的左右边距</string>
<string name="pref_key_vertical_space">按键的上下边距</string>
<string name="pref_category_advanced">高级设置</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_system">使用系统振动强度</string>
<string name="pref_vibration_e_strong"></string>
<string name="pref_vibration_e_medium"></string>
<string name="pref_vibration_e_light"></string>
<string name="key_action_next">下一项</string>
<string name="key_action_done">完成</string>
<string name="key_action_go">前往</string>
<string name="key_action_prev">前一项</string>
<string name="key_action_search">搜索</string>
<string name="key_action_send">发送</string>
<string name="launcher_button_imesettings">启用键盘</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_tryhere">启用键盘后,可以在这里测试效果:</string>
</resources>

View File

@@ -1,23 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="pref_layout_values">
<item>system</item>
<item>azerty</item>
<item>qwerty</item>
</string-array>
<string name="pref_accents_default">1</string>
<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_all</item>
<item>@string/pref_accents_e_none</item>
</string-array>
<string-array name="pref_show_numpad_values">
<item>never</item>
<item>landscape</item>
<item>always</item>
</string-array>
<string-array name="pref_show_numpad_entries">
<item>@string/pref_show_numpad_never</item>
<item>@string/pref_show_numpad_landscape</item>
<item>@string/pref_show_numpad_always</item>
</string-array>
<string-array name="pref_numpad_layout_values">
<item>high_first</item>
<item>low_first</item>
</string-array>
<string-array name="pref_numpad_layout_entries">
<item>@string/pref_numpad_layout_e_high_first</item>
<item>@string/pref_numpad_layout_e_low_first</item>
</string-array>
<string-array name="pref_accents_values">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
</string-array>
<string-array name="pref_theme_entries">
<item>@string/pref_theme_e_system</item>
<item>@string/pref_theme_e_dark</item>
<item>@string/pref_theme_e_light</item>
<item>@string/pref_theme_e_black</item>
<item>@string/pref_theme_e_altblack</item>
<item>@string/pref_theme_e_white</item>
<item>@string/pref_theme_e_epaper</item>
</string-array>
<string-array name="pref_theme_values">
<item>system</item>
<item>dark</item>
<item>light</item>
<item>black</item>
<item>altblack</item>
<item>white</item>
<item>epaper</item>
</string-array>
<string-array name="pref_swipe_dist_entries">
<item>@string/pref_swipe_dist_e_very_short</item>
<item>@string/pref_swipe_dist_e_short</item>
<item>@string/pref_swipe_dist_e_default</item>
<item>@string/pref_swipe_dist_e_far</item>
<item>@string/pref_swipe_dist_e_very_far</item>
</string-array>
<string-array name="pref_swipe_dist_values">
<item>5</item>
<item>7.5</item>
<item>15</item>
<item>25</item>
<item>35</item>
</string-array>
<string-array name="pref_vibration_entries">
<item>@string/pref_vibration_e_disabled</item>
<item>@string/pref_vibration_e_system</item>
<item>@string/pref_vibration_e_strong</item>
<item>@string/pref_vibration_e_medium</item>
<item>@string/pref_vibration_e_light</item>
</string-array>
<string-array name="pref_vibration_values">
<item>disabled</item>
<item>system</item>
<item>strong</item>
<item>medium</item>
<item>light</item>
</string-array>
</resources>

Some files were not shown because too many files have changed in this diff Show More