mirror of
https://github.com/Julow/Unexpected-Keyboard.git
synced 2025-08-19 17:25:29 +02:00
Compare commits
1 Commits
1.24.0
...
settings-i
Author | SHA1 | Date | |
---|---|---|---|
|
3952f48b13 |
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="36" android:versionName="1.24.0" android:hardwareAccelerated="false">
|
||||
<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">
|
||||
|
@@ -51,9 +51,6 @@ Layout includes some ASCII punctuation but not all, missing: (, ), <, >, [, ], {
|
||||
1 warnings
|
||||
# res/xml/latn_azerty_fr.xml
|
||||
0 warnings
|
||||
# res/xml/latn_bepo_fr.xml
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
1 warnings
|
||||
# res/xml/latn_bone.xml
|
||||
Layout includes some ASCII punctuation but not all, missing: $
|
||||
Layout redefines the bottom row but some important keys are missing, missing: switch_backward
|
||||
@@ -100,8 +97,6 @@ Layout doesn't define some important keys, missing: f11_placeholder, f12_placeho
|
||||
1 warnings
|
||||
# res/xml/latn_qwertz_de.xml
|
||||
0 warnings
|
||||
# res/xml/latn_qwertz_fr_ch.xml
|
||||
0 warnings
|
||||
# res/xml/latn_qwertz_hu.xml
|
||||
0 warnings
|
||||
# res/xml/latn_qwertz_sk.xml
|
||||
@@ -110,8 +105,3 @@ Layout doesn't define some important keys, missing: f11_placeholder, f12_placeho
|
||||
2 warnings
|
||||
# res/xml/latn_qwertz.xml
|
||||
0 warnings
|
||||
# res/xml/urdu_phonetic_ur.xml
|
||||
Duplicate keys:
|
||||
Layout includes some ASCII punctuation but not all, missing: <, >, ?, `, |, ~
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
3 warnings
|
||||
|
@@ -54,9 +54,9 @@ def generate_arrays(out, layouts):
|
||||
item.text = s
|
||||
elem.append(item)
|
||||
return elem
|
||||
system_item = [ ("system", "@string/pref_layout_e_system") ]
|
||||
none_item = [ ("system", "@string/pref_layout_e_system") ]
|
||||
custom_item = [ ("custom", "@string/pref_layout_e_custom") ]
|
||||
values_items, entries_items = zip(*(system_item + layouts + custom_item)) # unzip
|
||||
values_items, entries_items = zip(*(none_item + layouts + custom_item)) # unzip
|
||||
ids_items = map(lambda s: "@xml/%s" % s if s not in ["system", "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."))
|
||||
|
@@ -1,9 +0,0 @@
|
||||
Allow selecting any number of standard and custom layouts.
|
||||
Allow adding custom keys to the keyboard.
|
||||
Changed behavior of auto-added keys (often dead-keys).
|
||||
New layouts.
|
||||
Improved layouts and language support.
|
||||
Improved the space bar slider, and many more.
|
||||
Updated translations.
|
||||
|
||||
Thanks to the contributors: @ChasmSolacer, @ElucGeek, @GoRaN909, @RZHSSNZDH, @Shareef101, @Validbit, @eandersons, @nitsvga, @polyctena, @sdrapha, @syskill
|
4
res/drawable/accent.xml
Normal file
4
res/drawable/accent.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M14.016 17.016l1.969-4.031h-3v-6h6v6l-1.969 4.031h-3zM6 17.016l2.016-4.031h-3v-6h6v6l-2.016 4.031h-3z" />
|
||||
</vector>
|
4
res/drawable/arrow_up.xml
Normal file
4
res/drawable/arrow_up.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M3.984 12l8.016-8.016 8.016 8.016-1.453 1.406-5.578-5.578v12.188h-1.969v-12.188l-5.625 5.578z" />
|
||||
</vector>
|
4
res/drawable/border_bottom.xml
Normal file
4
res/drawable/border_bottom.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M5.016 15v2.016h-2.016v-2.016h2.016zM3 21v-2.016h18v2.016h-18zM5.016 11.016v1.969h-2.016v-1.969h2.016zM18.984 9v-2.016h2.016v2.016h-2.016zM18.984 3h2.016v2.016h-2.016v-2.016zM5.016 6.984v2.016h-2.016v-2.016h2.016zM18.984 17.016v-2.016h2.016v2.016h-2.016zM18.984 12.984v-1.969h2.016v1.969h-2.016zM17.016 3v2.016h-2.016v-2.016h2.016zM12.984 3v2.016h-1.969v-2.016h1.969zM17.016 11.016v1.969h-2.016v-1.969h2.016zM12.984 6.984v2.016h-1.969v-2.016h1.969zM5.016 3v2.016h-2.016v-2.016h2.016zM12.984 11.016v1.969h-1.969v-1.969h1.969zM9 3v2.016h-2.016v-2.016h2.016zM12.984 15v2.016h-1.969v-2.016h1.969zM9 11.016v1.969h-2.016v-1.969h2.016z" />
|
||||
</vector>
|
4
res/drawable/border_left.xml
Normal file
4
res/drawable/border_left.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M15 5.016v-2.016h2.016v2.016h-2.016zM15 12.984v-1.969h2.016v1.969h-2.016zM18.984 21v-2.016h2.016v2.016h-2.016zM18.984 12.984v-1.969h2.016v1.969h-2.016zM18.984 3h2.016v2.016h-2.016v-2.016zM18.984 17.016v-2.016h2.016v2.016h-2.016zM15 21v-2.016h2.016v2.016h-2.016zM18.984 9v-2.016h2.016v2.016h-2.016zM3 21v-18h2.016v18h-2.016zM6.984 12.984v-1.969h2.016v1.969h-2.016zM6.984 5.016v-2.016h2.016v2.016h-2.016zM6.984 21v-2.016h2.016v2.016h-2.016zM11.016 12.984v-1.969h1.969v1.969h-1.969zM11.016 9v-2.016h1.969v2.016h-1.969zM11.016 5.016v-2.016h1.969v2.016h-1.969zM11.016 17.016v-2.016h1.969v2.016h-1.969zM11.016 21v-2.016h1.969v2.016h-1.969z" />
|
||||
</vector>
|
4
res/drawable/border_right.xml
Normal file
4
res/drawable/border_right.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M11.016 9v-2.016h1.969v2.016h-1.969zM11.016 5.016v-2.016h1.969v2.016h-1.969zM11.016 12.984v-1.969h1.969v1.969h-1.969zM15 5.016v-2.016h2.016v2.016h-2.016zM15 21v-2.016h2.016v2.016h-2.016zM18.984 3h2.016v18h-2.016v-18zM15 12.984v-1.969h2.016v1.969h-2.016zM11.016 17.016v-2.016h1.969v2.016h-1.969zM3 9v-2.016h2.016v2.016h-2.016zM3 17.016v-2.016h2.016v2.016h-2.016zM3 12.984v-1.969h2.016v1.969h-2.016zM11.016 21v-2.016h1.969v2.016h-1.969zM3 21v-2.016h2.016v2.016h-2.016zM6.984 12.984v-1.969h2.016v1.969h-2.016zM6.984 5.016v-2.016h2.016v2.016h-2.016zM3 5.016v-2.016h2.016v2.016h-2.016zM6.984 21v-2.016h2.016v2.016h-2.016z" />
|
||||
</vector>
|
4
res/drawable/border_top.xml
Normal file
4
res/drawable/border_top.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M15 12.984v-1.969h2.016v1.969h-2.016zM18.984 21v-2.016h2.016v2.016h-2.016zM11.016 9v-2.016h1.969v2.016h-1.969zM15 21v-2.016h2.016v2.016h-2.016zM18.984 17.016v-2.016h2.016v2.016h-2.016zM3 3h18v2.016h-18v-2.016zM18.984 12.984v-1.969h2.016v1.969h-2.016zM18.984 9v-2.016h2.016v2.016h-2.016zM11.016 17.016v-2.016h1.969v2.016h-1.969zM3 9v-2.016h2.016v2.016h-2.016zM3 12.984v-1.969h2.016v1.969h-2.016zM3 21v-2.016h2.016v2.016h-2.016zM3 17.016v-2.016h2.016v2.016h-2.016zM11.016 21v-2.016h1.969v2.016h-1.969zM11.016 12.984v-1.969h1.969v1.969h-1.969zM6.984 12.984v-1.969h2.016v1.969h-2.016zM6.984 21v-2.016h2.016v2.016h-2.016z" />
|
||||
</vector>
|
4
res/drawable/bug_report.xml
Normal file
4
res/drawable/bug_report.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M14.016 12v-2.016h-4.031v2.016h4.031zM14.016 15.984v-1.969h-4.031v1.969h4.031zM20.016 8.016v1.969h-2.109q0.094 0.656 0.094 1.031v0.984h2.016v2.016h-2.016v0.984q0 0.328-0.094 0.984h2.109v2.016h-2.813q-0.797 1.359-2.18 2.18t-3.023 0.82-3.023-0.82-2.18-2.18h-2.813v-2.016h2.109q-0.094-0.656-0.094-0.984v-0.984h-2.016v-2.016h2.016v-0.984q0-0.375 0.094-1.031h-2.109v-1.969h2.813q0.703-1.172 1.828-1.969l-1.641-1.641 1.406-1.406 2.203 2.156q0.703-0.141 1.406-0.141t1.406 0.141l2.203-2.156 1.406 1.406-1.641 1.641q1.172 0.797 1.828 1.969h2.813z" />
|
||||
</vector>
|
4
res/drawable/build.xml
Normal file
4
res/drawable/build.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M22.688 18.984q0.328 0.188 0.305 0.633t-0.398 0.773l-2.297 2.297q-0.703 0.703-1.406 0l-9.094-9.094q-1.688 0.703-3.586 0.305t-3.305-1.805q-1.5-1.5-1.875-3.563t0.563-3.844l4.406 4.313 3-3-4.313-4.313q1.781-0.844 3.844-0.516t3.563 1.828q1.406 1.406 1.805 3.305t-0.305 3.586z" />
|
||||
</vector>
|
4
res/drawable/clip.xml
Normal file
4
res/drawable/clip.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M16.5 6h1.5v11.484q0 2.297-1.594 3.914t-3.891 1.617-3.914-1.617-1.617-3.914v-12.469q0-1.641 1.195-2.836t2.836-1.195 2.813 1.195 1.172 2.836v10.5q0 1.031-0.727 1.758t-1.758 0.727-1.781-0.727-0.75-1.758v-9.516h1.5v9.516q0 0.422 0.305 0.703t0.727 0.281 0.703-0.281 0.281-0.703v-10.5q0-1.031-0.727-1.781t-1.758-0.75-1.781 0.75-0.75 1.781v12.469q0 1.641 1.195 2.836t2.836 1.195 2.813-1.195 1.172-2.836v-11.484z" />
|
||||
</vector>
|
4
res/drawable/code.xml
Normal file
4
res/drawable/code.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M14.578 16.594l4.641-4.594-4.641-4.594 1.406-1.406 6 6-6 6zM9.422 16.594l-1.406 1.406-6-6 6-6 1.406 1.406-4.641 4.594z" />
|
||||
</vector>
|
4
res/drawable/expand.xml
Normal file
4
res/drawable/expand.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M12.984 9v6h3l-3.984 3.984-3.984-3.984h3v-6h-3l3.984-3.984 3.984 3.984h-3zM3.984 2.016h16.031v1.969h-16.031v-1.969zM3.984 20.016h16.031v1.969h-16.031v-1.969z" />
|
||||
</vector>
|
4
res/drawable/font_size.xml
Normal file
4
res/drawable/font_size.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M3 12v-3h9v3h-3v6.984h-3v-6.984h-3zM9 3.984h12.984v3h-4.969v12h-3v-12h-5.016v-3z" />
|
||||
</vector>
|
4
res/drawable/ic_desing.xml
Normal file
4
res/drawable/ic_desing.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M10,20 C4.49,20 0,15.51 0,10 C0,4.49 4.49,0 10,0 C15.51,0 20,4.04 20,9 C20,12.31 17.31,15 14,15 L12.23,15 C11.95,15 11.73,15.22 11.73,15.5 C11.73,15.62 11.78,15.73 11.86,15.83 C12.27,16.3 12.5,16.89 12.5,17.5 C12.5,18.88 11.38,20 10,20 Z M10,2 C5.59,2 2,5.59 2,10 C2,14.41 5.59,18 10,18 C10.28,18 10.5,17.78 10.5,17.5 C10.5,17.34 10.42,17.22 10.36,17.15 C9.95,16.69 9.73,16.1 9.73,15.5 C9.73,14.12 10.85,13 12.23,13 L14,13 C16.21,13 18,11.21 18,9 C18,5.14 14.41,2 10,2 Z M4.5,11 C5.32842712,11 6,10.3284271 6,9.5 C6,8.67157288 5.32842712,8 4.5,8 C3.67157288,8 3,8.67157288 3,9.5 C3,10.3284271 3.67157288,11 4.5,11 Z M7.5,7 C8.32842712,7 9,6.32842712 9,5.5 C9,4.67157288 8.32842712,4 7.5,4 C6.67157288,4 6,4.67157288 6,5.5 C6,6.32842712 6.67157288,7 7.5,7 Z M12.5,7 C13.3284271,7 14,6.32842712 14,5.5 C14,4.67157288 13.3284271,4 12.5,4 C11.6715729,4 11,4.67157288 11,5.5 C11,6.32842712 11.6715729,7 12.5,7 Z M15.5,11 C16.3284271,11 17,10.3284271 17,9.5 C17,8.67157288 16.3284271,8 15.5,8 C14.6715729,8 14,8.67157288 14,9.5 C14,10.3284271 14.6715729,11 15.5,11 Z" android:strokeWidth="1.0" />
|
||||
</vector>
|
4
res/drawable/ic_lock.xml
Normal file
4
res/drawable/ic_lock.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,17C10.89,17 10,16.1 10,15C10,13.89 10.89,13 12,13A2,2 0 0,1 14,15A2,2 0 0,1 12,17M18,20V10H6V20H18M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10C4,8.89 4.89,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z" />
|
||||
</vector>
|
6
res/drawable/ic_warning.xml
Normal file
6
res/drawable/ic_warning.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,5.99L19.53,19H4.47L12,5.99 M12,2L1,21h22L12,2L12,2z" />
|
||||
<path android:fillColor="@android:color/white" android:pathData="M 13 16 L 11 16 L 11 18 L 13 18 L 13 16 Z" />
|
||||
<path android:fillColor="@android:color/white" android:pathData="M 13 10 L 11 10 L 11 14 L 13 14 L 13 10 Z" />
|
||||
</vector>
|
4
res/drawable/keyboard_hide.xml
Normal file
4
res/drawable/keyboard_hide.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M12 23.016l-3.984-4.031h7.969zM18.984 8.016v-2.016h-1.969v2.016h1.969zM18.984 11.016v-2.016h-1.969v2.016h1.969zM15.984 8.016v-2.016h-1.969v2.016h1.969zM15.984 11.016v-2.016h-1.969v2.016h1.969zM15.984 15v-2.016h-7.969v2.016h7.969zM6.984 8.016v-2.016h-1.969v2.016h1.969zM6.984 11.016v-2.016h-1.969v2.016h1.969zM8.016 9v2.016h1.969v-2.016h-1.969zM8.016 6v2.016h1.969v-2.016h-1.969zM11.016 9v2.016h1.969v-2.016h-1.969zM11.016 6v2.016h1.969v-2.016h-1.969zM20.016 3q0.797 0 1.383 0.609t0.586 1.406v9.984q0 0.797-0.586 1.406t-1.383 0.609h-16.031q-0.797 0-1.383-0.609t-0.586-1.406v-9.984q0-0.797 0.586-1.406t1.383-0.609h16.031z" />
|
||||
</vector>
|
4
res/drawable/keyboards_white.xml
Normal file
4
res/drawable/keyboards_white.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20,5L4,5c-1.1,0 -1.99,0.9 -1.99,2L2,17c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,7c0,-1.1 -0.9,-2 -2,-2zM11,8h2v2h-2L11,8zM11,11h2v2h-2v-2zM8,8h2v2L8,10L8,8zM8,11h2v2L8,13v-2zM7,13L5,13v-2h2v2zM7,10L5,10L5,8h2v2zM16,17L8,17v-2h8v2zM16,13h-2v-2h2v2zM16,10h-2L14,8h2v2zM19,13h-2v-2h2v2zM19,10h-2L17,8h2v2z" />
|
||||
</vector>
|
4
res/drawable/memory.xml
Normal file
4
res/drawable/memory.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M17.016 17.016v-10.031h-10.031v10.031h10.031zM21 11.016h-2.016v1.969h2.016v2.016h-2.016v2.016q0 0.797-0.586 1.383t-1.383 0.586h-2.016v2.016h-2.016v-2.016h-1.969v2.016h-2.016v-2.016h-2.016q-0.797 0-1.383-0.586t-0.586-1.383v-2.016h-2.016v-2.016h2.016v-1.969h-2.016v-2.016h2.016v-2.016q0-0.797 0.586-1.383t1.383-0.586h2.016v-2.016h2.016v2.016h1.969v-2.016h2.016v2.016h2.016q0.797 0 1.383 0.586t0.586 1.383v2.016h2.016v2.016zM12.984 12.984v-1.969h-1.969v1.969h1.969zM15 9v6h-6v-6h6z" />
|
||||
</vector>
|
4
res/drawable/numpad.xml
Normal file
4
res/drawable/numpad.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M12 0.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609zM12 6.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609zM18 6.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609zM18 12.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609zM12 12.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609zM18 5.016q-0.797 0-1.406-0.609t-0.609-1.406 0.609-1.406 1.406-0.609 1.406 0.609 0.609 1.406-0.609 1.406-1.406 0.609zM6 12.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609zM6 6.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609zM6 0.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609zM12 18.984q0.797 0 1.406 0.609t0.609 1.406-0.609 1.406-1.406 0.609-1.406-0.609-0.609-1.406 0.609-1.406 1.406-0.609z" />
|
||||
</vector>
|
5
res/drawable/settings_white.xml
Normal file
5
res/drawable/settings_white.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M13.85,22.25h-3.7c-0.74,0-1.36-0.54-1.45-1.27l-0.27-1.89c-0.27-0.14-0.53-0.29-0.79-0.46l-1.8,0.72 c-0.7,0.26-1.47-0.03-1.81-0.65L2.2,15.53c-0.35-0.66-0.2-1.44,0.36-1.88l1.53-1.19c-0.01-0.15-0.02-0.3-0.02-0.46 c0-0.15,0.01-0.31,0.02-0.46l-1.52-1.19C1.98,9.9,1.83,9.09,2.2,8.47l1.85-3.19c0.34-0.62,1.11-0.9,1.79-0.63l1.81,0.73 c0.26-0.17,0.52-0.32,0.78-0.46l0.27-1.91c0.09-0.7,0.71-1.25,1.44-1.25h3.7c0.74,0,1.36,0.54,1.45,1.27l0.27,1.89 c0.27,0.14,0.53,0.29,0.79,0.46l1.8-0.72c0.71-0.26,1.48,0.03,1.82,0.65l1.84,3.18c0.36,0.66,0.2,1.44-0.36,1.88l-1.52,1.19 c0.01,0.15,0.02,0.3,0.02,0.46s-0.01,0.31-0.02,0.46l1.52,1.19c0.56,0.45,0.72,1.23,0.37,1.86l-1.86,3.22 c-0.34,0.62-1.11,0.9-1.8,0.63l-1.8-0.72c-0.26,0.17-0.52,0.32-0.78,0.46l-0.27,1.91C15.21,21.71,14.59,22.25,13.85,22.25z M13.32,20.72c0,0.01,0,0.01,0,0.02L13.32,20.72z M10.68,20.7l0,0.02C10.69,20.72,10.69,20.71,10.68,20.7z M10.62,20.25h2.76 l0.37-2.55l0.53-0.22c0.44-0.18,0.88-0.44,1.34-0.78l0.45-0.34l2.38,0.96l1.38-2.4l-2.03-1.58l0.07-0.56 c0.03-0.26,0.06-0.51,0.06-0.78c0-0.27-0.03-0.53-0.06-0.78l-0.07-0.56l2.03-1.58l-1.39-2.4l-2.39,0.96l-0.45-0.35 c-0.42-0.32-0.87-0.58-1.33-0.77L13.75,6.3l-0.37-2.55h-2.76L10.25,6.3L9.72,6.51C9.28,6.7,8.84,6.95,8.38,7.3L7.93,7.63 L5.55,6.68L4.16,9.07l2.03,1.58l-0.07,0.56C6.09,11.47,6.06,11.74,6.06,12c0,0.26,0.02,0.53,0.06,0.78l0.07,0.56l-2.03,1.58 l1.38,2.4l2.39-0.96l0.45,0.35c0.43,0.33,0.86,0.58,1.33,0.77l0.53,0.22L10.62,20.25z M18.22,17.72c0,0.01-0.01,0.02-0.01,0.03 L18.22,17.72z M5.77,17.71l0.01,0.02C5.78,17.72,5.77,17.71,5.77,17.71z M3.93,9.47L3.93,9.47C3.93,9.47,3.93,9.47,3.93,9.47z M18.22,6.27c0,0.01,0.01,0.02,0.01,0.02L18.22,6.27z M5.79,6.25L5.78,6.27C5.78,6.27,5.79,6.26,5.79,6.25z M13.31,3.28 c0,0.01,0,0.01,0,0.02L13.31,3.28z M10.69,3.26l0,0.02C10.69,3.27,10.69,3.27,10.69,3.26z" />
|
||||
<path android:fillColor="@android:color/white" android:pathData="M8.5,12a3.5,3.5 0 1,0 7,0a3.5,3.5 0 1,0 -7,0" />
|
||||
</vector>
|
4
res/drawable/simbols.xml
Normal file
4
res/drawable/simbols.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?colorLabel" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M5.016 19.5q0 0.188 0.164 0.352t0.305 0.164q0.188 0 0.375-0.188l1.078-1.031-0.75-0.703-1.031 1.031q-0.141 0.141-0.141 0.375zM6.188 14.063q-0.141 0-0.305 0.141t-0.164 0.328q0 0.234 0.141 0.375l0.328 0.375 0.375-0.375q0.375-0.375 0-0.703-0.141-0.141-0.375-0.141zM9.75 15.938l1.406 1.453-1.406 1.406 1.406 1.406-1.406 1.406-1.406-1.406-1.078 1.078q-0.703 0.703-1.781 0.703t-1.781-0.703q-0.75-0.75-0.75-1.781t0.75-1.781l1.078-1.078-0.328-0.328q-0.75-0.75-0.75-1.781t0.727-1.758 1.758-0.727 1.781 0.727 0.75 1.758-0.75 1.781l-0.328 0.328 0.703 0.75zM15.516 11.016q-1.031 0-1.781-0.75t-0.75-1.781 0.75-1.758 1.781-0.727q0.844 0 1.5 0.516v-4.5h3.984v1.969h-3v4.5q0 1.031-0.727 1.781t-1.758 0.75zM18 19.5q0-0.656 0.422-1.078t1.078-0.422 1.078 0.422 0.422 1.078-0.422 1.078-1.078 0.422-1.078-0.422-0.422-1.078zM12.984 14.484q0-0.609 0.445-1.055t1.055-0.445 1.055 0.445 0.445 1.055-0.445 1.055-1.055 0.445-1.055-0.445-0.445-1.055zM12.422 20.203l7.781-7.781 1.406 1.406-7.781 7.781zM6 11.016v-4.031h-3v-1.969h8.016v1.969h-3v4.031h-2.016zM3 2.016h8.016v1.969h-8.016v-1.969z" />
|
||||
</vector>
|
4
res/drawable/space_horizontal.xml
Normal file
4
res/drawable/space_horizontal.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M18.984 21v-2.016h2.016v2.016h-2.016zM15 21v-2.016h2.016v2.016h-2.016zM11.016 17.016v-2.016h1.969v2.016h-1.969zM18.984 9v-2.016h2.016v2.016h-2.016zM18.984 3h2.016v2.016h-2.016v-2.016zM3 12.984v-1.969h18v1.969h-18zM11.016 21v-2.016h1.969v2.016h-1.969zM18.984 17.016v-2.016h2.016v2.016h-2.016zM12.984 3v2.016h-1.969v-2.016h1.969zM12.984 6.984v2.016h-1.969v-2.016h1.969zM17.016 3v2.016h-2.016v-2.016h2.016zM9 3v2.016h-2.016v-2.016h2.016zM5.016 3v2.016h-2.016v-2.016h2.016zM6.984 21v-2.016h2.016v2.016h-2.016zM3 17.016v-2.016h2.016v2.016h-2.016zM5.016 6.984v2.016h-2.016v-2.016h2.016zM3 21v-2.016h2.016v2.016h-2.016z" />
|
||||
</vector>
|
4
res/drawable/space_vertical.xml
Normal file
4
res/drawable/space_vertical.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M15 12.984v-1.969h2.016v1.969h-2.016zM15 21v-2.016h2.016v2.016h-2.016zM15 5.016v-2.016h2.016v2.016h-2.016zM18.984 9v-2.016h2.016v2.016h-2.016zM18.984 3h2.016v2.016h-2.016v-2.016zM18.984 12.984v-1.969h2.016v1.969h-2.016zM18.984 21v-2.016h2.016v2.016h-2.016zM11.016 21v-18h1.969v18h-1.969zM18.984 17.016v-2.016h2.016v2.016h-2.016zM6.984 5.016v-2.016h2.016v2.016h-2.016zM3 17.016v-2.016h2.016v2.016h-2.016zM3 21v-2.016h2.016v2.016h-2.016zM3 12.984v-1.969h2.016v1.969h-2.016zM6.984 12.984v-1.969h2.016v1.969h-2.016zM6.984 21v-2.016h2.016v2.016h-2.016zM3 5.016v-2.016h2.016v2.016h-2.016zM3 9v-2.016h2.016v2.016h-2.016z" />
|
||||
</vector>
|
4
res/drawable/sun.xml
Normal file
4
res/drawable/sun.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M12 18q2.484 0 4.242-1.758t1.758-4.242-1.758-4.242-4.242-1.758v12zM20.016 15.328v4.688h-4.688l-3.328 3.281-3.328-3.281h-4.688v-4.688l-3.281-3.328 3.281-3.328v-4.688h4.688l3.328-3.281 3.328 3.281h4.688v4.688l3.281 3.328z" />
|
||||
</vector>
|
4
res/drawable/touch.xml
Normal file
4
res/drawable/touch.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M18.844 15.891q0.891 0.422 0.891 1.359v0.188l-0.75 5.297q-0.047 0.563-0.469 0.914t-0.984 0.352h-6.797q-0.609 0-1.031-0.422l-4.969-4.969 0.797-0.797q0.328-0.328 0.797-0.328 0.047 0 0.117 0.023t0.117 0.023l3.422 0.703v-10.734q0-0.656 0.445-1.078t1.055-0.422 1.055 0.422 0.445 1.078v6h0.797q0.141 0 0.516 0.094zM9 11.25q-2.016-1.313-2.016-3.75 0-1.875 1.313-3.188t3.188-1.313 3.188 1.313 1.313 3.188q0 2.484-1.969 3.75v-3.75q0-1.031-0.75-1.758t-1.781-0.727-1.758 0.727-0.727 1.758v3.75z" />
|
||||
</vector>
|
4
res/drawable/translate.xml
Normal file
4
res/drawable/translate.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M15.891 17.016h3.234l-1.641-4.359zM18.516 9.984l4.5 12h-2.016l-1.125-3h-4.734l-1.125 3h-2.016l4.5-12h2.016zM12.891 15.047l-0.797 2.063-3.094-3.094-5.016 4.969-1.406-1.406 5.109-5.016q-1.875-2.063-3-4.547h2.016q0.984 1.875 2.297 3.328 2.156-2.391 3.188-5.344h-11.203v-2.016h7.031v-1.969h1.969v1.969h7.031v2.016h-2.953q-0.469 1.5-1.547 3.398t-2.156 3.117l-0.047 0.047z" />
|
||||
</vector>
|
4
res/drawable/vertical_bottom.xml
Normal file
4
res/drawable/vertical_bottom.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M3.984 18.984h16.031v2.016h-16.031v-2.016zM15.984 12.984l-3.984 4.031-3.984-4.031h3v-9.984h1.969v9.984h3z" />
|
||||
</vector>
|
4
res/drawable/vertical_top.xml
Normal file
4
res/drawable/vertical_top.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M3.984 3h16.031v2.016h-16.031v-2.016zM8.016 11.016l3.984-4.031 3.984 4.031h-3v9.984h-1.969v-9.984h-3z" />
|
||||
</vector>
|
4
res/drawable/vibration.xml
Normal file
4
res/drawable/vibration.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M15.984 18.984v-13.969h-7.969v13.969h7.969zM16.5 3q0.656 0 1.078 0.422t0.422 1.078v15q0 0.656-0.422 1.078t-1.078 0.422h-9q-0.656 0-1.078-0.422t-0.422-1.078v-15q0-0.656 0.422-1.078t1.078-0.422h9zM18.984 17.016v-10.031h2.016v10.031h-2.016zM21.984 9h2.016v6h-2.016v-6zM3 17.016v-10.031h2.016v10.031h-2.016zM0 15v-6h2.016v6h-2.016z" />
|
||||
</vector>
|
4
res/drawable/visible.xml
Normal file
4
res/drawable/visible.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M12 9q1.219 0 2.109 0.891t0.891 2.109-0.891 2.109-2.109 0.891-2.109-0.891-0.891-2.109 0.891-2.109 2.109-0.891zM12 17.016q2.063 0 3.539-1.477t1.477-3.539-1.477-3.539-3.539-1.477-3.539 1.477-1.477 3.539 1.477 3.539 3.539 1.477zM12 4.5q3.703 0 6.703 2.063t4.313 5.438q-1.313 3.375-4.313 5.438t-6.703 2.063-6.703-2.063-4.313-5.438q1.313-3.375 4.313-5.438t6.703-2.063z" />
|
||||
</vector>
|
4
res/drawable/voice.xml
Normal file
4
res/drawable/voice.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:tint="?android:textColorPrimary" android:height="24.0dip" android:width="24.0dip" android:viewportWidth="24.0" android:viewportHeight="24.0">
|
||||
<path android:fillColor="#ff000000" android:pathData="M17.297 12h1.688q0 2.531-1.758 4.43t-4.242 2.273v3.281h-1.969v-3.281q-2.484-0.375-4.242-2.273t-1.758-4.43h1.688q0 2.203 1.57 3.656t3.727 1.453 3.727-1.453 1.57-3.656zM12 15q-1.219 0-2.109-0.891t-0.891-2.109v-6q0-1.219 0.891-2.109t2.109-0.891 2.109 0.891 0.891 2.109v6q0 1.219-0.891 2.109t-2.109 0.891z" />
|
||||
</vector>
|
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content">
|
||||
<EditText android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10dp"/>
|
||||
<EditText android:id="@+id/key_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10dp"/>
|
||||
</LinearLayout>
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Vlastní rozvržení</string>
|
||||
<string name="pref_layouts_add">Přidat alternativní rozložení</string>
|
||||
<string name="pref_layouts_item">Rozložení %1$d: %2$s</string>
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Vlastní rozvržení</string>
|
||||
<string name="pref_show_numpad_title">Zobrazit NumPad</string>
|
||||
<string name="pref_show_numpad_never">Nikdy</string>
|
||||
<string name="pref_show_numpad_landscape">Pouze v režimu na šířku</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Velmi dlouhá</string>
|
||||
<string name="pref_key_horizontal_space">Horizontální mezery mezi klávesami</string>
|
||||
<string name="pref_key_vertical_space">Vertikální mezery mezi klávesami</string>
|
||||
<string name="pref_category_advanced">Pokročilé</string>
|
||||
<string name="pref_custom_layout_title">Vlastní rozvržení</string>
|
||||
<string name="pref_custom_layout_summary">Více informací naleznete ve zdrojovém kódu. Tato možnost není určena pro běžné užití.</string>
|
||||
<string name="pref_vibration_e_disabled">Deaktivovány</string>
|
||||
<string name="pref_vibration_e_system">Dle systému</string>
|
||||
<string name="pref_vibration_e_strong">Silné</string>
|
||||
@@ -100,5 +101,4 @@
|
||||
<string name="key_descr_º">Indikátor řadové číslovky</string>
|
||||
<string name="key_descr_superscript">Horní index</string>
|
||||
<string name="key_descr_subscript">Dolní index</string>
|
||||
<string name="pref_category_advanced">Pokročilé</string>
|
||||
</resources>
|
||||
|
@@ -12,10 +12,8 @@
|
||||
<string name="pref_key_activated_opacity">Deckkraft gedrückter Tasten anpassen</string>
|
||||
<string name="pref_layout_e_system">Systemeinstellung</string>
|
||||
<string name="pref_layout_e_custom">Eigenes Layout</string>
|
||||
<string name="pref_layouts_add">Alternatives Layout hinzufügen</string>
|
||||
<string name="pref_layouts_item">Layout %1$d: %2$s</string>
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Eigenes Layout</string>
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</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>
|
||||
@@ -26,8 +24,8 @@
|
||||
<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_extra_keys_custom">Benutzerdefinierte Tasten hinzufügen</string>
|
||||
<string name="pref_extra_keys_internal">Tasten auswählen, die der Tastatur hinzugefügt werden sollen</string>
|
||||
<!-- <string name="pref_extra_keys_custom">Add custom keys</string> -->
|
||||
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
|
||||
<string name="pref_second_layout_title">Zweites Layout</string>
|
||||
<string name="pref_second_layout_none">Keines</string>
|
||||
<string name="pref_category_typing">Tippen</string>
|
||||
@@ -44,8 +42,8 @@
|
||||
<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_pin_entry_enabled_title">PIN-Eingabe-Layout</string>
|
||||
<string name="pref_pin_entry_enabled_summary">Für die Nummern-, Datums- und Telefonnummern-Eingabe</string>
|
||||
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
|
||||
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
|
||||
<string name="pref_category_style">Design</string>
|
||||
<string name="pref_margin_bottom_title">Unterer Abstand</string>
|
||||
<string name="pref_keyboard_height_title">Höhe der Tastatur</string>
|
||||
@@ -67,11 +65,14 @@
|
||||
<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_vibration_e_disabled">Deaktiviert</string>
|
||||
<string name="pref_vibration_e_system">System</string>
|
||||
<string name="pref_vibration_e_strong">Stark</string>
|
||||
<string name="pref_vibration_e_medium">Mittel</string>
|
||||
<string name="pref_vibration_e_light">Schwach</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>
|
||||
@@ -82,23 +83,22 @@
|
||||
<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 Github. Dort können auch Bugs gemeldet werden.</string>
|
||||
<string name="launcher_tryhere">Nach Aktivierung kannst du die Tastatur hier ausprobieren:</string>
|
||||
<string name="key_descr_capslock">Feststelltaste</string>
|
||||
<string name="key_descr_switch_greekmath">Griechische & mathematische Symbole</string>
|
||||
<string name="key_descr_voice_typing">Spracheingabe</string>
|
||||
<string name="key_descr_copy">Kopieren</string>
|
||||
<string name="key_descr_paste">Einfügen</string>
|
||||
<string name="key_descr_cut">Ausschneiden</string>
|
||||
<string name="key_descr_selectAll">Alles auswählen</string>
|
||||
<string name="key_descr_shareText">Text teilen</string>
|
||||
<string name="key_descr_pasteAsPlainText">Unformatiert einfügen</string>
|
||||
<string name="key_descr_undo">Rückgängig</string>
|
||||
<string name="key_descr_redo">Wiederholen</string>
|
||||
<string name="key_descr_replaceText">Ersetzen</string>
|
||||
<string name="key_descr_textAssist">Assistieren</string>
|
||||
<string name="key_descr_autofill">Automatische Vervollständigung</string>
|
||||
<string name="key_descr_ª">Ordinalzeichen</string>
|
||||
<string name="key_descr_º">Ordinalzeichen</string>
|
||||
<string name="key_descr_superscript">Hochgestellt</string>
|
||||
<string name="key_descr_subscript">Tiefgestellt</string>
|
||||
<string name="pref_category_advanced">Erweitert</string>
|
||||
<!-- <string name="key_descr_capslock">Caps lock</string> -->
|
||||
<!-- <string name="key_descr_switch_greekmath">Greek & math symbols</string> -->
|
||||
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
|
||||
<!-- <string name="key_descr_copy">Copy</string> -->
|
||||
<!-- <string name="key_descr_paste">Paste</string> -->
|
||||
<!-- <string name="key_descr_cut">Cut</string> -->
|
||||
<!-- <string name="key_descr_selectAll">Select all</string> -->
|
||||
<!-- <string name="key_descr_shareText">Share text</string> -->
|
||||
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
|
||||
<!-- <string name="key_descr_undo">Undo</string> -->
|
||||
<!-- <string name="key_descr_redo">Redo</string> -->
|
||||
<!-- <string name="key_descr_replaceText">Replace</string> -->
|
||||
<!-- <string name="key_descr_textAssist">Assist</string> -->
|
||||
<!-- <string name="key_descr_autofill">Autofill</string> -->
|
||||
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Formato personalizado</string>
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Formato personalizado</string>
|
||||
<string name="pref_show_numpad_title">Mostrar pad numérico</string>
|
||||
<string name="pref_show_numpad_never">Nunca</string>
|
||||
<string name="pref_show_numpad_landscape">Solo en modo paisaje</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Muy lejana</string>
|
||||
<string name="pref_key_horizontal_space">Espaciado horizontal entre las teclas</string>
|
||||
<string name="pref_key_vertical_space">Espaciado vertical entre las teclas</string>
|
||||
<string name="pref_category_advanced">Avanzado</string>
|
||||
<string name="pref_custom_layout_title">Formato personalizado</string>
|
||||
<string name="pref_custom_layout_summary">Revisar el código fuente. Esta opción no está pensada para ser usada.</string>
|
||||
<string name="pref_vibration_e_disabled">Deshabilitada</string>
|
||||
<string name="pref_vibration_e_system">Sistema</string>
|
||||
<string name="pref_vibration_e_strong">Fuerte</string>
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<string name="pref_category_advanced">Avanzado</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">طرح صفارشی</string>
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">طرح شخصی</string>
|
||||
<string name="pref_show_numpad_title">نمایش پد شمارهها</string>
|
||||
<string name="pref_show_numpad_never">هرگز</string>
|
||||
<string name="pref_show_numpad_landscape">فقط در حالت افقی</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">بسیار دور</string>
|
||||
<string name="pref_key_horizontal_space">فاصله افقی بین کلیدها</string>
|
||||
<string name="pref_key_vertical_space">فاصله عمودی بین کلیدها</string>
|
||||
<string name="pref_category_advanced">پیشرفته</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> -->
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<string name="pref_category_advanced">پیشرفته</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Disposition personnalisée</string>
|
||||
<string name="pref_layouts_add">Ajouter un clavier alternatif</string>
|
||||
<string name="pref_layouts_item">Disposition %1$d: %2$s</string>
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Disposition personnalisée</string>
|
||||
<string name="pref_show_numpad_title">Afficher le pavé numérique</string>
|
||||
<string name="pref_show_numpad_never">Jamais</string>
|
||||
<string name="pref_show_numpad_landscape">Seulement en mode paysage</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Très longue</string>
|
||||
<string name="pref_key_horizontal_space">Espacement horizontal entre les touches</string>
|
||||
<string name="pref_key_vertical_space">Espacement vertical entre les touches</string>
|
||||
<string name="pref_category_advanced">Avancé</string>
|
||||
<string name="pref_custom_layout_title">Disposition personnalisée</string>
|
||||
<string name="pref_custom_layout_summary">Cette option n\'est pas faite pour être utilisée.</string>
|
||||
<string name="pref_vibration_e_disabled">Désactivé</string>
|
||||
<string name="pref_vibration_e_system">Système</string>
|
||||
<string name="pref_vibration_e_strong">Fort</string>
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<string name="pref_category_advanced">Avancé</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</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> -->
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Molto distante</string>
|
||||
<string name="pref_key_horizontal_space">Spazio orizzontale tra i tasti</string>
|
||||
<string name="pref_key_vertical_space">Spazio verticale tra i tasti</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
|
||||
<!-- <string name="pref_vibration_e_system">System</string> -->
|
||||
<!-- <string name="pref_vibration_e_strong">Strong</string> -->
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</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> -->
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">매우 넓음</string>
|
||||
<string name="pref_key_horizontal_space">키보드 양 옆 간격</string>
|
||||
<string name="pref_key_vertical_space">키보드 세로 간격</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
|
||||
<!-- <string name="pref_vibration_e_system">System</string> -->
|
||||
<!-- <string name="pref_vibration_e_strong">Strong</string> -->
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Pielāgots izkārtojums</string>
|
||||
<string name="pref_layouts_add">Pievienot aizstājējizkārtojumu</string>
|
||||
<string name="pref_layouts_item">Izkārtojums %1$d: %2$s</string>
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Pielāgots izkārtojums</string>
|
||||
<string name="pref_show_numpad_title">Rādīt ciparnīcu</string>
|
||||
<string name="pref_show_numpad_never">Nekad</string>
|
||||
<string name="pref_show_numpad_landscape">Tikai guleniskajā skatā</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Ļoti tāls</string>
|
||||
<string name="pref_key_horizontal_space">Līmeniskais attālums starp taustiņiem</string>
|
||||
<string name="pref_key_vertical_space">Stateniskais attālums starp taustiņiem</string>
|
||||
<string name="pref_category_advanced">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">Atspējota</string>
|
||||
<string name="pref_vibration_e_system">Sistēmas</string>
|
||||
<string name="pref_vibration_e_strong">Spēcīga</string>
|
||||
@@ -102,5 +103,4 @@
|
||||
<string name="key_descr_º">Kārtas rādītājs</string>
|
||||
<string name="key_descr_superscript">Augšraksts</string>
|
||||
<string name="key_descr_subscript">Apakšraksts</string>
|
||||
<string name="pref_category_advanced">Papildu</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Własny układ</string>
|
||||
<string name="pref_layouts_add">Dodaj dodatkowy układ</string>
|
||||
<string name="pref_layouts_item">Układ %1$d: %2$s</string>
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Własny układ</string>
|
||||
<string name="pref_show_numpad_title">Pokaż klawiaturę numeryczną</string>
|
||||
<string name="pref_show_numpad_never">Nigdy</string>
|
||||
<string name="pref_show_numpad_landscape">Tylko w orientacji poziomej</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<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>
|
||||
@@ -100,5 +101,4 @@
|
||||
<string name="key_descr_º">Wskaźnik porządkowy (męski)</string>
|
||||
<string name="key_descr_superscript">Indeks górny</string>
|
||||
<string name="key_descr_subscript">Indeks dolny</string>
|
||||
<string name="pref_category_advanced">Zaawansowane</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Layout personalizado</string>
|
||||
<string name="pref_layouts_add">Adicione um layout alternativo</string>
|
||||
<string name="pref_layouts_item">Layout %1$d: %2$s</string>
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Layout personalizado</string>
|
||||
<string name="pref_show_numpad_title">Mostrar Teclado Numérico</string>
|
||||
<string name="pref_show_numpad_never">Nunca</string>
|
||||
<string name="pref_show_numpad_landscape">Somente no modo paisagem</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Muito longo</string>
|
||||
<string name="pref_key_horizontal_space">Distância horizontal entre teclas</string>
|
||||
<string name="pref_key_vertical_space">Distância vertical entre teclas</string>
|
||||
<string name="pref_category_advanced">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">Desabilitado</string>
|
||||
<string name="pref_vibration_e_system">Sistema</string>
|
||||
<string name="pref_vibration_e_strong">Intenso</string>
|
||||
@@ -100,5 +101,4 @@
|
||||
<string name="key_descr_º">Indicador Ordinal</string>
|
||||
<string name="key_descr_superscript">Sobrescrito</string>
|
||||
<string name="key_descr_subscript">Subscrito</string>
|
||||
<string name="pref_category_advanced">Avançado</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Aranjament personalizat</string>
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Aranjament personalizat</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>
|
||||
@@ -67,6 +65,9 @@
|
||||
<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> -->
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<string name="pref_category_advanced">Setări avansate</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Пользовательская раскладка</string>
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Пользовательская раскладка</string>
|
||||
<string name="pref_show_numpad_title">Показывать NumPad</string>
|
||||
<string name="pref_show_numpad_never">Никогда</string>
|
||||
<string name="pref_show_numpad_landscape">Только в ландшафтном режиме</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Очень далеко</string>
|
||||
<string name="pref_key_horizontal_space">Горизонтальное расстояние между клавишами</string>
|
||||
<string name="pref_key_vertical_space">Расстояние по вертикали между клавишами</string>
|
||||
<string name="pref_category_advanced">Расширенные настройки</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> -->
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<string name="pref_category_advanced">Расширенные настройки</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</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> -->
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Çok uzun</string>
|
||||
<string name="pref_key_horizontal_space">Tuşlar arasındaki yatay boşluk</string>
|
||||
<string name="pref_key_vertical_space">Tuşlar arasındaki dikey boşluk</string>
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> -->
|
||||
<!-- <string name="pref_vibration_e_disabled">Disabled</string> -->
|
||||
<!-- <string name="pref_vibration_e_system">System</string> -->
|
||||
<!-- <string name="pref_vibration_e_strong">Strong</string> -->
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<!-- <string name="pref_category_advanced">Advanced</string> -->
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Tùy chỉnh bố cục</string>
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">Tùy chỉnh bố cục</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>
|
||||
@@ -67,6 +65,9 @@
|
||||
<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> -->
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<string name="pref_category_advanced">Nâng cao</string>
|
||||
</resources>
|
||||
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">自定义布局</string>
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<string name="pref_custom_layout_title">自定义布局</string>
|
||||
<string name="pref_show_numpad_title">显示数字小键盘</string>
|
||||
<string name="pref_show_numpad_never">从不</string>
|
||||
<string name="pref_show_numpad_landscape">只在横屏显示</string>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">非常长</string>
|
||||
<string name="pref_key_horizontal_space">按键的左右边距</string>
|
||||
<string name="pref_key_vertical_space">按键的上下边距</string>
|
||||
<string name="pref_category_advanced">高级设置</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>
|
||||
@@ -100,5 +101,4 @@
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<string name="pref_category_advanced">高级设置</string>
|
||||
</resources>
|
||||
|
@@ -3,4 +3,7 @@
|
||||
<declare-styleable name="ExtraKeyCheckBoxPreference">
|
||||
<attr name="index" format="integer"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="LayoutListPreference">
|
||||
<attr name="defaultString" format="string"/>
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
|
@@ -22,7 +22,6 @@
|
||||
<item>hebr_1_il</item>
|
||||
<item>hebr_2_il</item>
|
||||
<item>latn_azerty_fr</item>
|
||||
<item>latn_bepo_fr</item>
|
||||
<item>latn_bone</item>
|
||||
<item>latn_neo2</item>
|
||||
<item>latn_qwerty_br</item>
|
||||
@@ -39,10 +38,8 @@
|
||||
<item>latn_qwertz_cz</item>
|
||||
<item>latn_qwertz_cz_multifunctional</item>
|
||||
<item>latn_qwertz_de</item>
|
||||
<item>latn_qwertz_fr_ch</item>
|
||||
<item>latn_qwertz_hu</item>
|
||||
<item>latn_qwertz_sk</item>
|
||||
<item>urdu_phonetic_ur</item>
|
||||
<item>custom</item>
|
||||
</string-array>
|
||||
<string-array name="pref_layout_entries">
|
||||
@@ -66,7 +63,6 @@
|
||||
<item>Hebrew 1</item>
|
||||
<item>Hebrew 2</item>
|
||||
<item>AZERTY (Français)</item>
|
||||
<item>BEPO (Français)</item>
|
||||
<item>Bone</item>
|
||||
<item>Neo 2</item>
|
||||
<item>QWERTY (Brasileiro)</item>
|
||||
@@ -83,10 +79,8 @@
|
||||
<item>QWERTZ (Czech)</item>
|
||||
<item>QWERTZ Multifunctional (Czech)</item>
|
||||
<item>QWERTZ (Deutsch)</item>
|
||||
<item>QWERTZ (Swiss French)</item>
|
||||
<item>QWERTZ (Magyar)</item>
|
||||
<item>QWERTZ (Slovak)</item>
|
||||
<item>Urdu Phonetic</item>
|
||||
<item>@string/pref_layout_e_custom</item>
|
||||
</string-array>
|
||||
<integer-array name="layout_ids">
|
||||
@@ -110,7 +104,6 @@
|
||||
<item>@xml/hebr_1_il</item>
|
||||
<item>@xml/hebr_2_il</item>
|
||||
<item>@xml/latn_azerty_fr</item>
|
||||
<item>@xml/latn_bepo_fr</item>
|
||||
<item>@xml/latn_bone</item>
|
||||
<item>@xml/latn_neo2</item>
|
||||
<item>@xml/latn_qwerty_br</item>
|
||||
@@ -127,10 +120,8 @@
|
||||
<item>@xml/latn_qwertz_cz</item>
|
||||
<item>@xml/latn_qwertz_cz_multifunctional</item>
|
||||
<item>@xml/latn_qwertz_de</item>
|
||||
<item>@xml/latn_qwertz_fr_ch</item>
|
||||
<item>@xml/latn_qwertz_hu</item>
|
||||
<item>@xml/latn_qwertz_sk</item>
|
||||
<item>@xml/urdu_phonetic_ur</item>
|
||||
<item>-1</item>
|
||||
</integer-array>
|
||||
</resources>
|
@@ -14,8 +14,6 @@
|
||||
<string name="pref_layout_e_custom">Custom layout</string>
|
||||
<string name="pref_layouts_add">Add an alternate layout</string>
|
||||
<string name="pref_layouts_item">Layout %1$d: %2$s</string>
|
||||
<string name="pref_layouts_remove_custom">Remove layout</string>
|
||||
<string name="pref_custom_layout_title">Custom layout</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>
|
||||
@@ -67,6 +65,9 @@
|
||||
<string name="pref_swipe_dist_e_very_far">Very far</string>
|
||||
<string name="pref_key_horizontal_space">Horizontal spacing between the keys</string>
|
||||
<string name="pref_key_vertical_space">Vertical spacing between the keys</string>
|
||||
<string name="pref_category_advanced">Advanced</string>
|
||||
<string name="pref_custom_layout_title">Custom layout</string>
|
||||
<string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string>
|
||||
<string name="pref_vibration_e_disabled">Disabled</string>
|
||||
<string name="pref_vibration_e_system">System</string>
|
||||
<string name="pref_vibration_e_strong">Strong</string>
|
||||
@@ -100,6 +101,4 @@
|
||||
<string name="key_descr_º">Ordinal Indicator</string>
|
||||
<string name="key_descr_superscript">Superscript</string>
|
||||
<string name="key_descr_subscript">Subscript</string>
|
||||
<!-- Unused -->
|
||||
<string name="pref_category_advanced">Advanced</string>
|
||||
</resources>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
<row height="0.95">
|
||||
<key width="1.7" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key4="switch_numeric"/>
|
||||
<key width="1.1" key0="fn" key1="loc alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.4" key0="space" key7="switch_forward" key8="switch_backward" key5="cursor_left" key6="cursor_right" slider="true"/>
|
||||
<key width="1.1" key7="up" key6="right" key5="left" key8="down"/>
|
||||
<key width="1.7" key0="enter" key1="loc voice_typing" key2="action"/>
|
||||
<key width="4.4" key0="space" key7="switch_forward" key8="switch_backward" key5="left" key6="right" slider="true"/>
|
||||
<key width="1.1" key0="loc voice_typing" key7="up" key6="right" key5="left" key8="down"/>
|
||||
<key width="1.7" key0="enter" key2="action"/>
|
||||
</row>
|
||||
|
@@ -1,40 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Inspired by the bépo layout, but adapted to smartphone -->
|
||||
<keyboard name="BEPO (Français)" script="latin">
|
||||
<row>
|
||||
<key width="1.1" key0="b" key1="esc" key2="1" key4="|"/>
|
||||
<key width="1.1" key0="é" key2="2" key4="è"/>
|
||||
<key width="1.1" key0="p" key2="3"/>
|
||||
<key width="1.1" key0="o" key2="4" key4="accent_circonflexe"/>
|
||||
<key width="1.1" key0="v" key2="5" key4="{"/>
|
||||
<key width="1.1" key0="d" key2="6" key4="}"/>
|
||||
<key width="1.1" key0="l" key2="7" key4="("/>
|
||||
<key width="1.1" key0="j" key2="8" key4=")"/>
|
||||
<key width="1.1" key0="z" key2="9" key4="["/>
|
||||
<key width="1.1" key0="w" key2="0" key4="]"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.1" key0="a" key1="tab" key4="à"/>
|
||||
<key width="1.1" key0="u" key1="$" key4="ù"/>
|
||||
<key width="1.1" key0="i" key4="&"/>
|
||||
<key width="1.1" key0="e" key1="+" key2="accent_trema" key4="€"/>
|
||||
<key width="1.1" key0="c" key1="=" key4="ç"/>
|
||||
<key width="1.1" key0="t" key1="^" key4=";"/>
|
||||
<key width="1.1" key0="s" key4="!"/>
|
||||
<key width="1.1" key0="r" key4="\?"/>
|
||||
<key width="1.1" key0="n" key1="`" key2="'" key4=":"/>
|
||||
<key width="1.1" key0="m" key2="""/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift" key2="capslock" key3="<"/>
|
||||
<key key0="y" key4="%"/>
|
||||
<key key0="x" key4="\@"/>
|
||||
<key key0="k" key4="~"/>
|
||||
<key key0="." key1="\#" key4="," key6="-" key8="_"/>
|
||||
<key key0="q" key4="*"/>
|
||||
<key key0="g" key3="/" key4="\\"/>
|
||||
<key key0="h"/>
|
||||
<key key0="f"/>
|
||||
<key width="1.5" key0="backspace" key2="delete" key3=">"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Freely adapted from standard SN 074021:1999-01 by Eluc -->
|
||||
<keyboard name="QWERTZ (Swiss French)" script="latin">
|
||||
<row>
|
||||
<key key0="q" key1="§" key2="1" key4="esc"/>
|
||||
<key key0="w" key1="^" key2="2" key3=""" key4="\@"/>
|
||||
<key key0="e" key2="3" key3="\#" key4="€"/>
|
||||
<key key0="r" key2="4" key3="$" key4="f11_placeholder"/>
|
||||
<key key0="t" key2="5" key3="%" key4="f12_placeholder"/>
|
||||
<key key0="z" key2="6" key3="&"/>
|
||||
<key key0="u" key1="ù" key2="7" key3="{" key4="}"/>
|
||||
<key key0="i" key2="8" key3="[" key4="]"/>
|
||||
<key key0="o" key1="œ" key2="9" key3="(" key4=")"/>
|
||||
<key key0="p" key2="0" key3="=" key4="\?"/>
|
||||
<key key0="è" key2="ü" key3="!"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="a" key1="æ" key2="tab"/>
|
||||
<key key0="s" key1="`" key3="ß" key4="£"/>
|
||||
<key key0="d"/>
|
||||
<key key0="f" key1="~"/>
|
||||
<key key0="g"/>
|
||||
<key key0="h" key3="+"/>
|
||||
<key key0="j" key3="*"/>
|
||||
<key key0="k" key3="/"/>
|
||||
<key key0="l" key1="'" key3="\\"/>
|
||||
<key key0="é" key1="ë" key2="ö"/>
|
||||
<key key0="à" key1="ï" key2="ä"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift" key2="loc capslock"/>
|
||||
<key key0="y" key1=">" key2="|" key3="<"/>
|
||||
<key key0="x"/>
|
||||
<key key0="c" key3="ç"/>
|
||||
<key key0="v"/>
|
||||
<key key0="b" key1=";" key3=","/>
|
||||
<key key0="n" key1=":" key3="."/>
|
||||
<key key0="m" key1="_" key3="-"/>
|
||||
<key key0="ê" key1="â" key2="î" key3="ô" key4="û"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -11,8 +11,7 @@
|
||||
<subtype android:label="%s" android:languageTag="en-US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_es,extra_keys=accent_aigu:á:é:í:ó:ú|accent_tilde:ñ|accent_grave|accent_trema|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fa" android:imeSubtypeLocale="fa_IR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=arab_pc_ir"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-CH" android:imeSubtypeLocale="fr_CH" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_fr_ch,extra_keys=accent_grave:à:è:ù|accent_aigu:é|accent_circonflexe:â:ê:ô|accent_cedille:ç|accent_trema:ë:ï:ü:ÿ|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-FR" android:imeSubtypeLocale="fr_FR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:à:è:ù|accent_aigu:é|accent_circonflexe:â:ê:ô|accent_cedille:ç|accent_trema:ë:ï:ü:ÿ|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fr" android:imeSubtypeLocale="fr_FR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:à:è:ù|accent_aigu:é|accent_circonflexe:â:ê:ô|accent_cedille:ç|accent_trema:ë:ï:ü:ÿ|€"/>
|
||||
<subtype android:label="%s" android:languageTag="he" android:imeSubtypeLocale="he_IL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hebrew,default_layout=hebr_1_il,extra_keys=₪|€"/>
|
||||
<subtype android:label="%s" android:languageTag="hi" android:imeSubtypeLocale="hi_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/>
|
||||
<subtype android:label="%s" android:languageTag="hu" android:imeSubtypeLocale="hu_HU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_hu,extra_keys=accent_aigu:á:é:í:ó:ú|accent_trema:ö:ü|accent_ogonek|accent_double_aigu:ő:ű|€"/>
|
||||
|
@@ -1,49 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceCategory android:title="@string/pref_category_layout">
|
||||
<juloo.keyboard2.LayoutsPreference/>
|
||||
<PreferenceCategory android:icon="@drawable/keyboards_white" android:title="@string/pref_category_layout">
|
||||
<juloo.keyboard2.LayoutsPreference android:icon="@drawable/keyboards_white"/>
|
||||
<PreferenceScreen android:title="@string/pref_extra_keys_title">
|
||||
<PreferenceCategory android:title="@string/pref_extra_keys_custom">
|
||||
<juloo.keyboard2.CustomExtraKeysPreference/>
|
||||
</PreferenceCategory>
|
||||
<juloo.keyboard2.ExtraKeysPreference android:title="@string/pref_extra_keys_internal"/>
|
||||
</PreferenceScreen>
|
||||
<CheckBoxPreference android:key="number_row" android:title="@string/pref_number_row_title" android:summary="@string/pref_number_row_summary" android:defaultValue="false"/>
|
||||
<ListPreference android:key="show_numpad" android:title="@string/pref_show_numpad_title" android:summary="%s" android:defaultValue="1" android:entries="@array/pref_show_numpad_entries" android:entryValues="@array/pref_show_numpad_values"/>
|
||||
<ListPreference android:key="numpad_layout" android:title="@string/pref_numpad_layout" android:summary="%s" android:defaultValue="high_first" android:entries="@array/pref_numpad_layout_entries" android:entryValues="@array/pref_numpad_layout_values"/>
|
||||
<CheckBoxPreference android:icon="@drawable/clip" android:key="number_row" android:title="@string/pref_number_row_title" android:summary="@string/pref_number_row_summary" android:defaultValue="false"/>
|
||||
<ListPreference android:icon="@drawable/numpad" android:key="show_numpad" android:title="@string/pref_show_numpad_title" android:summary="%s" android:defaultValue="1" android:entries="@array/pref_show_numpad_entries" android:entryValues="@array/pref_show_numpad_values"/>
|
||||
<ListPreference android:icon="@drawable/numpad" android:key="numpad_layout" android:title="@string/pref_numpad_layout" android:summary="%s" android:defaultValue="high_first" android:entries="@array/pref_numpad_layout_entries" android:entryValues="@array/pref_numpad_layout_values"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_typing">
|
||||
<ListPreference android:key="swipe_dist" android:title="@string/pref_swipe_dist_title" android:summary="@string/pref_swipe_dist_summary" android:defaultValue="15" android:entries="@array/pref_swipe_dist_entries" android:entryValues="@array/pref_swipe_dist_values"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="longpress_timeout" android:title="@string/pref_long_timeout_title" android:summary="%sms" android:defaultValue="600" min="50" max="2000"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="longpress_interval" android:title="@string/pref_long_interval_title" android:summary="%sms" android:defaultValue="25" min="5" max="100"/>
|
||||
<PreferenceCategory android:icon="@drawable/ic_lock" android:title="@string/pref_category_typing">
|
||||
<ListPreference android:icon="@drawable/touch" android:key="swipe_dist" android:title="@string/pref_swipe_dist_title" android:summary="@string/pref_swipe_dist_summary" android:defaultValue="15" android:entries="@array/pref_swipe_dist_entries" android:entryValues="@array/pref_swipe_dist_values"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/touch" android:key="longpress_timeout" android:title="@string/pref_long_timeout_title" android:summary="%sms" android:defaultValue="600" min="50" max="2000"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/touch" android:key="longpress_interval" android:title="@string/pref_long_interval_title" android:summary="%sms" android:defaultValue="25" min="5" max="100"/>
|
||||
<CheckBoxPreference android:key="lock_double_tap" android:title="@string/pref_lock_double_tap_title" android:summary="@string/pref_lock_double_tap_summary" android:defaultValue="false"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_behavior">
|
||||
<PreferenceCategory android:icon="@drawable/settings_white" android:title="@string/pref_category_behavior">
|
||||
<CheckBoxPreference android:key="autocapitalisation" android:title="@string/pref_autocapitalisation_title" android:summary="@string/pref_autocapitalisation_summary" android:defaultValue="true"/>
|
||||
<CheckBoxPreference android:key="switch_input_immediate" android:title="@string/pref_switch_input_immediate_title" android:summary="@string/pref_switch_input_immediate_summary" android:defaultValue="false"/>
|
||||
<ListPreference android:key="vibration_behavior" android:title="@string/pref_vibrate_title" android:summary="@string/pref_vibrate_summary" android:defaultValue="system" android:entries="@array/pref_vibration_entries" android:entryValues="@array/pref_vibration_values"/>
|
||||
<CheckBoxPreference android:icon="@drawable/keyboard_hide" android:key="switch_input_immediate" android:title="@string/pref_switch_input_immediate_title" android:summary="@string/pref_switch_input_immediate_summary" android:defaultValue="false"/>
|
||||
<ListPreference android:icon="@drawable/vibration" android:key="vibration_behavior" android:title="@string/pref_vibrate_title" android:summary="@string/pref_vibrate_summary" android:defaultValue="system" android:entries="@array/pref_vibration_entries" android:entryValues="@array/pref_vibration_values"/>
|
||||
<CheckBoxPreference android:key="pin_entry_enabled" android:title="@string/pref_pin_entry_enabled_title" android:summary="@string/pref_pin_entry_enabled_summary" android:defaultValue="true"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_style">
|
||||
<PreferenceCategory android:icon="@drawable/ic_desing" android:title="@string/pref_category_style">
|
||||
<ListPreference android:key="theme" android:title="@string/pref_theme" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_theme_entries" android:entryValues="@array/pref_theme_values"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="label_brightness" android:title="@string/pref_label_brightness" android:summary="%s%%" android:defaultValue="100" min="50" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="keyboard_opacity" android:title="@string/pref_keyboard_opacity" android:summary="%s%%" android:defaultValue="100" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="key_opacity" android:title="@string/pref_key_opacity" android:summary="%s%%" android:defaultValue="100" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="key_activated_opacity" android:title="@string/pref_key_activated_opacity" android:summary="%s%%" android:defaultValue="100" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/sun" android:key="label_brightness" android:title="@string/pref_label_brightness" android:summary="%s%%" android:defaultValue="100" min="50" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/visible" android:key="keyboard_opacity" android:title="@string/pref_keyboard_opacity" android:summary="%s%%" android:defaultValue="100" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/visible" android:key="key_opacity" android:title="@string/pref_key_opacity" android:summary="%s%%" android:defaultValue="100" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/visible" android:key="key_activated_opacity" android:title="@string/pref_key_activated_opacity" android:summary="%s%%" android:defaultValue="100" min="0" max="100"/>
|
||||
<PreferenceScreen android:title="@string/pref_margin_bottom_title">
|
||||
<juloo.common.IntSlideBarPreference android:key="margin_bottom_portrait" android:title="@string/pref_portrait" android:summary="%sdp" android:defaultValue="7" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="margin_bottom_landscape" android:title="@string/pref_landscape" android:summary="%sdp" android:defaultValue="3" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/border_bottom" android:key="margin_bottom_portrait" android:title="@string/pref_portrait" android:summary="%sdp" android:defaultValue="7" min="0" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/border_bottom" android:key="margin_bottom_landscape" android:title="@string/pref_landscape" android:summary="%sdp" android:defaultValue="3" min="0" max="100"/>
|
||||
</PreferenceScreen>
|
||||
<PreferenceScreen android:title="@string/pref_keyboard_height_title">
|
||||
<juloo.common.IntSlideBarPreference android:key="keyboard_height" android:title="@string/pref_portrait" android:summary="%s%%" android:defaultValue="35" min="10" max="50"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="keyboard_height_landscape" android:title="@string/pref_landscape" android:summary="%s%%" android:defaultValue="50" min="20" max="65"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/vertical_top" android:key="keyboard_height" android:title="@string/pref_portrait" android:summary="%s%%" android:defaultValue="35" min="10" max="50"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/vertical_top" android:key="keyboard_height_landscape" android:title="@string/pref_landscape" android:summary="%s%%" android:defaultValue="50" min="20" max="65"/>
|
||||
</PreferenceScreen>
|
||||
<PreferenceScreen android:title="@string/pref_horizontal_margin_title">
|
||||
<juloo.common.IntSlideBarPreference android:key="horizontal_margin_portrait" android:title="@string/pref_portrait" android:summary="%sdp" android:defaultValue="3" min="0" max="30"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="horizontal_margin_landscape" android:title="@string/pref_landscape" android:summary="%sdp" android:defaultValue="28" min="0" max="200"/>
|
||||
</PreferenceScreen>
|
||||
<juloo.common.SlideBarPreference android:key="character_size" android:title="@string/pref_character_size_title" android:summary="@string/pref_character_size_summary" android:defaultValue="1.0" min="0.75" max="1.5"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="key_vertical_space" android:title="@string/pref_key_vertical_space" android:summary="%sdp" android:defaultValue="2" min="0" max="8"/>
|
||||
<juloo.common.SlideBarPreference android:icon="@drawable/font_size" android:key="character_size" android:title="@string/pref_character_size_title" android:summary="@string/pref_character_size_summary" android:defaultValue="1.0" min="0.75" max="1.5"/>
|
||||
<juloo.common.IntSlideBarPreference android:icon="@drawable/border_top" android:key="key_vertical_space" android:title="@string/pref_key_vertical_space" android:summary="%sdp" android:defaultValue="2" min="0" max="8"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="key_horizontal_space" android:title="@string/pref_key_horizontal_space" android:summary="%sdp" android:defaultValue="2" min="0" max="8"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:icon="@drawable/ic_warning" android:title="@string/pref_category_advanced">
|
||||
<EditTextPreference android:icon="@drawable/code" android:key="custom_layout" android:title="@string/pref_custom_layout_title" android:summary="@string/pref_custom_layout_summary" android:inputType="text|textMultiLine|textLongMessage"/>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
@@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<keyboard name="Urdu Phonetic" script="urdu">
|
||||
<row>
|
||||
<key key0="ق" key3=" " key4="esc" key7="1"/>
|
||||
<key key0="و" key2="ؤ" key3="\@" key7="2"/>
|
||||
<key key0="ع" key1="!" key3="\#" key7="3"/>
|
||||
<key key0="ر" key2="ڑ" key3="$" key7="4"/>
|
||||
<key key0="ت" key2="ٹ" key3="%" key7="5"/>
|
||||
<key key0="ے" key3="^" key7="6"/>
|
||||
<key key0="ئ" key2="ء" key3="&" key7="7"/>
|
||||
<key key0="ی" key3="*" key7="8"/>
|
||||
<key key0="ہ" key1="'" key2=""" key3="(" key4=")" key7="9" key8="ۃ"/>
|
||||
<key key0="پ" key1="ٰ" key2="0" key3="؟" key5="ٓ" key7="ٗ" key8="ٖ"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.1" key0="ا" key1="tab" key2="آ" key4="أ"/>
|
||||
<key width="1.1" key0="س" key2="ص"/>
|
||||
<key width="1.1" key0="د" key2="ڈ" key4=" "/>
|
||||
<key width="1.1" key0="ف" key2="پھ"/>
|
||||
<key width="1.15" key0="گ" key1="-" key2="غ" key3="_" key4="گھ"/>
|
||||
<key width="1.1" key0="ھ" key1="=" key2="ح" key3="+"/>
|
||||
<key width="1.1" key0="ج" key1="}" key2="ض" key3="{" key4="جھ"/>
|
||||
<key width="1.1" key0="ک" key1="]" key2="خ" key3="[" key4="کھ"/>
|
||||
<key width="1.15" key0="ل" key1="َ" key3="." key5="ْ" key7="ُ" key8="ِ"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift" key2="loc capslock"/>
|
||||
<key key0="ز" key2="ذ"/>
|
||||
<key key0="ش" key2="ژ"/>
|
||||
<key key0="چ" key2="ث" key3="۔" key4="چھ"/>
|
||||
<key key0="ط" key2="ظ" key3=","/>
|
||||
<key key0="ب" key2="بھ" key3="/" key4="\\"/>
|
||||
<key key0="ن" key2="ں" key3=";" key4=":"/>
|
||||
<key key0="م" key5="ّ" key6="ً" key7="ٌ" key8="ٍ"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
@@ -3,6 +3,7 @@ package juloo.keyboard2;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.Build;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.TypedValue;
|
||||
@@ -27,6 +28,7 @@ final class Config
|
||||
// From preferences
|
||||
/** [null] represent the [system] layout. */
|
||||
public List<KeyboardData> layouts;
|
||||
public KeyboardData custom_layout; // Might be 'null'
|
||||
public boolean show_numpad = false;
|
||||
// From the 'numpad_layout' option, also apply to the numeric pane.
|
||||
public boolean inverse_numpad = false;
|
||||
@@ -112,7 +114,11 @@ final class Config
|
||||
{
|
||||
keyboardHeightPercent = _prefs.getInt("keyboard_height", 35);
|
||||
}
|
||||
layouts = LayoutsPreference.load_from_preferences(res, _prefs);
|
||||
List<String> layout_names = LayoutsPreference.load_from_preferences(_prefs);
|
||||
layouts = new ArrayList<KeyboardData>();
|
||||
for (String l : layout_names)
|
||||
layouts.add(layout_of_string(res, l));
|
||||
custom_layout = KeyboardData.load_string(_prefs.getString("custom_layout", ""));
|
||||
inverse_numpad = _prefs.getString("numpad_layout", "default").equals("low_first");
|
||||
number_row = _prefs.getBoolean("number_row", false);
|
||||
// The baseline for the swipe distance correspond to approximately the
|
||||
@@ -295,7 +301,7 @@ final class Config
|
||||
try { value = _prefs.getInt(pref_name, -1); }
|
||||
catch (Exception e) { value = _prefs.getFloat(pref_name, -1f); }
|
||||
if (value < 0f)
|
||||
value = def;
|
||||
return (def);
|
||||
return (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, dm));
|
||||
}
|
||||
|
||||
@@ -329,6 +335,36 @@ final class Config
|
||||
}
|
||||
}
|
||||
|
||||
/** Obtained from XML. */
|
||||
static List<String> layout_ids_str = null;
|
||||
static TypedArray layout_ids_res = null;
|
||||
|
||||
/** Might return [null] if the selected layout is "system", "custom" or if
|
||||
the name is not recognized. */
|
||||
public KeyboardData layout_of_string(Resources res, String name)
|
||||
{
|
||||
if (layout_ids_str == null)
|
||||
{
|
||||
layout_ids_str = Arrays.asList(res.getStringArray(R.array.pref_layout_values));
|
||||
layout_ids_res = res.obtainTypedArray(R.array.layout_ids);
|
||||
}
|
||||
int i = layout_ids_str.indexOf(name);
|
||||
if (i >= 0)
|
||||
{
|
||||
int id = layout_ids_res.getResourceId(i, 0);
|
||||
if (id > 0)
|
||||
return KeyboardData.load(res, id);
|
||||
// Fallthrough
|
||||
}
|
||||
switch (name)
|
||||
{
|
||||
case "custom": return custom_layout;
|
||||
case "system":
|
||||
case "none":
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
char inverse_numpad_char(char c)
|
||||
{
|
||||
switch (c)
|
||||
@@ -348,7 +384,6 @@ final class Config
|
||||
public static void initGlobalConfig(SharedPreferences prefs, Resources res,
|
||||
IKeyEventHandler handler)
|
||||
{
|
||||
migrate(prefs);
|
||||
_globalConfig = new Config(prefs, res, handler);
|
||||
}
|
||||
|
||||
@@ -361,45 +396,4 @@ final class Config
|
||||
{
|
||||
public void key_up(KeyValue value, Pointers.Modifiers flags);
|
||||
}
|
||||
|
||||
/** Config migrations. */
|
||||
|
||||
private static int CONFIG_VERSION = 1;
|
||||
|
||||
public static void migrate(SharedPreferences prefs)
|
||||
{
|
||||
int saved_version = prefs.getInt("version", 0);
|
||||
Logs.debug_config_migration(saved_version, CONFIG_VERSION);
|
||||
if (saved_version == CONFIG_VERSION)
|
||||
return;
|
||||
SharedPreferences.Editor e = prefs.edit();
|
||||
e.putInt("version", CONFIG_VERSION);
|
||||
// Migrations might run on an empty [prefs] for new installs, in this case
|
||||
// they set the default values of complex options.
|
||||
switch (saved_version) // Fallback switch
|
||||
{
|
||||
case 0:
|
||||
// Primary, secondary and custom layout options are merged into the new
|
||||
// Layouts option. This also sets the default value.
|
||||
List<LayoutsPreference.Layout> l = new ArrayList<LayoutsPreference.Layout>();
|
||||
l.add(migrate_layout(prefs.getString("layout", "system")));
|
||||
String snd_layout = prefs.getString("second_layout", "none");
|
||||
if (snd_layout != null && !snd_layout.equals("none"))
|
||||
l.add(migrate_layout(snd_layout));
|
||||
String custom_layout = prefs.getString("custom_layout", "");
|
||||
if (custom_layout != null && !custom_layout.equals(""))
|
||||
l.add(new LayoutsPreference.CustomLayout(custom_layout));
|
||||
LayoutsPreference.save_to_preferences(e, l);
|
||||
case 1:
|
||||
default: break;
|
||||
}
|
||||
e.commit();
|
||||
}
|
||||
|
||||
private static LayoutsPreference.Layout migrate_layout(String name)
|
||||
{
|
||||
if (name == null || name.equals("system"))
|
||||
return new LayoutsPreference.SystemLayout();
|
||||
return new LayoutsPreference.NamedLayout(name);
|
||||
}
|
||||
}
|
||||
|
@@ -17,12 +17,10 @@ import org.json.JSONException;
|
||||
|
||||
/** Allows to enter custom keys to be added to the keyboard. This shows up at
|
||||
the top of the "Add keys to the keyboard" option. */
|
||||
public class CustomExtraKeysPreference extends ListGroupPreference<String>
|
||||
public class CustomExtraKeysPreference extends ListGroupPreference
|
||||
{
|
||||
/** This pref stores a list of strings encoded as JSON. */
|
||||
static final String KEY = "custom_extra_keys";
|
||||
static final ListGroupPreference.Serializer<String> SERIALIZER =
|
||||
new ListGroupPreference.StringSerializer();
|
||||
|
||||
public CustomExtraKeysPreference(Context context, AttributeSet attrs)
|
||||
{
|
||||
@@ -33,7 +31,7 @@ public class CustomExtraKeysPreference extends ListGroupPreference<String>
|
||||
public static List<KeyValue> get(SharedPreferences prefs)
|
||||
{
|
||||
List<KeyValue> kvs = new ArrayList<KeyValue>();
|
||||
List<String> key_names = load_from_preferences(KEY, prefs, null, SERIALIZER);
|
||||
List<String> key_names = load_from_preferences(KEY, prefs, null);
|
||||
if (key_names != null)
|
||||
{
|
||||
for (String key_name : key_names)
|
||||
@@ -42,26 +40,22 @@ public class CustomExtraKeysPreference extends ListGroupPreference<String>
|
||||
return kvs;
|
||||
}
|
||||
|
||||
String label_of_value(String value, int i) { return value; }
|
||||
|
||||
@Override
|
||||
void select(final SelectionCallback<String> callback)
|
||||
void select(final SelectionCallback callback)
|
||||
{
|
||||
new AlertDialog.Builder(getContext())
|
||||
.setView(R.layout.dialog_edit_text)
|
||||
.setView(R.layout.custom_extra_key_add_dialog)
|
||||
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
{
|
||||
EditText input = (EditText)((AlertDialog)dialog).findViewById(R.id.text);
|
||||
EditText input = (EditText)((AlertDialog)dialog).findViewById(R.id.key_name);
|
||||
final String k = input.getText().toString();
|
||||
if (!k.equals(""))
|
||||
callback.select(k);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setIcon(android.R.drawable.ic_dialog_alert)
|
||||
.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
Serializer<String> get_serializer() { return SERIALIZER; }
|
||||
}
|
||||
|
@@ -3,8 +3,6 @@ package juloo.keyboard2;
|
||||
import android.os.Looper;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.ExtractedText;
|
||||
import android.view.inputmethod.ExtractedTextRequest;
|
||||
import android.view.inputmethod.InputConnection;
|
||||
|
||||
class KeyEventHandler implements Config.IKeyEventHandler
|
||||
@@ -41,9 +39,33 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
case Char: send_text(String.valueOf(key.getChar())); break;
|
||||
case String: send_text(key.getString()); break;
|
||||
case Event: _recv.handle_event_key(key.getEvent()); break;
|
||||
case Keyevent: send_key_down_up(key.getKeyevent(), mods); break;
|
||||
case Modifier: break;
|
||||
case Editing: handle_editing_key(key.getEditing(), mods); break;
|
||||
case Keyevent:
|
||||
handleKeyUpWithModifier(key.getKeyevent(), mods);
|
||||
break;
|
||||
case Modifier:
|
||||
break;
|
||||
case Editing:
|
||||
send_context_menu_action(action_of_editing_key(key.getEditing()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static int action_of_editing_key(KeyValue.Editing e)
|
||||
{
|
||||
switch (e)
|
||||
{
|
||||
case COPY: return android.R.id.copy;
|
||||
case PASTE: return android.R.id.paste;
|
||||
case CUT: return android.R.id.cut;
|
||||
case SELECT_ALL: return android.R.id.selectAll;
|
||||
case SHARE: return android.R.id.shareText;
|
||||
case PASTE_PLAIN: return android.R.id.pasteAsPlainText;
|
||||
case UNDO: return android.R.id.undo;
|
||||
case REDO: return android.R.id.redo;
|
||||
case REPLACE: return android.R.id.replaceText;
|
||||
case ASSIST: return android.R.id.textAssist;
|
||||
case AUTOFILL: return android.R.id.autofill;
|
||||
default: return -1; // sad
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +108,7 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
/*
|
||||
* Don't set KeyEvent.FLAG_SOFT_KEYBOARD.
|
||||
*/
|
||||
void send_key_down_up(int keyCode, Pointers.Modifiers mods)
|
||||
void handleKeyUpWithModifier(int keyCode, Pointers.Modifiers mods)
|
||||
{
|
||||
int metaState = 0;
|
||||
for (int i = 0; i < mods.size(); i++)
|
||||
@@ -125,88 +147,6 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
conn.performContextMenuAction(id);
|
||||
}
|
||||
|
||||
void handle_editing_key(KeyValue.Editing ev, Pointers.Modifiers mods)
|
||||
{
|
||||
switch (ev)
|
||||
{
|
||||
case COPY: send_context_menu_action(android.R.id.copy); break;
|
||||
case PASTE: send_context_menu_action(android.R.id.paste); break;
|
||||
case CUT: send_context_menu_action(android.R.id.cut); break;
|
||||
case SELECT_ALL: send_context_menu_action(android.R.id.selectAll); break;
|
||||
case SHARE: send_context_menu_action(android.R.id.shareText); break;
|
||||
case PASTE_PLAIN: send_context_menu_action(android.R.id.pasteAsPlainText); break;
|
||||
case UNDO: send_context_menu_action(android.R.id.undo); break;
|
||||
case REDO: send_context_menu_action(android.R.id.redo); break;
|
||||
case REPLACE: send_context_menu_action(android.R.id.replaceText); break;
|
||||
case ASSIST: send_context_menu_action(android.R.id.textAssist); break;
|
||||
case AUTOFILL: send_context_menu_action(android.R.id.autofill); break;
|
||||
case CURSOR_LEFT: move_cursor(-1, mods); break;
|
||||
case CURSOR_RIGHT: move_cursor(1, mods); break;
|
||||
}
|
||||
}
|
||||
|
||||
static ExtractedTextRequest _move_cursor_req = null;
|
||||
|
||||
/** Query the cursor position. The extracted text is empty. Returns [null] if
|
||||
the editor doesn't support this operation. */
|
||||
ExtractedText get_cursor_pos(InputConnection conn)
|
||||
{
|
||||
if (_move_cursor_req == null)
|
||||
{
|
||||
_move_cursor_req = new ExtractedTextRequest();
|
||||
_move_cursor_req.hintMaxChars = 0;
|
||||
}
|
||||
return conn.getExtractedText(_move_cursor_req, 0);
|
||||
}
|
||||
|
||||
/** Move the cursor right or left, if possible without sending key events.
|
||||
Unlike arrow keys, the selection is not removed even if shift is not on. */
|
||||
void move_cursor(int d, Pointers.Modifiers mods)
|
||||
{
|
||||
InputConnection conn = _recv.getCurrentInputConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
ExtractedText et = get_cursor_pos(conn);
|
||||
if (et == null) // Editor doesn't support moving the cursor
|
||||
{
|
||||
move_cursor_fallback(d, mods);
|
||||
return;
|
||||
}
|
||||
int sel_start = et.selectionStart;
|
||||
int sel_end = et.selectionEnd;
|
||||
// Continue expanding the selection even if shift is not pressed
|
||||
if (sel_end != sel_start)
|
||||
{
|
||||
sel_end += d;
|
||||
if (sel_end == sel_start) // Avoid making the selection empty
|
||||
sel_end += d;
|
||||
}
|
||||
else
|
||||
{
|
||||
sel_end += d;
|
||||
// Leave 'sel_start' where it is if shift is pressed
|
||||
if (!mods.has(KeyValue.Modifier.SHIFT))
|
||||
sel_start = sel_end;
|
||||
}
|
||||
conn.setSelection(sel_start, sel_end);
|
||||
}
|
||||
|
||||
/** Send arrow keys as a fallback for editors that do not support
|
||||
[getExtractedText] like Termux. */
|
||||
void move_cursor_fallback(int d, Pointers.Modifiers mods)
|
||||
{
|
||||
while (d < 0)
|
||||
{
|
||||
send_key_down_up(KeyEvent.KEYCODE_DPAD_LEFT, mods);
|
||||
d++;
|
||||
}
|
||||
while (d > 0)
|
||||
{
|
||||
send_key_down_up(KeyEvent.KEYCODE_DPAD_RIGHT, mods);
|
||||
d--;
|
||||
}
|
||||
}
|
||||
|
||||
public static interface IReceiver
|
||||
{
|
||||
public void handle_event_key(KeyValue.Event ev);
|
||||
|
@@ -260,7 +260,6 @@ class KeyModifier
|
||||
case 'c': return "¢";
|
||||
case 'p': return "₱";
|
||||
case 'h': return "₴";
|
||||
case 'b': return "₿";
|
||||
case '€': case '£': return "removed"; // Avoid showing these twice
|
||||
// alternating greek letters
|
||||
case 'π': return "ϖ";
|
||||
|
@@ -70,8 +70,6 @@ final class KeyValue
|
||||
SHARE,
|
||||
ASSIST,
|
||||
AUTOFILL,
|
||||
CURSOR_LEFT,
|
||||
CURSOR_RIGHT,
|
||||
}
|
||||
|
||||
public static enum Placeholder
|
||||
@@ -323,7 +321,6 @@ final class KeyValue
|
||||
case "\\@": return makeStringKey("@");
|
||||
case "\\\\": return makeStringKey("\\");
|
||||
|
||||
/* Modifiers and dead-keys */
|
||||
case "shift": return modifierKey(0xE00A, Modifier.SHIFT, 0);
|
||||
case "ctrl": return modifierKey("Ctrl", Modifier.CTRL, 0);
|
||||
case "alt": return modifierKey("Alt", Modifier.ALT, 0);
|
||||
@@ -354,7 +351,6 @@ final class KeyValue
|
||||
case "fn": return modifierKey("Fn", Modifier.FN, 0);
|
||||
case "meta": return modifierKey("Meta", Modifier.META, 0);
|
||||
|
||||
/* Special event keys */
|
||||
case "config": return eventKey(0xE004, Event.CONFIG, FLAG_SMALLER_FONT);
|
||||
case "switch_text": return eventKey("ABC", Event.SWITCH_TEXT, FLAG_SMALLER_FONT);
|
||||
case "switch_numeric": return eventKey("123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT);
|
||||
@@ -369,7 +365,6 @@ final class KeyValue
|
||||
case "capslock": return eventKey(0xE012, Event.CAPS_LOCK, 0);
|
||||
case "voice_typing": return eventKey(0xE015, Event.SWITCH_VOICE_TYPING, FLAG_SMALLER_FONT);
|
||||
|
||||
/* Key events */
|
||||
case "esc": return keyeventKey("Esc", KeyEvent.KEYCODE_ESCAPE, FLAG_SMALLER_FONT);
|
||||
case "enter": return keyeventKey(0xE00E, KeyEvent.KEYCODE_ENTER, 0);
|
||||
case "up": return keyeventKey(0xE005, KeyEvent.KEYCODE_DPAD_UP, 0);
|
||||
@@ -397,7 +392,6 @@ final class KeyValue
|
||||
case "f12": return keyeventKey("F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT);
|
||||
case "tab": return keyeventKey(0xE00F, KeyEvent.KEYCODE_TAB, FLAG_SMALLER_FONT);
|
||||
|
||||
/* Spaces */
|
||||
case "\\t": return charKey("\\t", '\t', 0); // Send the tab character
|
||||
case "space": return charKey("\r", ' ', FLAG_KEY_FONT | FLAG_SECONDARY);
|
||||
case "nbsp": return charKey("\u237d", '\u00a0', FLAG_SMALLER_FONT);
|
||||
@@ -414,6 +408,10 @@ final class KeyValue
|
||||
case "blt": return charKey("<", '>', 0);
|
||||
case "bgt": return charKey(">", '<', 0);
|
||||
|
||||
case "removed": return placeholderKey(Placeholder.REMOVED);
|
||||
case "f11_placeholder": return placeholderKey(Placeholder.F11);
|
||||
case "f12_placeholder": return placeholderKey(Placeholder.F12);
|
||||
|
||||
/* hebrew niqqud */
|
||||
case "qamats": return charKey("\u05E7\u05B8", '\u05B8', 0); // kamatz
|
||||
case "patah": return charKey("\u05E4\u05B7", '\u05B7', 0); // patach
|
||||
@@ -445,7 +443,6 @@ final class KeyValue
|
||||
case "zwj": return charKey("zwj", '\u200D', 0); // zero-width joiner (provides ligature)
|
||||
case "zwnj": return charKey("zwnj", '\u200C', 0); // zero-width non joiner (prevents unintended ligature)
|
||||
|
||||
/* Editing keys */
|
||||
case "copy": return editingKey(0xE030, Editing.COPY);
|
||||
case "paste": return editingKey(0xE032, Editing.PASTE);
|
||||
case "cut": return editingKey(0xE031, Editing.CUT);
|
||||
@@ -457,15 +454,6 @@ final class KeyValue
|
||||
case "replaceText": return editingKey("repl", Editing.REPLACE);
|
||||
case "textAssist": return editingKey(0xE038, Editing.ASSIST);
|
||||
case "autofill": return editingKey("auto", Editing.AUTOFILL);
|
||||
case "cursor_left": return editingKey(0xE008, Editing.CURSOR_LEFT);
|
||||
case "cursor_right": return editingKey(0xE006, Editing.CURSOR_RIGHT);
|
||||
|
||||
/* Placeholder keys */
|
||||
case "removed": return placeholderKey(Placeholder.REMOVED);
|
||||
case "f11_placeholder": return placeholderKey(Placeholder.F11);
|
||||
case "f12_placeholder": return placeholderKey(Placeholder.F12);
|
||||
|
||||
/* Fallback to a string key that types its name */
|
||||
default: return makeStringKey(name);
|
||||
}
|
||||
}
|
||||
|
@@ -93,9 +93,9 @@ public class Keyboard2 extends InputMethodService
|
||||
super.onCreate();
|
||||
KeyboardData.init(getResources());
|
||||
SharedPreferences prefs = DirectBootAwarePreferences.get_shared_preferences(this);
|
||||
prefs.registerOnSharedPreferenceChangeListener(this);
|
||||
_keyeventhandler = new KeyEventHandler(getMainLooper(), this.new Receiver());
|
||||
Config.initGlobalConfig(prefs, getResources(), _keyeventhandler);
|
||||
prefs.registerOnSharedPreferenceChangeListener(this);
|
||||
_config = Config.globalConfig();
|
||||
_keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard);
|
||||
_keyboardView.reset();
|
||||
@@ -155,7 +155,7 @@ public class Keyboard2 extends InputMethodService
|
||||
{
|
||||
String s = subtype.getExtraValueOf("default_layout");
|
||||
if (s != null)
|
||||
default_layout = LayoutsPreference.layout_of_string(getResources(), s);
|
||||
default_layout = _config.layout_of_string(getResources(), s);
|
||||
refreshAccentsOption(imm, subtype);
|
||||
}
|
||||
}
|
||||
|
25
srcs/juloo.keyboard2/LayoutListPreference.java
Normal file
25
srcs/juloo.keyboard2/LayoutListPreference.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package juloo.keyboard2;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.preference.ListPreference;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
public class LayoutListPreference extends ListPreference
|
||||
{
|
||||
public LayoutListPreference(Context context, AttributeSet attrs)
|
||||
{
|
||||
super(context, attrs);
|
||||
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LayoutListPreference);
|
||||
String defaultString = a.getString(R.styleable.LayoutListPreference_defaultString);
|
||||
a.recycle();
|
||||
Resources res = context.getResources();
|
||||
String[] entries = res.getStringArray(R.array.pref_layout_entries);
|
||||
entries[0] = defaultString;
|
||||
setEntries(entries);
|
||||
setEntryValues(res.getStringArray(R.array.pref_layout_values));
|
||||
setSummary("%s");
|
||||
setDefaultValue("none");
|
||||
}
|
||||
}
|
@@ -5,7 +5,6 @@ import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.EditText;
|
||||
@@ -13,17 +12,14 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class LayoutsPreference extends ListGroupPreference<LayoutsPreference.Layout>
|
||||
public class LayoutsPreference extends ListGroupPreference
|
||||
{
|
||||
static final String KEY = "layouts";
|
||||
static final List<Layout> DEFAULT =
|
||||
Collections.singletonList((Layout)new SystemLayout());
|
||||
static final ListGroupPreference.Serializer<Layout> SERIALIZER =
|
||||
new Serializer();
|
||||
static final List<String> DEFAULT = Collections.singletonList("system");
|
||||
|
||||
/** Layout names as stored in the preferences. */
|
||||
List<String> _layout_names;
|
||||
/** Text displayed for each layout in the dialog list. */
|
||||
String[] _layout_display_names;
|
||||
|
||||
@@ -32,62 +28,13 @@ public class LayoutsPreference extends ListGroupPreference<LayoutsPreference.Lay
|
||||
super(ctx, attrs);
|
||||
setKey(KEY);
|
||||
Resources res = ctx.getResources();
|
||||
_layout_names = Arrays.asList(res.getStringArray(R.array.pref_layout_values));
|
||||
_layout_display_names = res.getStringArray(R.array.pref_layout_entries);
|
||||
}
|
||||
|
||||
/** Obtained from [res/values/layouts.xml]. */
|
||||
static List<String> _unsafe_layout_ids_str = null;
|
||||
static TypedArray _unsafe_layout_ids_res = null;
|
||||
|
||||
/** Layout internal names. Contains "system" and "custom". */
|
||||
public static List<String> get_layout_names(Resources res)
|
||||
public static List<String> load_from_preferences(SharedPreferences prefs)
|
||||
{
|
||||
if (_unsafe_layout_ids_str == null)
|
||||
_unsafe_layout_ids_str = Arrays.asList(
|
||||
res.getStringArray(R.array.pref_layout_values));
|
||||
return _unsafe_layout_ids_str;
|
||||
}
|
||||
|
||||
/** Layout resource id for a layout name. [-1] if not found. */
|
||||
public static int layout_id_of_name(Resources res, String name)
|
||||
{
|
||||
if (_unsafe_layout_ids_res == null)
|
||||
_unsafe_layout_ids_res = res.obtainTypedArray(R.array.layout_ids);
|
||||
int i = get_layout_names(res).indexOf(name);
|
||||
if (i >= 0)
|
||||
return _unsafe_layout_ids_res.getResourceId(i, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/** [null] for the "system" layout. */
|
||||
public static List<KeyboardData> load_from_preferences(Resources res, SharedPreferences prefs)
|
||||
{
|
||||
List<KeyboardData> layouts = new ArrayList<KeyboardData>();
|
||||
for (Layout l : load_from_preferences(KEY, prefs, DEFAULT, SERIALIZER))
|
||||
{
|
||||
if (l instanceof NamedLayout)
|
||||
layouts.add(layout_of_string(res, ((NamedLayout)l).name));
|
||||
else if (l instanceof CustomLayout)
|
||||
layouts.add(KeyboardData.load_string(((CustomLayout)l).xml));
|
||||
else // instanceof SystemLayout
|
||||
layouts.add(null);
|
||||
}
|
||||
return layouts;
|
||||
}
|
||||
|
||||
/** Does not call [prefs.commit()]. */
|
||||
public static void save_to_preferences(SharedPreferences.Editor prefs, List<Layout> items)
|
||||
{
|
||||
save_to_preferences(KEY, prefs, items, SERIALIZER);
|
||||
}
|
||||
|
||||
public static KeyboardData layout_of_string(Resources res, String name)
|
||||
{
|
||||
int id = layout_id_of_name(res, name);
|
||||
if (id > 0)
|
||||
return KeyboardData.load(res, id);
|
||||
// Might happen when the app is downgraded, return the system layout.
|
||||
return null;
|
||||
return load_from_preferences(KEY, prefs, DEFAULT);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,28 +42,15 @@ public class LayoutsPreference extends ListGroupPreference<LayoutsPreference.Lay
|
||||
{
|
||||
super.onSetInitialValue(restoreValue, defaultValue);
|
||||
if (_values.size() == 0)
|
||||
set_values(new ArrayList<Layout>(DEFAULT), false);
|
||||
}
|
||||
|
||||
String label_of_layout(Layout l)
|
||||
{
|
||||
if (l instanceof NamedLayout)
|
||||
{
|
||||
String lname = ((NamedLayout)l).name;
|
||||
int value_i = get_layout_names(getContext().getResources()).indexOf(lname);
|
||||
return value_i < 0 ? lname : _layout_display_names[value_i];
|
||||
}
|
||||
else if (l instanceof CustomLayout)
|
||||
return getContext().getString(R.string.pref_layout_e_custom);
|
||||
else // instanceof SystemLayout
|
||||
return getContext().getString(R.string.pref_layout_e_system);
|
||||
set_values(new ArrayList<String>(DEFAULT), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
String label_of_value(Layout value, int i)
|
||||
String label_of_value(String value, int i)
|
||||
{
|
||||
return getContext().getString(R.string.pref_layouts_item, i + 1,
|
||||
label_of_layout(value));
|
||||
int value_i = _layout_names.indexOf(value);
|
||||
String lname = value_i < 0 ? value : _layout_display_names[value_i];
|
||||
return getContext().getString(R.string.pref_layouts_item, i + 1, lname);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -128,78 +62,25 @@ public class LayoutsPreference extends ListGroupPreference<LayoutsPreference.Lay
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean should_allow_remove_item(Layout value)
|
||||
boolean should_allow_remove_item()
|
||||
{
|
||||
return (_values.size() > 1 && !(value instanceof CustomLayout));
|
||||
return (_values.size() > 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
ListGroupPreference.Serializer<Layout> get_serializer() { return SERIALIZER; }
|
||||
|
||||
@Override
|
||||
void select(final SelectionCallback callback)
|
||||
{
|
||||
ArrayAdapter layouts = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, _layout_display_names);
|
||||
new AlertDialog.Builder(getContext())
|
||||
.setView(R.layout.dialog_edit_text)
|
||||
.setView(R.layout.custom_extra_key_add_dialog)
|
||||
.setAdapter(layouts, new DialogInterface.OnClickListener(){
|
||||
public void onClick(DialogInterface _dialog, int which)
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
{
|
||||
String name = get_layout_names(getContext().getResources()).get(which);
|
||||
switch (name)
|
||||
{
|
||||
case "system":
|
||||
callback.select(new SystemLayout());
|
||||
break;
|
||||
case "custom":
|
||||
select_custom(callback, "");
|
||||
break;
|
||||
default:
|
||||
callback.select(new NamedLayout(name));
|
||||
break;
|
||||
}
|
||||
callback.select(_layout_names.get(which));
|
||||
}
|
||||
})
|
||||
.show();
|
||||
}
|
||||
|
||||
/** Dialog for specifying a custom layout. [initial_text] is the layout
|
||||
description when modifying a layout. */
|
||||
void select_custom(final SelectionCallback callback, String initial_text)
|
||||
{
|
||||
final EditText input = new EditText(getContext());
|
||||
input.setText(initial_text);
|
||||
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext())
|
||||
.setView(input)
|
||||
.setTitle(R.string.pref_custom_layout_title)
|
||||
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
|
||||
public void onClick(DialogInterface _dialog, int _which)
|
||||
{
|
||||
callback.select(new CustomLayout(input.getText().toString()));
|
||||
}
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, null);
|
||||
// Might be true when modifying an existing layout
|
||||
if (callback.allow_remove() && _values.size() > 1)
|
||||
dialog.setNeutralButton(R.string.pref_layouts_remove_custom, new DialogInterface.OnClickListener(){
|
||||
public void onClick(DialogInterface _dialog, int _which)
|
||||
{
|
||||
callback.select(null);
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
/** Called when modifying a layout. Custom layouts behave differently. */
|
||||
@Override
|
||||
void select(final SelectionCallback callback, Layout prev_layout)
|
||||
{
|
||||
if (prev_layout instanceof CustomLayout)
|
||||
select_custom(callback, ((CustomLayout)prev_layout).xml);
|
||||
else
|
||||
select(callback);
|
||||
}
|
||||
|
||||
class LayoutsAddButton extends AddButton
|
||||
{
|
||||
public LayoutsAddButton(Context ctx)
|
||||
@@ -208,59 +89,4 @@ public class LayoutsPreference extends ListGroupPreference<LayoutsPreference.Lay
|
||||
setLayoutResource(R.layout.pref_layouts_add_btn);
|
||||
}
|
||||
}
|
||||
|
||||
/** A layout selected by the user. The only implementations are
|
||||
[NamedLayout], [SystemLayout] and [CustomLayout]. */
|
||||
interface Layout {}
|
||||
|
||||
static final class SystemLayout implements Layout
|
||||
{
|
||||
public SystemLayout() {}
|
||||
}
|
||||
|
||||
/** The name of a layout defined in [res/xml]. */
|
||||
static final class NamedLayout implements Layout
|
||||
{
|
||||
public final String name;
|
||||
public NamedLayout(String n) { name = n; }
|
||||
}
|
||||
|
||||
/** The XML description of a custom layout. */
|
||||
static final class CustomLayout implements Layout
|
||||
{
|
||||
public final String xml;
|
||||
public CustomLayout(String c) { xml = c; }
|
||||
}
|
||||
|
||||
/** Named layouts are serialized to strings and custom layouts to JSON
|
||||
objects with a [kind] field. */
|
||||
static class Serializer implements ListGroupPreference.Serializer<Layout>
|
||||
{
|
||||
public Layout load_item(Object obj) throws JSONException
|
||||
{
|
||||
if (obj instanceof String)
|
||||
{
|
||||
String name = (String)obj;
|
||||
if (name.equals("system"))
|
||||
return new SystemLayout();
|
||||
return new NamedLayout(name);
|
||||
}
|
||||
JSONObject obj_ = (JSONObject)obj;
|
||||
switch (obj_.getString("kind"))
|
||||
{
|
||||
case "custom": return new CustomLayout(obj_.getString("xml"));
|
||||
case "system": default: return new SystemLayout();
|
||||
}
|
||||
}
|
||||
|
||||
public Object save_item(Layout v) throws JSONException
|
||||
{
|
||||
if (v instanceof NamedLayout)
|
||||
return ((NamedLayout)v).name;
|
||||
if (v instanceof CustomLayout)
|
||||
return new JSONObject().put("kind", "custom")
|
||||
.put("xml", ((CustomLayout)v).xml);
|
||||
return new JSONObject().put("kind", "system");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -15,10 +15,10 @@ import org.json.JSONException;
|
||||
/** A list of preferences where the users can add items to the end and modify
|
||||
and remove items. Backed by a string list. Implement user selection in
|
||||
[select()]. */
|
||||
public abstract class ListGroupPreference<E> extends PreferenceGroup
|
||||
public abstract class ListGroupPreference extends PreferenceGroup
|
||||
{
|
||||
boolean _attached = false;
|
||||
List<E> _values;
|
||||
List<String> _values;
|
||||
/** The "add" button currently displayed. */
|
||||
AddButton _add_button = null;
|
||||
|
||||
@@ -27,13 +27,16 @@ public abstract class ListGroupPreference<E> extends PreferenceGroup
|
||||
super(context, attrs);
|
||||
setOrderingAsAdded(true);
|
||||
setLayoutResource(R.layout.pref_listgroup_group);
|
||||
_values = new ArrayList<E>();
|
||||
_values = new ArrayList<String>();
|
||||
}
|
||||
|
||||
/** Overrideable */
|
||||
|
||||
/** The label to display on the item for a given value. */
|
||||
abstract String label_of_value(E value, int i);
|
||||
String label_of_value(String value, int i)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
/** Called every time the list changes and allows to change the "Add" button
|
||||
appearance.
|
||||
@@ -48,98 +51,69 @@ public abstract class ListGroupPreference<E> extends PreferenceGroup
|
||||
/** Called every time the list changes and allows to disable the "Remove"
|
||||
buttons on every items. Might be used to enforce a minimum number of
|
||||
items. */
|
||||
boolean should_allow_remove_item(E _value)
|
||||
boolean should_allow_remove_item()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Called when an item is added or modified. */
|
||||
abstract void select(SelectionCallback<E> callback);
|
||||
|
||||
/** Called when an item is modified. */
|
||||
void select(SelectionCallback<E> callback, E _old_value)
|
||||
{
|
||||
select(callback);
|
||||
}
|
||||
|
||||
/** A separate class is used as the same serializer must be used in the
|
||||
static context. See [Serializer] below. */
|
||||
abstract Serializer<E> get_serializer();
|
||||
/** Called when an item is added or modified. Returns [null] to cancel the
|
||||
action. */
|
||||
abstract void select(SelectionCallback callback);
|
||||
|
||||
/** Load/save utils */
|
||||
|
||||
/** Read a value saved by preference from a [SharedPreferences] object.
|
||||
[serializer] must be the same that is returned by [get_serializer()].
|
||||
Returns [null] on error. */
|
||||
static <E> List<E> load_from_preferences(String key,
|
||||
SharedPreferences prefs, List<E> def, Serializer<E> serializer)
|
||||
static List<String> load_from_preferences(String key,
|
||||
SharedPreferences prefs, List<String> def)
|
||||
{
|
||||
String s = prefs.getString(key, null);
|
||||
return (s != null) ? load_from_string(s, serializer) : def;
|
||||
}
|
||||
|
||||
/** Save items into the preferences. Does not call [prefs.commit()]. */
|
||||
static <E> void save_to_preferences(String key, SharedPreferences.Editor prefs, List<E> items, Serializer<E> serializer)
|
||||
{
|
||||
prefs.putString(key, save_to_string(items, serializer));
|
||||
return (s != null) ? load_from_string(s) : def;
|
||||
}
|
||||
|
||||
/** Decode a list of string previously encoded with [save_to_string]. Returns
|
||||
[null] on error. */
|
||||
static <E> List<E> load_from_string(String inp, Serializer<E> serializer)
|
||||
static List<String> load_from_string(String inp)
|
||||
{
|
||||
try
|
||||
{
|
||||
List<E> l = new ArrayList<E>();
|
||||
List<String> l = new ArrayList<String>();
|
||||
JSONArray arr = new JSONArray(inp);
|
||||
for (int i = 0; i < arr.length(); i++)
|
||||
l.add(serializer.load_item(arr.get(i)));
|
||||
l.add(arr.getString(i));
|
||||
return l;
|
||||
}
|
||||
catch (JSONException e)
|
||||
{
|
||||
Logs.exn("load_from_string", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/** Encode a list of string so it can be passed to
|
||||
[Preference.persistString()]. Decode with [load_from_string]. */
|
||||
static <E> String save_to_string(List<E> items, Serializer<E> serializer)
|
||||
static String save_to_string(List<String> l)
|
||||
{
|
||||
List<Object> serialized_items = new ArrayList<Object>();
|
||||
for (E it : items)
|
||||
{
|
||||
try
|
||||
{
|
||||
serialized_items.add(serializer.save_item(it));
|
||||
}
|
||||
catch (JSONException e)
|
||||
{
|
||||
Logs.exn("save_to_string", e);
|
||||
}
|
||||
}
|
||||
return (new JSONArray(serialized_items)).toString();
|
||||
return (new JSONArray(l)).toString();
|
||||
}
|
||||
|
||||
/** Protected API */
|
||||
|
||||
/** Set the values. If [persist] is [true], persist into the store. */
|
||||
void set_values(List<E> vs, boolean persist)
|
||||
void set_values(List<String> vs, boolean persist)
|
||||
{
|
||||
_values = vs;
|
||||
reattach();
|
||||
if (persist)
|
||||
persistString(save_to_string(vs, get_serializer()));
|
||||
persistString(save_to_string(vs));
|
||||
}
|
||||
|
||||
void add_item(E v)
|
||||
void add_item(String v)
|
||||
{
|
||||
_values.add(v);
|
||||
set_values(_values, true);
|
||||
}
|
||||
|
||||
void change_item(int i, E v)
|
||||
void change_item(int i, String v)
|
||||
{
|
||||
_values.set(i, v);
|
||||
set_values(_values, true);
|
||||
@@ -159,7 +133,7 @@ public abstract class ListGroupPreference<E> extends PreferenceGroup
|
||||
String input = (restoreValue) ? getPersistedString(null) : (String)defaultValue;
|
||||
if (input != null)
|
||||
{
|
||||
List<E> values = load_from_string(input, get_serializer());
|
||||
List<String> values = load_from_string(input);
|
||||
if (values != null)
|
||||
set_values(values, false);
|
||||
}
|
||||
@@ -180,10 +154,11 @@ public abstract class ListGroupPreference<E> extends PreferenceGroup
|
||||
if (!_attached)
|
||||
return;
|
||||
removeAll();
|
||||
boolean allow_remove_item = should_allow_remove_item();
|
||||
int i = 0;
|
||||
for (E v : _values)
|
||||
for (String v : _values)
|
||||
{
|
||||
addPreference(this.new Item(getContext(), i, v));
|
||||
addPreference(this.new Item(getContext(), i, v, allow_remove_item));
|
||||
i++;
|
||||
}
|
||||
_add_button = on_attach_add_button(_add_button);
|
||||
@@ -193,20 +168,31 @@ public abstract class ListGroupPreference<E> extends PreferenceGroup
|
||||
|
||||
class Item extends Preference
|
||||
{
|
||||
final E _value;
|
||||
final String _value;
|
||||
final int _index;
|
||||
|
||||
public Item(Context ctx, int index, E value)
|
||||
public Item(Context ctx, int index, String value, boolean allow_remove)
|
||||
{
|
||||
super(ctx);
|
||||
_value = value;
|
||||
_index = index;
|
||||
setPersistent(false);
|
||||
setTitle(label_of_value(value, index));
|
||||
if (should_allow_remove_item(value))
|
||||
if (allow_remove)
|
||||
setWidgetLayoutResource(R.layout.pref_listgroup_item_widget);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onClick()
|
||||
{
|
||||
select(new SelectionCallback() {
|
||||
public void select(String value)
|
||||
{
|
||||
change_item(_index, value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected View onCreateView(ViewGroup parent)
|
||||
{
|
||||
@@ -220,23 +206,6 @@ public abstract class ListGroupPreference<E> extends PreferenceGroup
|
||||
remove_item(_index);
|
||||
}
|
||||
});
|
||||
v.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View _v)
|
||||
{
|
||||
select(new SelectionCallback<E>() {
|
||||
public void select(E value)
|
||||
{
|
||||
if (value == null)
|
||||
remove_item(_index);
|
||||
else
|
||||
change_item(_index, value);
|
||||
}
|
||||
|
||||
public boolean allow_remove() { return true; }
|
||||
}, _value);
|
||||
}
|
||||
});
|
||||
return v;
|
||||
}
|
||||
}
|
||||
@@ -253,41 +222,17 @@ public abstract class ListGroupPreference<E> extends PreferenceGroup
|
||||
@Override
|
||||
protected void onClick()
|
||||
{
|
||||
select(new SelectionCallback<E>() {
|
||||
public void select(E value)
|
||||
select(new SelectionCallback() {
|
||||
public void select(String value)
|
||||
{
|
||||
add_item(value);
|
||||
}
|
||||
|
||||
public boolean allow_remove() { return false; }
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public interface SelectionCallback<E>
|
||||
public interface SelectionCallback
|
||||
{
|
||||
public void select(E value);
|
||||
|
||||
/** If this method returns [true], [null] might be passed to [select] to
|
||||
remove the item. */
|
||||
public boolean allow_remove();
|
||||
}
|
||||
|
||||
/** Methods for serializing and deserializing abstract items.
|
||||
[StringSerializer] is an implementation. */
|
||||
public interface Serializer<E>
|
||||
{
|
||||
/** [obj] is an object returned by [save_item()]. */
|
||||
E load_item(Object obj) throws JSONException;
|
||||
|
||||
/** Serialize an item into JSON. Might return an object that can be inserted
|
||||
in a [JSONArray]. */
|
||||
Object save_item(E v) throws JSONException;
|
||||
}
|
||||
|
||||
public static class StringSerializer implements Serializer<String>
|
||||
{
|
||||
public String load_item(Object obj) { return (String)obj; }
|
||||
public Object save_item(String v) { return v; }
|
||||
public void select(String value);
|
||||
}
|
||||
}
|
||||
|
@@ -26,26 +26,4 @@ public final class Logs
|
||||
_debug_logs.println("swapEnterActionKey: "+conf.swapEnterActionKey);
|
||||
_debug_logs.println("actionLabel: "+conf.actionLabel);
|
||||
}
|
||||
|
||||
public static void debug_config_migration(int from_version, int to_version)
|
||||
{
|
||||
debug("Migrating config version from " + from_version + " to " + to_version);
|
||||
}
|
||||
|
||||
public static void debug(String s)
|
||||
{
|
||||
if (_debug_logs != null)
|
||||
_debug_logs.println(s);
|
||||
}
|
||||
|
||||
public static void exn(String msg, Exception e)
|
||||
{
|
||||
Log.e(TAG, msg, e);
|
||||
}
|
||||
|
||||
public static void trace()
|
||||
{
|
||||
if (_debug_logs != null)
|
||||
_debug_logs.println(Log.getStackTraceString(new Exception()));
|
||||
}
|
||||
}
|
||||
|
@@ -16,12 +16,7 @@ public class SettingsActivity extends PreferenceActivity
|
||||
super.onCreate(savedInstanceState);
|
||||
// The preferences can't be read when in direct-boot mode. Avoid crashing
|
||||
// and don't allow changing the settings.
|
||||
// Run the config migration on this prefs as it might be different from the
|
||||
// one used by the keyboard, which have been migrated.
|
||||
try
|
||||
{
|
||||
Config.migrate(getPreferenceManager().getSharedPreferences());
|
||||
}
|
||||
try { getPreferenceManager().getSharedPreferences(); }
|
||||
catch (Exception _e) { fallbackEncrypted(); return; }
|
||||
addPreferencesFromResource(R.xml.settings);
|
||||
}
|
||||
|
Reference in New Issue
Block a user