diff --git a/src/java/KP2ASoftKeyboard2/.gitignore b/src/java/KP2ASoftKeyboard2/.gitignore
new file mode 100644
index 00000000..d45006d9
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/.gitignore
@@ -0,0 +1,5 @@
+/native/obj
+/native/libs
+
+/java/bin
+/tests/bin
diff --git a/src/java/KP2ASoftKeyboard2/java/.classpath b/src/java/KP2ASoftKeyboard2/java/.classpath
new file mode 100644
index 00000000..51769745
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/.classpath
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/.project b/src/java/KP2ASoftKeyboard2/java/.project
new file mode 100644
index 00000000..2f557768
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/.project
@@ -0,0 +1,33 @@
+
+
+ KP2ASoftKeyboard2
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/.settings/org.eclipse.jdt.core.prefs b/src/java/KP2ASoftKeyboard2/java/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..b080d2dd
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/src/java/KP2ASoftKeyboard2/java/Android.mk b/src/java/KP2ASoftKeyboard2/java/Android.mk
new file mode 100644
index 00000000..03d48aaa
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/Android.mk
@@ -0,0 +1,22 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := LatinIME
+
+LOCAL_CERTIFICATE := shared
+
+LOCAL_JNI_SHARED_LIBRARIES := libjni_latinime
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-common
+
+#LOCAL_AAPT_FLAGS := -0 .dict
+
+LOCAL_SDK_VERSION := current
+
+LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+
+include $(BUILD_PACKAGE)
diff --git a/src/java/KP2ASoftKeyboard2/java/AndroidManifest.xml b/src/java/KP2ASoftKeyboard2/java/AndroidManifest.xml
new file mode 100644
index 00000000..242fcb53
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/AndroidManifest.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/MODULE_LICENSE_APACHE2 b/src/java/KP2ASoftKeyboard2/java/MODULE_LICENSE_APACHE2
new file mode 100644
index 00000000..e69de29b
diff --git a/src/java/KP2ASoftKeyboard2/java/NOTICE b/src/java/KP2ASoftKeyboard2/java/NOTICE
new file mode 100644
index 00000000..7340b9e3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/NOTICE
@@ -0,0 +1,190 @@
+
+ Copyright (c) 2008, The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
diff --git a/src/java/KP2ASoftKeyboard2/java/gen/keepass2android/softkeyboard/BuildConfig.java b/src/java/KP2ASoftKeyboard2/java/gen/keepass2android/softkeyboard/BuildConfig.java
new file mode 100644
index 00000000..7048a099
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/gen/keepass2android/softkeyboard/BuildConfig.java
@@ -0,0 +1,6 @@
+/** Automatically generated file. DO NOT MODIFY */
+package keepass2android.softkeyboard;
+
+public final class BuildConfig {
+ public final static boolean DEBUG = true;
+}
\ No newline at end of file
diff --git a/src/java/KP2ASoftKeyboard2/java/gen/keepass2android/softkeyboard/R.java b/src/java/KP2ASoftKeyboard2/java/gen/keepass2android/softkeyboard/R.java
new file mode 100644
index 00000000..f7ec5558
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/gen/keepass2android/softkeyboard/R.java
@@ -0,0 +1,1311 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package keepass2android.softkeyboard;
+
+public final class R {
+ public static final class anim {
+ public static final int key_preview_fadein=0x7f040000;
+ public static final int key_preview_fadeout=0x7f040001;
+ public static final int mini_keyboard_fadein=0x7f040002;
+ public static final int mini_keyboard_fadeout=0x7f040003;
+ }
+ public static final class array {
+ public static final int keyboard_layout_modes=0x7f0d0007;
+ public static final int keyboard_layout_modes_values=0x7f0d0008;
+ /** Array of prediction modes
+ */
+ public static final int prediction_modes=0x7f0d0002;
+ public static final int prediction_modes_values=0x7f0d0003;
+ /** Array of the settings key modes
+ */
+ public static final int settings_key_modes=0x7f0d0001;
+ /** Array of the settings key mode values
+ */
+ public static final int settings_key_modes_values=0x7f0d0000;
+ /** Array of Voice Input modes
+ */
+ public static final int voice_input_modes=0x7f0d0004;
+ /** Array of Voice Input modes summary
+ */
+ public static final int voice_input_modes_summary=0x7f0d0006;
+ public static final int voice_input_modes_values=0x7f0d0005;
+ }
+ public static final class attr {
+ /**
Must be a floating point value, such as "1.2".
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int backgroundDimAmount=0x7f01000d;
+ /** Image for the key. This image needs to be a StateListDrawable, with the following
+ possible states: normal, pressed, checkable, checkable+pressed, checkable+checked,
+ checkable+checked+pressed.
+
Must be a reference to another resource, in the form "@[+][package:]type:name"
+or to a theme attribute in the form "?[package:][type:]name".
+ */
+ public static final int keyBackground=0x7f010001;
+ /** Hysteresis distance for key debouncing
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int keyHysteresisDistance=0x7f010008;
+ /** Height of the key press feedback popup.
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int keyPreviewHeight=0x7f010007;
+ /** Layout resource for key press feedback.
+
Must be a reference to another resource, in the form "@[+][package:]type:name"
+or to a theme attribute in the form "?[package:][type:]name".
+ */
+ public static final int keyPreviewLayout=0x7f010005;
+ /** Vertical offset of the key press feedback from the key.
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int keyPreviewOffset=0x7f010006;
+ /** Color to use for the label in a key.
+
Must be a color value, in the form of "#rgb", "#argb",
+"#rrggbb", or "#aarrggbb".
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int keyTextColor=0x7f010004;
+ /** Size of the text for character keys.
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int keyTextSize=0x7f010002;
+ /**
Must be one or more (separated by '|') of the following constant values.
+
+
+
+
+
Constant
Value
Description
+
normal
0
+
bold
1
+
italic
2
+
+ */
+ public static final int keyTextStyle=0x7f01000e;
+ /** Default KeyboardView style.
+
Must be a reference to another resource, in the form "@[+][package:]type:name"
+or to a theme attribute in the form "?[package:][type:]name".
+ */
+ public static final int keyboardViewStyle=0x7f010000;
+ /** Size of the text for custom keys with some text and no icon.
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int labelTextSize=0x7f010003;
+ /** Layout resource for popup keyboards.
+
Must be a reference to another resource, in the form "@[+][package:]type:name"
+or to a theme attribute in the form "?[package:][type:]name".
+ */
+ public static final int popupLayout=0x7f01000a;
+ /**
Must be a color value, in the form of "#rgb", "#argb",
+"#rrggbb", or "#aarrggbb".
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int shadowColor=0x7f01000b;
+ /**
Must be a floating point value, such as "1.2".
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int shadowRadius=0x7f01000c;
+ /**
Must be one or more (separated by '|') of the following constant values.
+
+
+
+
+
Constant
Value
Description
+
white
0
+
black
1
+
+ */
+ public static final int symbolColorScheme=0x7f01000f;
+ /** Amount to offset the touch Y coordinate by, for bias correction.
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ */
+ public static final int verticalCorrection=0x7f010009;
+ }
+ public static final class bool {
+ public static final int config_long_press_comma_for_settings_enabled=0x7f080006;
+ public static final int config_swipeDisambiguation=0x7f080003;
+ /** Whether or not Popup on key press is enabled by default
+ */
+ public static final int default_popup_preview=0x7f080004;
+ public static final int default_recorrection_enabled=0x7f080005;
+ /** Whether or not auto-correction should be enabled by default
+ */
+ public static final int enable_autocorrect=0x7f080000;
+ /** Whether this input method should be used as the default for a locale. Override it
+ for latin languages.
+ */
+ public static final int im_is_default=0x7f080001;
+ /** Whether or not voice input is enabled by default.
+ */
+ public static final int voice_input_default=0x7f080002;
+ }
+ public static final class color {
+ public static final int candidate_normal=0x7f090000;
+ public static final int candidate_other=0x7f090002;
+ public static final int candidate_recommended=0x7f090001;
+ public static final int latinkeyboard_bar_language_shadow_black=0x7f090005;
+ public static final int latinkeyboard_bar_language_shadow_white=0x7f090004;
+ public static final int latinkeyboard_bar_language_text=0x7f090006;
+ public static final int latinkeyboard_extension_background=0x7f090007;
+ public static final int latinkeyboard_feedback_language_text=0x7f090008;
+ public static final int latinkeyboard_key_color_black=0x7f09000a;
+ public static final int latinkeyboard_key_color_white=0x7f090009;
+ public static final int latinkeyboard_transparent=0x7f090003;
+ }
+ public static final class dimen {
+ public static final int bubble_pointer_offset=0x7f0b0004;
+ public static final int candidate_min_touchable_width=0x7f0b0012;
+ public static final int candidate_strip_fading_edge_length=0x7f0b0006;
+ public static final int candidate_strip_height=0x7f0b0005;
+ public static final int key_bottom_gap=0x7f0b0001;
+ /** key_height + key_bottom_gap = popup_key_height
+ key_height + key_bottom_gap = popup_key_height
+ */
+ public static final int key_height=0x7f0b0000;
+ public static final int key_hysteresis_distance=0x7f0b0010;
+ public static final int key_label_text_size=0x7f0b000a;
+ /** key_preview_text_size_large x 2
+ */
+ public static final int key_preview_height=0x7f0b000d;
+ public static final int key_preview_offset=0x7f0b000c;
+ public static final int key_preview_text_size_large=0x7f0b000b;
+ public static final int key_text_size=0x7f0b0009;
+ public static final int keyboard_bottom_padding=0x7f0b0003;
+ /** We use "inch", not "dip" because this value tries dealing with physical distance related
+ to user's finger.
+ */
+ public static final int keyboard_vertical_correction=0x7f0b0011;
+ /** If the screen height in landscape is larger than the below value, then the keyboard
+ will not go into extract (fullscreen) mode.
+ */
+ public static final int max_height_for_fullscreen=0x7f0b0008;
+ /** Amount of allowance for selecting keys in a mini popup keyboard by sliding finger.
+ popup_key_height x 1.7
+ Amount of allowance for selecting keys in a mini popup keyboard by sliding finger.
+ popup_key_height x 1.7
+ */
+ public static final int mini_keyboard_slide_allowance=0x7f0b000e;
+ /** popup_key_height x 1.0
+ popup_key_height x 1.0
+ */
+ public static final int mini_keyboard_vertical_correction=0x7f0b000f;
+ public static final int popup_key_height=0x7f0b0002;
+ public static final int spacebar_vertical_correction=0x7f0b0007;
+ }
+ public static final class drawable {
+ public static final int btn_keyboard_key=0x7f020000;
+ public static final int btn_keyboard_key2=0x7f020001;
+ public static final int btn_keyboard_key3=0x7f020002;
+ public static final int btn_keyboard_key_dark_normal=0x7f020003;
+ public static final int btn_keyboard_key_dark_normal_off=0x7f020004;
+ public static final int btn_keyboard_key_dark_normal_on=0x7f020005;
+ public static final int btn_keyboard_key_dark_pressed=0x7f020006;
+ public static final int btn_keyboard_key_dark_pressed_off=0x7f020007;
+ public static final int btn_keyboard_key_dark_pressed_on=0x7f020008;
+ public static final int btn_keyboard_key_fulltrans=0x7f020009;
+ public static final int btn_keyboard_key_fulltrans_normal=0x7f02000a;
+ public static final int btn_keyboard_key_fulltrans_pressed=0x7f02000b;
+ public static final int btn_keyboard_key_gingerbread=0x7f02000c;
+ public static final int btn_keyboard_key_gingerbread_popup=0x7f02000d;
+ public static final int btn_keyboard_key_light_normal=0x7f02000e;
+ public static final int btn_keyboard_key_light_popup_normal=0x7f02000f;
+ public static final int btn_keyboard_key_light_popup_selected=0x7f020010;
+ public static final int btn_keyboard_key_light_pressed=0x7f020011;
+ public static final int btn_keyboard_key_normal=0x7f020012;
+ public static final int btn_keyboard_key_normal_off=0x7f020013;
+ public static final int btn_keyboard_key_normal_off_stone=0x7f020014;
+ public static final int btn_keyboard_key_normal_on=0x7f020015;
+ public static final int btn_keyboard_key_normal_on_stone=0x7f020016;
+ public static final int btn_keyboard_key_normal_stone=0x7f020017;
+ public static final int btn_keyboard_key_pressed=0x7f020018;
+ public static final int btn_keyboard_key_pressed_off=0x7f020019;
+ public static final int btn_keyboard_key_pressed_on=0x7f02001a;
+ public static final int btn_keyboard_key_stone=0x7f02001b;
+ public static final int cancel=0x7f02001c;
+ public static final int candidate_feedback_background=0x7f02001d;
+ public static final int caution=0x7f02001e;
+ public static final int dialog_bubble_step02=0x7f02001f;
+ public static final int dialog_bubble_step07=0x7f020020;
+ public static final int highlight_pressed=0x7f020021;
+ public static final int hint_popup=0x7f020022;
+ public static final int ic_dialog_keyboard=0x7f020023;
+ public static final int ic_mic_dialog=0x7f020024;
+ public static final int ic_subtype_keyboard=0x7f020025;
+ public static final int ic_subtype_mic=0x7f020026;
+ public static final int ic_suggest_scroll_background=0x7f020027;
+ public static final int ic_suggest_strip_microphone=0x7f020028;
+ public static final int ic_suggest_strip_microphone_swipe=0x7f020029;
+ public static final int keyboard_background=0x7f02002a;
+ public static final int keyboard_dark_background=0x7f02002b;
+ public static final int keyboard_hint_0=0x7f02002c;
+ public static final int keyboard_hint_1=0x7f02002d;
+ public static final int keyboard_hint_2=0x7f02002e;
+ public static final int keyboard_hint_3=0x7f02002f;
+ public static final int keyboard_hint_4=0x7f020030;
+ public static final int keyboard_hint_5=0x7f020031;
+ public static final int keyboard_hint_6=0x7f020032;
+ public static final int keyboard_hint_7=0x7f020033;
+ public static final int keyboard_hint_8=0x7f020034;
+ public static final int keyboard_hint_9=0x7f020035;
+ public static final int keyboard_key_feedback=0x7f020036;
+ public static final int keyboard_key_feedback_background=0x7f020037;
+ public static final int keyboard_key_feedback_more_background=0x7f020038;
+ public static final int keyboard_popup_panel_background=0x7f020039;
+ public static final int keyboard_suggest_strip=0x7f02003a;
+ public static final int keyboard_suggest_strip_divider=0x7f02003b;
+ public static final int list_selector_background_pressed=0x7f02003c;
+ public static final int mic_slash=0x7f02003d;
+ public static final int ok_cancel=0x7f02003e;
+ public static final int speak_now_level0=0x7f02003f;
+ public static final int speak_now_level1=0x7f020040;
+ public static final int speak_now_level2=0x7f020041;
+ public static final int speak_now_level3=0x7f020042;
+ public static final int speak_now_level4=0x7f020043;
+ public static final int speak_now_level5=0x7f020044;
+ public static final int speak_now_level6=0x7f020045;
+ public static final int sym_bkeyboard_123_mic=0x7f020046;
+ public static final int sym_bkeyboard_delete=0x7f020047;
+ public static final int sym_bkeyboard_done=0x7f020048;
+ public static final int sym_bkeyboard_kp2a=0x7f020049;
+ public static final int sym_bkeyboard_mic=0x7f02004a;
+ public static final int sym_bkeyboard_num0=0x7f02004b;
+ public static final int sym_bkeyboard_num1=0x7f02004c;
+ public static final int sym_bkeyboard_num2=0x7f02004d;
+ public static final int sym_bkeyboard_num3=0x7f02004e;
+ public static final int sym_bkeyboard_num4=0x7f02004f;
+ public static final int sym_bkeyboard_num5=0x7f020050;
+ public static final int sym_bkeyboard_num6=0x7f020051;
+ public static final int sym_bkeyboard_num7=0x7f020052;
+ public static final int sym_bkeyboard_num8=0x7f020053;
+ public static final int sym_bkeyboard_num9=0x7f020054;
+ public static final int sym_bkeyboard_numalt=0x7f020055;
+ public static final int sym_bkeyboard_numpound=0x7f020056;
+ public static final int sym_bkeyboard_numstar=0x7f020057;
+ public static final int sym_bkeyboard_return=0x7f020058;
+ public static final int sym_bkeyboard_search=0x7f020059;
+ public static final int sym_bkeyboard_settings=0x7f02005a;
+ public static final int sym_bkeyboard_shift=0x7f02005b;
+ public static final int sym_bkeyboard_shift_locked=0x7f02005c;
+ public static final int sym_bkeyboard_space=0x7f02005d;
+ public static final int sym_bkeyboard_tab=0x7f02005e;
+ public static final int sym_keyboard_123_mic=0x7f02005f;
+ public static final int sym_keyboard_delete=0x7f020060;
+ public static final int sym_keyboard_done=0x7f020061;
+ public static final int sym_keyboard_feedback_123_mic=0x7f020062;
+ public static final int sym_keyboard_feedback_delete=0x7f020063;
+ public static final int sym_keyboard_feedback_done=0x7f020064;
+ public static final int sym_keyboard_feedback_kp2a=0x7f020065;
+ public static final int sym_keyboard_feedback_language_arrows_left=0x7f020066;
+ public static final int sym_keyboard_feedback_language_arrows_right=0x7f020067;
+ public static final int sym_keyboard_feedback_mic=0x7f020068;
+ public static final int sym_keyboard_feedback_numalt=0x7f020069;
+ public static final int sym_keyboard_feedback_return=0x7f02006a;
+ public static final int sym_keyboard_feedback_search=0x7f02006b;
+ public static final int sym_keyboard_feedback_settings=0x7f02006c;
+ public static final int sym_keyboard_feedback_shift=0x7f02006d;
+ public static final int sym_keyboard_feedback_shift_locked=0x7f02006e;
+ public static final int sym_keyboard_feedback_space=0x7f02006f;
+ public static final int sym_keyboard_feedback_tab=0x7f020070;
+ public static final int sym_keyboard_kp2a=0x7f020071;
+ public static final int sym_keyboard_language_arrows_left=0x7f020072;
+ public static final int sym_keyboard_language_arrows_right=0x7f020073;
+ public static final int sym_keyboard_mic=0x7f020074;
+ public static final int sym_keyboard_num0=0x7f020075;
+ public static final int sym_keyboard_num1=0x7f020076;
+ public static final int sym_keyboard_num2=0x7f020077;
+ public static final int sym_keyboard_num3=0x7f020078;
+ public static final int sym_keyboard_num4=0x7f020079;
+ public static final int sym_keyboard_num5=0x7f02007a;
+ public static final int sym_keyboard_num6=0x7f02007b;
+ public static final int sym_keyboard_num7=0x7f02007c;
+ public static final int sym_keyboard_num8=0x7f02007d;
+ public static final int sym_keyboard_num9=0x7f02007e;
+ public static final int sym_keyboard_numalt=0x7f02007f;
+ public static final int sym_keyboard_numpound=0x7f020080;
+ public static final int sym_keyboard_numstar=0x7f020081;
+ public static final int sym_keyboard_return=0x7f020082;
+ public static final int sym_keyboard_search=0x7f020083;
+ public static final int sym_keyboard_settings=0x7f020084;
+ public static final int sym_keyboard_shift=0x7f020085;
+ public static final int sym_keyboard_shift_lock=0x7f020086;
+ public static final int sym_keyboard_shift_locked=0x7f020087;
+ public static final int sym_keyboard_space=0x7f020088;
+ public static final int sym_keyboard_space_led=0x7f020089;
+ public static final int sym_keyboard_tab=0x7f02008a;
+ public static final int voice_ime_background=0x7f02008b;
+ public static final int voice_swipe_hint=0x7f02008c;
+ public static final int working=0x7f02008d;
+ }
+ public static final class id {
+ public static final int LatinKeyboardBaseView=0x7f070007;
+ public static final int LatinkeyboardBaseView=0x7f070006;
+ public static final int black=0x7f070004;
+ public static final int bold=0x7f070001;
+ public static final int button=0x7f07000c;
+ public static final int button_text=0x7f07000d;
+ public static final int candidates=0x7f070005;
+ public static final int image=0x7f07000a;
+ public static final int italic=0x7f070002;
+ public static final int main_image=0x7f070008;
+ public static final int mode_email=0x7f070010;
+ public static final int mode_email_with_settings_key=0x7f070015;
+ public static final int mode_im=0x7f070011;
+ public static final int mode_im_with_settings_key=0x7f070016;
+ public static final int mode_normal=0x7f07000e;
+ public static final int mode_normal_with_settings_key=0x7f070013;
+ public static final int mode_symbols=0x7f070018;
+ public static final int mode_symbols_with_settings_key=0x7f070019;
+ public static final int mode_url=0x7f07000f;
+ public static final int mode_url_with_settings_key=0x7f070014;
+ public static final int mode_webentry=0x7f070012;
+ public static final int mode_webentry_with_settings_key=0x7f070017;
+ public static final int normal=0x7f070000;
+ public static final int progress=0x7f07000b;
+ public static final int text=0x7f070009;
+ public static final int white=0x7f070003;
+ }
+ public static final class integer {
+ public static final int config_delay_after_preview=0x7f0a0001;
+ public static final int config_delay_before_key_repeat_start=0x7f0a0006;
+ public static final int config_delay_before_preview=0x7f0a0000;
+ public static final int config_key_repeat_interval=0x7f0a0007;
+ public static final int config_long_press_key_timeout=0x7f0a0008;
+ public static final int config_mini_keyboard_fadein_anim_time=0x7f0a0004;
+ public static final int config_mini_keyboard_fadeout_anim_time=0x7f0a0005;
+ public static final int config_multi_tap_key_timeout=0x7f0a0009;
+ public static final int config_preview_fadein_anim_time=0x7f0a0002;
+ public static final int config_preview_fadeout_anim_time=0x7f0a0003;
+ public static final int key_delete=0x7f0a0010;
+ public static final int key_f1=0x7f0a0013;
+ public static final int key_kp2a=0x7f0a0014;
+ public static final int key_return=0x7f0a000c;
+ /** Keycode for F1 (function) key. This one switches between language switch & comma/.com
+ */
+ public static final int key_settings=0x7f0a0011;
+ public static final int key_shift=0x7f0a000e;
+ public static final int key_space=0x7f0a000d;
+ public static final int key_symbol=0x7f0a000f;
+ public static final int key_tab=0x7f0a000b;
+ public static final int key_voice=0x7f0a0012;
+ /** Vibration duration in milliseconds, for key presses in the IME. This can be hardware
+ dependent and may require overriding with a device specific overlay.
+ */
+ public static final int vibrate_duration_ms=0x7f0a000a;
+ }
+ public static final class layout {
+ public static final int bubble_text=0x7f030000;
+ public static final int candidate_preview=0x7f030001;
+ public static final int candidates=0x7f030002;
+ public static final int input_basic=0x7f030003;
+ public static final int input_basic_highcontrast=0x7f030004;
+ public static final int input_gingerbread=0x7f030005;
+ public static final int input_stone_bold=0x7f030006;
+ public static final int input_stone_normal=0x7f030007;
+ public static final int input_stone_popup=0x7f030008;
+ public static final int key_preview=0x7f030009;
+ public static final int keyboard_popup=0x7f03000a;
+ public static final int recognition_status=0x7f03000b;
+ public static final int voice_punctuation_hint=0x7f03000c;
+ public static final int voice_swipe_hint=0x7f03000d;
+ }
+ public static final class raw {
+ public static final int main=0x7f060000;
+ public static final int type3=0x7f060001;
+ }
+ public static final class string {
+ /** Indicates that a word has been added to the dictionary
+ */
+ public static final int added_word=0x7f0c0044;
+ public static final int alternates_for_a=0x7f0c0000;
+ public static final int alternates_for_a_umlaut=0x7f0c0017;
+ public static final int alternates_for_ae=0x7f0c0013;
+ public static final int alternates_for_c=0x7f0c0007;
+ public static final int alternates_for_cyrillic_e=0x7f0c0015;
+ public static final int alternates_for_cyrillic_soft_sign=0x7f0c0016;
+ public static final int alternates_for_d=0x7f0c000b;
+ public static final int alternates_for_e=0x7f0c0001;
+ public static final int alternates_for_g=0x7f0c0010;
+ public static final int alternates_for_i=0x7f0c0002;
+ public static final int alternates_for_l=0x7f0c000f;
+ public static final int alternates_for_n=0x7f0c0006;
+ public static final int alternates_for_o=0x7f0c0003;
+ public static final int alternates_for_o_umlaut=0x7f0c0018;
+ public static final int alternates_for_oe=0x7f0c0014;
+ public static final int alternates_for_p=0x7f0c0011;
+ public static final int alternates_for_q=0x7f0c0009;
+ public static final int alternates_for_r=0x7f0c000c;
+ public static final int alternates_for_s=0x7f0c0005;
+ public static final int alternates_for_t=0x7f0c000d;
+ public static final int alternates_for_u=0x7f0c0004;
+ public static final int alternates_for_v=0x7f0c0012;
+ public static final int alternates_for_w=0x7f0c000a;
+ public static final int alternates_for_y=0x7f0c0008;
+ public static final int alternates_for_z=0x7f0c000e;
+ /** Option to enable auto capitalization of sentences
+ */
+ public static final int auto_cap=0x7f0c0031;
+ /** Description for auto cap
+ */
+ public static final int auto_cap_summary=0x7f0c0032;
+ /** Option to enable auto completion
+ */
+ public static final int auto_complete=0x7f0c0039;
+ /** Dialog title for auto complete choices
+ */
+ public static final int auto_complete_dialog_title=0x7f0c002e;
+ /** Description for auto completion
+ */
+ public static final int auto_complete_summary=0x7f0c003a;
+ /** Option to automatically correct word on hitting space
+ */
+ public static final int auto_correction=0x7f0c0029;
+ /** Description for auto_correction
+ */
+ public static final int auto_correction_summary=0x7f0c002a;
+ /** Option to enable auto punctuate
+ */
+ public static final int auto_punctuate=0x7f0c0033;
+ /** Description for auto punctuate
+ */
+ public static final int auto_punctuate_summary=0x7f0c0034;
+ /** Press the "enter" key after the user speaks. Option on settings.
+ */
+ public static final int auto_submit=0x7f0c0071;
+ /** Press the "enter" key after the user speaks. Summary of option in settings.
+ */
+ public static final int auto_submit_summary=0x7f0c0072;
+ /** Option to enable bigram completion
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ no translation found for settings_key_modes:0 (8549888726962891527)
+ no translation found for settings_key_modes:1 (881280041213210923)
+ no translation found for settings_key_modes:2 (7317310620171067848)
+ */
+ public static final int bigram_suggestion=0x7f0c003f;
+ /** Description for auto completion
+ */
+ public static final int bigram_suggestion_summary=0x7f0c0040;
+ /** Label on button to stop recognition. Must be short to fit on button.
+ */
+ public static final int cancel=0x7f0c006b;
+ /** appears above the image showing the back button used to close the keyboard
+ */
+ public static final int close_the_keyboard=0x7f0c0074;
+ /** Title for Latin keyboard debug settings activity / dialog
+ */
+ public static final int english_ime_debug_settings=0x7f0c008d;
+ /** Title for Latin keyboard input options dialog
+ */
+ public static final int english_ime_input_options=0x7f0c0021;
+ /** Title for Latin keyboard
+ */
+ public static final int english_ime_name=0x7f0c001f;
+ /** Title for Latin keyboard settings activity / dialog
+ */
+ public static final int english_ime_settings=0x7f0c0020;
+ /** Inform the user that a particular language has an available dictionary
+ */
+ public static final int has_dictionary=0x7f0c0080;
+ /** Add to dictionary hint
+ outdated translation 8058519710062071085
+ */
+ public static final int hint_add_to_dictionary=0x7f0c007f;
+ /** Option to enable using nearby keys when correcting/predicting
+ */
+ public static final int hit_correction=0x7f0c0025;
+ /** Option to enable using nearby keys when correcting/predicting in landscape
+ */
+ public static final int hit_correction_land=0x7f0c0027;
+ /** Description for hit_correction in landscape
+ */
+ public static final int hit_correction_land_summary=0x7f0c0028;
+ /** Description for hit_correction
+ */
+ public static final int hit_correction_summary=0x7f0c0026;
+ /** Description for keyboard theme switcher
+ */
+ public static final int keyboard_layout=0x7f0c0085;
+ /** appears above image showing how to access keyboard settings
+ */
+ public static final int keyboard_settings=0x7f0c0076;
+ /** Label for "switch to alphabetic" key. Must be short to fit on key!
+ */
+ public static final int label_alpha_key=0x7f0c0057;
+ /** Label for ALT modifier key. Must be short to fit on key!
+ */
+ public static final int label_alt_key=0x7f0c0058;
+ /** Label for soft enter key when it performs DONE action. Must be short to fit on key!
+ */
+ public static final int label_done_key=0x7f0c0053;
+ /** Label for soft enter key when it performs GO action. Must be short to fit on key!
+ */
+ public static final int label_go_key=0x7f0c0051;
+ /** Label for soft enter key when it performs NEXT action. Must be short to fit on key!
+ */
+ public static final int label_next_key=0x7f0c0052;
+ /** Label for "switch to numeric" key. Must be short to fit on key!
+ */
+ public static final int label_phone_key=0x7f0c0056;
+ /** Label for soft enter key when it performs SEND action. Must be short to fit on key!
+ */
+ public static final int label_send_key=0x7f0c0054;
+ /** Label for "switch to symbols" key. Must be short to fit on key!
+ */
+ public static final int label_symbol_key=0x7f0c0055;
+ /** Title summary for input language selection screen
+ */
+ public static final int language_selection_summary=0x7f0c007e;
+ /** Title for input language selection screen
+ */
+ public static final int language_selection_title=0x7f0c007d;
+ public static final int layout_basic=0x7f0c0086;
+ public static final int layout_gingerbread=0x7f0c008a;
+ public static final int layout_high_contrast=0x7f0c0087;
+ public static final int layout_stone_bold=0x7f0c0088;
+ public static final int layout_stone_normal=0x7f0c0089;
+ /** Label on button when an error occurs
+ */
+ public static final int ok=0x7f0c006c;
+ /** appears above image showing the user to click on a TextView to show the IME
+ */
+ public static final int open_the_keyboard=0x7f0c0073;
+ /** popular web domains for the locale - most popular, displayed on the keyboard
+ */
+ public static final int popular_domain_0=0x7f0c0077;
+ /** popular web domains for the locale - item 1, displayed in the popup
+ */
+ public static final int popular_domain_1=0x7f0c0078;
+ /** popular web domains for the locale - item 2, displayed in the popup
+ */
+ public static final int popular_domain_2=0x7f0c0079;
+ /** popular web domains for the locale - item 3, displayed in the popup
+ */
+ public static final int popular_domain_3=0x7f0c007a;
+ /** popular web domains for the locale - item 4, displayed in the popup
+ */
+ public static final int popular_domain_4=0x7f0c007b;
+ /** Option to pop up the character with a larger font above soft keyboard
+ */
+ public static final int popup_on_keypress=0x7f0c0024;
+ /** Option to enable text prediction
+ */
+ public static final int prediction=0x7f0c002b;
+ /** Don't translate
+ */
+ public static final int prediction_basic=0x7f0c0042;
+ /** Category title for text prediction
+ */
+ public static final int prediction_category=0x7f0c002c;
+ /** Don't translate
+ */
+ public static final int prediction_full=0x7f0c0043;
+ /** Option to enable text prediction in landscape
+ */
+ public static final int prediction_landscape=0x7f0c002f;
+ /** Description for text prediction
+ */
+ public static final int prediction_landscape_summary=0x7f0c0030;
+ /** Don't translate
+ */
+ public static final int prediction_none=0x7f0c0041;
+ /** Description for text prediction
+ */
+ public static final int prediction_summary=0x7f0c002d;
+ public static final int prefs_debug_mode=0x7f0c008e;
+ /** Description for enabling to send user statistics to Google
+ */
+ public static final int prefs_description_log=0x7f0c0082;
+ /** Preferences item for enabling to send user statistics to Google
+ */
+ public static final int prefs_enable_log=0x7f0c0081;
+ /** Preferences item for enabling to correct suggestions by touching words you have typed
+ */
+ public static final int prefs_enable_recorrection=0x7f0c0083;
+ /** The summary for the preferences item for enabling to correct suggestions by touching words you have typed
+ */
+ public static final int prefs_enable_recorrection_summary=0x7f0c0084;
+ /** Option to show/hide the settings key
+ */
+ public static final int prefs_settings_key=0x7f0c003b;
+ /** Option to enable quick fixes
+ */
+ public static final int quick_fixes=0x7f0c0035;
+ /** Description for quick fixes
+ */
+ public static final int quick_fixes_summary=0x7f0c0036;
+ /** Menu item for launching Input method picker
+ */
+ public static final int selectInputMethod=0x7f0c007c;
+ /** Symbols that are sentence separators, for purposes of making it hug the last sentence.
+ Symbols that are sentence separators, for purposes of making it hug the last sentence.
+ */
+ public static final int sentence_separators=0x7f0c001a;
+ /** Always hide the settings key
+ */
+ public static final int settings_key_mode_always_hide=0x7f0c001e;
+ /** Option to always hide the settings key
+ */
+ public static final int settings_key_mode_always_hide_name=0x7f0c003e;
+ /** Always show the settings key
+ */
+ public static final int settings_key_mode_always_show=0x7f0c001d;
+ /** Option to always show the settings key
+ */
+ public static final int settings_key_mode_always_show_name=0x7f0c003d;
+ /** Option values to show/hide the settings key in onscreen keyboard
+ Automatically decide to show or hide the settings key
+ */
+ public static final int settings_key_mode_auto=0x7f0c001c;
+ /** Option to automatically decide to show/hide the settings key
+ */
+ public static final int settings_key_mode_auto_name=0x7f0c003c;
+ /** Option to enable showing suggestions
+ */
+ public static final int show_suggestions=0x7f0c0037;
+ /** Description for show suggestions
+ */
+ public static final int show_suggestions_summary=0x7f0c0038;
+ /** Option to play back sound on keypress in soft keyboard
+ */
+ public static final int sound_on_keypress=0x7f0c0023;
+ public static final int subtype_mode_keyboard=0x7f0c008b;
+ public static final int subtype_mode_voice=0x7f0c008c;
+ /** Symbols that are suggested between words
+ */
+ public static final int suggested_punctuations=0x7f0c001b;
+ /** Tip to press ?123 to access numbers and symbols
+ */
+ public static final int tip_access_symbols=0x7f0c0047;
+ /** Tip to long press on typed word to add to dictionary
+ */
+ public static final int tip_add_to_dictionary=0x7f0c0048;
+ /** Tip to dismiss keyboard
+ */
+ public static final int tip_dismiss=0x7f0c0046;
+ /** Tip to long press on keys
+ */
+ public static final int tip_long_press=0x7f0c0045;
+ /** Tutorial tip 4 - How to switch back to alphabet keyboard
+ */
+ public static final int tip_to_close_symbols=0x7f0c004e;
+ /** Tutorial tip 5 - How to launch keyboard settings
+ */
+ public static final int tip_to_launch_settings=0x7f0c004f;
+ /** Tutorial tip 1 - The keyboard opens any time you touch a text field
+ */
+ public static final int tip_to_open_keyboard=0x7f0c004b;
+ /** Tutorial tip 3 - How to switch to number/symbol keyboard
+ */
+ public static final int tip_to_open_symbols=0x7f0c004d;
+ /** Tutorial tip 6 - Done with the tutorial
+ */
+ public static final int tip_to_start_typing=0x7f0c0050;
+ /** Tutorial tip 2 - Touch and hold a key to view accents (examples)
+ */
+ public static final int tip_to_view_accents=0x7f0c004c;
+ /** appears above image showing how to use touch and hold
+ */
+ public static final int touch_and_hold=0x7f0c0075;
+ /** Instruction to touch the bubble to continue
+ */
+ public static final int touch_to_continue=0x7f0c0049;
+ /** Instruction to touch the bubble to start typing
+ */
+ public static final int touch_to_finish=0x7f0c004a;
+ /** Option to provide vibrate/haptic feedback on keypress
+ */
+ public static final int vibrate_on_keypress=0x7f0c0022;
+ /** Short message shown for an audio error.
+ */
+ public static final int voice_audio_error=0x7f0c0064;
+ /** Short message shown when a generic error occurs.
+ */
+ public static final int voice_error=0x7f0c0061;
+ /** Message to show when user clicks the swiping hint (which says
+ "Swipe across keyboard to speak"). Also shown when enabling settings.
+ */
+ public static final int voice_hint_dialog_message=0x7f0c005d;
+ /** Short message shown before the user should speak.
+ */
+ public static final int voice_initializing=0x7f0c0060;
+ /** Preferences item for enabling speech input
+ */
+ public static final int voice_input=0x7f0c006d;
+ /** Short message to tell the user the system is ready for them to speak.
+ */
+ public static final int voice_listening=0x7f0c005e;
+ /** Don't translate
+ */
+ public static final int voice_mode_main=0x7f0c006e;
+ /** Don't translate
+ */
+ public static final int voice_mode_off=0x7f0c0070;
+ /** Don't translate
+ */
+ public static final int voice_mode_symbols=0x7f0c006f;
+ /** Short message shown for a network error.
+ */
+ public static final int voice_network_error=0x7f0c0062;
+ /** Short message shown when the server couldn't parse any speech.
+ */
+ public static final int voice_no_match=0x7f0c0067;
+ /** Short message shown when the user initiates voice and voice
+ search is not installed.
+ */
+ public static final int voice_not_installed=0x7f0c0068;
+ /** Short hint shown in candidate view to explain that user can speak punctuation.
+ */
+ public static final int voice_punctuation_hint=0x7f0c006a;
+ /** Short message shown for an error with the voice server.
+ */
+ public static final int voice_server_error=0x7f0c0065;
+ /** Short message shown when no speech is heard.
+ */
+ public static final int voice_speech_timeout=0x7f0c0066;
+ /** Short hint shown in candidate view to explain voice input.
+ */
+ public static final int voice_swipe_hint=0x7f0c0069;
+ /** Short message shown for a network error where the utterance was really long,
+ in which case we should suggest that the user speak less.
+ */
+ public static final int voice_too_much_speech=0x7f0c0063;
+ /** An additional part of the warning dialog for voice input that only shows when the user
+ actually initiates voice input, rather than just turning it on in settings.
+ */
+ public static final int voice_warning_how_to_turn_off=0x7f0c005c;
+ /** Message that gets put at the top of the warning dialog if the user is attempting to use
+ voice input in a currently unsupported locale. Voice input will work for such a user,
+ but it will only recognize them in English.
+ */
+ public static final int voice_warning_locale_not_supported=0x7f0c005a;
+ /** Message of the warning dialog that shows when a user initiates voice input for
+ the first time, or turns it on in settings.
+ */
+ public static final int voice_warning_may_not_understand=0x7f0c005b;
+ /** Voice related labels
+ Title of the warning dialog that shows when a user initiates voice input for
+ the first time.
+ */
+ public static final int voice_warning_title=0x7f0c0059;
+ /** Short message shown after the user finishes speaking.
+ */
+ public static final int voice_working=0x7f0c005f;
+ /** Symbols that are commonly considered word separators in this language
+ Symbols that are commonly considered word separators in this language
+ Symbols that are commonly considered word separators in this language
+ */
+ public static final int word_separators=0x7f0c0019;
+ }
+ public static final class style {
+ public static final int KeyPreviewAnimation=0x7f0e0001;
+ public static final int LatinKeyboardBaseView=0x7f0e0000;
+ public static final int MiniKeyboardAnimation=0x7f0e0002;
+ }
+ public static final class xml {
+ public static final int dictionary=0x7f050000;
+ public static final int kbd_phone=0x7f050001;
+ public static final int kbd_phone_black=0x7f050002;
+ public static final int kbd_phone_symbols=0x7f050003;
+ public static final int kbd_phone_symbols_black=0x7f050004;
+ public static final int kbd_popup_narrow_template=0x7f050005;
+ public static final int kbd_popup_template=0x7f050006;
+ public static final int kbd_qwerty=0x7f050007;
+ public static final int kbd_qwerty_black=0x7f050008;
+ public static final int kbd_symbols=0x7f050009;
+ public static final int kbd_symbols_black=0x7f05000a;
+ public static final int kbd_symbols_shift=0x7f05000b;
+ public static final int kbd_symbols_shift_black=0x7f05000c;
+ public static final int language_prefs=0x7f05000d;
+ public static final int method=0x7f05000e;
+ public static final int popup_at=0x7f05000f;
+ public static final int popup_comma=0x7f050010;
+ public static final int popup_domains=0x7f050011;
+ public static final int popup_mic=0x7f050012;
+ public static final int popup_punctuation=0x7f050013;
+ public static final int popup_slash=0x7f050014;
+ public static final int popup_smileys=0x7f050015;
+ public static final int prefs=0x7f050016;
+ public static final int prefs_for_debug=0x7f050017;
+ }
+ public static final class styleable {
+ /** Attributes that can be used with a LatinKeyboardBaseView.
+
This symbol is the offset where the {@link keepass2android.softkeyboard.R.attr#backgroundDimAmount}
+ attribute's value can be found in the {@link #LatinKeyboardBaseView} array.
+
+
+
Must be a floating point value, such as "1.2".
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ @attr name android:backgroundDimAmount
+ */
+ public static final int LatinKeyboardBaseView_backgroundDimAmount = 13;
+ /**
+
+ @attr description
+ Image for the key. This image needs to be a StateListDrawable, with the following
+ possible states: normal, pressed, checkable, checkable+pressed, checkable+checked,
+ checkable+checked+pressed.
+
+
+
Must be a reference to another resource, in the form "@[+][package:]type:name"
+or to a theme attribute in the form "?[package:][type:]name".
+
This is a private symbol.
+ @attr name android:keyBackground
+ */
+ public static final int LatinKeyboardBaseView_keyBackground = 1;
+ /**
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+
This is a private symbol.
+ @attr name android:keyHysteresisDistance
+ */
+ public static final int LatinKeyboardBaseView_keyHysteresisDistance = 8;
+ /**
+
+ @attr description
+ Height of the key press feedback popup.
+
+
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+
This is a private symbol.
+ @attr name android:keyPreviewHeight
+ */
+ public static final int LatinKeyboardBaseView_keyPreviewHeight = 7;
+ /**
+
Must be a reference to another resource, in the form "@[+][package:]type:name"
+or to a theme attribute in the form "?[package:][type:]name".
+
This is a private symbol.
+ @attr name android:keyPreviewLayout
+ */
+ public static final int LatinKeyboardBaseView_keyPreviewLayout = 5;
+ /**
+
+ @attr description
+ Vertical offset of the key press feedback from the key.
+
+
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+
This is a private symbol.
+ @attr name android:keyPreviewOffset
+ */
+ public static final int LatinKeyboardBaseView_keyPreviewOffset = 6;
+ /**
+
+ @attr description
+ Color to use for the label in a key.
+
+
+
Must be a color value, in the form of "#rgb", "#argb",
+"#rrggbb", or "#aarrggbb".
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+
This is a private symbol.
+ @attr name android:keyTextColor
+ */
+ public static final int LatinKeyboardBaseView_keyTextColor = 4;
+ /**
+
+ @attr description
+ Size of the text for character keys.
+
+
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+
This is a private symbol.
+ @attr name android:keyTextSize
+ */
+ public static final int LatinKeyboardBaseView_keyTextSize = 2;
+ /**
+
This symbol is the offset where the {@link keepass2android.softkeyboard.R.attr#keyTextStyle}
+ attribute's value can be found in the {@link #LatinKeyboardBaseView} array.
+
+
+
Must be one or more (separated by '|') of the following constant values.
+
+
+
+
+
Constant
Value
Description
+
normal
0
+
bold
1
+
italic
2
+
+ @attr name android:keyTextStyle
+ */
+ public static final int LatinKeyboardBaseView_keyTextStyle = 14;
+ /**
+
Must be a reference to another resource, in the form "@[+][package:]type:name"
+or to a theme attribute in the form "?[package:][type:]name".
+
This is a private symbol.
+ @attr name android:keyboardViewStyle
+ */
+ public static final int LatinKeyboardBaseView_keyboardViewStyle = 0;
+ /**
+
+ @attr description
+ Size of the text for custom keys with some text and no icon.
+
+
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+
This is a private symbol.
+ @attr name android:labelTextSize
+ */
+ public static final int LatinKeyboardBaseView_labelTextSize = 3;
+ /**
+
Must be a reference to another resource, in the form "@[+][package:]type:name"
+or to a theme attribute in the form "?[package:][type:]name".
+
This is a private symbol.
+ @attr name android:popupLayout
+ */
+ public static final int LatinKeyboardBaseView_popupLayout = 10;
+ /**
+
This symbol is the offset where the {@link keepass2android.softkeyboard.R.attr#shadowColor}
+ attribute's value can be found in the {@link #LatinKeyboardBaseView} array.
+
+
+
Must be a color value, in the form of "#rgb", "#argb",
+"#rrggbb", or "#aarrggbb".
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ @attr name android:shadowColor
+ */
+ public static final int LatinKeyboardBaseView_shadowColor = 11;
+ /**
+
This symbol is the offset where the {@link keepass2android.softkeyboard.R.attr#shadowRadius}
+ attribute's value can be found in the {@link #LatinKeyboardBaseView} array.
+
+
+
Must be a floating point value, such as "1.2".
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+ @attr name android:shadowRadius
+ */
+ public static final int LatinKeyboardBaseView_shadowRadius = 12;
+ /**
+
This symbol is the offset where the {@link keepass2android.softkeyboard.R.attr#symbolColorScheme}
+ attribute's value can be found in the {@link #LatinKeyboardBaseView} array.
+
+
+
Must be one or more (separated by '|') of the following constant values.
+
+
+
+
+
Constant
Value
Description
+
white
0
+
black
1
+
+ @attr name android:symbolColorScheme
+ */
+ public static final int LatinKeyboardBaseView_symbolColorScheme = 15;
+ /**
+
+ @attr description
+ Amount to offset the touch Y coordinate by, for bias correction.
+
+
+
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp".
+Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),
+in (inches), mm (millimeters).
+
This may also be a reference to a resource (in the form
+"@[package:]type:name") or
+theme attribute (in the form
+"?[package:][type:]name")
+containing a value of this type.
+
This is a private symbol.
+ @attr name android:verticalCorrection
+ */
+ public static final int LatinKeyboardBaseView_verticalCorrection = 9;
+ };
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/libs/armeabi-v7a/libjni_latinime.so b/src/java/KP2ASoftKeyboard2/java/libs/armeabi-v7a/libjni_latinime.so
new file mode 100644
index 00000000..fce10f89
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/libs/armeabi-v7a/libjni_latinime.so differ
diff --git a/src/java/KP2ASoftKeyboard2/java/libs/armeabi/libjni_latinime.so b/src/java/KP2ASoftKeyboard2/java/libs/armeabi/libjni_latinime.so
new file mode 100644
index 00000000..3f97a516
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/libs/armeabi/libjni_latinime.so differ
diff --git a/src/java/KP2ASoftKeyboard2/java/libs/mips/libjni_latinime.so b/src/java/KP2ASoftKeyboard2/java/libs/mips/libjni_latinime.so
new file mode 100644
index 00000000..87fddde6
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/libs/mips/libjni_latinime.so differ
diff --git a/src/java/KP2ASoftKeyboard2/java/libs/x86/libjni_latinime.so b/src/java/KP2ASoftKeyboard2/java/libs/x86/libjni_latinime.so
new file mode 100644
index 00000000..7dc1bbe4
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/libs/x86/libjni_latinime.so differ
diff --git a/src/java/KP2ASoftKeyboard2/java/proguard.flags b/src/java/KP2ASoftKeyboard2/java/proguard.flags
new file mode 100644
index 00000000..95c153fd
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/proguard.flags
@@ -0,0 +1,8 @@
+-keep class keepass2android.softkeyboard.BinaryDictionary {
+ int mDictLength;
+ (...);
+}
+
+-keep class keepass2android.softkeyboard.Suggest {
+ (...);
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/project.properties b/src/java/KP2ASoftKeyboard2/java/project.properties
new file mode 100644
index 00000000..a3ee5ab6
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/project.properties
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-17
diff --git a/src/java/KP2ASoftKeyboard2/java/res/anim/key_preview_fadein.xml b/src/java/KP2ASoftKeyboard2/java/res/anim/key_preview_fadein.xml
new file mode 100644
index 00000000..9fad7b9a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/anim/key_preview_fadein.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/anim/key_preview_fadeout.xml b/src/java/KP2ASoftKeyboard2/java/res/anim/key_preview_fadeout.xml
new file mode 100644
index 00000000..7de5123c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/anim/key_preview_fadeout.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/anim/mini_keyboard_fadein.xml b/src/java/KP2ASoftKeyboard2/java/res/anim/mini_keyboard_fadein.xml
new file mode 100644
index 00000000..9fad7b9a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/anim/mini_keyboard_fadein.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/anim/mini_keyboard_fadeout.xml b/src/java/KP2ASoftKeyboard2/java/res/anim/mini_keyboard_fadeout.xml
new file mode 100644
index 00000000..7de5123c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/anim/mini_keyboard_fadeout.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png
new file mode 100644
index 00000000..01fc8ca7
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png
new file mode 100644
index 00000000..af4017e2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png
new file mode 100644
index 00000000..4c35aca9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png
new file mode 100644
index 00000000..174f3452
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png
new file mode 100644
index 00000000..1fcbd9a8
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png
new file mode 100644
index 00000000..072753f3
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png
new file mode 100644
index 00000000..b6c234c0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png
new file mode 100644
index 00000000..73a8cd1c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png
new file mode 100644
index 00000000..1ad74605
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png
new file mode 100644
index 00000000..e3a77d61
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_popup_selected.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_popup_selected.9.png
new file mode 100644
index 00000000..431c4496
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_popup_selected.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png
new file mode 100644
index 00000000..ccd59d5f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png
new file mode 100644
index 00000000..42c7c146
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png
new file mode 100644
index 00000000..01e2506b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_off_stone.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_off_stone.9.png
new file mode 100644
index 00000000..fad0ec45
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_off_stone.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png
new file mode 100644
index 00000000..83c6eb3f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_on_stone.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_on_stone.9.png
new file mode 100644
index 00000000..215f8157
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_on_stone.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_stone.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_stone.9.png
new file mode 100644
index 00000000..88acdd74
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_normal_stone.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
new file mode 100644
index 00000000..e047eaff
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png
new file mode 100644
index 00000000..218a2d29
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png
new file mode 100644
index 00000000..afe49512
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/cancel.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/cancel.png
new file mode 100644
index 00000000..506cf99d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/cancel.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/candidate_feedback_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/candidate_feedback_background.9.png
new file mode 100644
index 00000000..203c4e64
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/candidate_feedback_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/caution.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/caution.png
new file mode 100644
index 00000000..5cb6c54b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/caution.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/dialog_bubble_step02.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/dialog_bubble_step02.9.png
new file mode 100644
index 00000000..b338364c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/dialog_bubble_step02.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/dialog_bubble_step07.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/dialog_bubble_step07.9.png
new file mode 100644
index 00000000..94b91543
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/dialog_bubble_step07.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/highlight_pressed.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/highlight_pressed.png
new file mode 100644
index 00000000..ae04901a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/highlight_pressed.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/hint_popup.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/hint_popup.9.png
new file mode 100644
index 00000000..b5ec003e
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/hint_popup.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_dialog_keyboard.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_dialog_keyboard.png
new file mode 100644
index 00000000..c7729566
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_dialog_keyboard.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_mic_dialog.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_mic_dialog.png
new file mode 100644
index 00000000..349dc4b3
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_mic_dialog.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_subtype_keyboard.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_subtype_keyboard.png
new file mode 100644
index 00000000..7015e266
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_subtype_keyboard.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_subtype_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_subtype_mic.png
new file mode 100644
index 00000000..cb86a559
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_subtype_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_suggest_strip_microphone.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_suggest_strip_microphone.png
new file mode 100644
index 00000000..c00b4aaa
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_suggest_strip_microphone.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png
new file mode 100644
index 00000000..256dc3d6
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_background.9.png
new file mode 100644
index 00000000..edffac5b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_dark_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_dark_background.9.png
new file mode 100644
index 00000000..f315cbdd
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_dark_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_0.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_0.9.png
new file mode 100644
index 00000000..271264e9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_0.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_1.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_1.9.png
new file mode 100644
index 00000000..eaf37426
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_1.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_2.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_2.9.png
new file mode 100644
index 00000000..8a165711
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_2.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_3.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_3.9.png
new file mode 100644
index 00000000..34b50110
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_3.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_4.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_4.9.png
new file mode 100644
index 00000000..d4cc250d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_4.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_5.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_5.9.png
new file mode 100644
index 00000000..6a054b42
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_5.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_6.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_6.9.png
new file mode 100644
index 00000000..66e91400
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_6.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_7.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_7.9.png
new file mode 100644
index 00000000..5eae24f4
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_7.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_8.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_8.9.png
new file mode 100644
index 00000000..ea7f512f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_8.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_9.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_9.9.png
new file mode 100644
index 00000000..0bf85de9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_hint_9.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png
new file mode 100644
index 00000000..762a2570
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png
new file mode 100644
index 00000000..141d2d6b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_popup_panel_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_popup_panel_background.9.png
new file mode 100644
index 00000000..d6b2c793
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_popup_panel_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_suggest_strip.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_suggest_strip.9.png
new file mode 100644
index 00000000..0ccdb6ab
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_suggest_strip.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png
new file mode 100644
index 00000000..7ca3e613
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/list_selector_background_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/list_selector_background_pressed.9.png
new file mode 100644
index 00000000..ba79cf7f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/list_selector_background_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/mic_slash.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/mic_slash.png
new file mode 100644
index 00000000..dc8da625
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/mic_slash.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ok_cancel.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ok_cancel.png
new file mode 100644
index 00000000..f11e57a3
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/ok_cancel.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level0.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level0.png
new file mode 100644
index 00000000..342849cf
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level0.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level1.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level1.png
new file mode 100644
index 00000000..8947a430
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level1.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level2.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level2.png
new file mode 100644
index 00000000..44fc58c4
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level2.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level3.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level3.png
new file mode 100644
index 00000000..cfa5c1b8
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level3.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level4.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level4.png
new file mode 100644
index 00000000..a050d883
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level4.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level5.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level5.png
new file mode 100644
index 00000000..8cd5ae7a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level5.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level6.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level6.png
new file mode 100644
index 00000000..9f4481eb
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/speak_now_level6.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_123_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_123_mic.png
new file mode 100644
index 00000000..3e4eff69
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_123_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_delete.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_delete.png
new file mode 100644
index 00000000..1d24cc85
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_delete.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_done.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_done.png
new file mode 100644
index 00000000..b77803d2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_done.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_kp2a.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_kp2a.png
new file mode 100644
index 00000000..66608769
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_kp2a.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_mic.png
new file mode 100644
index 00000000..512f4608
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num0.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num0.png
new file mode 100644
index 00000000..678a790d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num0.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num1.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num1.png
new file mode 100644
index 00000000..4e68e35b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num1.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num2.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num2.png
new file mode 100644
index 00000000..546663fd
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num2.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num3.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num3.png
new file mode 100644
index 00000000..57f9a8d8
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num3.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num4.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num4.png
new file mode 100644
index 00000000..de504388
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num4.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num5.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num5.png
new file mode 100644
index 00000000..1d2e1ef8
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num5.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num6.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num6.png
new file mode 100644
index 00000000..39788b72
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num6.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num7.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num7.png
new file mode 100644
index 00000000..fff6f27b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num7.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num8.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num8.png
new file mode 100644
index 00000000..8cc1a955
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num8.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num9.png
new file mode 100644
index 00000000..02174250
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_num9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numalt.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numalt.png
new file mode 100644
index 00000000..200714f6
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numalt.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numpound.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numpound.png
new file mode 100644
index 00000000..0a46122b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numpound.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numstar.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numstar.png
new file mode 100644
index 00000000..ca22bd53
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_numstar.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_return.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_return.png
new file mode 100644
index 00000000..426e1599
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_return.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_search.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_search.png
new file mode 100644
index 00000000..1b6f884f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_search.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_settings.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_settings.png
new file mode 100644
index 00000000..08ba18f2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_settings.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_shift.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_shift.png
new file mode 100644
index 00000000..5a22dd30
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_shift.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_shift_locked.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_shift_locked.png
new file mode 100644
index 00000000..56644912
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_shift_locked.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_space.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_space.png
new file mode 100644
index 00000000..cd0ebe2f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_space.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_tab.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_tab.png
new file mode 100644
index 00000000..3466e127
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_bkeyboard_tab.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_123_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_123_mic.png
new file mode 100644
index 00000000..62669803
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_123_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_delete.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_delete.png
new file mode 100644
index 00000000..459ebcff
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_delete.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_done.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_done.png
new file mode 100644
index 00000000..471c5021
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_done.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png
new file mode 100644
index 00000000..eef78968
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png
new file mode 100644
index 00000000..8322e8e1
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_done.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_done.png
new file mode 100644
index 00000000..7015e266
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_done.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_kp2a.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_kp2a.png
new file mode 100644
index 00000000..d4616218
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_kp2a.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png
new file mode 100644
index 00000000..889477cf
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png
new file mode 100644
index 00000000..b0f6d7fe
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png
new file mode 100644
index 00000000..f82c33ae
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png
new file mode 100644
index 00000000..819236c8
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_return.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_return.png
new file mode 100644
index 00000000..f038d3ab
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_return.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_search.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_search.png
new file mode 100644
index 00000000..337f9e4f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_search.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_settings.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_settings.png
new file mode 100644
index 00000000..8a02be07
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_settings.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png
new file mode 100644
index 00000000..abf15f8f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png
new file mode 100644
index 00000000..1fd822ea
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_space.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_space.png
new file mode 100644
index 00000000..70debca9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_space.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png
new file mode 100644
index 00000000..d2efb161
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_kp2a.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_kp2a.png
new file mode 100644
index 00000000..2ed9041d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_kp2a.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png
new file mode 100644
index 00000000..dcc4bd59
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png
new file mode 100644
index 00000000..ecf61a98
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_mic.png
new file mode 100644
index 00000000..c8dca62a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num0.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num0.png
new file mode 100644
index 00000000..10ac70b9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num0.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num1.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num1.png
new file mode 100644
index 00000000..0fc03efa
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num1.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num2.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num2.png
new file mode 100644
index 00000000..283560b3
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num2.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num3.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num3.png
new file mode 100644
index 00000000..9a3b3294
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num3.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num4.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num4.png
new file mode 100644
index 00000000..f13ff1ae
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num4.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num5.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num5.png
new file mode 100644
index 00000000..c251329f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num5.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num6.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num6.png
new file mode 100644
index 00000000..4acba4c9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num6.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num7.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num7.png
new file mode 100644
index 00000000..14931c18
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num7.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num8.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num8.png
new file mode 100644
index 00000000..d4973fdc
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num8.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num9.png
new file mode 100644
index 00000000..49cec66f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_num9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numalt.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numalt.png
new file mode 100644
index 00000000..3cc5311c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numalt.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numpound.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numpound.png
new file mode 100644
index 00000000..d0913392
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numpound.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numstar.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numstar.png
new file mode 100644
index 00000000..e838e169
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_numstar.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_return.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_return.png
new file mode 100644
index 00000000..9d97e1ef
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_return.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_search.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_search.png
new file mode 100644
index 00000000..1aa22d7e
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_search.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_settings.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_settings.png
new file mode 100644
index 00000000..35d1ed6e
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_settings.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_shift.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_shift.png
new file mode 100644
index 00000000..bf217d14
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_shift.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_shift_locked.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_shift_locked.png
new file mode 100644
index 00000000..d11b3971
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_shift_locked.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_space.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_space.png
new file mode 100644
index 00000000..fcd20de7
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_space.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_space_led.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_space_led.9.png
new file mode 100644
index 00000000..2c6f4a92
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_space_led.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_tab.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_tab.png
new file mode 100644
index 00000000..51d17d98
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/sym_keyboard_tab.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/voice_ime_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/voice_ime_background.9.png
new file mode 100644
index 00000000..42868522
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/voice_ime_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/voice_swipe_hint.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/voice_swipe_hint.png
new file mode 100644
index 00000000..130f83a9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/voice_swipe_hint.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/working.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/working.png
new file mode 100644
index 00000000..5ea70230
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-hdpi/working.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-land/btn_keyboard_key.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable-land/btn_keyboard_key.xml
new file mode 100644
index 00000000..45578e58
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable-land/btn_keyboard_key.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png
new file mode 100644
index 00000000..4e337fa0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png
new file mode 100644
index 00000000..fe18497d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png
new file mode 100644
index 00000000..00aab3d5
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png
new file mode 100644
index 00000000..ac0bfd3c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png
new file mode 100644
index 00000000..ea2f3578
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png
new file mode 100644
index 00000000..6195ac0d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png
new file mode 100644
index 00000000..20f3d508
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png
new file mode 100644
index 00000000..1ed3065c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png
new file mode 100644
index 00000000..50cd06ae
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png
new file mode 100644
index 00000000..02d0fcf9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_popup_selected.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_popup_selected.9.png
new file mode 100644
index 00000000..125ff133
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_popup_selected.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png
new file mode 100644
index 00000000..7ce52f0f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal.9.png
new file mode 100644
index 00000000..7ba18dd2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_off.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_off.9.png
new file mode 100644
index 00000000..bda9b839
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_off.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_off_stone.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_off_stone.9.png
new file mode 100644
index 00000000..fad0ec45
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_off_stone.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_on.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_on.9.png
new file mode 100644
index 00000000..0c16ed50
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_on.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_on_stone.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_on_stone.9.png
new file mode 100644
index 00000000..215f8157
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_on_stone.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_stone.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_stone.9.png
new file mode 100644
index 00000000..88acdd74
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_normal_stone.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed.9.png
new file mode 100644
index 00000000..39b9314a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png
new file mode 100644
index 00000000..bdcf06e1
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png
new file mode 100644
index 00000000..79621a9e
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/cancel.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/cancel.png
new file mode 100644
index 00000000..713a3787
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/cancel.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/candidate_feedback_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/candidate_feedback_background.9.png
new file mode 100644
index 00000000..2a80f096
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/candidate_feedback_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/caution.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/caution.png
new file mode 100644
index 00000000..eaef5342
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/caution.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/dialog_bubble_step02.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/dialog_bubble_step02.9.png
new file mode 100644
index 00000000..d77f85fe
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/dialog_bubble_step02.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/dialog_bubble_step07.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/dialog_bubble_step07.9.png
new file mode 100644
index 00000000..80f4a0ea
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/dialog_bubble_step07.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/highlight_pressed.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/highlight_pressed.png
new file mode 100644
index 00000000..d27f1061
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/highlight_pressed.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/hint_popup.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/hint_popup.9.png
new file mode 100644
index 00000000..444cc26e
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/hint_popup.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_dialog_keyboard.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_dialog_keyboard.png
new file mode 100644
index 00000000..9a5aada8
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_dialog_keyboard.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_mic_dialog.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_mic_dialog.png
new file mode 100644
index 00000000..77613ca0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_mic_dialog.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_subtype_keyboard.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_subtype_keyboard.png
new file mode 100644
index 00000000..0d7ebd4e
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_subtype_keyboard.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_subtype_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_subtype_mic.png
new file mode 100644
index 00000000..247d5b3a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_subtype_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_suggest_strip_microphone.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_suggest_strip_microphone.png
new file mode 100644
index 00000000..18f314a6
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_suggest_strip_microphone.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png
new file mode 100644
index 00000000..ff629b67
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_background.9.png
new file mode 100644
index 00000000..2bd4b628
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_dark_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_dark_background.9.png
new file mode 100644
index 00000000..4f81704c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_dark_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_0.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_0.9.png
new file mode 100644
index 00000000..61ad1b50
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_0.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_1.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_1.9.png
new file mode 100644
index 00000000..cd7772e7
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_1.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_2.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_2.9.png
new file mode 100644
index 00000000..fa5f8b79
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_2.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_3.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_3.9.png
new file mode 100644
index 00000000..0c7336cb
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_3.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_4.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_4.9.png
new file mode 100644
index 00000000..73ef06c0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_4.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_5.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_5.9.png
new file mode 100644
index 00000000..aea460e1
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_5.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_6.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_6.9.png
new file mode 100644
index 00000000..16a9237e
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_6.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_7.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_7.9.png
new file mode 100644
index 00000000..6747a19c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_7.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_8.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_8.9.png
new file mode 100644
index 00000000..28be2fb8
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_8.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_9.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_9.9.png
new file mode 100644
index 00000000..731d63b1
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_hint_9.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_key_feedback_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_key_feedback_background.9.png
new file mode 100644
index 00000000..a84c19c3
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_key_feedback_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png
new file mode 100644
index 00000000..82513aad
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_popup_panel_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_popup_panel_background.9.png
new file mode 100644
index 00000000..0d9ab97f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_popup_panel_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_suggest_strip.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_suggest_strip.9.png
new file mode 100644
index 00000000..fa6c0fef
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_suggest_strip.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png
new file mode 100644
index 00000000..36393636
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/list_selector_background_pressed.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/list_selector_background_pressed.9.png
new file mode 100644
index 00000000..02b4e9a5
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/list_selector_background_pressed.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/mic_slash.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/mic_slash.png
new file mode 100644
index 00000000..d04b5634
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/mic_slash.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ok_cancel.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ok_cancel.png
new file mode 100644
index 00000000..20d10f98
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/ok_cancel.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level0.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level0.png
new file mode 100644
index 00000000..5bd13603
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level0.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level1.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level1.png
new file mode 100644
index 00000000..ccb76b87
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level1.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level2.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level2.png
new file mode 100644
index 00000000..715f9008
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level2.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level3.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level3.png
new file mode 100644
index 00000000..725248a2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level3.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level4.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level4.png
new file mode 100644
index 00000000..ff6c50b4
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level4.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level5.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level5.png
new file mode 100644
index 00000000..a5d6b89d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level5.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level6.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level6.png
new file mode 100644
index 00000000..dcdb48d0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/speak_now_level6.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_123_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_123_mic.png
new file mode 100644
index 00000000..0749b5fc
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_123_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_delete.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_delete.png
new file mode 100644
index 00000000..1a5ff439
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_delete.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_done.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_done.png
new file mode 100644
index 00000000..05ce7c64
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_done.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_kp2a.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_kp2a.png
new file mode 100644
index 00000000..300d6b88
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_kp2a.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_mic.png
new file mode 100644
index 00000000..a6cb1cc0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num0.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num0.png
new file mode 100644
index 00000000..7188f9ca
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num0.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num1.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num1.png
new file mode 100644
index 00000000..2a31bd45
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num1.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num2.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num2.png
new file mode 100644
index 00000000..c1e9cc9b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num2.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num3.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num3.png
new file mode 100644
index 00000000..e9987668
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num3.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num4.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num4.png
new file mode 100644
index 00000000..7f0f3ccc
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num4.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num5.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num5.png
new file mode 100644
index 00000000..5f748b41
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num5.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num6.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num6.png
new file mode 100644
index 00000000..78aae74a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num6.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num7.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num7.png
new file mode 100644
index 00000000..5bb874c4
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num7.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num8.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num8.png
new file mode 100644
index 00000000..6b58fdc8
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num8.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num9.png
new file mode 100644
index 00000000..f348c92a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_num9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numalt.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numalt.png
new file mode 100644
index 00000000..4fa410b6
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numalt.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numpound.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numpound.png
new file mode 100644
index 00000000..9126eed0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numpound.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numstar.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numstar.png
new file mode 100644
index 00000000..9b9f1b98
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_numstar.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_return.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_return.png
new file mode 100644
index 00000000..e76225d0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_return.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_search.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_search.png
new file mode 100644
index 00000000..1f180155
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_search.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_settings.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_settings.png
new file mode 100644
index 00000000..08ba18f2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_settings.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_shift.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_shift.png
new file mode 100644
index 00000000..c981188d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_shift.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_shift_locked.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_shift_locked.png
new file mode 100644
index 00000000..b8cebd06
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_shift_locked.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_space.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_space.png
new file mode 100644
index 00000000..4da7ee86
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_space.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_tab.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_tab.png
new file mode 100644
index 00000000..2cb991cb
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_bkeyboard_tab.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_123_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_123_mic.png
new file mode 100644
index 00000000..35afe082
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_123_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_delete.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_delete.png
new file mode 100644
index 00000000..1b0f3f83
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_delete.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_done.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_done.png
new file mode 100644
index 00000000..c0d6d139
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_done.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
new file mode 100644
index 00000000..c556c35c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png
new file mode 100644
index 00000000..a79f1585
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_done.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_done.png
new file mode 100644
index 00000000..0d7ebd4e
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_done.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_kp2a.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_kp2a.png
new file mode 100644
index 00000000..c3dc5a9c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_kp2a.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
new file mode 100644
index 00000000..eecb0269
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
new file mode 100644
index 00000000..7e10ae3a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png
new file mode 100644
index 00000000..3ed0782d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
new file mode 100644
index 00000000..bc8f1cfc
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_return.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_return.png
new file mode 100644
index 00000000..dd99ff38
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_return.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_search.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_search.png
new file mode 100644
index 00000000..6b8e01d9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_search.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_settings.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_settings.png
new file mode 100644
index 00000000..03bad184
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_settings.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png
new file mode 100644
index 00000000..d5635755
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
new file mode 100644
index 00000000..494524a6
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_space.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_space.png
new file mode 100644
index 00000000..36eb60c1
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_space.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png
new file mode 100644
index 00000000..a10dc8fa
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_kp2a.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_kp2a.png
new file mode 100644
index 00000000..db54e0ba
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_kp2a.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
new file mode 100644
index 00000000..7067a8bf
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
new file mode 100644
index 00000000..f7a133d9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_mic.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_mic.png
new file mode 100644
index 00000000..e926b3fa
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_mic.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num0.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num0.png
new file mode 100644
index 00000000..e7007c87
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num0.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num1.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num1.png
new file mode 100644
index 00000000..aaac11b0
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num1.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num2.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num2.png
new file mode 100644
index 00000000..4372eb8f
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num2.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num3.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num3.png
new file mode 100644
index 00000000..6f54c850
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num3.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num4.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num4.png
new file mode 100644
index 00000000..3e50bb95
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num4.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num5.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num5.png
new file mode 100644
index 00000000..c39ef440
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num5.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num6.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num6.png
new file mode 100644
index 00000000..ea88ceb9
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num6.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num7.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num7.png
new file mode 100644
index 00000000..ce800ba4
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num7.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num8.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num8.png
new file mode 100644
index 00000000..1a8ff94b
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num8.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num9.png
new file mode 100644
index 00000000..8b344c0a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_num9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numalt.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numalt.png
new file mode 100644
index 00000000..32a2cf3c
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numalt.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numpound.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numpound.png
new file mode 100644
index 00000000..b2419d9a
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numpound.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numstar.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numstar.png
new file mode 100644
index 00000000..cb66f968
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_numstar.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_return.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_return.png
new file mode 100644
index 00000000..0c10f004
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_return.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_search.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_search.png
new file mode 100644
index 00000000..614f85f5
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_search.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_settings.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_settings.png
new file mode 100644
index 00000000..ad7618fa
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_settings.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift.png
new file mode 100644
index 00000000..5109b047
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift_lock.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift_lock.png
new file mode 100644
index 00000000..244179c2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift_lock.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift_locked.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift_locked.png
new file mode 100644
index 00000000..244179c2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_shift_locked.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_space.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_space.png
new file mode 100644
index 00000000..cbe4a88d
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_space.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_space_led.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_space_led.9.png
new file mode 100644
index 00000000..1c1ca2cc
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_space_led.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_tab.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_tab.png
new file mode 100644
index 00000000..eddb9a59
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/sym_keyboard_tab.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/voice_ime_background.9.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/voice_ime_background.9.png
new file mode 100644
index 00000000..9b15bc25
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/voice_ime_background.9.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/voice_swipe_hint.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/voice_swipe_hint.png
new file mode 100644
index 00000000..bb887325
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/voice_swipe_hint.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/working.png b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/working.png
new file mode 100644
index 00000000..4a930c52
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/drawable-mdpi/working.png differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key.xml
new file mode 100644
index 00000000..45578e58
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key2.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key2.xml
new file mode 100644
index 00000000..bd745b76
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key2.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key3.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key3.xml
new file mode 100644
index 00000000..dbe82d5f
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key3.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_fulltrans.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_fulltrans.xml
new file mode 100644
index 00000000..bad2a931
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_fulltrans.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_gingerbread.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_gingerbread.xml
new file mode 100644
index 00000000..4a113a8a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_gingerbread.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_gingerbread_popup.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_gingerbread_popup.xml
new file mode 100644
index 00000000..9b6d23be
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_gingerbread_popup.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_stone.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_stone.xml
new file mode 100644
index 00000000..a6040a04
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/btn_keyboard_key_stone.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/ic_suggest_scroll_background.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/ic_suggest_scroll_background.xml
new file mode 100644
index 00000000..9d246e40
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/ic_suggest_scroll_background.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/java/KP2ASoftKeyboard2/java/res/drawable/keyboard_key_feedback.xml b/src/java/KP2ASoftKeyboard2/java/res/drawable/keyboard_key_feedback.xml
new file mode 100644
index 00000000..159ba868
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/drawable/keyboard_key_feedback.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/bubble_text.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/bubble_text.xml
new file mode 100644
index 00000000..c3957b65
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/bubble_text.xml
@@ -0,0 +1,30 @@
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/candidate_preview.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/candidate_preview.xml
new file mode 100644
index 00000000..fe2002d4
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/candidate_preview.xml
@@ -0,0 +1,29 @@
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/candidates.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/candidates.xml
new file mode 100644
index 00000000..f30b817e
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/candidates.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/input_basic.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/input_basic.xml
new file mode 100644
index 00000000..25085c77
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/input_basic.xml
@@ -0,0 +1,31 @@
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/input_basic_highcontrast.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/input_basic_highcontrast.xml
new file mode 100644
index 00000000..ffc1c8ae
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/input_basic_highcontrast.xml
@@ -0,0 +1,32 @@
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/input_gingerbread.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/input_gingerbread.xml
new file mode 100644
index 00000000..ea4334d7
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/input_gingerbread.xml
@@ -0,0 +1,34 @@
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_bold.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_bold.xml
new file mode 100644
index 00000000..646465f1
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_bold.xml
@@ -0,0 +1,37 @@
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_normal.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_normal.xml
new file mode 100644
index 00000000..1af02148
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_normal.xml
@@ -0,0 +1,35 @@
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_popup.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_popup.xml
new file mode 100644
index 00000000..4e0e9f60
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/input_stone_popup.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/key_preview.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/key_preview.xml
new file mode 100644
index 00000000..de03506a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/key_preview.xml
@@ -0,0 +1,29 @@
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/keyboard_popup.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/keyboard_popup.xml
new file mode 100644
index 00000000..d31f81d5
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/keyboard_popup.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/recognition_status.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/recognition_status.xml
new file mode 100644
index 00000000..49af7736
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/recognition_status.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/voice_punctuation_hint.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/voice_punctuation_hint.xml
new file mode 100644
index 00000000..629a7f2b
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/voice_punctuation_hint.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/layout/voice_swipe_hint.xml b/src/java/KP2ASoftKeyboard2/java/res/layout/voice_swipe_hint.xml
new file mode 100644
index 00000000..4e8859a7
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/layout/voice_swipe_hint.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/raw/main.dict b/src/java/KP2ASoftKeyboard2/java/res/raw/main.dict
new file mode 100644
index 00000000..472c23a2
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/raw/main.dict differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/raw/type3.ogg b/src/java/KP2ASoftKeyboard2/java/res/raw/type3.ogg
new file mode 100644
index 00000000..20e67080
Binary files /dev/null and b/src/java/KP2ASoftKeyboard2/java/res/raw/type3.ogg differ
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ar/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ar/strings.xml
new file mode 100644
index 00000000..89b5ef36
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ar/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "لوحة مفاتيح Android"
+ "إعدادات لوحة مفاتيح Android"
+ "خيارات الإرسال"
+ "اهتزاز عند الضغط على مفتاح"
+ "صوت عند الضغط على مفتاح"
+ "انبثاق عند الضغط على المفاتيح"
+ "تصحيح أخطاء الكتابة"
+ "تمكين تصحيح خطأ الإدخال"
+ "أخطاء في الإدخال الأفقي"
+ "تمكين تصحيح خطأ الإدخال"
+ "اقتراحات الكلمات"
+ "تصحيح الكلمة السابقة تلقائيًا"
+ "اقتراحات الكلمات"
+ "إعدادات اقتراحات الكلمات"
+ "تمكين الإكمال التلقائي أثناء الكتابة"
+ "إكمال تلقائي"
+ "زيادة حجم الحقل النصي"
+ "إخفاء اقتراحات الكلمات في طريقة العرض الأفقية"
+ "استخدام الأحرف الكبيرة تلقائيًا"
+ "استخدام الأحرف الكبيرة في بداية الجملة"
+ "ترقيم تلقائي"
+
+ "إصلاحات سريعة"
+ "تصحيح الأخطاء المكتوبة الشائعة"
+ "عرض الاقتراحات"
+ "عرض الكلمات المقترحة أثناء الكتابة"
+ "إكمال تلقائي"
+ "مفتاح المسافة والترقيم لإدخال كلمة محددة تلقائيًا"
+ "عرض مفتاح الإعدادات"
+ "تلقائي"
+ "إظهار بشكل دائم"
+ "إخفاء دومًا"
+
+
+
+ "اقتراحات ثنائية"
+ "استخدام الكلمة السابقة لتحسين الاقتراح"
+
+ "لا شيء"
+ "أساسي"
+ "متقدم"
+
+ "%s : تم الحفظ"
+ "اضغط باستمرار على أحد المفاتيح لأسفل لمشاهدة علامات التشكيل"
+ "اضغط على مفتاح الرجوع ↶ لإغلاق لوحة المفاتيح في أي نقطة"
+ "الدخول إلى الأرقام والرموز"
+ "اضغط مع الاستمرار على أقصى يمين الكلمة لإضافتها إلى القاموس"
+ "المس هذا التلميح للمتابعة »"
+ "المس هنا لإغلاق هذا التلميح وبدء الكتابة!"
+ "تفتح لوحة المفاتيح في أي وقت تلمس فيه حقلًا نصيًا"
+ "المس مع الاستمرار أحد المفاتيح لعرض علامات التشكيل"\n"(ø, ö, ô, ó, وهكذا)"
+ "التبديل إلى الأرقام والرموز من خلال لمس هذا الزر"
+ "يمكنك الرجوع إلى الأحرف من خلال لمس هذا المفتاح مرة أخرى"
+ "المس هذا المفتاح مع الاستمرار لتغيير إعدادات لوحة المفاتيح، مثل الإكمال التلقائي"
+ "جربه!"
+ "تنفيذ"
+ "التالي"
+ "تم"
+ "إرسال"
+ "?123"
+ "123"
+ "ب ت ث"
+ "ALT"
+ "الإدخال الصوتي"
+ "الإدخال الصوتي غير معتمد حاليًا للغتك، ولكنه يعمل باللغة الإنجليزية."
+ "الإدخال الصوتي هو ميزة تجريبية تستخدم التعرف على الكلام المتصل في Google."
+ "لتشغيل الإدخال الصوتي، انتقل إلى إعدادات لوحة المفاتيح."
+ "لاستخدام الإدخال الصوتي، اضغط على زر الميكروفون أو مرر إصبعك عبر لوحة المفاتيح على الشاشة."
+ "تحدث الآن"
+ "العمل"
+
+ "خطأ. الرجاء المحاولة مرة أخرى."
+ "تعذر الاتصال"
+ "خطأ، كلام أكثر مما ينبغي."
+ "مشكلة بالإعدادات الصوتية"
+ "خطأ في الخادم"
+ "لم يتم سماع كلام"
+ "لم يتمّ العثور على أية تطابقات"
+ "لم يتم تثبيت البحث الصوتي"
+ "تلميح:"" مرر عبر لوحة المفاتيح للتحدث"
+ "تلميح:"" جرب في المرة التالية نطق الترقيم مثل \"نقطة\" أو \"فاصلة\" أو \"علامة استفهام\"."
+ "إلغاء"
+ "موافق"
+ "الإدخال الصوتي"
+
+ "في لوحة المفاتيح الرئيسية"
+ "على لوحة مفاتيح الرموز"
+ "إيقاف"
+
+
+ "الميكروفون في لوحة المفاتيح الرئيسية"
+ "الميكروفون على لوحة مفاتيح الرموز"
+ "تم تعطيل الإدخال الصوتي"
+
+ "إرسال تلقائي بعد الصوت"
+ "الضغط تلقائيًا على المفتاح enter عند البحث أو الانتقال إلى الحقل التالي."
+ "افتح لوحة المفاتيح"\n\n"المس أي حقل نصي."
+ "إغلاق لوحة المفاتيح"\n\n"اضغط على المفتاح \"رجوع\"."
+ "المس أحد مفاتيح الخيارات مع الاستمرار"\n\n"الدخول إلى الترقيم والحركات."
+ "إعدادات لوحة المفاتيح"\n\n"المس مع الاستمرار المفتاح ""?123""."
+ "com."
+ "net."
+ "org."
+ "gov."
+ "edu."
+ "تحديد طريقة الإرسال"
+ "لغات الإدخال"
+ "مرر إصبعك على مفتاح المسافة لتغيير اللغة"
+ "← المس مرة أخرى للحفظ"
+ "القاموس متاح"
+ "تمكين ملاحظات المستخدم"
+ "المساعدة في تحسين محرر طريقة الإرسال هذا من خلال إرسال إحصاءات الاستخدام وتقارير الأعطال تلقائيًا إلى Google."
+ "المس لتصحيح الكلمات"
+ "المس الكلمات المدخلة لتصحيحها"
+ "مظهر لوحة المفاتيح"
+ "لوحة مفاتيح"
+ "صوت"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-bg/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-bg/strings.xml
new file mode 100644
index 00000000..83cfaac3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-bg/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Клавиатура на Android"
+ "Настройки на клавиатурата на Android"
+ "Опции за въвеждане"
+ "Да вибрира при натискане на клавиш"
+ "Звук при натискане на клавиш"
+ "Изскачащ прозорец при натискане на клавиш"
+ "Коригиране на грешките при въвеждане"
+ "Активиране на корекция на грешки при въвеждане"
+ "Грешки при въвеждане в хоризонтален изглед"
+ "Активиране на корекция на грешки при въвеждане"
+ "Предложения на думи"
+ "Автоматично коригиране на предишната дума"
+ "Предложения на думи"
+ "Настройки за предложения на думи"
+ "Активиране на автодовършване, докато пишете"
+ "Автодовършване"
+ "Размерът на текстовото поле да се увеличи"
+ "Скриване на предложенията на думи в хоризонтален изглед"
+ "Автоматично поставяне на главни букви"
+ "Поставя главна буква в началото на изреченията"
+ "Автоматично поставяне на пунктуация"
+
+ "Бързи корекции"
+ "Коригира най-честите грешки при въвеждане"
+ "Показване на предложения"
+ "Показване на предложения, докато пишете"
+ "Автоматично завършване"
+ "Клавишът за интервал и пунктуация поставя автоматично откроена дума"
+ "Показване на клавиша за настройки"
+ "Автоматично"
+ "Да се показва винаги"
+ "Да се скрива винаги"
+
+
+
+ "Предложения за биграми"
+ "Използване на предишната дума за подобряване на предложението"
+
+ "Няма"
+ "Основен"
+ "Разширени"
+
+ "%s : Запазено"
+ "Задръжте клавиша, за да видите ударенията (ø, ö и т.н.)"
+ "Натиснете клавиша „Назад“ ↶, за да затворите клавиатурата във всяка една точка"
+ "Достъп до номера и символи"
+ "Натиснете и задръжте върху най-лявата дума, за да я добавите към речника"
+ "Докоснете съвета, за да продължите »"
+ "Докоснете тук, за да затворите този съвет и да започнете да пишете!"
+ "Клавиатурата се отваря при всяко докосване на текстово поле"
+ "Докоснете и задръжте клавиша, за да видите ударенията"\n"(ø, ö, ô, ó и т.н.)"
+ "Докосването на този клавиш води до преминаване към цифри и символи"
+ "Върнете се към използване на букви чрез повторно докосване на този клавиш"
+ "Докоснете и задръжте клавиша за промяна на настройките на клавиатурата, напр. автодовършване"
+ "Пробвайте!"
+ "Старт"
+ "Напред"
+ "Готово"
+ "Изпращане"
+ "?123"
+ "123"
+ "АБВГ"
+ "ALT"
+ "Гласово въвеждане"
+ "За вашия език понастоящем не се поддържа гласово въвеждане, но можете да го използвате на английски."
+ "Гласовото въвеждане е експериментална функция, използваща разпознаването на реч в мрежата на Google."
+ "За да изключите гласовото въвеждане, отворете настройките на клавиатурата."
+ "За да използвате гласово въвеждане, натиснете бутона на микрофона или плъзнете пръст през екранната клавиатура."
+ "Говорете сега"
+ "Обработва се"
+
+ "Грешка. Моля, опитайте отново."
+ "Не можа да се свърже"
+ "Грешка, твърде много речева информация."
+ "Аудиопроблем"
+ "Грешка в сървъра"
+ "Не се чува реч"
+ "Нямаше съответствия"
+ "Не е инсталирано гласово търсене"
+ "Съвет:"" Прокарайте палец през клавиатурата, за да говорите"
+ "Съвет:"" Следващия път опитайте да произнесете знаците за пунктуация, напр. „точка“, „запетая“ или „въпросителен знак“."
+ "Отказ"
+ "OK"
+ "Гласово въвеждане"
+
+ "На основната клавиатура"
+ "На клавиатурата на символите"
+ "Изкл."
+
+
+ "Микрофон на основната клавиатура"
+ "Микрофон на клавиатурата на символите"
+ "Гласовото въвеждане е деактивирано"
+
+ "Автоматично изпращане след глас"
+ "Да се натиска автоматично „Enter“ при търсене или преминаване към следващото поле."
+ "Отворете клавиатурата"\n\n"Докоснете текстово поле."
+ "Затваряне на клавиатурата"\n\n"Натиснете клавиша „Назад“."
+ "Докоснете и задръжте клавиш за опции"\n\n"Използвайте пунктуация и акценти."
+ "Настройки на клавиатурата"\n\n"Докоснете и задръжте клавиша ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Избор на метод на въвеждане"
+ "Входни езици"
+ "Плъзнете пръст по клавиша за интервал за промяна на езика"
+ "← Докоснете отново, за да запазите"
+ "Има достъп до речник"
+ "Активиране на отзивите от потребителите"
+ "Помогнете за подобряването на този редактор за въвеждане чрез автоматично изпращане до Google на статистически данни за употребата и сигнали за сривове."
+ "Докоснете, за да поправите думите"
+ "Докоснете въведените думи, за да ги поправите"
+ "Тема на клавиатурата"
+ "клавиатура"
+ "гласово"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ca/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ca/strings.xml
new file mode 100644
index 00000000..f551d7b8
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ca/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Teclat Android"
+ "Configuració del teclat d\'Android"
+ "Opcions d\'entrada"
+ "Vibra en prémer tecles"
+ "So en prémer una tecla"
+ "Finestra emergent en prémer un botó"
+ "Corregeix els errors ortogràfics"
+ "Activa la correcció d\'errors d\'entrada"
+ "Errors d\'entrada en horitzontal"
+ "Activa la correcció d\'errors d\'entrada"
+ "Suggeriments de paraules"
+ "Corregeix automàticament la paraula anterior"
+ "Suggeriments de paraules"
+ "Configuració de suggeriment de paraules"
+ "Activa l\'emplenament automàtic mentre s\'escriu"
+ "Emplenament automàtic"
+ "Augmenta la mida del camp de text"
+ "Amaga els suggeriments de paraules en visualització horitzontal"
+ "Majúscules automàtiques"
+ "Posa l\'inici d\'una frase en majúscula"
+ "Puntuació automàtica"
+
+ "Correccions ràpides"
+ "Corregeix els errors d\'ortografia habituals"
+ "Mostra els suggeriments"
+ "Visualitza paraules suggerides mentre s\'escriu"
+ "Emplenament automàtic"
+ "La barra espaiadora i la puntuació insereixen automàticament la paraula ressaltada"
+ "Mostra la tecla de configuració"
+ "Automàtic"
+ "Mostra sempre"
+ "Amaga sempre"
+
+
+
+ "Suggeriments Bigram"
+ "Utilitza la paraula anterior per millorar el suggeriment"
+
+ "Cap"
+ "Bàsic"
+ "Avançat"
+
+ "%s: desada"
+ "Manteniu una tecla premuda per veure\'n les variants (ø, ö, etc.)"
+ "Premeu la tecla Enrere ↶ per tancar el teclat en qualsevol moment"
+ "Accedeix a números i símbols"
+ "Manteniu premuda la paraula de l\'extrem esquerre per afegir-la al diccionari"
+ "Toqueu aquest suggeriment per continuar »"
+ "Toqueu aquí per tancar aquest suggeriment i començar a escriure."
+ "S\'obre el teclat cada vegada que toqueu un camp de text"
+ "Manteniu premuda una tecla per veure\'n les variants"\n"(ø, ö, ô, ó, etc.)"
+ "Toqueu aquesta tecla per canviar als números i als símbols"
+ "Torneu a tocar aquesta tecla per tornar a les lletres"
+ "Manteniu premuda aquesta tecla per canviar la configuració del teclat, com ara l\'emplenament automàtic"
+ "Proveu-ho!"
+ "Vés"
+ "Següent"
+ "Fet"
+ "Envia"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Entrada de veu"
+ "Actualment, l\'entrada de veu no és compatible amb el vostre idioma, però funciona en anglès."
+ "L\'entrada de veu és una funció experimental que utilitza el reconeixement de la parla en xarxa de Google."
+ "Per desactivar l\'entada de veu, aneu a la configuració del teclat."
+ "Per utilitzar l\'entrada de veu, premeu el botó del micròfon o feu lliscar el dit pel teclat en pantalla."
+ "Parleu ara"
+ "S\'està treballant"
+
+ "Error. Torneu-ho a provar."
+ "No s\'ha pogut connectar"
+ "Error; s\'ha parlat massa."
+ "Problema d\'àudio"
+ "Error del servidor"
+ "No s\'escolten paraules"
+ "No hi ha resultats"
+ "Cerca per veu no instal·lada"
+ "Consell:"" Feu lliscar el dit pel teclat per parlar"
+ "Suggeriment:"" La propera vegada, proveu de dir la puntuació, com ara \"punt\", \"coma\" o \"interrogant\"."
+ "Cancel·la"
+ "D\'acord"
+ "Entrada de veu"
+
+ "Al teclat principal"
+ "Al teclat de símbols"
+ "Desactivat"
+
+
+ "Micròfon al teclat principal"
+ "Micròfon al teclat de símbols"
+ "L\'entrada de veu està desactivada"
+
+ "Enviament automàtic després de la veu"
+ "Prem automàticament Retorn en cercar o en anar al camp següent."
+ "Obrir el teclat"\n\n"Toqueu qualsevol camp de text."
+ "Tancar el teclat"\n\n"Premeu la tecla Enrere."
+ "Manteniu premuda una tecla per veure les opcions"\n\n"Accediu a la puntuació i als accents."
+ "Configuració del teclat"\n\n"Manteniu premuda la tecla ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Selecciona el mètode d\'entrada"
+ "Idiomes d\'entrada"
+ "Feu lliscar el dit a la barra espaiadora per canviar l\'idioma"
+ "← Torna a tocar per desar"
+ "Diccionari disponible"
+ "Activa els comentaris de l\'usuari"
+ "Ajuda a millorar aquest editor de mètodes d\'entrada enviant automàticament estadístiques d\'ús i informes de bloqueigs a Google."
+ "Toca per corregir paraules"
+ "Toca les paraules introduïdes per corregir-les"
+ "Tema del teclat"
+ "teclat"
+ "veu"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-cs/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values-cs/bools.xml
new file mode 100644
index 00000000..897f4b3d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-cs/bools.xml
@@ -0,0 +1,22 @@
+
+
+
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-cs/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-cs/donottranslate-altchars.xml
new file mode 100644
index 00000000..d91a0e44
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-cs/donottranslate-altchars.xml
@@ -0,0 +1,34 @@
+
+
+
+ áàâãäåæ
+ 3éěèêë
+ íìîï8
+ óòôõöœø9
+ ůúùûü7
+ š§ß
+ ňñ
+ čç
+ ýÿ6
+ ď
+ ř4
+ ť5
+ ž
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-cs/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-cs/strings.xml
new file mode 100644
index 00000000..3bbd758d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-cs/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Klávesnice Android"
+ "Nastavení klávesnice Android"
+ "Možnosti zadávání textu a dat"
+ "Při stisku klávesy vibrovat"
+ "Zvuk při stisku klávesy"
+ "Zobrazit znaky při stisku klávesy"
+ "Opravovat překlepy"
+ "Povolit opravu chyb vstupu"
+ "Chyby vstupu v zobrazení na šířku"
+ "Povolit opravu chyb vstupu"
+ "Návrhy slov"
+ "Automaticky opravit předchozí slovo"
+ "Návrhy slov"
+ "Nastavení návrhů slov"
+ "Povolit automatické dokončování při psaní"
+ "Automatické dokončování"
+ "Zvětšit textové pole"
+ "Skrýt návrhy slov v zobrazení na šířku"
+ "Velká písmena automaticky"
+ "Zahájit větu velkým písmenem"
+ "Automatická interpunkce"
+
+ "Rychlé opravy"
+ "Opravuje nejčastější chyby při psaní"
+ "Zobrazit návrhy"
+ "Zobrazovat navržená slova během psaní"
+ "Automatické dokončování"
+ "Stisknutím mezerníku nebo interpunkčního znaménka automaticky vložíte zvýrazněné slovo."
+ "Zobrazit klávesu Nastavení"
+ "Automaticky"
+ "Vždy zobrazovat"
+ "Vždy skrývat"
+
+
+
+ "Návrh Bigram"
+ "Použít předchozí slovo ke zlepšení návrhu"
+
+ "Žádný"
+ "Základní"
+ "Pokročilé"
+
+ "%s: Uloženo"
+ "Podržením klávesy zobrazíte diakritiku (á, ž apod.)"
+ "Stisknutím klávesy Zpět ↶ můžete klávesnici kdykoli zavřít."
+ "Přístup k číslům a symbolům"
+ "Stisknutím a podržením slova zcela vlevo toto slovo přidáte do slovníku."
+ "Chcete-li pokračovat, dotkněte se tohoto tipu »"
+ "Chcete-li tento tip zavřít a začít psát, dotkněte se zde."
+ "Klávesnice se otevře vždy, když se dotknete textového pole."
+ "Přidržením klávesy zobrazíte diakritiku"\n"(ó, ø, ö, ô apod.)"
+ "Chcete-li přepnout na režim zadávání číslic a symbolů, dotkněte se této klávesy."
+ "Chcete-li přejít zpět k zadávání písmen, dotkněte se této klávesy znovu."
+ "Přidržením této klávesy změníte nastavení klávesnice (např. automatické dokončování)."
+ "Vyzkoušejte si to."
+ "Přejít"
+ "Další"
+ "Hotovo"
+ "Odeslat"
+ "?123"
+ "123"
+ "ABC"
+ "Alt"
+ "Hlasový vstup"
+ "Pro váš jazyk aktuálně není hlasový vstup podporován, ale funguje v angličtině."
+ "Hlasový vstup je experimentální funkce, která využívá síťové rozpoznávání řeči společnosti Google."
+ "Chcete-li vypnout hlasový vstup, přejděte do nastavení klávesnice."
+ "Chcete-li použít hlasový vstup, stiskněte tlačítko mikrofonu nebo přejeďte prstem přes klávesnici na obrazovce."
+ "Mluvte"
+ "Probíhá zpracování"
+
+ "Chyba. Zkuste to prosím znovu."
+ "Připojení se nezdařilo."
+ "Chyba, řeč je příliš dlouhá."
+ "Problém se zvukem"
+ "Chyba serveru"
+ "Nebyla detekována žádná řeč."
+ "Nebyly nalezeny žádné shody"
+ "Hlasové vyhledávání není nainstalováno"
+ "Nápověda:"" Chcete-li aktivovat hlasový vstup, přejeďte prstem přes klávesnici."
+ "Nápověda:"" Příště zkuste vyslovit interpunkci, například „tečka“, „čárka“ nebo „otazník“."
+ "Zrušit"
+ "OK"
+ "Hlasový vstup"
+
+ "Na hlavní klávesnici"
+ "Na klávesnici se symboly"
+ "Vypnout"
+
+
+ "Mikrofon na hlavní klávesnici"
+ "Mikrofon na klávesnici se symboly"
+ "Hlasový vstup je deaktivován"
+
+ "Po hlasovém vstupu automaticky odeslat"
+ "Při vyhledávání nebo přechodu na další pole automaticky stisknout Enter."
+ "Otevřete klávesnici"\n\n"Dotkněte se libovolného textového pole."
+ "Zavřete klávesnici"\n\n"Stiskněte tlačítko Zpět."
+ "Přidržením klávesy zobrazte možnosti"\n\n"Přístup k interpunkčním znaménkům a diakritice."
+ "Nastavení klávesnice"\n\n"Dotkněte se klávesy ""?123"" a přidržte ji."
+ ".com"
+ ".cz"
+ ".org"
+ ".net"
+ ".eu"
+ "Výběr metody zadávání dat"
+ "Vstupní jazyky"
+ "Jazyk můžete změnit posunutím prstu po mezerníku."
+ "← Dalším dotykem slovo uložíte"
+ "K dispozici je slovník"
+ "Aktivovat zasílání statistik užívání a zpráv o selhání"
+ "Automatickým zasíláním statistik o užívání editoru zadávání dat a zpráv o jeho selhání do Googlu můžete přispět k vylepšení tohoto nástroje."
+ "Dotykem aktivovat opravy"
+ "Opravy napsaných slov dotykem"
+ "Motiv klávesnice"
+ "klávesnice"
+ "hlas"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-da/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-da/donottranslate-altchars.xml
new file mode 100644
index 00000000..b1cc8b62
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-da/donottranslate-altchars.xml
@@ -0,0 +1,38 @@
+
+
+
+ áàâąã
+ 3éèêëę€
+ íìîï8
+ óòôõ9
+ úùûū7
+ śšşß
+ ńñň
+ çćč
+ ýÿü6
+ ðď
+ ř4
+ ťþ5
+ źžż
+ ł
+ w
+ ä
+ öœ
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-da/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-da/strings.xml
new file mode 100644
index 00000000..f1fe6ecc
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-da/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android-tastatur"
+ "Indstillinger for Android-tastatur"
+ "Indstillinger for input"
+ "Vibration ved tastetryk"
+ "Lyd ved tastetryk"
+ "Popup ved tastetryk"
+ "Ret stavefejl"
+ "Aktiver fejlretning af input"
+ "Inputfejl i landskab"
+ "Aktiver fejlretning af input"
+ "Ordforslag"
+ "Ret automatisk det forrige ord"
+ "Ordforslag"
+ "Indstillinger for ordforslag"
+ "Aktiver automatisk udfyldelse, når du indtaster"
+ "Automatisk udfyldelse"
+ "Forøg tekstfeltets størrelse"
+ "Skjul ordforslag i landskabsvisning"
+ "Skriv aut. med stort"
+ "Første bogstav i en sætning skrives med stort"
+ "Foretag automatisk tegnsætning"
+
+ "Hurtige løsninger"
+ "Retter almindelige stavefejl"
+ "Vis forslag"
+ "Vis ordforslag under indtastning"
+ "Udfyld automatisk"
+ "Mellemrumstast og tegnsætning indsætter automatisk fremhævet ord"
+ "Vis indstillingsnøgle"
+ "Automatisk"
+ "Vis altid"
+ "Skjul altid"
+
+
+
+ "Bigram-forslag"
+ "Brug forrige ord for at forbedre forslag"
+
+ "Ingen"
+ "Grundlæggende"
+ "Avanceret"
+
+ "%s: Gemt"
+ "Hold en tast nede for at se accenter (ø, ö osv.)"
+ "Tryk på knappen Tilbage ↶ for når som helst at lukke for tastaturet"
+ "Få adgang til tal og symboler"
+ "Tryk og hold på ordet længst til venstre for at føje det til ordbogen"
+ "Berør dette tip for at fortsætte »"
+ "Berør her for at lukke dette tip og begynde at indtaste!"
+ "Tastaturet åbner når som helst, du berører et tekstfelt"
+ "Tryk på en tast, og hold den nede for a vise accenter"\n"(ø, ö, ô, ó osv.)"
+ "Skift til tal og symboler ved at røre denne tast"
+ "Gå tilbage til bogstaver ved at berøre denne tast igen"
+ "Tryk på denne tast, og hold den nede for at ændre tastaturindstillingerne, som f.eks. automatisk udfyldelse"
+ "Prøv det!"
+ "Gå"
+ "Næste"
+ "Udfør"
+ "Send"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Stemmeinput"
+ "Stemmeinput understøttes i øjeblikket ikke for dit sprog, men fungerer på engelsk."
+ "Stemme-input er en funktion på forsøgsbasis, som bruger Googles netværksstemmegenkendelse."
+ "Slå stemmeinput fra i indstillingerne for tastaturet."
+ "For at bruge stemme-input skal du trykke på knappen mikrofon eller lade glide fingeren hen over skærmtastaturet."
+ "Tal nu"
+ "Arbejder"
+
+ "Fejl. Prøv igen."
+ "Kunne ikke oprette forbindelse"
+ "Fejl. For meget tale."
+ "Lydproblem"
+ "Serverfejl"
+ "Der høres ingen tale"
+ "Der blev ikke fundet nogen matches"
+ "Stemmesøgning er ikke installeret"
+ "Tip:"" Glid hen over tastaturet for at tale"
+ "Tip:"" Næste gang kan du forsøge at sige tegnsætning, f.eks. \"punktum\", \"komma\" eller \"spørgsmålstegn\"."
+ "Annuller"
+ "OK"
+ "Stemmeinput"
+
+ "På hovedtastatur"
+ "På symboltastatur"
+ "Fra"
+
+
+ "Mikrofon på hovedtastatur"
+ "Mikrofon på symboltastatur"
+ "Stemmeinput er deaktiveret"
+
+ "Send automatisk efter stemme"
+ "Tryk automatisk på enter, når du søger eller går til det næste felt."
+ "Åbn tastaturet"\n\n"Tryk på et hvilket som helst tekstfelt."
+ "Luk tastaturet"\n\n"Tryk på knappen Tilbage."
+ "Tryk på en tast, og hold den nede for valgmuligheder"\n\n"Få adgang til tegnsætning og accenter."
+ "Tastaturindstillinger"\n\n"Tryk på tasten ""?123"", og hold den nede."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Vælg inputmetode"
+ "Inputsprog"
+ "Træk fingeren på mellemrumstasten for at skifte sprog"
+ "← Tryk igen for at gemme"
+ "Ordbog er tilgængelig"
+ "Aktiver brugerfeedback"
+ "Vær med til at forbedre denne inputmetode ved at sende anvendelsesstatistikker og rapporter om nedbrud til Google."
+ "Tryk for at rette ord"
+ "Tryk på de indtastede ord for at rette dem"
+ "Tastaturtema"
+ "tastatur"
+ "stemme"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-de/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values-de/bools.xml
new file mode 100644
index 00000000..897f4b3d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-de/bools.xml
@@ -0,0 +1,22 @@
+
+
+
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-de/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-de/donottranslate-altchars.xml
new file mode 100644
index 00000000..df27bce2
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-de/donottranslate-altchars.xml
@@ -0,0 +1,31 @@
+
+
+
+ ä
+ 3èéêë
+ ìíîï8
+ ö9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ
+ 6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-de/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-de/strings.xml
new file mode 100644
index 00000000..e474bd73
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-de/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android-Tastatur"
+ "Android-Tastatureinstellungen"
+ "Eingabeoptionen"
+ "Vibrieren b. Tastendruck"
+ "Ton bei Tastendruck"
+ "Pop-up bei Tastendruck"
+ "Eingabefehler korrigieren"
+ "Korrektur von Eingabefehlern aktivieren"
+ "Eingabefehler im Querformat"
+ "Korrektur von Eingabefehlern aktivieren"
+ "Wortvorschläge"
+ "Vorheriges Wort automatisch korrigieren"
+ "Wortvorschläge"
+ "Einstellungen für Wortvorschläge"
+ "Automatische Vervollständigung während der Eingabe aktivieren"
+ "Autom. vervollständigen"
+ "Textfeld vergrößern"
+ "Wortvorschläge in Querformat ausblenden"
+ "Autom. Groß-/Kleinschr."
+ "Sätze mit Großbuchstaben beginnen"
+ "Autom. Zeichensetzung"
+
+ "Quick Fixes"
+ "Korrigiert gängige Tippfehler"
+ "Vorschläge anzeigen"
+ "Vorgeschlagene Wörter während des Tippens anzeigen"
+ "Autom. vervollständigen"
+ "Leertaste und Interpunktion fügen autom. ein markiertes Wort ein"
+ "Einstellungstaste anz."
+ "Automatisch"
+ "Immer anzeigen"
+ "Immer ausblenden"
+
+
+
+ "Bigramm-Vorschläge"
+ "Zur Verbesserung des Vorschlags vorheriges Wort verwenden"
+
+ "Kein"
+ "Standard"
+ "Erweitert"
+
+ "%s: gespeichert"
+ "Zur Anzeige von Umlauten (ä, ö usw.) Taste gedrückt halten"
+ "Zum Schließen der Tastatur ↶ drücken"
+ "Auf Zahlen und Symbole zugreifen"
+ "Lange auf das Wort ganz links außen drücken, um es zum Wörterbuch hinzuzufügen"
+ "Diesen Hinweis berühren, um fortzufahren »"
+ "Hier berühren, um diesen Hinweis zu schließen und mit dem Tippen zu beginnen!"
+ "Die Tastatur wird immer dann geöffnet, wenn Sie ein Textfeld berühren."
+ "Halten Sie eine Taste gedrückt, um Akzente anzuzeigen"\n"(ø, ö, ô, ó usw.)."
+ "Wechseln Sie zu Ziffern und Symbolen, indem Sie diese Taste berühren."
+ "Durch erneutes Drücken dieser Taste gelangen Sie zurück zu den Buchstaben."
+ "Halten Sie diese Taste gedrückt, um die Tastatureinstellungen, wie beispielsweise die automatische Vervollständigung, zu ändern."
+ "Probieren Sie es aus!"
+ "Los"
+ "Weiter"
+ "Fertig"
+ "Senden"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Spracheingabe"
+ "Spracheingaben werden derzeit nicht für Ihre Sprache unterstützt, funktionieren jedoch in Englisch."
+ "Die Spracheingabe ist eine Funktion im Versuchsstadium, die die vernetzte Spracherkennung von Google verwendet."
+ "Wenn Sie die Spracheingabe deaktivieren möchten, rufen Sie die Tastatureinstellungen auf."
+ "Um die Spracheingabe zu verwenden, drücken Sie die Mikrofontaste oder ziehen Sie Ihren Finger über die Bildschirmtastatur."
+ "Jetzt sprechen"
+ "Vorgang läuft"
+
+ "Fehler. Versuchen Sie es erneut.."
+ "Keine Verbindung"
+ "Fehler – Text zu lang"
+ "Audio-Problem"
+ "Serverfehler"
+ "Keine Sprache zu hören"
+ "Keine Treffer gefunden"
+ "Sprachsuche nicht installiert"
+ "Hinweis:"" Ziehen Sie zum Sprechen den Finger über die Tastatur."
+ "Hinweis:"" Versuchen Sie beim nächsten Mal, Satzzeichen wie \"Punkt\", \"Komma\" oder \"Fragezeichen\" per Sprachbefehl einzugeben."
+ "Abbrechen"
+ "OK"
+ "Spracheingabe"
+
+ "Auf Haupttastatur"
+ "Auf Symboltastatur"
+ "Aus"
+
+
+ "Mikrofon auf Haupttastatur"
+ "Mikrofon auf Symboltastatur"
+ "Spracheingabe ist deaktiviert"
+
+ "Nach Sprachaufnahme automatisch senden"
+ "Drücken Sie auf die Eingabetaste, wenn Sie einen Suchvorgang durchführen oder zum nächsten Feld wechseln."
+ "Tastatur öffnen"\n\n"Berühren Sie ein beliebiges Textfeld."
+ "Tastatur schließen"\n\n"Drücken Sie die Zurücktaste."
+ "Für Optionen eine Taste berühren und gedrückt halten"\n\n"Greifen Sie auf Satzzeichen und Akzente zu."
+ "Tastatureinstellungen"\n\n"Berühren und halten Sie die Taste ""?123"" gedrückt."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Eingabemethode auswählen"
+ "Eingabesprachen"
+ "Finger über die Leertaste bewegen, um die Eingabesprache zu wechseln"
+ "← Zum Speichern erneut berühren"
+ "Wörterbuch verfügbar"
+ "Nutzer-Feedback aktivieren"
+ "Tragen Sie zur Verbesserung dieses Eingabemethodeneditors bei, indem Sie automatisch Nutzungsstatistiken und Absturzberichte an Google senden."
+ "Wortkorrektur"
+ "Zum Korrigieren auf eingegebene Wörter tippen"
+ "Tastaturdesign"
+ "Tastatur"
+ "Sprache"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-el/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-el/donottranslate-altchars.xml
new file mode 100644
index 00000000..d3beafad
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-el/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóôõöœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-el/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-el/strings.xml
new file mode 100644
index 00000000..5e5c583b
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-el/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Πληκτρολόγιο Android"
+ "Ρυθμίσεις πληκτρολογίου Android"
+ "Επιλογές εισόδου"
+ "Δόνηση κατά το πάτημα πλήκτρων"
+ "Ήχος κατά το πάτημα πλήκτρων"
+ "Εμφάνιση με το πάτημα πλήκτρου"
+ "Διόρθωση σφαλμάτων πληκτρολόγησης"
+ "Ενεργοποίηση διόρθωσης σφαλμάτων εισόδου"
+ "Σφάλματα οριζόντιας εισαγωγής"
+ "Ενεργοποίηση διόρθωσης σφαλμάτων εισόδου"
+ "Υποδείξεις λέξεων"
+ "Αυτόματη διόρθωση της προηγούμενης λέξης"
+ "Υποδείξεις λέξεων"
+ "Ρυθμίσεις υποδείξεων λέξεων"
+ "Ενεργοποίηση αυτόματης συμπλήρωσης κατά την πληκτρολόγηση"
+ "Αυτόματη συμπλήρωση"
+ "Αυξήστε το μέγεθος του πεδίου κειμένου"
+ "Απόκρυψη υποδείξεων λέξεων στην οριζόντια προβολή"
+ "Αυτόματη χρήση κεφαλαίων"
+ "Κεφαλαίο το πρώτο γράμμα της πρότασης"
+ "Αυτόματος τονισμός"
+
+ "Γρήγορες διορθώσεις"
+ "Διορθώνει συνηθισμένα λάθη πληκτρολόγησης"
+ "Εμφάνιση υποδείξεων"
+ "Προβολή προτεινόμενων λέξεων κατά την πληκτρολόγηση"
+ "Αυτόματη συμπλήρωση"
+ "Τα πλήκ.διαστήμ.και τονισμού εισάγ.αυτόμ.την επιλ.λέξη"
+ "Εμφάνιση πλήκτρου ρυθμίσεων"
+ "Αυτόματο"
+ "Να εμφανίζεται πάντα"
+ "Πάντα απόκρυψη"
+
+
+
+ "Προτάσεις bigram"
+ "Χρήση προηγούμενης λέξης για τη βελτίωση πρότασης"
+
+ "Καμία"
+ "Βασική"
+ "Σύνθετη"
+
+ "%s : Αποθηκεύτηκε"
+ "Κρατήστε πατημένο ένα πλήκτρο για να δείτε τους τονισμένους χαρακτήρες (ø, ö, κ.τ.λ.)"
+ "Πατήστε το πλήκτρο Πίσω ↶ για να κλείσετε το πληκτρολόγιο ανά πάσα στιγμή"
+ "Πρόσβαση σε αριθμούς και σύμβολα"
+ "Κρατήστε πατημένη τη λέξη στην άκρη αριστερά, για να την προσθέσετε στο λεξικό"
+ "Αγγίξτε αυτή τη συμβουλή για να συνεχίσετε »"
+ "Αγγίξτε εδώ για να κλείσετε τη συμβουλή και να ξεκινήσετε την πληκτρολόγηση!"
+ "Το πληκτρολόγιο ανοίγει κάθε φορά που αγγίζετε ένα πεδίο κειμένου"
+ "Αγγίξτε και κρατήστε κάποιο πλήκτρο για να προβάλετε τους τονισμένους χαρακτήρες"\n"(ø, ö, ô, ó κ.τ.λ.)"
+ "Αλλαγή σε αριθμούς και σύμβολα με το πάτημα αυτού του πλήκτρου"
+ "Επιστρέψτε στα γράμματα αγγίζοντας ξανά αυτό το πλήκτρο"
+ "Αγγίξτε και κρατήστε πατημένο αυτό το πληκτρολόγιο για να αλλάξετε τις ρυθμίσεις πληκτρολογίου, όπως η αυτόματη συμπλήρωση"
+ "Δοκιμάστε το!"
+ "Μετ."
+ "Επόμενο"
+ "Τέλος"
+ "Αποστολή"
+ "?123"
+ "123"
+ "ΑΒΓ"
+ "ALT"
+ "Φωνητική είσοδος"
+ "Η φωνητική είσοδος δεν υποστηρίζεται αυτή τη στιγμή για τη γλώσσα σας, ωστόσο λειτουργεί στα Αγγλικά."
+ "Οι φωνητικές εντολές είναι μια πειραματική λειτουργία, η οποία χρησιμοποιεί τη δικτυακή αναγνώριση ομιλίας της Google."
+ "Για να απενεργοποιήσετε τη φωνητική είσοδο, μεταβείτε στις ρυθμίσεις πληκτρολογίου."
+ "Για να χρησιμοποιήσετε τις φωνητικές εντολές, πιέστε το κουμπί μικροφώνου ή σύρετε το δάχτυλό σας κατά μήκος του πληκτρολογίου της οθόνης."
+ "Μιλήστε τώρα"
+ "Σε λειτουργία"
+
+ "Σφάλμα. Δοκιμάστε ξανά."
+ "Δεν ήταν δυνατή η σύνδεση"
+ "Σφάλμα, πολλές λέξεις."
+ "Πρόβλημα ήχου"
+ "Σφάλμα διακομιστή"
+ "Δεν ακούγεται ομιλία"
+ "Δεν βρέθηκε καμία αντιστοίχιση"
+ "Η Φωνητική αναζήτηση δεν εγκαταστάθηκε"
+ "Υπόδειξη:"" Σύρετε κατά μήκος του πληκτρολογίου για να μιλήσετε"
+ "Υπόδειξη:"" Την επόμενη φορά, προσπαθήστε να προφέρετε σημεία στίξης, όπως \"τελεία\", \"κόμμα\" ή \"ερωτηματικό\"."
+ "Ακύρωση"
+ "ΟΚ"
+ "Φωνητική είσοδος"
+
+ "Στο κύριο πληκτρολόγιο"
+ "Πληκτρολόγιο συμβόλων ενεργοποίησης"
+ "Απενεργοποίηση"
+
+
+ "Μικρόφωνο στο κύριο πληκτρολόγιο"
+ "Μικρόφωνο στο πληκτρολόγιο συμβόλων"
+ "Η φωνητική είσοδος είναι απενεργοποιημένη"
+
+ "Αυτόματη υποβολή μετά από ήχο"
+ "Πατήστε enter αυτόματα κατά την αναζήτηση ή τη μετάβαση στο επόμενο πεδίο."
+ "Ανοίξτε το πληκτρολόγιο"\n\n"Αγγίξτε οποιοδήποτε πεδίο κειμένου."
+ "Κλείστε το πληκτρολόγιο"\n\n"Πατήστε το πλήκτρο Πίσω."
+ "Αγγίξτε και κρατήστε ένα πλήκτρο για ορισμό επιλογών"\n\n"Πρόσβαση στα σημεία στίξης και τονισμού."
+ "Ρυθμίσεις πληκτρολογίου"\n\n"Αγγίξτε και κρατήστε το πλήκτρο ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Επιλογή μεθόδου εισόδου"
+ "Γλώσσες εισόδου"
+ "Σύρετε το δάχτυλο στο πλήκτρο διαστήματος για να αλλάξετε γλώσσα"
+ "← Αγγίξτε ξανά για αποθήκευση"
+ "Λεξικό διαθέσιμο"
+ "Ενεργοποίηση σχολίων χρηστών"
+ "Βοηθήστε μας να βελτιώσουμε αυτό το πρόγραμμα επεξεργασίας μεθόδου εισόδου στέλνοντας αυτόματα στατιστικά στοιχεία και αναφορές σφαλμάτων στην Google."
+ "Αγγίξτε για διόρθωση λέξεων"
+ "Αγγίξτε τις λέξεις που εισάγετε για να τις διορθώσετε"
+ "Θέμα πληκτρολογίου"
+ "πληκτρολόγιο"
+ "φωνητική"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-en-rGB/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-en-rGB/strings.xml
new file mode 100644
index 00000000..56d666a3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-en-rGB/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android keyboard"
+ "Android keyboard settings"
+ "Input options"
+ "Vibrate on key-press"
+ "Sound on key-press"
+ "Pop-up on key press"
+ "Correct typing errors"
+ "Enable input error correction"
+ "Landscape input errors"
+ "Enable input error correction"
+ "Word suggestions"
+ "Automatically correct the previous word"
+ "Word suggestions"
+ "Word suggestion settings"
+ "Enable auto-completion while typing"
+ "Auto-completion"
+ "Increase text field size"
+ "Hide word suggestions in landscape view"
+ "Auto-capitalisation"
+ "Capitalise the start of a sentence"
+ "Auto-punctuate"
+
+ "Quick fixes"
+ "Corrects commonly typed mistakes"
+ "Show suggestions"
+ "Display suggested words while typing"
+ "Auto-complete"
+ "Spacebar and punctuation automatically insert highlighted word"
+ "Show settings key"
+ "Automatic"
+ "Always show"
+ "Always hide"
+
+
+
+ "Bigram Suggestions"
+ "Use previous word to improve suggestion"
+
+ "None"
+ "Basic"
+ "Advanced"
+
+ "%s : Saved"
+ "Hold a key down to see accents (ø, ö, etc.)"
+ "Press the back key ↶ to close the keyboard at any point"
+ "Access numbers and symbols"
+ "press and hold the left-most word to add it to the dictionary"
+ "Touch this hint to continue »"
+ "Touch here to close this hint and start typing!"
+ "The keyboard opens any time you touch a text field"
+ "Touch & hold a key to view accents"\n"(ø, ö, ô, ó and so on)"
+ "Switch to numbers and symbols by touching this key"
+ "Go back to letters by touching this key again"
+ "Touch & hold this key to change keyboard settings, like auto-complete"
+ "Try it!"
+ "Go"
+ "Next"
+ "Done"
+ "Send"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Voice input"
+ "Voice input is not currently supported for your language, but does work in English."
+ "Voice input is an experimental feature using Google\'s networked speech recognition."
+ "To turn off voice input, go to keyboard settings."
+ "To use voice input, press the microphone button or slide your finger across the on-screen keyboard."
+ "Speak now"
+ "Working"
+
+ "Error: Please try again."
+ "Couldn\'t connect"
+ "Error, too much speech."
+ "Audio problem"
+ "Server error"
+ "No speech heard"
+ "No matches found"
+ "Voice search not installed"
+ "Hint:"" Swipe across keyboard to speak"
+ "Hint:"" Next time, try speaking punctuation marks, like \"full stop\", \"comma\" or \"question mark\"."
+ "Cancel"
+ "OK"
+ "Voice input"
+
+ "On main keyboard"
+ "On symbols keyboard"
+ "Off"
+
+
+ "Mic on main keyboard"
+ "Mic on symbols keyboard"
+ "Voice input is disabled"
+
+ "Auto-submit after voice"
+ "Automatically press enter when searching or going to the next field."
+ "Open the keyboard"\n\n"Touch any text field."
+ "Close the keyboard"\n\n"Press the Back key."
+ "Touch & hold a key for options"\n\n"Access punctuation and accents."
+ "Keyboard settings"\n\n"Touch & hold the ""?123"" key."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Select input method"
+ "Input languages"
+ "Slide finger on spacebar to change language"
+ "← Touch again to save"
+ "Dictionary available"
+ "Enable user feedback"
+ "Help improve this input method editor by sending usage statistics and crash reports automatically to Google."
+ "Touch to correct words"
+ "Touch words entered to correct them"
+ "Keyboard Theme"
+ "keyboard"
+ "voice"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-en/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values-en/bools.xml
new file mode 100644
index 00000000..897f4b3d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-en/bools.xml
@@ -0,0 +1,22 @@
+
+
+
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-en/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-en/donottranslate-altchars.xml
new file mode 100644
index 00000000..083befa1
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-en/donottranslate-altchars.xml
@@ -0,0 +1,27 @@
+
+
+
+ àáâãäåāæ
+ 3èéêëē
+ ìíîïī8
+ òóôõöōœø9
+ ùúûüū7
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-es-rUS/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-es-rUS/donottranslate-altchars.xml
new file mode 100644
index 00000000..d3beafad
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-es-rUS/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóôõöœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-es-rUS/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-es-rUS/strings.xml
new file mode 100644
index 00000000..0cd8a50a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-es-rUS/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Teclado de Android"
+ "Configuración de teclado de Android"
+ "Opciones de entrada"
+ "Vibrar al pulsar teclas"
+ "Sonar al pulsar las teclas"
+ "Aviso emergente al pulsar tecla"
+ "Corregir errores de escritura"
+ "Habilitar corrección de error de entrada"
+ "Errores de entrada apaisada"
+ "Habilitar corrección de error de entrada"
+ "Sugerencias de palabras"
+ "Corregir automáticamente la palabra anterior"
+ "Sugerencias de palabras"
+ "Configuración de sugerencia de palabra"
+ "Habilitar finalización automática al escribir"
+ "Finalización automática"
+ "Aumentar el tamaño del campo de texto"
+ "Ocultar sugerencias de palabras en vista apaisada"
+ "Mayúsculas automáticas"
+ "Poner en mayúscula el inicio de una oración"
+ "Puntuación automática"
+
+ "Arreglos rápidos"
+ "Corrige errores de escritura comunes"
+ "Mostrar sugerencias"
+ "Mostrar palabras sugeridas mientras escribe"
+ "Completar automát."
+ "La barra espaciadora o la puntuación insertan automáticamente la palabra resaltada."
+ "Mostrar tecla de configuración"
+ "Automático"
+ "Mostrar siempre"
+ "Ocultar siempre"
+
+
+
+ "Sugerencias de Vigoran"
+ "Utiliza la palabra anterior para mejorar la sugerencia"
+
+ "Ninguno"
+ "Básico"
+ "Avanzado"
+
+ "%s: guardada"
+ "Mantén una tecla presionada para ver los acentos (ø, ö, etc.)"
+ "Pulsa la tecla hacia atrás ↶ para cerrar el teclado en cualquier momento"
+ "Acceder a números y símbolos"
+ "Presiona y mantén presionada la palabra de la izquierda para agregarla al diccionario"
+ "Toca esta sugerencia para continuar »"
+ "Toca aquí para cerrar esta sugerencia y comenzar a escribir."
+ "El teclado se abre cada vez que tocas un campo de texto."
+ "Toca y mantén presionada una tecla para ver los acentos"\n"(ø, ö, ô, ó, y así sucesivamente)."
+ "Cambia de números a símbolos tocando esta tecla."
+ "Vuelve a letras tocando esta tecla nuevamente."
+ "Toca y mantén presionada esta tecla para cambiar la configuración del teclado, como completar automáticamente."
+ "¡Pruébalo!"
+ "Ir"
+ "Siguiente"
+ "Hecho"
+ "Enviar"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Entrada por voz"
+ "La entrada por voz no está admitida en tu idioma, pero sí funciona en inglés."
+ "La entrada por voz es una característica experimental que utiliza la red de reconocimiento de voz de Google."
+ "Para desactivar la entrada por voz, ve a configuración del teclado."
+ "Para realizar entrada por voz, presiona el botón del micrófono o desliza tus dedos por el teclado en pantalla."
+ "Habla ahora"
+ "Procesando"
+
+ "Error. Vuelve a intentarlo."
+ "No se pudo establecer la conexión."
+ "Error, demasiado discurso."
+ "Problema de audio"
+ "Error del servidor"
+ "No se oyó la voz"
+ "No se encontraron coincidencias"
+ "Búsqueda por voz no instalada"
+ "Sugerencia:"" Deslizar en el teclado para hablar"
+ "Sugerencia:"" La próxima vez intenta decir la puntuación como \"punto\", \"coma\" o \"signo de pregunta\"."
+ "Cancelar"
+ "Aceptar"
+ "Entrada por voz"
+
+ "En el teclado principal"
+ "En el teclado de símbolos"
+ "Apagado"
+
+
+ "Micrófono en el teclado principal"
+ "Micrófono en el teclado de símbolos"
+ "La entrada por voz está inhabilitada."
+
+ "Enviar automáticamente después del audio"
+ "Presionar automáticamente Ingresar al buscar o ir al campo siguiente."
+ "Abrir el teclado"\n\n"Tocar cualquier campo de texto."
+ "Cerrar el teclado"\n\n"Presionar la tecla Atrás."
+ "Tocar & y mantener presionada una tecla para las opciones"\n\n"Acceder a puntuación y acentos."
+ "Configuración del teclado"\n\n"Tocar & y mantener presionada la tecla ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Seleccionar método de entrada"
+ "Idiomas de entrada"
+ "Deslizarse manualmente por la barra espaciadora para cambiar el idioma"
+ "← Tocar de nuevo para guardar"
+ "Diccionario disponible"
+ "Habilitar los comentarios del usuario"
+ "Ayuda a mejorar este editor de método de introducción de texto al enviar las estadísticas de uso y los informes de error a Google."
+ "Tocar para corregir palabras"
+ "Toca las palabras ingresadas que desees corregir"
+ "Tema del teclado"
+ "Teclado"
+ "Voz"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-es/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values-es/bools.xml
new file mode 100644
index 00000000..897f4b3d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-es/bools.xml
@@ -0,0 +1,22 @@
+
+
+
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-es/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-es/donottranslate-altchars.xml
new file mode 100644
index 00000000..721062d2
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-es/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ á
+ 3é
+ ìíîï8
+ ó9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-es/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-es/strings.xml
new file mode 100644
index 00000000..6e5963fb
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-es/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Teclado de Android"
+ "Ajustes del teclado de Android"
+ "Opciones introducción texto"
+ "Vibrar al pulsar tecla"
+ "Sonido al pulsar tecla"
+ "Popup al pulsar tecla"
+ "Corregir errores de escritura"
+ "Habilitar la introducción de corrección de errores"
+ "Errores de introducción de datos en vista horizontal"
+ "Habilitar la introducción de corrección de errores"
+ "Sugerencias de palabras"
+ "Corregir automáticamente la palabra anterior"
+ "Sugerencias de palabras"
+ "Ajustes de sugerencia de palabras"
+ "Habilitar Autocompletar al escribir"
+ "Autocompletar"
+ "Aumentar el tamaño del campo de texto"
+ "Ocultar sugerencias de palabras en la vista horizontal"
+ "Mayúsculas automáticas"
+ "Escribir en mayúscula el principio de la frase"
+ "Puntuación automática"
+
+ "Correcciones rápidas"
+ "Corrige los errores tipográficos que se cometen con más frecuencia."
+ "Mostrar sugerencias"
+ "Muestra las palabras sugeridas mientras se escribe."
+ "Autocompletar"
+ "La barra espaciadora y los signos de puntuación insertan automáticamente la palabra resaltada."
+ "Mostrar tecla de ajustes"
+ "Automáticamente"
+ "Mostrar siempre"
+ "Ocultar siempre"
+
+
+
+ "Sugerencias de bigramas"
+ "Usar palabra anterior para mejorar sugerencias"
+
+ "Ninguno"
+ "Básico"
+ "Avanzado"
+
+ "%s: guardada"
+ "Mantén pulsada una tecla para ver los caracteres acentuados (ø, ö, etc.)."
+ "Pulsa la tecla \"Atrás\" ↶ para cerrar el teclado en cualquier momento."
+ "Acceso a números y símbolos"
+ "Mantén pulsada la palabra situada más a la izquierda para añadirla al diccionario."
+ "Toca esta sugerencia para continuar »"
+ "Toca aquí para cerrar la sugerencia y comenzar a escribir."
+ "El teclado se abre cada vez que tocas un campo de texto""."
+ "Mantén pulsada una tecla para ver los caracteres acentuados"\n"(ø, ö, ô, ó, etc.)."
+ "Cambiar a números y a símbolos tocando esta tecla"
+ "Volver a las letras tocando esta tecla de nuevo"
+ "Mantén pulsada esta tecla para cambiar la configuración de teclado a, por ejemplo, autocompletar""."
+ "¡Pruébalo!"
+ "Ir"
+ "Sig."
+ "Listo"
+ "Enviar"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Introducción de voz"
+ "Actualmente la introducción de voz no está disponible en tu idioma, pero se puede utilizar en inglés."
+ "La introducción de voz es una función en fase experimental que utiliza la tecnología de reconocimiento de voz en red de Google."
+ "Para desactivar la función de introducción de voz, accede a la configuración del teclado."
+ "Para utilizar la función de introducción de voz, pulsa el botón de micrófono o desliza el dedo por el teclado en pantalla."
+ "Habla ahora"
+ "En curso"
+
+ "Se ha producido un error. Inténtalo de nuevo."
+ "No se ha podido establecer conexión."
+ "Se ha producido un error debido a un exceso de introducción de datos de voz."
+ "Problema de audio"
+ "Error del servidor"
+ "Ninguna conversación escuchada"
+ "No se ha encontrado ninguna coincidencia."
+ "La búsqueda por voz no está instalada."
+ "Sugerencia:"" muévete por el teclado para hablar."
+ "Sugerencia:"" la próxima vez, prueba a indicar signos de puntuación como, por ejemplo, \"punto\", \"coma\" o \"signo de interrogación\"."
+ "Cancelar"
+ "Aceptar"
+ "Introducción de voz"
+
+ "En teclado principal"
+ "En teclado de símbolos"
+ "Desactivado"
+
+
+ "Micrófono en teclado principal"
+ "Micrófono en teclado de símbolos"
+ "La función de introducción de voz no está habilitada."
+
+ "Enviar automáticamente después de la introducción de voz"
+ "Pulsar Intro automáticamente al buscar o al pasar al siguiente campo"
+ "Abrir el teclado"\n\n"Toca cualquier campo de texto."
+ "Cerrar el teclado"\n\n"Pulsa la tecla \"Atrás\"."
+ "Mantén pulsada una tecla para acceder a las opciones."\n\n"Accede a los signos de puntuación y a los acentos."
+ "Ajustes del teclado"\n\n"Mantén pulsada la tecla ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Seleccionar método de introducción de texto"
+ "Idiomas"
+ "Deslizar el dedo por la barra espaciadora para cambiar el idioma"
+ "← Volver a tocar para guardar"
+ "Hay un diccionario disponible."
+ "Habilitar comentarios de usuarios"
+ "Ayuda a mejorar este editor de método de introducción de texto enviando estadísticas de uso e informes de error a Google."
+ "Tocar para corregir palabras"
+ "Tocar palabras introducidas para corregirlas"
+ "Tema de teclado"
+ "teclado"
+ "voz"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-fa/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-fa/strings.xml
new file mode 100644
index 00000000..cc4391a0
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-fa/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "صفحه کلید Android"
+ "تنظیمات صفحه کلید Android"
+ "گزینه های ورودی"
+ "لرزش با فشار کلید"
+ "صدا با فشار کلید"
+ "بازشو با فشار کلید"
+ "تصحیح خطاهای تایپی"
+ "فعال کردن تصحیح خطای ورودی"
+ "خطاهای ورود افقی"
+ "فعال کردن تصحیح خطای ورودی"
+ "پیشنهادات کلمه"
+ "تصحیح خودکار کلمه قبلی"
+ "پیشنهادات کلمه"
+ "تنظیمات پیشنهاد کلمه"
+ "فعال کردن تکمیل خودکار در حین تایپ"
+ "تکمیل خودکار"
+ "افزایش اندازه قسمت متنی"
+ "پنهان کردن پیشنهادات کلمه در نمای افقی"
+ "نوشتن با حروف بزرگ خودکار"
+ "بزرگ کردن اول هر جمله"
+ "نشان گذاری خودکار"
+
+ "راه حل های سریع"
+ "تصحیح خطاهای تایپی رایج"
+ "نمایش پیشنهادات"
+ "نمایش واژه های پیشنهادی در حین تایپ"
+ "تکمیل خودکار"
+ "کلید خط فاصله و علائم نگارشی به صورت خودکار کلمه برجسته شده را وارد می کنند."
+ "نمایش کلید تنظیمات"
+ "خودکار"
+ "همیشه نمایش"
+ "همیشه پنهان"
+
+
+
+ "توضیحات بیگرام"
+ "برای بهبود پیشنهاد از کلمه قبلی استفاده شود"
+
+ "هیچکدام"
+ "پایه"
+ "پیشرفته"
+
+ "%s : ذخیره شد"
+ "برای مشاهده علائم تکیه (ø، ö و موارد دیگر) کلیدی را پایین نگه دارید"
+ "برای بستن صفحه کلید در هر نقطه که بخواهید، کلید برگشت ↶ را فشار دهید"
+ "دسترسی به اعداد و نمادها"
+ "انتهای سمت چپ واژه را برای افزودن آن به فرهنگ لغت فشار داده و نگه دارید"
+ "این نکته را برای ادامه لمس کنید »"
+ "برای بستن این نکته و شروع تایپ، اینجا را لمس کنید!"
+ "هر زمان که قسمت متنی را لمس می کنید، صفحه کلید باز می شود"
+ "یک کلید را برای مشاهده تکیه های صدا لمس کرده و نگه دارید (ø، ö، ô، ó و موارد دیگر)"\n
+ "تغییر شماره ها و نمادها با لمس این کلید"
+ "با لمس مجدد این کلید، به حروف برگردید"
+ "این کلید را برای تغییر تنظیمات صفحه کلید مانند تکمیل خودکار لمس کرده و فشار دهید"
+ "امتحان کنید!"
+ "برو"
+ "بعدی"
+ "انجام شد"
+ "ارسال"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "ورودی صوتی"
+ "ورودی صوتی در حال حاضر برای زبان شما پشتیبانی نمی شود اما برای زبان انگلیسی فعال است."
+ "ورودی صوتی یک ویژگی آزمایشی با استفاده از تشخیص گفتار شبکه Google است."
+ "برای خاموش کردن ورودی صدا، به تنظیمات صفحه کلید بروید."
+ "برای استفاده از ورودی صوتی، دکمه میکروفن را فشار دهید یا انگشت خود را روی صفحه کلید روی صفحه حرکت دهید."
+ "اکنون صحبت کنید"
+ "در حال کار"
+
+ "خطا: لطفاً دوباره امتحان کنید."
+ "متصل نشد"
+ "خطا، گفتار بسیار زیاد است."
+ "مشکل صوتی"
+ "خطای سرور"
+ "گفتاری شنیده نشد"
+ "مورد منطبقی یافت نشد"
+ "جستجوی صوتی نصب نشده است"
+ "نکته: "" برای صحبت روی صفحه کلید ضربه بزنید"
+ "نکته: دفعه دیگر، از نشانه گذاری های گفتاری مانند \"نقطه\"، \"کاما\" یا \"علامت سؤال\" استفاده کنید."
+ "لغو"
+ "تأیید"
+ "ورودی صوتی"
+
+ "در صفحه کلید اصلی"
+ "در صفحه کلید نمادها"
+ "خاموش"
+
+
+ "میکروفن در صفحه کلید اصلی"
+ "میکروفن در صفحه کلید نمادها"
+ "ورودی صوتی غیر فعال شده است"
+
+ "ارائه خودکار بعد از صدا"
+ "هنگام جستجو یا رفتن به قسمت بعدی، Enter را به صورت خودکار فشار دهید."
+ "صفحه کلید را باز کنید"\n\n"هر قسمت متنی را لمس کنید."
+ "بستن صفحه کلید"\n\n"کلید برگشت را فشار دهید."
+ "یک کلید را برای گزینه های"\n\n" دسترسی به علائم نگارشی و تکیه های صدا لمس کرده و نگه دارید."
+ "تنظیمات صفحه کلید"\n\n"کلید ""?123"" را لمس کرده و نگهدارید."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "انتخاب روش ورودی"
+ "زبان های ورودی"
+ "برای تغییر زبان انگشت را روی کلید فاصله بلغزانید"
+ "← جهت ذخیره دوباره لمس کنید"
+ "دیکشنری موجود است"
+ "فعال کردن بازخورد کاربر"
+ "با ارسال خودکار آمارهای کاربرد و گزارش های خرابی به Google، به بهبود این ویرایشگر روش ورودی کمک کنید."
+ "برای تصحیح کلمات لمس کنید"
+ "برای تصحیح کلمات وارد شده آنها را لمس کنید"
+ "طرح زمینه صفحه کلید"
+ "صفحه کلید"
+ "صوتی"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-fi/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-fi/strings.xml
new file mode 100644
index 00000000..3c36a632
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-fi/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android-näppäimistö"
+ "Android-näppäimistön asetukset"
+ "Syöttövalinnat"
+ "Käytä värinää näppäimiä painettaessa"
+ "Toista ääni näppäimiä painettaessa"
+ "Ponnahdusikkuna painalluksella"
+ "Korjaa kirjoitusvirheet"
+ "Ota syöttövirheen korjaus käyttöön"
+ "Vaakasuunnan syöttövirheet"
+ "Ota syöttövirheen korjaus käyttöön"
+ "Sanaehdotukset"
+ "Korjaa edellinen sana automaattisesti"
+ "Sanaehdotukset"
+ "Sanaehdotusasetukset"
+ "Ota automaattinen täydennys käyttöön kirjoitettaessa"
+ "Automaattinen täydennys"
+ "Suurenna tekstikenttää"
+ "Piilota sanaehdotukset vaakasuuntaisessa näkymässä"
+ "Automaattiset isot kirjaimet"
+ "Aloittaa lauseet isolla kirjaimella"
+ "Automaattiset välimerkit"
+
+ "Pikakorjaukset"
+ "Korjaa yleiset kirjoitusvirheet"
+ "Näytä ehdotukset"
+ "Näytä sanaehdotukset kirjoitettaessa"
+ "Automaattinen täydennys"
+ "Välilyönti ja välimerkki lisäävät automaattisesti korostetun sanan"
+ "Näytä asetukset-näppäin"
+ "Automaattinen"
+ "Näytä aina"
+ "Piilota aina"
+
+
+
+ "Bigram-ehdotukset"
+ "Paranna ehdotusta aiemman sanan avulla"
+
+ "Ei mitään"
+ "Tavallinen"
+ "Edistynyt"
+
+ "%s : Tallennettu"
+ "Näet aksenttimerkit (ø, ö jne.) pitämällä näppäintä painettuna."
+ "Voit sulkea näppäimistön milloin tahansa painamalla Takaisin-painiketta ↶"
+ "Käytä numeroita ja symboleita"
+ "Lisää vasemmanpuoleinen sana sanakirjaan pitämällä sitä painettuna"
+ "Jatka koskettamalla tätä vihjettä »"
+ "Sulje tämä vihje ja aloita kirjoittaa koskettamalla tätä!"
+ "Näppäimistö avautuu, kun kosketat tekstikenttää"
+ "Näytä aksenttimerkit pitämällä näppäintä painettuna"\n"(ø, ö, ô, ó ja niin edelleen"
+ "Vaihda numeroihin ja symboleihin koskettamalla tätä näppäintä"
+ "Siirry takaisin kirjaimiin koskettamalla tätä näppäintä uudelleen"
+ "Muuta näppäimistön asetuksia, kuten automaattista täydentämistä, pitämällä tätä näppäintä painettuna"
+ "Kokeile!"
+ "Siirry"
+ "Seuraava"
+ "Valmis"
+ "Lähetä"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Äänisyöte"
+ "Äänisyötettä ei vielä tueta kielelläsi, mutta voit käyttää sitä englanniksi."
+ "Äänisyöte on kokeellinen Googlen puheentunnistusta käyttävä ominaisuus."
+ "Siirry näppäimistön asetuksiin poistaaksesi äänisyötteen käytöstä."
+ "Käytä äänisyötettä painamalla mikrofonipainiketta tai liu\'uttamalla sormeasi näytön näppäimistön poikki."
+ "Puhu nyt"
+ "Työstetään"
+
+ "Virhe. Yritä uudelleen."
+ "Ei yhteyttä"
+ "Virhe, liikaa puhetta."
+ "Ääniongelma"
+ "Palvelinvirhe"
+ "Puhetta ei kuulu"
+ "Ei vastineita"
+ "Äänihakua ei asennettu"
+ "Vihje:"" liu\'uta sormea näppäimistöllä ja puhu"
+ "Vihje:"" kokeile seuraavalla kerralla puhua välimerkit, kuten \"period\" (piste), \"comma\" (pilkku) tai \"question mark\" (kysymysmerkki)."
+ "Peruuta"
+ "OK"
+ "Äänisyöte"
+
+ "Päänäppäimistössä"
+ "Symbolinäppäimistössä"
+ "Pois käytöstä"
+
+
+ "Päänäppäimistön mikrofoni"
+ "Symbolinäppäimistön mikrofoni"
+ "Äänisyöte ei ole käytössä"
+
+ "Lähetä automaattisesti puheen jälkeen"
+ "Paina automaattisesti enter-näppäintä tehdessäsi hakuja tai siirtyessäsi seuraavaan kenttään."
+ "Avaa näppäimistö"\n\n"Kosketa tekstikenttää."
+ "Sulje näppäimistö"\n\n"Paina Takaisin-näppäintä."
+ "Näet asetukset pitämällä näppäintä painettuna"\n\n"Käytä välimerkkejä ja aksenttimerkkejä."
+ "Näppäimistön asetukset"\n\n"Pidä painettuna""?123""-näppäintä."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Valitse syöttötapa"
+ "Syöttökielet"
+ "Vaihda kieltä liu\'uttamalla sormea välilyöntinäppäimellä"
+ "← Tallenna koskettamalla uudelleen"
+ "Sanakirja saatavilla"
+ "Ota käyttäjäpalaute käyttöön"
+ "Auta parantamaan tätä syöttötavan muokkausohjelmaa lähettämällä automaattisesti käyttötietoja ja kaatumisraportteja Googlelle."
+ "Korjaa sanoja koskettamalla"
+ "Korjaa sanoja koskettamalla niitä"
+ "Näppäimistön teema"
+ "näppäimistö"
+ "ääni"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-fr-rCA/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-fr-rCA/strings.xml
new file mode 100644
index 00000000..b56463ed
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-fr-rCA/strings.xml
@@ -0,0 +1,19 @@
+
+
+
+ "Clavier Android"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-fr/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values-fr/bools.xml
new file mode 100644
index 00000000..897f4b3d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-fr/bools.xml
@@ -0,0 +1,22 @@
+
+
+
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-fr/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-fr/donottranslate-altchars.xml
new file mode 100644
index 00000000..874d89da
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-fr/donottranslate-altchars.xml
@@ -0,0 +1,33 @@
+
+
+
+ 1àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóôõöœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
+
+ 2
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-fr/donottranslate.xml b/src/java/KP2ASoftKeyboard2/java/res/values-fr/donottranslate.xml
new file mode 100644
index 00000000..b79df7b3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-fr/donottranslate.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ .\u0009\u0020,;:!?\'\n()[]*&@{}/<>_+=|\u0022
+
+ .,
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-fr/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-fr/strings.xml
new file mode 100644
index 00000000..06ba1eae
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-fr/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Clavier Android"
+ "Paramètres du clavier Android"
+ "Options de saisie"
+ "Vibrer à chaque touche"
+ "Son à chaque touche"
+ "Agrandir les caractères"
+ "Corriger les fautes de frappe"
+ "Activer la correction des erreurs de saisie"
+ "Erreurs de saisie en mode paysage"
+ "Activer la correction des erreurs de saisie"
+ "Saisie prédictive"
+ "Corriger automatiquement le mot précédent"
+ "Saisie prédictive"
+ "Paramètres de la saisie prédictive"
+ "Activer la saisie semi-automatique"
+ "Saisie semi-automatique"
+ "Agrandir le champ de texte"
+ "Masquer la saisie prédictive en mode paysage"
+ "Majuscules auto"
+ "Mettre en majuscule la première lettre de chaque phrase"
+ "Ponctuation automatique"
+
+ "Corrections rapides"
+ "Corrige les fautes de frappe courantes"
+ "Afficher les suggestions"
+ "Afficher les suggestions de terme lors de la saisie"
+ "Saisie semi-automatique"
+ "Insérer autom. terme surligné (pression sur barre espace/ponctuation)"
+ "Afficher touche param."
+ "Automatique"
+ "Toujours afficher"
+ "Toujours masquer"
+
+
+
+ "Suggestions de type bigramme"
+ "Améliorer la suggestion en fonction du mot précédent"
+
+ "Aucun"
+ "Simple"
+ "Avancé"
+
+ "%s : enregistré"
+ "Maintenir une touche enfoncée pour afficher les accents (à, é, etc.)"
+ "Appuyez sur la touche Retour ↶ pour fermer le clavier à tout moment."
+ "Accéder aux chiffres et symboles"
+ "Appuyer et maintenir le doigt sur le mot le plus à gauche pour l\'ajouter au dictionnaire"
+ "Touchez ce conseil pour continuer »"
+ "Touchez ici pour fermer ce conseil et commencer à saisir votre texte."
+ "Le clavier s\'affiche à chaque fois que vous touchez une zone de texte."
+ "Maintenez une touche enfoncée pour afficher les accents"\n"(ø, ö, ô, ó, etc.)""."
+ "Appuyez sur cette touche pour basculer vers les chiffres et les symboles."
+ "Appuyez de nouveau sur cette touche pour retourner aux lettres."
+ "Maintenez cette touche enfoncée afin de modifier les paramètres du clavier, tels que la saisie semi-automatique."
+ "Essayez !"
+ "OK"
+ "Suivant"
+ "OK"
+ "Envoyer"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Saisie vocale"
+ "La saisie vocale n\'est pas encore prise en charge pour votre langue, mais elle fonctionne en anglais."
+ "La saisie vocale est une fonctionnalité expérimentale qui fait appel à la reconnaissance vocale en réseau de Google."
+ "Pour désactiver la saisie vocale, accédez aux paramètres du clavier."
+ "Pour utiliser la saisie vocale, appuyez sur la touche du microphone ou faites glisser votre doigt sur le clavier à l\'écran."
+ "Parlez maintenant"
+ "Traitement en cours"
+
+ "Erreur. Veuillez réessayer."
+ "Connexion impossible"
+ "Erreur, discours trop long."
+ "Problème audio"
+ "Erreur serveur"
+ "Aucune requête vocale détectée"
+ "Aucune correspondance n\'a été trouvée."
+ "Recherche vocale non installée"
+ "Astuce :"" Faites glisser votre doigt sur le clavier pour parler."
+ "Astuce :"" La prochaine fois, essayez de prononcer la ponctuation, en énonçant des termes tels que \"point\", \"virgule\" ou \"point d\'interrogation\"."
+ "Annuler"
+ "OK"
+ "Saisie vocale"
+
+ "Sur le clavier principal"
+ "Sur le clavier des symboles"
+ "Désactivée"
+
+
+ "Micro sur le clavier principal"
+ "Micro sur le clavier des symboles"
+ "Saisie vocale désactivée"
+
+ "Envoi automatique après la saisie vocale"
+ "Appuyez automatiquement sur Entrée pour effectuer une recherche ou accéder au champ suivant."
+ "Ouvrir le clavier"\n\n"Appuyez sur un champ de texte."
+ "Fermer le clavier"\n\n"Appuyez sur la touche Retour."
+ "Appuyez sur une touche de manière prolongée pour accéder aux options"\n\n"Accédez aux signes de ponctuation et aux accents."
+ "Paramètres du clavier"\n\n"Appuyez sur la touche ""?123"" de manière prolongée."
+ ".com"
+ ".net"
+ ".org"
+ ".gouv"
+ ".edu"
+ "Sélectionner un mode de saisie."
+ "Langues de saisie"
+ "Faites glisser votre doigt sur la barre d\'espacement pour changer la langue."
+ "← Appuyer de nouveau pour enregistrer"
+ "Dictionnaire disponible"
+ "Autoriser les commentaires des utilisateurs"
+ "Contribuer à l\'amélioration de cet éditeur du mode de saisie grâce à l\'envoi automatique de statistiques d\'utilisation et de rapports d\'incident à Google."
+ "Appuyer pour corriger"
+ "Appuyer sur les mots saisis pour les corriger"
+ "Thème du clavier"
+ "clavier"
+ "voix"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-hr/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-hr/strings.xml
new file mode 100644
index 00000000..a97c9536
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-hr/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android tipkovnica"
+ "Postavke tipkovnice za Android"
+ "Opcije ulaza"
+ "Vibracija pri pritisku na tipku"
+ "Zvuk pri pritisku tipke"
+ "Povećanja na pritisak tipke"
+ "Ispravi pogreške u pisanju"
+ "Omogućavanje ispravka pogreške pri unosu"
+ "Pogreške pri pejzažnom unosu"
+ "Omogućavanje ispravka pogreške pri unosu"
+ "Prijedlozi riječi"
+ "Automatsko ispravljanje prethodne riječi"
+ "Prijedlozi riječi"
+ "Postavke prijedloga riječi"
+ "Omogućavanje automatskog dovršavanja pri upisivanju"
+ "Automatsko dovršavanje"
+ "Povećaj tekstualno polje"
+ "Sakrij prijedloge riječi u pejzažnom prikazu"
+ "Automatsko pisanje velikih slova"
+ "Stavi veliko slovo na početku rečenice"
+ "Automatsko stavljanje interpunkcije"
+
+ "Brzi popravci"
+ "Ispravlja uobičajene pogreške u pisanju"
+ "Pokaži prijedloge"
+ "Prikazivanje predloženih riječi prilikom upisivanja"
+ "Automatsko dovršavanje"
+ "Razmaknica i interpunkcija automatski umeću istaknutu riječ"
+ "Prikaži tipku postavki"
+ "Automatski"
+ "Uvijek prikaži"
+ "Uvijek sakrij"
+
+
+
+ "Bigram prijedlozi"
+ "Upotrijebi prethodnu riječ radi poboljšanja prijedloga"
+
+ "Nijedan"
+ "Osnovni"
+ "Napredno"
+
+ "%s : Spremljeno"
+ "Pritisnite i držite tipku da biste vidjeli naglaske (ø, ö itd.)"
+ "Pritisnite tipku \"Natrag\" ↶ za zatvaranje tipkovnice"
+ "Pristup brojevima i simbolima"
+ "Pritisnite i držite krajnju lijevu riječ da biste je dodali u rječnik."
+ "Dodirnite ovaj savjet za nastavak »"
+ "Dodirnite ovdje da biste zatvorili savjet i počeli upisivati!"
+ "Tipkovnica se otvara svaki put kada dodirnete tekstualno polje"
+ "Dodirnite i držite tipku da biste vidjeli naglaske"\n"(ø, ö, ô, ó i tako dalje)"
+ "Prijeđite na brojeve i simbole dodirom na ovu tipku"
+ "Dodirnite ponovo ovu tipku za povratak na slova"
+ "Dodirnite i držite ovu tipku da biste promijenili postavke tipkovnice, poput automatskog dovršavanja"
+ "Isprobajte!"
+ "Idi"
+ "Dalje"
+ "Gotovo"
+ "Pošalji"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Glasovni ulaz"
+ "Vaš jezik trenutno nije podržan za glasovni unos, ali radi za engleski."
+ "Glasovni unos je pokusna značajka koja koristi Googleovo umreženo prepoznavanje govora."
+ "Za isključivanje glasovnog unosa idite na postavke tipkovnice."
+ "Da biste koristili glasovni unos pritisnite gumb mikrofona ili kliznite prstom preko tipkovnice na zaslonu."
+ "Govorite sad"
+ "Obrada"
+
+ "Pogreška. Pokušajte ponovo."
+ "Spajanje nije bilo moguće"
+ "Pogreška, predugi govor."
+ "Problem sa zvukom"
+ "Pogreška na poslužitelju"
+ "Nije se čuo govor"
+ "Nisu pronađeni rezultati"
+ "Glasovno pretraživanje nije instalirano"
+ "Savjet:"" Prijeđite preko tipkovnice pa govorite"
+ "Savjet:"" Sljedeći put pokušajte izgovoriti znakove interpunkcije poput \"točka, \"zarez\" ili \"upitnik\"."
+ "Odustani"
+ "U redu"
+ "Glasovni ulaz"
+
+ "Na glavnoj tipkovnici"
+ "Na tipkovnici sa simbolima"
+ "Isključeno"
+
+
+ "Mikrofon na glavnoj tipkovnici"
+ "Mikrofon na tipkovnici sa simbolima"
+ "Glasovni unos je onemogućen"
+
+ "Automatski pošalji nakon glasovnog unosa"
+ "Automatski se pritišće \"Enter\" kad pretražujete ili idete na sljedeće polje."
+ "Otvaranje tipkovnice"\n\n"Dodirnite bilo koje tekstualno polje"
+ "Zatvaranje tipkovnice"\n\n"Pritisnite tipku \"Natrag\"."
+ "Dodirnite i držite tipku da biste vidjeli opcije"\n\n"Pristup interpunkciji i naglascima."
+ "Postavke tipkovnice"\n\n"Dodirnite i držite tipku ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Odabir ulazne metode"
+ "Jezici unosa"
+ "Kliznite prstom po razmaknici za promjenu jezika"
+ "← Dodirnite opet za spremanje"
+ "Rječnik je dostupan"
+ "Omogući korisničke povratne informacije"
+ "Pomozite u poboljšanju ovog urednika ulazne metode automatskim slanjem statistike upotrebe i padova Googleu."
+ "Dodirnite za ispravak riječi"
+ "Dodirnite unesene riječi radi ispravka"
+ "Tema tipkovnice"
+ "tipkovnica"
+ "glas"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-hu/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-hu/strings.xml
new file mode 100644
index 00000000..7c2f2164
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-hu/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android-billentyűzet"
+ "Android billentyűzetbeállítások"
+ "Beviteli beállítások"
+ "Rezgés billentyű megnyomása esetén"
+ "Hangjelzés billentyű megnyomása esetén"
+ "Legyen nagyobb billentyű lenyomásakor"
+ "Gépelési hibák kijavítása"
+ "Beviteli hibák javításának engedélyezése"
+ "Fekvő beviteli hibák"
+ "Beviteli hibák javításának engedélyezése"
+ "Szójavaslatok"
+ "Az előző szó automatikus kijavítása"
+ "Szójavaslatok"
+ "Szójavaslati beállítások"
+ "Automatikus kiegészítés engedélyezése gépelés közben"
+ "Automatikus kiegészítés"
+ "A szövegmező méretének növelése"
+ "Szójavaslatok elrejtése fekvő nézetben"
+ "Automatikusan nagy kezdőbetű"
+ "Nagybetűvel kezdi a mondatot"
+ "Automatikus központozás"
+
+ "Gyorsjavítások"
+ "Kijavítja a gyakori gépelési hibákat"
+ "Javaslatok megjelenítése"
+ "A javasolt szavak megjelenítése gépelés közben"
+ "Automatikus kiegészítés"
+ "A szóköz és az írásjelek használata automatikusan beszúrja a kiemelt szót"
+ "Beállítások billentyű megjelenítése"
+ "Automatikus"
+ "Mindig látszik"
+ "Mindig rejtve"
+
+
+
+ "Bigram javaslatok"
+ "Előző szó használata a javaslatok javításához"
+
+ "Nincs"
+ "Alap"
+ "Speciális"
+
+ "%s : mentve"
+ "Az ékezetes betűk megtekintéséhez tartsa lenyomva valamelyik billentyűt (ø, ö stb.)"
+ "A vissza gomb ↶ megnyomásával bármikor elrejtheti a billentyűzetet"
+ "Számok és szimbólumok elérése"
+ "A szótárhoz történő hozzáadásához nyomja meg hosszan a bal oldali legszélső szót"
+ "A folytatáshoz érintse meg ezt a tippet »"
+ "Érintse meg itt a tipp bezárásához és a gépelés megkezdéséhez."
+ "Szövegmező megérintésekor a billentyűzet mindig megjelenik"
+ "Érintse meg és tartsa lenyomva valamelyik billentyűt az ékezetes betűk megtekintéséhez"\n"(ø, ö, ô, ó stb.)"
+ "Számokra és szimbólumokra ennek a billentyűnek a megérintésével válthat"
+ "A billentyű újbóli megérintésével visszatérhet a betűkhöz"
+ "Érintse meg és tartsa lenyomva ezt a billentyűt a billentyűzet-beállítások (pl. az automatikus kiegészítés) módosításához"
+ "Próbálja ki!"
+ "Ugrás"
+ "Tovább"
+ "Kész"
+ "Küldés"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Hangbevitel"
+ "A hangbevitel szolgáltatás jelenleg nem támogatja az Ön nyelvét, ám angolul működik."
+ "A hangbevitel a Google hálózati beszédfelismerését alkalmazó kísérleti funkció."
+ "A hangbevitelt a billentyűzet beállításai között lehet kikapcsolni."
+ "A hangbevitel használatához nyomja meg a mikrofon gombját vagy húzza végig az ujját a képernyő-billentyűzeten."
+ "Most beszéljen"
+ "Feldolgozás"
+
+ "Hiba történt. Kérjük, próbálja újra."
+ "Nem sikerült kapcsolódni"
+ "Hiba történt; túl sokat beszélt."
+ "Hangprobléma"
+ "Szerverhiba"
+ "Nem hallatszott beszéd"
+ "Nem található egyezés"
+ "A hangalapú keresés nincs telepítve"
+ "Tipp:"" húzza végig az ujját a billentyűzeten a beszédhez"
+ "Tipp:"" következő alkalommal próbálja ki az írásjelek kimondását is, pl. \"period\", \"comma\" vagy \"question mark\"."
+ "Mégse"
+ "OK"
+ "Hangbevitel"
+
+ "Főbillentyűzeten"
+ "Szimbólumbillentyűzeten"
+ "Ki"
+
+
+ "Mikrofon a főbillentyűzeten"
+ "Mikrofon a szimbólumbillentyűzeten"
+ "A hangbevitel ki van kapcsolva"
+
+ "Automatikus küldés a beszéd után"
+ "Az Enter automatikus megnyomása keresés vagy a következő mezőre ugrás során."
+ "A billentyűzet megjelenítése"\n\n"Érintse meg valamelyik szövegmezőt."
+ "A billentyűzet bezárása"\n\n"Nyomja meg a Vissza billentyűt."
+ "A lehetőségek megjelenítéséhez érintse meg és tartsa lenyomva valamelyik billentyűt"\n\n"Az írásjelek és az ékezetes betűk elérése."
+ "Billentyűzetbeállítások"\n\n"Érintse meg és tartsa lenyomva a ""?123"" billentyűt."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Beviteli mód kiválasztása"
+ "Beviteli nyelvek"
+ "A nyelv módosításához húzza végig az ujját a szóköz billentyűn"
+ "← Érintse meg újra a mentéshez"
+ "Van elérhető szótár"
+ "Felhasználói visszajelzés engedélyezése"
+ "Segíthet ennek a beviteli módszernek a javításában, ha engedélyezi a használati statisztikák és a hibajelentések elküldését a Google-nak."
+ "Javítás a szavak megérintésével"
+ "A beírt szavakat megérintve kijavíthatja őket"
+ "Billentyűzettéma"
+ "billentyűzet"
+ "hang"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-in/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-in/strings.xml
new file mode 100644
index 00000000..73b57c7b
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-in/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Keyboard Android"
+ "Setelan keyboard Android"
+ "Opsi masukan"
+ "Getar jika tombol ditekan"
+ "Berbunyi jika tombol ditekan"
+ "Muncul saat tombol ditekan"
+ "Perbaiki kesalahan ketik"
+ "Aktifkan perbaikan galat masukan"
+ "Galat masukan lanskap"
+ "Aktifkan perbaikan galat masukan"
+ "Saran kata"
+ "Perbaiki kata sebelumnya secara otomatis"
+ "Saran kata"
+ "Setelan saran kata"
+ "Aktifkan pengisian otomatis saat mengetik"
+ "Pengisian otomatis"
+ "Tambah ukuran bidang teks"
+ "Sembunyikan saran kata dalam tampilan melintang"
+ "Kapitalisasi otomatis"
+ "Kapitalisasi awal kalimat"
+ "Beri tanda baca otomatis"
+
+ "Perbaikan cepat"
+ "Memperbaiki kesalahan ketik umum"
+ "Perlihatkan saran"
+ "Tampilkan kata yang disarankan ketika mengetik"
+ "Pengisian otomatis"
+ "Bilah spasi dan tanda baca secara otomatis memasukkan kata yang disorot"
+ "Lihat tombol setelan"
+ "Otomatis"
+ "Selalu tampilkan"
+ "Selalu sembunyikan"
+
+
+
+ "Saran Bigram"
+ "Gunakan kata sebelumnya untuk meningkatkan sara"
+
+ "Tak Satu Pun"
+ "Dasar"
+ "Lanjutan"
+
+ "%s : Telah disimpan"
+ "Tahan tombol untuk melihat aksen (ø, ö, dll.)"
+ "Tekan tombol kembali ↶ untuk menutup keyboard kapan saja"
+ "Akses angka dan simbol"
+ "Tekan terus kata yang paling kiri untuk menambahkannya ke kamus"
+ "Sentuh petunjuk ini untuk melanjutkan »"
+ "Sentuh di sini untuk menutup petunjuk dan mulailah mengetik!"
+ "Keyboard terbuka setiap kali Anda menyentuh bidang teks"
+ "Sentuh & tahan tombol untuk melihat aksen"\n"(ø, ö, ô, ó, dan seterusnya)"
+ "Beralih ke angka dan simbol dengan menekan tombol ini"
+ "Kembali ke huruf dengan menekan tombol ini lagi"
+ "Sentuh & tahan tombol ini untuk mengubah setelan keyboard, seperti lengkapi otomatis"
+ "Cobalah!"
+ "Buka"
+ "Berikutnya"
+ "Selesai"
+ "Kirimkan"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Masukan suara"
+ "Masukan suara saat ini tidak didukung untuk bahasa Anda, tetapi bekerja dalam Bahasa Inggris."
+ "Masukan suara adalah fitur eksperimental yang menggunakan pengenal suara berjaringan Google."
+ "Untuk mematikan masukan suara, buka setelan keyboard."
+ "Untuk menggunakan masukan suara, tekan tombol mikrofon atau geser jari Anda di sepanjang keyboard pada layar."
+ "Ucapkan sekarang"
+ "Bekerja"
+
+ "Galat: Coba lagi."
+ "Tidak dapat menyambung"
+ "Galat, terlalu banyak ucapan."
+ "Masalah audio"
+ "Galat server"
+ "Tidak terdengar ucapan"
+ "Tak ditemukan yang cocok"
+ "Penelusuran suara tidak terpasang"
+ "Petunjuk:"" Gesek keyboard untuk berbicara"
+ "Petunjuk:"" Selanjutnya, coba ucapkan tanda baca seperti \"titik\", \"koma\", atau \"tanda tanya\"."
+ "Batal"
+ "OK"
+ "Masukan suara"
+
+ "Di keyboard utama"
+ "Di keyboard simbol"
+ "Mati"
+
+
+ "Mik di keyboard utama"
+ "Mik di keyboard simbol"
+ "Masukan suara dinonaktifkan"
+
+ "Kirim otomatis setelah suara"
+ "Tekan enter secara otomatis saat menelusuri atau menuju ke bidang berikutnya."
+ "Buka keyboard"\n\n"Sentuh bidang teks mana pun."
+ "Tutup keyboard"\n\n"Tekan tombol Kembali."
+ "Sentuh & tahan tombol tertentu untuk opsi"\n\n"Akses tanda baca dan aksen."
+ "Setelan keyboard"\n\n"Sentuh & tahan tombol ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Pilih metode masukan"
+ "Bahasa masukan"
+ "Geser jari pada bilah spasi untuk mengubah bahasa"
+ "← Sentuh sekali lagi untuk menyimpan"
+ "Kamus yang tersedia"
+ "Aktifkan umpan balik pengguna"
+ "Bantu tingkatkan metode editor masukan dengan mengirim statistik penggunaan dan laporan kerusakan ke Google secara otomatis."
+ "Sentuh untuk memperbaiki kata"
+ "Sentuh kata yang dimasukkan untuk memperbaikinya"
+ "Tema Keyboard"
+ "keyboard"
+ "suara"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-it/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values-it/bools.xml
new file mode 100644
index 00000000..897f4b3d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-it/bools.xml
@@ -0,0 +1,22 @@
+
+
+
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-it/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-it/donottranslate-altchars.xml
new file mode 100644
index 00000000..23960171
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-it/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àá
+ 3èé
+ ìíîï8
+ òó9
+ ùúûü7
+ §
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-it/donottranslate.xml b/src/java/KP2ASoftKeyboard2/java/res/values-it/donottranslate.xml
new file mode 100644
index 00000000..3e3f3ef2
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-it/donottranslate.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ .\u0009\u0020,;:!?\'\n()[]*&@{}/<>_+=|\u0022
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-it/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-it/strings.xml
new file mode 100644
index 00000000..3768dc23
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-it/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Tastiera Android"
+ "Impostazioni tastiera Android"
+ "Opzioni inserimento"
+ "Vibrazione tasti"
+ "Suono tasti"
+ "Popup sui tasti"
+ "Correggi errori di digitazione"
+ "Attiva la correzione degli errori di inserimento"
+ "Errori di inserimento in visualizzazione orizzontale"
+ "Attiva la correzione degli errori di inserimento"
+ "Suggerimenti parola"
+ "Correggi automaticamente la parola precedente"
+ "Suggerimenti parola"
+ "Impostazioni suggerimento parole"
+ "Attiva il completamento automatico durante la digitazione"
+ "Completamento automatico"
+ "Aumenta dimensioni campo di testo"
+ "Nascondi i suggerimenti delle parole in visualizzazione orizzontale"
+ "Maiuscole automatiche"
+ "Rendi maiuscole le iniziali delle frasi"
+ "Punteggiatura automat."
+
+ "Correzioni veloci"
+ "Corregge gli errori di digitazione più comuni"
+ "Mostra suggerimenti"
+ "Visualizza le parole suggerite durante la digitazione"
+ "Completamento autom."
+ "Barra spaziatrice e punteggiatura inseriscono la parola evidenziata"
+ "Mostra tasto impostaz."
+ "Automatico"
+ "Mostra sempre"
+ "Nascondi sempre"
+
+
+
+ "Suggerimenti sui bigrammi"
+ "Utilizza parola precedente per migliorare il suggerimento"
+
+ "Nessuna"
+ "Base"
+ "Avanzate"
+
+ "%s : parola salvata"
+ "Tieni premuto un tasto per vedere le lettere con segni diacritici (ø, ö etc.)"
+ "Premi il tasto Indietro ↶ per chiudere la tastiera"
+ "Accedi a numeri e simboli"
+ "Tieni premuto sulla parola all\'estrema sinistra per aggiungerla al dizionario"
+ "Tocca questo suggerimento per continuare »"
+ "Tocca qui per chiudere questo suggerimento e iniziare a digitare."
+ "La tastiera si apre ogni volta che tocchi un campo di testo"
+ "Tocca e tieni premuto un pulsante per visualizzare le lettere con segni diacritici"\n"(ø, ö, ô, ó e così via)"
+ "Passa a numeri e simboli toccando questo pulsante"
+ "Torna alle lettere toccando di nuovo questo pulsante"
+ "Tocca e tieni premuto questo pulsante per modificare le impostazioni della tastiera, come il completamento automatico"
+ "Prova!"
+ "Vai"
+ "Avanti"
+ "Fine"
+ "Invia"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Comandi vocali"
+ "I comandi vocali non sono attualmente supportati per la tua lingua ma funzionano in inglese."
+ "I comandi vocali sono una funzione sperimentale che utilizza il riconoscimento vocale in rete di Google."
+ "Per disattivare i comandi vocali, vai alle impostazioni della tastiera."
+ "Per utilizzare i comandi vocali, premi il pulsante del microfono o fai scorrere il dito sulla tastiera sullo schermo."
+ "Parla ora"
+ "Elaborazione in corso"
+
+ "Errore. Riprova più tardi."
+ "Impossibile connettersi."
+ "Errore: conversazione troppo lunga."
+ "Problema audio"
+ "Errore del server"
+ "Nessuna frase vocale rilevata"
+ "Nessuna corrispondenza trovata"
+ "Ricerca vocale non installata"
+ "Suggerimento."" Fai scorrere il dito sulla tastiera per parlare"
+ "Suggerimento."" La prossima volta, prova a pronunciare termini relativi alla punteggiatura come \"punto\", \"virgola\" o \"punto di domanda\"."
+ "Annulla"
+ "OK"
+ "Comandi vocali"
+
+ "Su tastiera principale"
+ "Su tastiera simboli"
+ "Non attivi"
+
+
+ "Microfono su tastiera principale"
+ "Microfono su tastiera simboli"
+ "Comandi vocali disabilitati"
+
+ "Invia automaticamente dopo comando vocale"
+ "Premi automaticamente \"Invio\" durante una ricerca o un passaggio al campo successivo."
+ "Apertura tastiera"\n\n"Tocca qualsiasi campo di testo."
+ "Chiusura tastiera"\n\n"Premi il tasto Indietro."
+ "Tocca e tieni premuto un pulsante per le opzioni"\n\n"Accesso a punteggiatura e accenti."
+ "Impostazioni tastiera"\n\n"Tocca e tieni premuto il pulsante ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Seleziona metodo di inserimento"
+ "Lingue comandi"
+ "Scorri il dito sulla barra spaziatrice per cambiare la lingua"
+ "← Tocca di nuovo per salvare"
+ "Dizionario disponibile"
+ "Attiva commenti degli utenti"
+ "Aiuta a migliorare l\'editor del metodo di inserimento inviando automaticamente a Google statistiche sull\'utilizzo e segnalazioni sugli arresti anomali."
+ "Tocca per correggere"
+ "Tocca le parole inserite per correggerle"
+ "Tema della tastiera"
+ "tastiera"
+ "vocale"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-iw/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-iw/strings.xml
new file mode 100644
index 00000000..abc5c397
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-iw/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "מקלדת Android"
+ "הגדרות מקלדת של Android"
+ "אפשרויות קלט"
+ "רטט עם לחיצה על מקשים"
+ "צלילים עם לחיצה על מקשים"
+ "חלון קופץ עם לחיצה על מקשים"
+ "תקן שגיאות הקלדה"
+ "הפוך תיקון שגיאות קלט לפעיל"
+ "שגיאות קלט בפריסה לרוחב"
+ "הפוך תיקון שגיאות קלט לפעיל"
+ "הצעות למילים"
+ "תקן באופן אוטומטי את המילה הקודמת"
+ "הצעות למילים"
+ "הגדרות של הצעות מילים"
+ "הפוך השלמה אוטומטית לפעילה בעת הקלדה"
+ "השלמה אוטומטית"
+ "הגדל את הגודל של שדה הטקסט"
+ "הסתר הצעות למילים בתצוגה לרוחב"
+ "הפיכה אוטומטית של אותיות לרישיות"
+ "הוסף אות רישית בתחילת משפט"
+ "פיסוק אוטומטי"
+
+ "תיקונים מהירים"
+ "מתקן שגיאות הקלדה נפוצות"
+ "הצג הצעות"
+ "הצג הצעות למילים בעת הקלדה"
+ "השלמה אוטומטית"
+ "הקשה על מקש הרווח וסימני הפיסוק תוסיף באופן אוטומטי את המילה המסומנת"
+ "הצג מקש הגדרות"
+ "אוטומטי"
+ "הצג תמיד"
+ "הסתר תמיד"
+
+
+
+ "הצעות של צמדי אותיות (Bigram)"
+ "השתמש במילה הקודמת כדי לשפר את ההצעה"
+
+ "ללא"
+ "בסיסי"
+ "מתקדם"
+
+ "%s : נשמרה"
+ "החזק מקש לחוץ כדי לראות אקצנטים (ø, ö וכדומה)"
+ "לחץ על המקש \'הקודם\' ↶ כדי לסגור את המקלדת בכל עת"
+ "גישה למספרים וסמלים"
+ "לחץ על המילה השמאלית הקיצונית והחזק אותה לחוצה כדי להוסיף למילון"
+ "גע ברמז זה כדי להמשיך »"
+ "גע כאן כדי לסגור רמז זה ולהתחיל בהקלדה!"
+ "המקלדת נפתחת בכל פעם שאתה נוגע בשדה טקסט"
+ "גע במקש והחזק אותו לחוץ כדי להציג אקצנטים"\n"(ø, ö, ô, ó וכדומה)"
+ "עבור למספרים וסמלים על ידי נגיעה במקש זה"
+ "חזור לאותיות על ידי מגע במקש זה שוב"
+ "גע במקש זה והחזק אותו לחוץ כדי לשנות את הגדרות המקלדת, כגון השלמה אוטומטית"
+ "נסה אותו!"
+ "בצע"
+ "הבא"
+ "בוצע"
+ "שלח"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "קלט קולי"
+ "קלט קולי אינו נתמך בשלב זה בשפתך, אך הוא פועל באנגלית."
+ "קלט קולי הוא תכונה ניסיונית של זיהוי הדיבור ברשת של Google."
+ "כדי לכבות את הקלט הקולי, עבור להגדרות מקלדת."
+ "כדי להשתמש בקלט הקולי, לחץ על לחצן המיקרופון או החלק את האצבע על המקלדת שבמסך."
+ "דבר כעת"
+ "פועל"
+
+ "שגיאה. נסה שוב."
+ "אין אפשרות להתחבר"
+ "שגיאה, דיבור רב מדי."
+ "בעיה באודיו"
+ "שגיאת שרת"
+ "לא נשמע דיבור"
+ "לא נמצאו התאמות"
+ "חיפוש קולי לא מותקן"
+ "רמז:"" העבר על המקלדת כדי לדבר"
+ "רמז:"" בפעם הבאה, נסה לומר את סימני הפיסוק כגון \"נקודה\", \"פסיק\" או \"סימן שאלה\"."
+ "ביטול"
+ "אישור"
+ "קלט קולי"
+
+ "במקלדת הראשית"
+ "מקלדת סמלים מופעלת"
+ "כבוי"
+
+
+ "מיקרופון במקלדת הראשית"
+ "מיקרופון במקלדת סמלים"
+ "הקלט הקולי מושבת"
+
+ "שליחה אוטומטית לאחר הקלטת קול"
+ "הקש על Enter באופן אוטומטי בעת חיפוש או מעבר לשדה הבא."
+ "פתח את המקלדת"\n\n"גע בשדה טקסט כלשהו."
+ "סגור את המקלדת"\n\n"לחץ על הלחצן \'הקודם\'."
+ "גע במקש והחזק אותו לחוץ לקבלת אפשרויות"\n\n"קבל גישה לסימני פיסוק ואקצנטים."
+ "הגדרות מקלדת"\n\n"גע במקש ""?123"" והחזק אותו לחוץ."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "בחר שיטת קלט"
+ "שפות קלט"
+ "החלק את האצבע על מקש הרווח כדי לשנות שפה"
+ "← גע שוב כדי לשמור"
+ "מילון זמין"
+ "הפוך משוב ממשתמשים לפעיל"
+ "עזור לשפר שיטת קלט זו על ידי שליחה אוטומטית של סטטיסטיקת שימוש ודוחות קריסת מחשב ל-Google."
+ "גע כדי לתקן מילים"
+ "גע במילים שהוזנו כדי לתקן אותן"
+ "עיצוב מקלדת"
+ "מקלדת"
+ "קולי"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ja/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ja/donottranslate-altchars.xml
new file mode 100644
index 00000000..d3beafad
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ja/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóôõöœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ja/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ja/strings.xml
new file mode 100644
index 00000000..f04790e8
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ja/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Androidキーボード"
+ "Androidキーボードの設定"
+ "入力オプション"
+ "キー操作バイブ"
+ "キー操作音"
+ "キー押下時ポップアップ"
+ "入力ミス補正"
+ "入力間違いを自動修正する"
+ "横表示での入力修正"
+ "入力間違いを自動修正する"
+ "入力候補表示"
+ "前の単語を自動修正する"
+ "入力候補表示"
+ "入力候補の設定"
+ "オートコンプリートを使用する"
+ "オートコンプリート"
+ "入力作業スペースを広げる"
+ "横表示では入力候補を表示しない"
+ "自動大文字変換"
+ "英字入力で文頭文字を大文字にする"
+ "句読点を自動入力"
+
+ "クイックフィックス"
+ "よくある誤字・脱字を修正します"
+ "入力候補を表示"
+ "入力時に入力候補を表示する"
+ "オートコンプリート"
+ "誤入力をスペースまたは句読点キーで修正する"
+ "設定キーを表示"
+ "自動"
+ "常に表示"
+ "常に非表示"
+
+
+
+ "バイグラム入力候補表示"
+ "直前の単語から入力候補を予測します"
+
+ "なし"
+ "基本"
+ "高度"
+
+ "%s:保存しました"
+ "キー長押しでアクセント文字を表示(ø、öなど)"
+ "戻るキーでキーボードを閉じます"
+ "数字と記号"
+ "一番左の単語を長押しすると辞書に追加されます"
+ "続けるにはここをタッチ"
+ "タッチしてこのヒントを終了し、入力を開始してください。"
+ "テキストフィールドを選択するとキーボードが表示されます"
+ "キーを長押しするとアクセント付き文字"\n"(ø、ö、ô、óなど)が表示されます"
+ "このキーを押すと、数字/記号入力に切り替わります"
+ "このキーを押すと、文字入力に再度切り替わります"
+ "オートコンプリートなどのキーボードの設定を変更するには、このキーを長押しします"
+ "試してみてください。"
+ "実行"
+ "次へ"
+ "完了"
+ "送信"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "音声入力"
+ "音声入力は現在英語には対応していますが、日本語には対応していません。"
+ "音声入力はGoogleのネットワーク音声認識技術を利用した試験段階の機能です。"
+ "音声入力をOFFにするには、キーボードの設定を開きます。"
+ "音声入力するには、マイクボタンを押すか画面キーボードをスワイプしてください。"
+ "お話しください"
+ "処理中"
+
+ "エラーです。もう一度お試しください。"
+ "接続できませんでした"
+ "音声が長すぎてエラーになりました。"
+ "オーディオエラー"
+ "サーバーエラー"
+ "音声が聞き取れません"
+ "該当なし"
+ "Voice Searchはインストールされていません"
+ "ヒント:"" 音声入力するにはキーボードをスワイプします"
+ "ヒント:"" 次回は句読点として「period」、「comma」、「question mark」などの音声入力を試してみてください。"
+ "キャンセル"
+ "OK"
+ "音声入力"
+
+ "メインキーボード上"
+ "記号キーボード上"
+ "OFF"
+
+
+ "メインキーボードのマイク"
+ "記号キーボードのマイク"
+ "音声入力は無効です"
+
+ "入力後に自動送信する"
+ "検索または次のフィールドに進む際、Enterキーが自動的に押されます。"
+ "キーボードを開く"\n\n"テキストフィールドをタップします。"
+ "キーボードを閉じる"\n\n"[戻る]キーを押します。"
+ "キーを長押しして選択する"\n\n"句読点キーとアクセント文字を表示します。"
+ "キーボードの設定"\n\n"[""?123""]キーを長押しします。"
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "入力方法の選択"
+ "入力言語"
+ "スペースバーで指をスライドさせて言語を変更する"
+ "←保存するにはもう一度タップ"
+ "辞書を利用できます"
+ "ユーザーフィードバックを有効にする"
+ "IMEの機能向上のため、使用統計状況やクラッシュレポートをGoogleに自動送信します。"
+ "タップして語句を修正"
+ "入力した語句をタップして修正"
+ "キーボードテーマ"
+ "キーボード"
+ "音声"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ko/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ko/donottranslate-altchars.xml
new file mode 100644
index 00000000..d3beafad
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ko/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóôõöœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ko/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ko/strings.xml
new file mode 100644
index 00000000..1f966cee
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ko/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android 키보드"
+ "Android 키보드 설정"
+ "입력 옵션"
+ "키를 누를 때 진동 발생"
+ "키를 누를 때 소리 발생"
+ "키를 누를 때 팝업"
+ "입력 오류 수정"
+ "입력 오류 수정 사용"
+ "가로 입력 오류"
+ "입력 오류 수정 사용"
+ "단어 추천"
+ "이전 단어를 자동으로 수정"
+ "단어 추천"
+ "단어 추천 설정"
+ "입력할 때 자동 완성 사용"
+ "자동 완성"
+ "입력란 크기 늘리기"
+ "가로 보기에서 추천 단어 숨기기"
+ "자동 대문자화"
+ "문장의 첫 글자를 대문자로 표시"
+ "자동 구두점 입력"
+
+ "빠른 수정"
+ "자주 발생하는 오타를 수정합니다."
+ "추천 단어 표시"
+ "글자를 입력하는 동안 추천 단어를 표시"
+ "자동 완성"
+ "스페이스바와 문장부호 키로 강조 표시된 단어를 자동 삽입"
+ "설정 키 표시"
+ "자동"
+ "항상 표시"
+ "항상 숨기기"
+
+
+
+ "Bigram 추천"
+ "이전 단어를 사용하여 추천 기능 개선"
+
+ "없음"
+ "기본"
+ "고급"
+
+ "%s: 저장됨"
+ "키를 길게 누르면 악센트(ø, ö 등)가 표시됩니다."
+ "키보드를 닫으려면 언제든지 뒤로 키(↶)를 누르세요."
+ "숫자 및 기호 사용"
+ "맨 왼쪽에 있는 단어를 길게 누르면 사전에 추가됩니다."
+ "계속하려면 힌트를 터치하세요. »"
+ "힌트를 닫고 입력을 시작하려면 여기를 터치하세요."
+ "언제든지 입력란을 터치하면 키보드가 열립니다."
+ "키를 길게 터치하면 악센트"\n"(ø, ö, ô, ó 등)가 표시됩니다."
+ "이 키를 터치하면 숫자 및 기호 키보드로 전환됩니다."
+ "이 키를 다시 터치하면 문자 키보드로 돌아갑니다."
+ "자동 완성과 같은 키보드 설정을 변경하려면 이 키를 길게 터치하세요."
+ "이제 사용해 보세요."
+ "이동"
+ "다음"
+ "완료"
+ "전송"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "음성 입력"
+ "음성 입력은 현재 자국어로 지원되지 않으며 영어로 작동됩니다."
+ "음성 입력은 Google의 네트워크화된 음성 인식을 사용하는 실험적 기능입니다."
+ "음성 입력을 사용하지 않으려면 키보드 설정으로 이동하세요."
+ "음성 입력을 사용하려면 마이크 버튼을 누르거나 터치 키보드 위로 손가락을 미끄러지듯 움직이세요."
+ "지금 말하세요."
+ "인식 중"
+
+ "오류가 발생했습니다. 다시 시도해 보세요."
+ "연결할 수 없습니다."
+ "음성을 너무 많이 입력했습니다."
+ "오디오 문제"
+ "서버 오류"
+ "음성이 인식되지 않았습니다."
+ "일치하는 항목 없음"
+ "음성 검색이 설치되지 않았습니다."
+ "도움말:"" 키보드 위로 손가락을 미끄러지듯 움직이고 나서 말하세요."
+ "도움말:"" 다음 번에는 \'마침표\', \'쉼표\', \'물음표\'와 같은 구두점을 말해 보세요."
+ "취소"
+ "확인"
+ "음성 입력"
+
+ "기본 키보드"
+ "기호 키보드"
+ "사용 안함"
+
+
+ "기본 키보드의 마이크"
+ "기호 키보드의 마이크"
+ "음성 입력이 사용 중지됨"
+
+ "음성을 입력한 다음 자동 제출"
+ "검색하거나 다음 입력란으로 이동할 때 자동으로 Enter 키를 누릅니다."
+ "키보드 열기"\n\n"아무 텍스트 입력란이나 터치하세요."
+ "키보드 닫기"\n\n"\'뒤로\' 키를 누르세요."
+ "키를 길게 눌러 옵션 보기"\n\n"문장 부호 및 악센트 기호 입력창이 열립니다."
+ "키보드 설정"\n\n"?123"" 키를 길게 누르세요."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "입력 방법 선택"
+ "입력 언어"
+ "손가락을 스페이스바에서 미끄러지듯 움직여 언어 변경"
+ "← 저장하려면 다시 터치하세요."
+ "사전 사용 가능"
+ "사용자 의견 사용"
+ "사용 통계 및 충돌 보고서를 Google에 자동으로 전송하여 입력 방법 편집기의 개선에 도움을 줍니다."
+ "터치하여 단어 수정"
+ "입력한 단어를 터치하여 수정"
+ "키보드 테마"
+ "키보드"
+ "음성"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-land/dimens.xml b/src/java/KP2ASoftKeyboard2/java/res/values-land/dimens.xml
new file mode 100644
index 00000000..043f4b36
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-land/dimens.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ 0.250in
+ 0.020in
+ 0.270in
+ 0.0in
+ 38dip
+ 63dip
+ 2dip
+
+
+ 0.459in
+
+ -0.270in
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-lt/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-lt/strings.xml
new file mode 100644
index 00000000..3a806552
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-lt/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "„Android“ klaviatūra"
+ "„Android“ klaviatūros nustatymai"
+ "Įvesties parinktys"
+ "Vibruoti, kai paspaudžiami klavišai"
+ "Klavišo paspaudimo garsas"
+ "Iššoka paspaudus klavišą"
+ "Taisyti rašybos klaidas"
+ "Įgalinti įvesties klaidos taisymą"
+ "Gulsčia įvestis"
+ "Įgalinti įvesties klaidos taisymą"
+ "Žodžių pasiūlymai"
+ "Automatiškai taisyti ankstesnį žodį"
+ "Žodžių pasiūlymai"
+ "Žodžių pasiūlymo nustatymai"
+ "Įgalinti automatinį užbaigimą, kai įvedinėjamas tekstas"
+ "Automatinis užbaigimas"
+ "Padidinti teksto lauko dydį"
+ "Gulsčiame rodinyje slėpti žodžių pasiūlymus"
+ "Automatinis didžiųjų raidžių rašymas"
+ "Sakinio pradžią rašyti didžiąja raide"
+ "Automatiškai dėti skyrybos ženklus"
+
+ "Greiti pataisymai"
+ "Taiso dažnai padarytas rašybos klaidas"
+ "Rodyti pasiūlymus"
+ "Įvedant tekstą pateikti siūlomus žodžius"
+ "Automatiškai užbaigti"
+ "Tarpo klavišas ir skyrybos ženklai automatiškai įterpia paryškintą žodį"
+ "Rodyti nustatymų raktą"
+ "Automatinis"
+ "Visada rodyti"
+ "Visada slėpti"
+
+
+
+ "Digramų pasiūlymai"
+ "Naudoti ankstesnį žodį pasiūlymui patobulinti"
+
+ "Nėra"
+ "Paprastas"
+ "Išplėstinis"
+
+ "%s: išsaugota"
+ "Laikykite klavišą nuspaudę, kad pamatytumėte kirčius (ø, ö ir t. t.)"
+ "Paspauskite klavišą „Atgal“ ↶, kad uždarytumėte klaviatūrą"
+ "Pasiekti skaičius ir simbolius"
+ "Paspauskite ir laikykite nuspaudę kairiausią žodį, kad pridėtumėte jį prie žodyno"
+ "Palieskite šią užuominą, jei norite tęsti »"
+ "Paleiskite čia, kad uždarytumėte šią užuominą ir pradėtumėte įvedinėti tekstą!"
+ "Klaviatūra atsidarys kaskart, kai paliesite teksto lauką"
+ "Palieskite ir laikykite klavišą, kad pamatytumėte kirčius"\n"(ø, ö, ô, ó, and so on)"
+ "Perjunkite į skaičius ir simbolius, paliesdami šį klavišą"
+ "Grįžkite prie raidžių dar kartą paliesdami šį klavišą"
+ "Palieskite ir laikykite šį klavišą, kad pakeistumėte klaviatūros nustatymus, pvz., automatinį užbaigimą"
+ "Išbandykite tai!"
+ "Pradėti"
+ "Kitas"
+ "Atlikta"
+ "Siųsti"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Balso įvestis"
+ "Šiuo metu balso įvestis jūsų kompiuteryje nepalaikoma, bet ji veikia anglų k."
+ "Balso įvestis – tai eksperimentinė funkcija, naudojanti „Google“ tinklo kalbos atpažinimą."
+ "Jei norite išjungti balso įvestį, eikite į klaviatūros nustatymus."
+ "Jei norite naudoti balso įvestį, paspauskite mikrofono mygtuką arba pirštu slyskite ekranine klaviatūra."
+ "Kalbėkite dabar"
+ "Veikia"
+
+ "Klaida. Bandykite dar kartą."
+ "Nepavyko prijungti"
+ "Klaida, per daug kalbos."
+ "Problema su garsu"
+ "Serverio klaida"
+ "Negirdima jokia kalba"
+ "Atitikmenų nerasta"
+ "Balso paieška neįdiegta"
+ "Užuomina:"" perbraukite klaviatūra, kad galėtumėte kalbėti"
+ "Užuomina:"" kitą kartą pabandykite sakyti skyrybos ženklų pavadinimus, pvz., „taškas“, „kablelis“ arba „klaustukas“."
+ "Atšaukti"
+ "Gerai"
+ "Balso įvestis"
+
+ "Pagrindinėje klaviatūroje"
+ "Simbolių klaviatūroje"
+ "Išjungta"
+
+
+ "Pagrindinės klaviatūros mikrofonas"
+ "Mikrofonas simbolių klaviatūroje"
+ "Balso įvestis išjungta"
+
+ "Automatiškai pateikti po balso"
+ "Automatiškai spausti „Įvesti“ ieškant ar einant į kitą lauką."
+ "Atidarykite klaviatūrą"\n\n"Palieskite bet kurį teksto lauką."
+ "Uždarykite klaviatūrą"\n\n"Paspauskite klavišą „Atgal“."
+ "Palieskite ir laikykite klavišą, kad pamatytumėte parinktis"\n\n"Pasiekite skyrybos ženklus ir kirčius."
+ "Klaviatūros nustatymai"\n\n"Palieskite ir laikykite klavišą ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Pasirinkti įvesties metodą"
+ "Įvesties kalbos"
+ "Pirštu slyskite tarpo klavišu, kad pakeistumėte kalbą"
+ "← Kad išsaugotumėte, dar kartą palieskite"
+ "Žodynas galimas"
+ "Įgalinti naudotojų atsiliepimus"
+ "Padėkite patobulinti šią įvesties metodo redagavimo programą automatiškai „Google“ siųsdami naudojimo statistiką ir strigčių ataskaitas."
+ "Jei norite ištais. žodž., paliesk."
+ "Jei norite ištaisyti įvestus žodžius, palieskite juos"
+ "Klaviatūros tema"
+ "klaviatūra"
+ "Voice"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-lv/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-lv/strings.xml
new file mode 100644
index 00000000..3c0be251
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-lv/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android tastatūra"
+ "Android tastatūras iestatījumi"
+ "Ievades opcijas"
+ "Vibrēt, nospiežot taustiņu"
+ "Skaņa, nospiežot taustiņu"
+ "Nospiežot taustiņu, parādīt uznirstošo izvēlni"
+ "Labot drukas kļūdas"
+ "Iespējot ievades kļūdu labošanu"
+ "Ainavas orientācijas ievades kļūdas"
+ "Iespējot ievades kļūdu labošanu"
+ "Vārdu ieteikumi"
+ "Automātiski labot iepriekšējo vārdu"
+ "Vārdu ieteikumi"
+ "Vārdu ieteikumu iestatījumi"
+ "Iespējot automātisko pabeigšanu ievades laikā"
+ "Automātiska pabeigšana"
+ "Palielināt teksta lauka lielumu"
+ "Ainavas skatījumā slēpt vārdu ieteikumus"
+ "Automātiska lielo burtu lietošana"
+ "Sākt teikumu ar lielo burtu"
+ "Automātiska pieturzīmju lietošana"
+
+ "Ātrie labojumi"
+ "Nodrošina izplatītu drukas kļūdu labošanu."
+ "Rādīt ieteikumus"
+ "Ievades laikā attēlot ieteiktos vārdus"
+ "Automātiska pabeigšana"
+ "Automātiski ievietot iezīmēto vārdu, izmantojot atstarpes taustiņu un pieturzīmes"
+ "Rādīt iestatījumu taustiņu"
+ "Automātiski"
+ "Vienmēr rādīt"
+ "Vienmēr slēpt"
+
+
+
+ "Bigram ieteikumi"
+ "Ieteikuma uzlabošanai izmantot iepriekšējo vārdu"
+
+ "Nav"
+ "Pamata"
+ "Uzlabots"
+
+ "%s: saglabāts"
+ "Turiet taustiņu nospiestu, lai skatītu uzsvēruma zīmes (ø, ö u.c.)."
+ "Jebkurā brīdī nospiediet taustiņu Atpakaļ ↶, lai aizvērtu tastatūru."
+ "Piekļūt cipariem un simboliem"
+ "Nospiediet kreisajā pusē esošo vārdu un turiet, lai pievienotu to vārdnīcai."
+ "Pieskarieties šim ieteikumam, lai turpinātu »"
+ "Pieskarieties šeit, lai aizvērtu šo ieteikumu un sāktu ievadi."
+ "Tastatūra tiek atvērta ikreiz, kad pieskaraties teksta laukam""."
+ "Pieskarieties taustiņam un turiet, lai skatītu uzsvara zīmes"\n"(ø, ö, ô, ó utt.)."
+ "Pieskarieties šim taustiņam, lai izmantotu ciparus un simbolus."
+ "Vēlreiz pieskarieties šim taustiņam, lai atkal izmantotu burtus."
+ "Pieskarieties taustiņam un turiet, lai mainītu tastatūras iestatījumus, piemēram, automātisko pabeigšanu."
+ "Izmēģiniet to!"
+ "Sākt"
+ "Tālāk"
+ "Gatavs"
+ "Sūtīt"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Balss ievade"
+ "Balss ievade jūsu valodā pašlaik netiek atbalstīta, taču tā ir pieejama angļu valodā."
+ "Balss ievade ir izmēģinājuma funkcija, kuras pamatā ir Google tīkla runas atpazīšanas līdzeklis."
+ "Lai izslēgtu balss ievadi, atveriet tastatūras iestatījumus."
+ "Lai izmantotu balss ievadi, nospiediet mikrofona pogu vai slidiniet pirkstus pāri ekrāna tastatūrai."
+ "Runājiet!"
+ "Notiek apstrāde"
+
+ "Kļūda. Lūdzu, mēģiniet vēlreiz."
+ "Nevar izveidot savienojumu."
+ "Kļūda, pārāk ilga balss ievade."
+ "Audio problēma"
+ "Servera kļūda"
+ "Nekas nav dzirdams."
+ "Nav atrasta neviena atbilstība."
+ "Balss meklēšana nav instalēta."
+ "Ieteikums:"" slidiniet pirkstu pār tastatūru, lai veiktu balss ievadi."
+ "Ieteikums:"" nākamreiz mēģiniet izrunāt pieturzīmes, piemēram, “punkts”, “komats” vai “jautājuma zīme”."
+ "Atcelt"
+ "Labi"
+ "Balss ievade"
+
+ "Izmantojot galveno tastatūru"
+ "Izmantojot simbolu tastatūru"
+ "Izsl."
+
+
+ "Galvenās tastatūras mikrofons"
+ "Simbolu tastatūras mikrofons"
+ "Balss ievade ir atspējota"
+
+ "Automātiski iesniegt pēc balss ievades"
+ "Automātiski nospiest ievades taustiņu, meklējot vai pārejot uz nākamo lauku."
+ "Tastatūras atvēršana"\n\n"Pieskarieties jebkuram teksta laukam."
+ "Tastatūras aizvēršana"\n\n"Nospiediet taustiņu Atpakaļ."
+ "Pieskarieties taustiņam un turiet, lai skatītu opcijas."\n\n"Piekļūstiet pieturzīmēm un uzsvara zīmēm."
+ "Tastatūras iestatījumi"\n\n"Pieskarieties taustiņam ""?123"" un turiet."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Atlasīt ievades metodi"
+ "Ievades valodas"
+ "Slidiniet pirkstu uz atstarpes taustiņa, lai mainītu valodu"
+ "← Pieskarieties vēlreiz, lai saglabātu"
+ "Ir pieejama vārdnīca."
+ "Iespējot lietotāju atsauksmes"
+ "Palīdziet uzlabot šo ievades metodes redaktoru, automātiski nosūtot lietojuma statistiku un pārskatus par avārijām uzņēmumam Google."
+ "Pieskarties, lai izlabotu vārdus"
+ "Pieskarties ievadītajiem vārdiem, lai tos labotu"
+ "Tastatūras motīvs"
+ "tastatūra"
+ "balss"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-nb/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-nb/donottranslate-altchars.xml
new file mode 100644
index 00000000..6257dfc3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-nb/donottranslate-altchars.xml
@@ -0,0 +1,37 @@
+
+
+
+ äáàâąã
+ 3éèêëę€
+ íìîï8
+ öóòôõ9
+ üúùûū7
+ śšşß
+ ńñň
+ çćč
+ ýÿ6
+ ðď
+ ř4
+ ťþ5
+ źžż
+ ł
+ w
+ œ
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-nb/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-nb/strings.xml
new file mode 100644
index 00000000..c7ccce89
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-nb/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Skjermtastatur"
+ "Innstillinger for skjermtastatur"
+ "Inndataalternativer"
+ "Vibrer ved tastetrykk"
+ "Lyd ved tastetrykk"
+ "Hurtigvindu ved tastetrykk"
+ "Rett opp skrivefeil"
+ "Slå på retting av skrivefeil"
+ "Rett opp skrivefeil i breddeformat"
+ "Slå på retting av skrivefeil"
+ "Autokorrektur"
+ "Autokorriger forrige ord"
+ "Ordforslag"
+ "Innstillinger for ordforslag"
+ "Skru på autofullføring under skriving"
+ "Autofullfør"
+ "Større tekstfelt"
+ "Skjul ordforslag i breddeformat"
+ "Stor forbokstav"
+ "Start automatisk setninger med stor bokstav"
+ "Automatisk punktum"
+
+ "Autokorrektur"
+ "Retter vanlige stavefeil"
+ "Vis forslag"
+ "Vis foreslåtte ord under skriving"
+ "Autofullføring"
+ "Mellomrom og punktum setter automatisk inn valgt ord"
+ "Vis innstillingsnøkkel"
+ "Automatisk"
+ "Vis alltid"
+ "Skjul alltid"
+
+
+
+ "Bigram-forslag"
+ "Bruk forrige ord til å forbedre forslaget"
+
+ "Ingen"
+ "Grunnleggende"
+ "Avansert"
+
+ "%s: Lagret"
+ "Hold en tast nede for å se aksenterte tegn (ø, ö, osv.)"
+ "Trykk tilbakeknappen, ↶, for å lukke tastaturet"
+ "Få tilgang til tall og symboler"
+ "Trykk lenge på ordet lengst til venstre for å legge det til i ordlisten"
+ "Trykk på dette hintet for å forsette »"
+ "Trykk her for å lukke dette hintet og begynne å skrive!"
+ "Tastaturet åpnes når du tar på et tekstfelt"
+ "Trykk på og hold nede en tast for å se aksenter"\n"(ø, ö, ô, ó, osv.)"
+ "Bytt til tall og symboler ved å trykke på denne tasten"
+ "Gå tilbake til bokstaver igjen ved å trykke på denne tasten"
+ "Trykk på og hold nede denne tasten for å endre tastaturinnstillinger, som autofullføring"
+ "Prøv det!"
+ "Gå"
+ "Neste"
+ "Utfør"
+ "Send"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Stemmedata"
+ "Stemmedata håndteres foreløpig ikke på ditt språk, men fungerer på engelsk."
+ "Talekommandoer er en eksperimentell funksjon som bruker Googles nettverksbaserte talegjenkjenning."
+ "Gå til innstillinger for tastatur for å slå av stemmedata."
+ "Du bruker talekommandoer ved å trykke på mikrofonknappen eller skyve fingeren over tastaturet på skjermen."
+ "Snakk nå"
+ "Arbeider"
+
+ "Feil. Prøv på nytt."
+ "Kunne ikke koble til"
+ "Feil – for mye tale"
+ "Lydproblem"
+ "Tjenerfeil"
+ "Ingen tale høres"
+ "Ingen treff"
+ "Talesøk ikke installert"
+ "Hint:"" Sveip over tastaturet for å snakke"
+ "Hint:"" Neste gang kan du prøve å tale inn tegnsettingen ved for eksempel å si «punktum», «komma» eller «spørsmålstegn»."
+ "Avbryt"
+ "OK"
+ "Talekommando"
+
+ "På hovedtastatur"
+ "På talltastatur"
+ "Av"
+
+
+ "Mikrofon på hovedtastatur"
+ "Mikrofon på talltastatur"
+ "Talekommando er deaktivert"
+
+ "Send inn automatisk etter tale"
+ "Trykk Enter automatisk ved søk eller flytting til neste felt."
+ "Åpne tastaturet"\n\n"Trykk på et tekstfelt."
+ "Lukke tastaturet"\n\n"Trykk på tilbaketasten."
+ "Trykk og hold nede en tast for flere valg"\n\n"Få tilgang til skilletegn og aksenter."
+ "Innstillinger for tastatur"\n\n"Trykk på & hold ""?123""-tasten."
+ ".no"
+ ".com"
+ ".net"
+ ".org"
+ ".info"
+ "Velg inndatametode"
+ "Inndataspråk"
+ "Dra fingeren på mellomromstasten for å endre språk"
+ "Trykk på nytt for å lagre"
+ "Ordbok tilgjengelig"
+ "Aktiver brukertilbakemelding"
+ "Ved å sende bruksstatistikk og programstopprapporter til Google automatisk, hjelper du oss med å gjøre redigeringsfunksjonen for denne inndatametoden enda bedre."
+ "Trykk for å endre ord"
+ "Trykk på ord du har skrevet inn, for å endre dem"
+ "Tastaturtema"
+ "tastatur"
+ "stemme"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-nl/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values-nl/bools.xml
new file mode 100644
index 00000000..897f4b3d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-nl/bools.xml
@@ -0,0 +1,22 @@
+
+
+
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-nl/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-nl/donottranslate-altchars.xml
new file mode 100644
index 00000000..d3beafad
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-nl/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóôõöœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-nl/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-nl/strings.xml
new file mode 100644
index 00000000..2dc77c70
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-nl/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android-toetsenbord"
+ "Instellingen voor Android-toetsenbord"
+ "Invoeropties"
+ "Trillen bij toetsaanslag"
+ "Geluid bij toetsaanslag"
+ "Pop-up bij toetsaanslag"
+ "Typefouten corrigeren"
+ "Foutcorrectie tijdens invoer inschakelen"
+ "Invoerfouten in liggende weergave"
+ "Foutcorrectie tijdens invoer inschakelen"
+ "Woordsuggesties"
+ "Het vorige woord automatisch corrigeren"
+ "Woordsuggesties"
+ "Instellingen voor woordsuggesties"
+ "Automatisch voltooien tijdens typen inschakelen"
+ "Automatisch voltooien"
+ "Tekstveld vergroten"
+ "Woordsuggesties verbergen in liggende weergave"
+ "Auto-hoofdlettergebruik"
+ "Hoofdletter gebruiken aan het begin van een zin"
+ "Automatische interpunctie"
+
+ "Snelle oplossingen"
+ "Hiermee worden veelvoorkomende typefouten gecorrigeerd"
+ "Suggesties weergeven"
+ "Voorgestelde woorden weergeven tijdens typen"
+ "Auto-aanvullen"
+ "Gemarkeerd woord automatisch invoegen met spatiebalk en interpunctie"
+ "Instellingscode weergeven"
+ "Automatisch"
+ "Altijd weergeven"
+ "Altijd verbergen"
+
+
+
+ "Digram-suggesties"
+ "Vorig woord gebruiken om suggestie te verbeteren"
+
+ "Geen"
+ "Basis"
+ "Geavanceerd"
+
+ "%s: opgeslagen"
+ "Houd een toets ingedrukt om diakritische tekens weer te geven (ø, ö, enzovoort)"
+ "Druk op elk gewenst moment op de toets Terug ↶ om het toetsenbord te sluiten"
+ "Toegang tot cijfers en symbolen"
+ "Blijf drukken op het meest linkse woord om het toe te voegen aan het woordenboek"
+ "Raak deze tip aan om door te gaan »"
+ "Raak dit punt aan om deze tip te sluiten en te beginnen met typen."
+ "Het toetsenbord wordt geopend wanneer u een tekstveld aanraakt"
+ "Blijf een toets aanraken om diakritische tekens weer te geven"\n"(ø, ö, ô, ó, enzovoort)"
+ "Schakel over naar cijfers en symbolen door deze toets aan te raken"
+ "Ga terug naar letters door deze toets nogmaals aan te raken"
+ "Blijf deze toets aanraken om toetsenbordinstellingen te wijzigen, zoals auto-aanvullen"
+ "Probeer het zelf!"
+ "Start"
+ "Volgende"
+ "Gereed"
+ "Verzenden"
+ "?123"
+ "123"
+ "ABC"
+ "Alt"
+ "Spraakinvoer"
+ "Spraakinvoer wordt momenteel niet ondersteund in uw taal, maar is wel beschikbaar in het Engels."
+ "Spraakinvoer is een experimentele functie met de spraakherkenning van het Google-netwerk."
+ "Als u spraakinvoer wilt uitschakelen, gaat u naar de toetsenbordinstellingen."
+ "Als u spraakinvoer gebruikt, drukt u op de microfoonknop of schuift u uw vinger over het schermtoetsenbord."
+ "Nu spreken"
+ "Wordt uitgevoerd"
+
+ "Fout. Probeer het opnieuw."
+ "Kan geen verbinding maken"
+ "Fout, te lange spraakinvoer."
+ "Audioprobleem"
+ "Serverfout"
+ "Geen spraak te horen"
+ "Geen resultaten gevonden"
+ "Spraakgestuurd zoeken is niet geïnstalleerd"
+ "Hint:"" schuif over het toetsenbord om te spreken"
+ "Hint:"" spreek de volgende keer interpunctie uit, zoals \'period\' (punt), \'comma\' (komma) of \'question mark\' (vraagteken)."
+ "Annuleren"
+ "OK"
+ "Spraakinvoer"
+
+ "Op hoofdtoetsenbord"
+ "Op toetsenbord voor symbolen"
+ "Uit"
+
+
+ "Microfoon op hoofdtoetsenbord"
+ "Microfoon op toetsenbord voor symbolen"
+ "Spraakinvoer is uitgeschakeld"
+
+ "Automatisch verzenden na spraak"
+ "Drukt automatisch op Enter tijdens het zoeken of wanneer u naar het volgende veld wilt gaan."
+ "Het toetsenbord openen"\n\n"Raak een tekstveld aan."
+ "Het toetsenbord sluiten"\n\n"Druk op de terugtoets."
+ "Een toets blijven aanraken voor opties"\n\n"Toegang tot interpunctie en diakritische tekens."
+ "Toetsenbordinstellingen"\n\n"Blijf de toets \'""?123""\' aanraken."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Invoermethode selecteren"
+ "Invoertalen"
+ "Schuif uw vinger over de spatiebalk om de taal te wijzigen"
+ "← Raak nogmaals aan om op te slaan"
+ "Woordenboek beschikbaar"
+ "Gebruikersfeedback inschakelen."
+ "Help deze invoermethode te verbeteren door automatisch gebruiksstatistieken en crashmeldingen naar Google te verzenden."
+ "Raak aan om woorden te corrigeren"
+ "Raak ingevoerde woorden aan om ze te corrigeren"
+ "Toetsenbordthema"
+ "toetsenbord"
+ "spraak"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-pl/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values-pl/bools.xml
new file mode 100644
index 00000000..897f4b3d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-pl/bools.xml
@@ -0,0 +1,22 @@
+
+
+
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-pl/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-pl/donottranslate-altchars.xml
new file mode 100644
index 00000000..da6b5fd5
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-pl/donottranslate-altchars.xml
@@ -0,0 +1,32 @@
+
+
+
+ ą
+ ę3
+ ìíîï8
+ ó9
+ ùúûü7
+ ś
+ ń
+ ć
+ ýÿ6
+ źż
+ ł
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-pl/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-pl/strings.xml
new file mode 100644
index 00000000..8fbb74e3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-pl/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Klawiatura Android"
+ "Ustawienia klawiatury Android"
+ "Opcje wprowadzania"
+ "Wibracja przy naciśnięciu"
+ "Dźwięk przy naciśnięciu"
+ "Powiększ po naciśnięciu"
+ "Popraw błędy pisowni"
+ "Włącz poprawianie błędów wprowadzania"
+ "Błędy wprowadzania w orientacji poziomej"
+ "Włącz poprawianie błędów wprowadzania"
+ "Sugestie słów"
+ "Automatycznie poprawiaj poprzednie słowo"
+ "Sugestie słów"
+ "Ustawienia propozycji słów"
+ "Włącz autouzupełnianie podczas wpisywania"
+ "Autouzupełnianie"
+ "Zwiększ rozmiar pola tekstowego"
+ "Wyłącz sugestie słów w orientacji poziomej"
+ "Wstawiaj wielkie litery"
+ "Zamieniaj na wielką pierwszą literę zdania"
+ "Automatyczna interpunkcja"
+
+ "Szybkie poprawki"
+ "Poprawia częste błędy wpisywania"
+ "Pokaż sugestie"
+ "Wyświetl sugerowane słowa podczas wpisywania"
+ "Autouzupełnianie"
+ "Spacja i znaki przestankowe wstawiają podświetlone słowo"
+ "Pokaż klawisz ustawień"
+ "Automatycznie"
+ "Zawsze pokazuj"
+ "Zawsze ukrywaj"
+
+
+
+ "Sugestie dla bigramów"
+ "Używaj poprzedniego wyrazu, aby polepszyć sugestię"
+
+ "Brak"
+ "Podstawowy"
+ "Zaawansowany"
+
+ "%s : Zapisano"
+ "Przytrzymaj klawisz, aby wyświetlić znaki akcentowane (ą, ó itp.)"
+ "Naciśnij klawisz cofania ↶, aby zamknąć klawiaturę w dowolnym momencie"
+ "Przejdź do cyfr i symboli"
+ "Naciśnij i przytrzymaj słowo po lewej stronie w celu dodania go do słownika"
+ "Dotknij tej podpowiedzi, aby kontynuować »"
+ "Dotknij tutaj, aby zamknąć tę podpowiedź i zacząć pisać!"
+ "Klawiatura jest otwierana po każdym dotknięciu pola tekstowego."
+ "Dotknij i przytrzymaj klawisz, aby wyświetlić znaki akcentowane"\n"(ą, ę, ł, ó itd.)."
+ "Przełącz na cyfry i symbole, dotykając tego klawisza."
+ "Wróć do trybu liter, dotykając ponownie tego klawisza."
+ "Dotknij i przytrzymaj ten klawisz, aby zmienić ustawienia klawiatury, takie jak autouzupełnianie."
+ "Wypróbuj!"
+ "OK"
+ "Dalej"
+ "OK"
+ "Wyślij"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Wprowadzanie głosowe"
+ "Wprowadzanie głosowe obecnie nie jest obsługiwane w Twoim języku, ale działa w języku angielskim."
+ "Wprowadzanie głosowe to funkcja eksperymentalna wykorzystująca funkcję firmy Google umożliwiającą rozpoznawanie mowy przy użyciu sieci."
+ "Aby wyłączyć wprowadzanie głosowe, przejdź do ustawień klawiatury."
+ "Aby skorzystać z wprowadzania głosowego, naciśnij przycisk mikrofonu lub przesuń palcem po klawiaturze ekranowej."
+ "Mów teraz"
+ "W toku"
+
+ "Błąd. Spróbuj ponownie."
+ "Nie można nawiązać połączenia"
+ "Błąd, zbyt długa wypowiedź."
+ "Problem z dźwiękiem"
+ "Błąd serwera"
+ "Nie wykryto mowy"
+ "Brak wyników"
+ "Wyszukiwanie głosowe nie jest zainstalowane"
+ "Wskazówka:"" przesuń palcem po klawiaturze, aby mówić."
+ "Wskazówka:"" następnym razem spróbuj wypowiadać nazwy znaków interpunkcyjnych: „kropka”, „przecinek” lub „pytajnik”."
+ "Anuluj"
+ "OK"
+ "Wprowadzanie głosowe"
+
+ "Na klawiaturze głównej"
+ "Na klawiaturze z symbolami"
+ "Wyłączone"
+
+
+ "Mikrofon na klawiaturze głównej"
+ "Mikrofon na klawiaturze z symbolami"
+ "Wprowadzanie głosowe jest wyłączone"
+
+ "Automatyczne przesyłanie uruchamiane głosem"
+ "Podczas wyszukiwania lub przechodzenia do następnego pola automatycznie naciśnij klawisz Enter."
+ "Otwórz klawiaturę"\n\n"Dotknij dowolnego pola tekstowego."
+ "Zamknij klawiaturę"\n\n"Naciśnij klawisz Wróć."
+ "Dotknij klawisza i przytrzymaj go, aby wyświetlić opcje"\n\n"Dostęp do znaków przestankowych i akcentowanych."
+ "Ustawienia klawiatury"\n\n"Dotknij klawisza ""?123"" i przytrzymaj go."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Wybierz sposób wprowadzania tekstu"
+ "Języki wprowadzania"
+ "Przesuń palcem po spacji, aby zmienić język"
+ "← Dotknij ponownie, aby zapisać"
+ "Słownik dostępny"
+ "Włącz przesyłanie opinii użytkownika"
+ "Pomóż ulepszyć edytor wprowadzania tekstu, automatycznie wysyłając do Google statystyki użycia i raporty o awariach."
+ "Popraw dotknięte słowo"
+ "Dotknięte słowo zostanie poprawione"
+ "Motyw klawiatury"
+ "klawiatura"
+ "głosowe"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-pt-rPT/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-pt-rPT/donottranslate-altchars.xml
new file mode 100644
index 00000000..d3beafad
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-pt-rPT/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóôõöœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-pt-rPT/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-pt-rPT/strings.xml
new file mode 100644
index 00000000..7495b66e
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-pt-rPT/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Teclado do Android"
+ "Definições de teclado do Android"
+ "Opções de introdução"
+ "Vibrar ao primir as teclas"
+ "Som ao premir as teclas"
+ "Mostrar popup ao premir tecla"
+ "Corrigir erros de escrita"
+ "Activar a correcção de erros de entrada"
+ "Erros de entrada na horizontal"
+ "Activar a correcção de erros de entrada"
+ "Sugestões de palavras"
+ "Corrigir automaticamente a palavra anterior"
+ "Sugestões de palavras"
+ "Definições de sugestão de palavras"
+ "Activar a conclusão automática durante a escrita"
+ "Conclusão automática"
+ "Aumentar o tamanho do campo de texto"
+ "Ocultar sugestões de palavras na vista horizontal"
+ "Letras maiúsculas automáticas"
+ "Colocar inicial maiúscula no início de uma frase"
+ "Pontuação automática"
+
+ "Correcções rápidas"
+ "Corrige os erros de escrita comuns"
+ "Mostrar sugestões"
+ "Apresentar sugestões de palavras ao escrever"
+ "Conclusão automática"
+ "A barra de espaços e a pontuação inserem automaticamente uma palavra realçada"
+ "Mostrar tecla das definições"
+ "Automático"
+ "Mostrar sempre"
+ "Ocultar sempre"
+
+
+
+ "Sugestões Bigram"
+ "Utilizar a palavra anterior para melhorar a sugestão"
+
+ "Nenhum"
+ "Básico"
+ "Avançados"
+
+ "%s: guardada"
+ "Mantenha uma tecla premida para ver os acentos (ø, ö, etc.)"
+ "Prima a tecla de retrocesso ↶ para fechar o teclado a qualquer momento"
+ "Aceder a números e símbolos"
+ "Prima e mantenha premida a palavra mais à esquerda para a adicionar ao dicionário"
+ "Toque nesta sugestão para continuar »"
+ "Toque aqui para fechar esta sugestão e começar a escrever!"
+ "O teclado abre quando tocar num campo de texto"
+ "Mantenha premida uma tecla para ver os acentos"\n"(ø, ö, ô, ó, etc.)"
+ "Mude para números e símbolos tocando nesta tecla"
+ "Regresse às letras tocando novamente nesta tecla"
+ "Mantenha premida esta tecla para alterar definições do teclado, tais como a conclusão automática"
+ "Experimente!"
+ "Ir"
+ "Seguinte"
+ "Feito"
+ "Enviar"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Entrada de voz"
+ "Actualmente, a entrada de voz não é suportada para o seu idioma, mas funciona em inglês."
+ "A entrada de voz é uma funcionalidade experimental que utiliza o reconhecimento de voz em rede da Google."
+ "Para desactivar a entrada de voz, aceda às definições do teclado."
+ "Para utilizar a entrada de voz, prima o botão do microfone ou deslize o dedo no teclado do ecrã."
+ "Falar agora"
+ "A executar"
+
+ "Erro. Tente novamente."
+ "Não foi possível ligar"
+ "Erro, discurso demasiado longo."
+ "Problema de áudio"
+ "Erro no servidor"
+ "Nenhuma voz ouvida"
+ "Não foram encontradas correspondências"
+ "Pesquisa de voz não instalada"
+ "Sugestão:"" Deslize no teclado para falar"
+ "Sugestão:"" Da próxima vez, experimente dizer a pontuação como \"ponto final\", \"vírgula\" ou \"ponto de interrogação\"."
+ "Cancelar"
+ "OK"
+ "Entrada de voz"
+
+ "No teclado principal"
+ "No teclado de símbolos"
+ "Desactivada"
+
+
+ "Microfone no teclado principal"
+ "Microfone no teclado de símbolos"
+ "A entrada de voz está desactivada"
+
+ "Enviar automaticamente depois da voz"
+ "Premir automaticamente ENTER ao pesquisar ou avançar para o campo seguinte."
+ "Abra o teclado"\n\n"Toque em qualquer campo de texto."
+ "Feche o teclado"\n\n"Prima a tecla \"Anterior\"."
+ "Mantenha premida uma tecla para as opções"\n\n"Aceder a pontuação e acentos."
+ "Definições do teclado"\n\n"Mantenha premida a tecla ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Seleccionar método de entrada"
+ "Idiomas de entrada"
+ "Deslize o dedo pela barra de espaço para alterar o idioma"
+ "← Toque novamente para guardar"
+ "Dicionário disponível"
+ "Activar comentários do utilizador"
+ "Envie automaticamente estatísticas de utilização e relatórios de falhas para a Google e ajude-nos a melhor este editor de método de introdução."
+ "Tocar para corrigir palavras"
+ "Tocar nas palavras introduzidas para as corrigir"
+ "Tema do teclado"
+ "teclado"
+ "voz"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-pt/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-pt/donottranslate-altchars.xml
new file mode 100644
index 00000000..d3beafad
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-pt/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóôõöœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-pt/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-pt/strings.xml
new file mode 100644
index 00000000..d359ce93
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-pt/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Teclado Android"
+ "Configurações de teclado Android"
+ "Opções de entrada"
+ "Vibrar ao tocar a tecla"
+ "Som ao tocar a tecla"
+ "Exibir pop-up ao digitar"
+ "Corrigir erros de digitação"
+ "Ativar a correção de erro de entrada"
+ "Erros de entrada de paisagem"
+ "Ativar a correção de erro de entrada"
+ "Sugestões de palavra"
+ "Corrigir automaticamente a palavra anterior"
+ "Sugestões de palavra"
+ "Configurações de sugestão de palavra"
+ "Ativar a conclusão automática durante a digitação"
+ "Conclusão automática"
+ "Aumentar o tamanho do arquivo de texto"
+ "Ocultar sugestões de palavra na visualização da paisagem"
+ "Capitaliz. automática"
+ "Colocar em maiúscula o início de uma frase"
+ "Pontuação automática"
+
+ "Reparos rápidos"
+ "Corrige erros comuns de digitação"
+ "Mostrar sugestões"
+ "Exibir sugestões de palavras durante a digitação"
+ "Conclusão automática"
+ "Barra de espaço e pontuação inserem a palavra destacada"
+ "Mostrar tecla de config."
+ "Automático"
+ "Mostrar sempre"
+ "Sempre ocultar"
+
+
+
+ "Sugestões de bigrama"
+ "Usar palavra anterior para melhorar a sugestão"
+
+ "Nenhum"
+ "Básico"
+ "Avançado"
+
+ "%s : Salvo"
+ "Segure uma tecla pressionada para ver os acentos (ø, ö, etc.)"
+ "Apertar a tecla voltar ↶ para fechar o teclado, em qualquer ponto"
+ "Acessar números e símbolos"
+ "Pressione e segure a palavra mais à esquerda para adicioná-la ao dicionário"
+ "Toque nesta dica para continuar »"
+ "Toque aqui para fechar esta dica e começar a digitar!"
+ "O teclado abre toda vez que você tocar em um campo de texto"
+ "Tocar e segurar uma tecla para visualizar acentos"\n"(ø, ö, ô, ó e assim por diante)"
+ "Alternar para números e símbolos tocando nessa tecla"
+ "Voltar às letras tocando novamente nessa tecla"
+ "Tocar e segurar esta tecla para alterar as configurações do teclado, como a conclusão automática"
+ "Experimente!"
+ "Ir"
+ "Avançar"
+ "Feito"
+ "Enviar"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Entrada de voz"
+ "A entrada de voz não é suportada no momento para o seu idioma, mas funciona em inglês."
+ "A entrada de voz é um recurso experimental que usa o reconhecimento de fala de rede do Google."
+ "Para desativar a entrada de voz, vá para as configurações do teclado."
+ "Para usar a entrada de voz, pressione o botão com o microfone ou deslize o dedo sobre o teclado na tela."
+ "Fale agora"
+ "Trabalhando"
+
+ "Erro. Tente novamente."
+ "Não foi possível conectar"
+ "Erro, fala muito longa."
+ "Problema com o áudio"
+ "Erro do servidor"
+ "Nenhuma fala ouvida"
+ "Não há resultados compatíveis"
+ "A pesquisa por voz não está instalada"
+ "Dica:"" Deslize sobre o teclado para falar"
+ "Dica:"" Da próxima vez, tente falar o nome da pontuação como \"ponto\", \"vírgula\" ou \"ponto de interrogação\"."
+ "Cancelar"
+ "OK"
+ "Entrada de voz"
+
+ "No teclado principal"
+ "No teclado de símbolos"
+ "Desativado"
+
+
+ "Microfone no teclado principal"
+ "Microfone no teclado de símbolos"
+ "Entrada de voz desativada"
+
+ "Enviar automaticamente depois de falar"
+ "Pressione Enter automaticamente ao pesquisar ou ir para o próximo campo."
+ "Abra o teclado"\n\n"Toque em qualquer campo de texto."
+ "Feche o teclado"\n\n"Pressione a tecla Voltar."
+ "Toque e mantenha pressionada uma tecla para ver as opções"\n\n"Acesse a pontuação e as pronúncias."
+ "Configurações de teclado"\n\n"Toque e mantenha pressionada a tecla ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Selecionar método de entrada"
+ "Idiomas de entrada"
+ "Deslize o dedo na barra de espaços para alterar o idioma"
+ "← Toque novamente para salvar"
+ "Dicionário disponível"
+ "Ativar comentário do usuário"
+ "Ajude a melhorar este editor de método de entrada enviando automaticamente ao Google estatísticas de uso e relatórios de falhas."
+ "Tocar para corrigir"
+ "Toque as palavras para corrigi-las"
+ "Tema do teclado"
+ "teclado"
+ "voz"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-rm/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-rm/donottranslate-altchars.xml
new file mode 100644
index 00000000..f17026fa
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-rm/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ 3èéêë
+ ìíîï8
+ òóöôõœø9
+ ùúûü7
+ §ß
+ ñ
+ ç
+ ýÿ6
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-rm/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-rm/strings.xml
new file mode 100644
index 00000000..47afae9a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-rm/strings.xml
@@ -0,0 +1,148 @@
+
+
+
+
+ "Tastatura Android"
+ "Parameters da la tastatura Android"
+
+
+ "Vibrar cun smatgar in buttun"
+ "Tun cun smatgar in buttun"
+ "Pop-up cun smatgar ina tasta"
+ "Curreger sbagls d\'endataziun"
+ "Activar la correctura da sbagls d\'endataziun"
+ "Sbagls d\'endataziun en il format orizontal"
+ "Activar la correctura da sbagls d\'endataziun"
+ "Propostas da pleds"
+ "Curreger automaticamain il pled precedent"
+ "Propostas da pleds"
+ "Parameters da las propostas per pleds"
+ "Activar la cumplettaziun automatica durant l\'endataziun"
+ "Cumplettaziun automatica"
+ "Engrondir il champ da text"
+ "Zuppentar propostas da pleds en il format orizontal"
+ "Maiusclas automaticas"
+ "Scriver grond l\'entschatta da mintga frasa"
+ "Interpuncziun automatica"
+
+ "Correcturas sveltas"
+ "Curregia sbagls da tippar currents"
+ "Mussar las propostas"
+ "Mussar pleds proponids durant l\'endataziun"
+ "Cumplettaziun automatica"
+ "Inserir auto. il pled marcà cun la tasta da vid/interpuncziun"
+
+
+
+
+
+
+
+
+
+
+
+ "Propostas da tip bigram"
+ "Meglierar la proposta cun agid dal pled precedent"
+
+ "Nagin"
+ "Simpel"
+ "Avanzà"
+
+ "%s : Memorisà"
+ "\"Tegnair smatgà per mussar ils accents (à, é, etc.)\""
+ "Smatgar ↶ per serrar la tastatura"
+ "Acceder a cifras e simbols"
+ "Smatgar ditg sin il pled dal tut a sanestra per l\'agiuntar al dicziunari"
+ "Tutgar quest commentari per cuntinuar »"
+ "\"Tutgar qua, per serrar quest commentari e cumenzar a tippar!\""
+ "La tastatura vegn adina averta sche Vus tutgais in champ da text."
+ "\"""Tegnai smatgà ina tasta per mussar ils segns spezials"\n"(ø, ö, ô, ó etc.).""\""
+ "Midai a numers e simbols cun tutgar quest buttun."
+ "Turnai a letras cun smatgar danovamain quest buttun."
+ "\"""Tegnai smatgà quest buttun per midar ils parameters da tastatura, sco p. ex. la cumplettaziun automatica.""\""
+ "Empruvai!"
+ "Dai"
+ "Vinavant"
+ "Finì"
+ "Trametter"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Cumonds vocals"
+ "\"Cumonds vocals en Vossa lingua na vegnan actualmain betg sustegnids, ma la funcziun è disponibla per englais.\""
+ "Ils cumonds vocals èn ina funcziunalitad experimentala che utilisescha la renconuschientscha vocala da rait da Google."
+ "\"Per deactivar ils cumonds vocals, avri ils parameters da tastatura.\""
+ "\"Per utilisar ils cumonds vocals, smatgai il buttun dal microfon u stritgai cun il det sur la tastatura dal visur.\""
+ "Ussa discurrer"
+ "Operaziun en progress"
+
+ "Errur. Empruvai anc ina giada."
+ "Impussibel da connectar."
+ "Errur - discurrì memia ditg."
+ "Problem audio"
+ "Errur dal server"
+ "Betg udì ina frasa vocala"
+ "Betg chattà correspundenzas"
+ "Betg installà la tschertga vocala"
+ "Commentari:"" Stritgai cun il det sur la tastatura per discurrer."
+ "\"""Commentari:"" Empruvai la proxima giada d\'agiuntar segns d\'interpuncziun sco \"\"punct\"\", \"\"comma\"\" u \"\"segn da dumonda\"\" cun cumonds vocals.\""
+ "Interrumper"
+ "OK"
+ "Cumonds vocals"
+
+ "Sin la tastatura principala"
+ "Sin la tastatura da simbols"
+ "Deactivà"
+
+
+ "Microfon sin la tastatura principala"
+ "Microfon sin la tastatura da simbols"
+ "Ils cumonds vocals èn deactivads"
+
+ "Trametter automaticamain suenter il cumond vocal"
+ "Smatgai sin la tasta enter sche Vus exequis ina tschertga u siglis al proxim champ."
+ "Avrir la tastatura"\n\n"Tutgai inqual champ da text."
+ "\"""Serrar la tastatura"\n\n"Smatgai il buttun \"\"Enavos\"\".\""
+ "Tutgar e tegnair smatgà in buttun per acceder a las opziuns"\n\n"Accedi a segns d\'interpuncziun ed accents."
+ "Parameters da tastatura"\n\n"Tutgai e tegnai smatgà il buttun ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+
+
+ "Linguas da cumonds vocals"
+ "Stritgar cun il det sur la tasta da vid per midar la lingua"
+ "← Tippar danovamain per memorisar"
+ "Dicziunari disponibel"
+ "Activar il feedback da l\'utilisader"
+ "Gidai a meglierar quest editur da la metoda d\'endataziun cun trametter automaticamain datas statisticas davart l\'utilisaziun e rapports da collaps a Google."
+
+
+
+
+ "Design da la tastatura"
+ "tastatura"
+ "vusch"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ro/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ro/strings.xml
new file mode 100644
index 00000000..37fdeb4c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ro/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Tastatură Android"
+ "Setările tastaturii Android"
+ "Opţiuni de introducere text"
+ "Vibrare la apăsarea tastei"
+ "Sunet la apăsarea tastei"
+ "Fereastră pop-up la apăsarea tastei"
+ "Corectaţi erorile de dactilografiere"
+ "Activaţi corectarea erorii de intrare"
+ "Erori de introducere în modul peisaj"
+ "Activaţi corectarea erorii de intrare"
+ "Sugestii de cuvinte"
+ "Corecţie automată a cuvântului anterior"
+ "Sugestii de cuvinte"
+ "Setările sugestiei de cuvinte"
+ "Activaţi completarea automată în timpul introducerii textului"
+ "Completare automată"
+ "Măriţi dimensiunea câmpului text"
+ "Ascundeţi sugestiile de cuvinte în vizualizarea de tip peisaj"
+ "Auto-capitalizare"
+ "Doresc să se scrie cu majusculă începutul propoziţiilor"
+ "Punctuaţie automată"
+
+ "Remedieri rapide"
+ "Corectează greşelile introduse frecvent"
+ "Afişaţi sugestiile"
+ "Afişare sugestii de cuvinte în timpul introducerii de text"
+ "Completare automată"
+ "Bara de spaţiu şi punctuaţia inserează automat un cuvânt evidenţiat"
+ "Afişaţi tasta setări"
+ "Automat"
+ "Afişaţi întotdeauna"
+ "Ascundeţi întotdeauna"
+
+
+
+ "Sugestii pentru cuvinte de două litere"
+ "Utilizaţi cuvântul anterior pentru a îmbunătăţi sugestia"
+
+ "Niciunul"
+ "De bază"
+ "Avansat"
+
+ "%s: salvat"
+ "Ţineţi o tastă apăsată pentru a vedea accentele (ø, ö, etc.)"
+ "Apăsaţi tasta Înapoi ↶ pentru a închide oricând tastatura"
+ "Accesaţi numere şi simboluri"
+ "Apăsaţi şi ţineţi apăsat pe cuvântul cel mai din stânga, pentru a-l adăuga la dicţionar"
+ "Atingeţi acest indiciu pentru a continua »"
+ "Atingeţi aici pentru a închide acest indiciu şi începeţi să introduceţi text!"
+ "Tastatura se deschide de fiecare dată când atingeţi un câmp text"
+ "Atingeţi şi ţineţi apăsată o tastă pentru a vizualiza accentele"\n"(ø, ö, ô, ó etc.)"
+ "Comutaţi între numere şi simboluri atingând această tastă"
+ "Reveniţi la litere prin atingerea acestei taste din nou"
+ "Apăsaţi şi ţineţi apăsată această tastă pentru a schimba setările tastaturii, cum ar fi completarea automată"
+ "Încercaţi!"
+ "OK"
+ "Înainte"
+ "Terminat"
+ "Trimiteţi"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Intrare voce"
+ "Intrarea vocală nu este acceptată în prezent pentru limba dvs., însă funcţionează în limba engleză."
+ "Intrarea vocală este o funcţie experimentală ce utilizează recunoaşterea vocală în reţea oferită de Google."
+ "Pentru a dezactiva intrarea vocală, accesaţi setările tastaturii."
+ "Pentru a utiliza intrarea vocală, apăsaţi butonul de microfon sau glisaţi degetul de-a lungul tastaturii de pe ecran."
+ "Vorbiţi acum"
+ "Se analizează"
+
+ "Eroare. Încercaţi din nou."
+ "Conectare imposibilă"
+ "Eroare, discurs prea lung."
+ "Problemă audio"
+ "Eroare de server"
+ "Nu s-a auzit vorbirea"
+ "Nicio potrivire"
+ "Căutarea vocală nu este instalată"
+ "Indiciu:"" glisaţi de-a lungul tastaturii pentru a vorbi"
+ "Indiciu:"" data viitoare, încercaţi să rostiţi şi punctuaţia, cum ar fi „punct”, „virgulă”, sau „semn de întrebare”."
+ "Anulaţi"
+ "OK"
+ "Intrare voce"
+
+ "Pe tastatura principală"
+ "Pe tastatura de simboluri"
+ "Dezactivat"
+
+
+ "Microfon pe tastatura principală"
+ "Microfon pe tastatura de simboluri"
+ "Intrarea vocală este dezactivată"
+
+ "Trimitere automată după intrarea vocală"
+ "Apăsaţi automat tasta Enter atunci când se face o căutare sau când se trece la câmpul următor."
+ "Deschideţi tastatura"\n\n"Atingeţi orice câmp de text."
+ "Închideţi tastatura"\n\n"Apăsaţi pe tasta Înapoi."
+ "Atingeţi şi ţineţi apăsată o tastă pentru opţiuni"\n\n"Accesaţi punctuaţia şi accentele."
+ "Setările tastaturii"\n\n"Atingeţi şi ţineţi apăsată tasta ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Selectaţi metoda de introducere a textului"
+ "Selectaţi limba"
+ "Glisaţi degetul pe bara de spaţiu pentru a schimba limba"
+ "← Atingeţi din nou pentru a salva"
+ "Dicţionar disponibil"
+ "Activaţi feedback de la utilizatori"
+ "Ajutaţi la îmbunătăţirea acestui instrument de editare a metodelor de introducere a textului trimiţând în mod automat la Google statistici de utilizare şi rapoarte de blocare."
+ "Atingeţi pentru a corecta cuvintele"
+ "Atingeţi cuvintele introduse pentru a le corecta"
+ "Temă pentru tastatură"
+ "tastatură"
+ "voce"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ru/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ru/donottranslate-altchars.xml
new file mode 100644
index 00000000..46241a62
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ru/donottranslate-altchars.xml
@@ -0,0 +1,32 @@
+
+
+
+ àáâãäåæ
+ èéêë
+ ìíîï
+ òóôõöœø
+ ùúûü
+ §ß
+ ñ
+ ç
+ ýÿ
+ ё5
+ ъ
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-ru/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-ru/strings.xml
new file mode 100644
index 00000000..0b70f0b3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-ru/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Клавиатура Android"
+ "Настройки клавиатуры Android"
+ "Параметры ввода"
+ "Виброотклик клавиш"
+ "Звук клавиш"
+ "Увеличение нажатых"
+ "Исправлять опечатки"
+ "Включить исправление ошибок при вводе"
+ "Ошибки при вводе в горизонтальной ориентации"
+ "Включить исправление ошибок при вводе"
+ "Предложение слов"
+ "Автоматически исправлять предыдущее слово"
+ "Предложение слов"
+ "Настройки подсказок"
+ "Включить автоматическое завершение слов при вводе"
+ "Автоматическое завершение"
+ "Увеличить размер текстового поля"
+ "Скрывать предложение слов в горизонтальной ориентации"
+ "Заглавные автоматически"
+ "Делать заглавной первую букву предложения"
+ "Автопунктуация"
+
+ "Быстрое исправление"
+ "Исправлять распространенные опечатки"
+ "Предлагать варианты"
+ "Предлагать варианты слов во время ввода"
+ "Автозавершение"
+ "При нажатии пробела вставлять предложенное слово"
+ "Кнопка настроек"
+ "Автоматически"
+ "Всегда показывать"
+ "Всегда скрывать"
+
+
+
+ "Биграммные подсказки"
+ "Используйте предыдущее слово, чтобы исправить подсказку"
+
+ "Нет"
+ "Основной"
+ "Дополнительно"
+
+ "%s: сохранено"
+ "Удерживайте клавишу, чтобы увидеть варианты с диакритическими знаками (ø, ö и т.д.)"
+ "Нажмите клавишу \"Назад\" ↶, чтобы закрыть клавиатуру в любой момент"
+ "Открыть цифры и символы"
+ "Нажмите и удерживайте слово слева, чтобы добавить его в словарь"
+ "Чтобы продолжить, нажмите на эту подсказку »"
+ "Нажмите здесь, чтобы закрыть подсказку и начать вводить текст."
+ "Клавиатура появляется автоматически при касании текстового поля"
+ "Нажмите и удерживайте клавишу для отображения вариантов с диакритическими знаками "\n"(ø, ö, ô, ó и т. п.)"
+ "Для переключения между вводом цифр и символов используйте эту клавишу"
+ "Чтобы вернуться к буквенной клавиатуре, снова нажмите на эту клавишу"
+ "Чтобы изменить настройки клавиатуры (такие как автозавершение), нажмите и удерживайте эту клавишу"
+ "Попробуйте!"
+ "Поиск"
+ "Далее"
+ "Готово"
+ "Отправить"
+ "?123"
+ "123"
+ "АБВ"
+ "ALT"
+ "Голосовой ввод"
+ "В настоящее время функция голосового ввода не поддерживает ваш язык, но вы можете пользоваться ей на английском."
+ "Голосовой ввод – экспериментальная функция на основе технологии сетевого распознавания речи от Google."
+ "Функция голосового ввода отключается в настройках клавиатуры."
+ "Чтобы использовать голосовой ввод, нажмите кнопку микрофона или проведите пальцем по экранной клавиатуре."
+ "Говорите"
+ "Обработка запроса"
+
+ "Ошибка. Повторите попытку."
+ "Ошибка подключения"
+ "Слишком длинная фраза"
+ "Неполадка со звуком"
+ "Ошибка сервера"
+ "Речи не слышно"
+ "Соответствий не найдено"
+ "Голосовой поиск не установлен"
+ "Совет"". Проведите пальцем по клавиатуре для голосового ввода."
+ "Совет"". В следующий раз проговаривайте знаки препинания, например \"точка\", \"запятая\", \"вопросительный знак\"."
+ "Отмена"
+ "ОК"
+ "Голосовой ввод"
+
+ "Значок на основной клавиатуре"
+ "Значок на клавиатуре символов"
+ "Отключить голосовой ввод"
+
+
+ "Значок на основной клавиатуре"
+ "Значок на клавиатуре символов"
+ "Голосовой ввод отключен"
+
+ "Автоматически отправлять по окончании голосового ввода"
+ "Автоматически нажимать \"Ввод\" при поиске или переходе к следующему полю."
+ "Открытие клавиатуры"\n\n"Нажмите на любое текстовое поле."
+ "Закрытие клавиатуры"\n\n"Нажмите клавишу \"Назад\"."
+ "Нажмите и удерживайте клавишу для вызова параметров"\n\n"Доступ к пунктуационным и диакритическим знакам."
+ "Настройки клавиатуры"\n\n"Нажмите и удерживайте клавишу ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Выбрать способ ввода"
+ "Языки ввода"
+ "Для изменения языка проведите пальцем по пробелу"
+ "← Нажмите еще раз, чтобы сохранить"
+ "Доступен словарь"
+ "Включить отправку сведений"
+ "Помогите усовершенствовать редактор способа ввода, разрешив отправку статистики и отчетов о сбоях в Google."
+ "Исправление нажатием"
+ "Нажмите на слово, чтобы исправить его"
+ "Вид клавиатуры"
+ "клавиатура"
+ "голосовой"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-sk/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-sk/strings.xml
new file mode 100644
index 00000000..89e3bea2
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-sk/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Klávesnica Android"
+ "Nastavenia klávesnice Android"
+ "Možnosti zadávania textu a údajov"
+ "Pri stlačení klávesu vibrovať"
+ "Zvuk pri stlačení klávesu"
+ "Zobraziť znaky pri stlačení klávesu"
+ "Opravovať preklepy"
+ "Povoliť opravu chýb vstupu"
+ "Chyby vstupu v zobrazení na šírku"
+ "Povoliť opravu chýb vstupu"
+ "Návrhy slov"
+ "Automaticky opraviť predchádzajúce slovo"
+ "Návrhy slov"
+ "Nastavenia návrhov slov"
+ "Povoliť automatické dokončovanie pri písaní"
+ "Automatické dokončovanie"
+ "Zväčšiť textové pole"
+ "Skryť návrhy slov v zobrazení na šírku"
+ "Veľké písmená automaticky"
+ "Začať vetu veľkým písmenom"
+ "Automatická interpunkcia"
+
+ "Rýchle opravy"
+ "Opravuje najčastejšie chyby pri písaní"
+ "Zobraziť návrhy"
+ "Zobrazovať navrhované slová počas písania"
+ "Automatické dokončovanie"
+ "Stlačením medzerníka alebo interpunkčného znamienka automaticky vložíte zvýraznené slovo."
+ "Zobraziť kláves Nastavenia"
+ "Automaticky"
+ "Vždy zobrazovať"
+ "Vždy skrývať"
+
+
+
+ "Návrh Bigram"
+ "Na zlepšenie návrhu použiť predchádzajúce slovo"
+
+ "Žiadne"
+ "Základné"
+ "Rozšírené"
+
+ "%s : Uložené"
+ "Podržaním klávesu zobrazíte diakritiku (á, ž atď.)"
+ "Stlačením klávesu Späť ↶ môžete klávesnicu kedykoľvek zavrieť."
+ "Prístup k číslam a symbolom"
+ "Stlačením a podržaním slova úplne vľavo toto slovo pridáte do slovníka."
+ "Ak chcete pokračovať, dotknite sa tohto tipu »"
+ "Ak chcete tento tip zavrieť a začať písať, dotknite sa tu."
+ "Klávesnica sa otvorí vždy, keď sa dotknete textového poľa."
+ "Pridržaním klávesu zobrazíte diakritiku"\n"(ó, ø, ö, ô apod.)"
+ "Ak chcete prepnúť na režim zadávania číslic a symbolov, dotknite sa tohto klávesu."
+ "Ak chcete prejsť späť na zadávanie písmen, dotknite sa znova tohto klávesu."
+ "Pridržaním tohto klávesu zmeníte nastavenia klávesnice (napr. automatické dokončovanie)."
+ "Skúste si to."
+ "Hľadať"
+ "Ďalej"
+ "Hotovo"
+ "Odoslať"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Hlasový vstup"
+ "Pre váš jazyk aktuálne nie je hlasový vstup podporovaný, ale funguje v angličtine."
+ "Hlasový vstup je experimentálna funkcia, ktorá využíva sieťové rozpoznanie reči spoločnosti Google."
+ "Ak chcete vypnúť hlasový vstup, prejdite na nastavenia klávesnice."
+ "Ak chcete použiť hlasový vstup, stlačte tlačidlo mikrofónu alebo prejdite prstom po klávesnici na obrazovke."
+ "Hovorte"
+ "Prebieha spracovanie"
+
+ "Chyba. Skúste to znova."
+ "Pripojenie sa nepodarilo."
+ "Chyba, reč je príliš dlhá."
+ "Problém so zvukom"
+ "Chyba servera"
+ "Nebola zistená žiadna reč."
+ "Nenašli sa žiadne zhody"
+ "Hlasové vyhľadávanie nie je nainštalované"
+ "Tip:"" Ak chcete aktivovať hlasový vstup, prejdite prstom po klávesnici."
+ "Tip:"" Nabudúce skúste vysloviť interpunkciu, napríklad „bodka“, „čiarka“ alebo „otáznik“."
+ "Zrušiť"
+ "OK"
+ "Hlasový vstup"
+
+ "Na hlavnej klávesnici"
+ "Na klávesnici so symbolmi"
+ "Vypnuté"
+
+
+ "Mikrofón na hlavnej klávesnici"
+ "Mikrofón na klávesnici so symbolmi"
+ "Hlasový vstup je zakázaný"
+
+ "Po hlasovom vstupe automaticky odoslať"
+ "Pri vyhľadávaní alebo prechode na ďalšie pole automaticky stlačiť kláves Enter."
+ "Otvorte klávesnicu"\n\n"Dotknite sa ľubovoľného textového poľa."
+ "Zatvorte klávesnicu"\n\n"Stlačte tlačidlo Späť."
+ "Dotknutím a pridržaním klávesu zobrazíte možnosti"\n\n"Prístup k interpunkčným znamienkam a diakritike."
+ "Nastavenia klávesnice"\n\n"Dotknite sa klávesu ""?123"" a podržte ho."
+ ".com"
+ ".sk"
+ ".org"
+ ".net"
+ ".eu"
+ "Výber metódy vstupu"
+ "Jazyky vstupu"
+ "Jazyk môžete zmeniť posunutím prsta po medzerníku."
+ "← Ďalším dotykom slovo uložíte"
+ "K dispozícii je slovník"
+ "Povoliť spätnú väzbu od používateľov"
+ "Automatickým zasielaním štatistík o využívaní editora metódy vstupu a správ o jeho zlyhaní do služby Google môžete prispieť k vylepšeniu tohto nástroja."
+ "Dotykom opravíte slová"
+ "Dotykom zadaným slov ich opravíte"
+ "Motív klávesnice"
+ "klávesnica"
+ "hlasová"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-sl/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-sl/strings.xml
new file mode 100644
index 00000000..090e0b92
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-sl/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Tipkovnica Android"
+ "Nastavitve tipkovnice Android"
+ "Možnosti vnosa"
+ "Vibriranje ob pritisku tipke"
+ "Zvok ob pritisku tipke"
+ "Pojavno okno ob pritisku tipke"
+ "Popravljanje tipkarskih napak"
+ "Omogoči popravljanje napak pri vnosu"
+ "Napake pri vnosu v ležečem položaju"
+ "Omogoči popravljanje napak pri vnosu"
+ "Predlogi besed"
+ "Samodejno popravi prejšnjo besedo"
+ "Predlogi besed"
+ "Nastavitve za predlaganje besede"
+ "Omogoči samodokončanje med tipkanjem"
+ "Samodokončanje"
+ "Povečaj velikost besedilnega polja"
+ "Skrij predloge besed v ležečem pogledu"
+ "Samodejne velike začetnice"
+ "Napiši začetek stavka z veliko začetnico"
+ "Samodejno vstavljanje ločil"
+
+ "Hitri popravki"
+ "Popravi pogoste tipkarske napake"
+ "Pokaži predloge"
+ "Prikaži predlagane besede med tipkanjem"
+ "Samodokončanje"
+ "Preslednica in ločila samodejno vnesejo označeno besedo"
+ "Pokaži tipko za nastavitve"
+ "Samodejno"
+ "Vedno pokaži"
+ "Vedno skrij"
+
+
+
+ "Bigramni predlogi"
+ "Predlog izboljšaj s prejšnjo besedo"
+
+ "Brez"
+ "Osnovni"
+ "Dodatno"
+
+ "%s: shranjeno"
+ "Držite tipko, da prikažete poudarke (ø, ö itd.)"
+ "Kadar koli lahko pritisnete tipko »Nazaj« ↶, da zaprete tipkovnico"
+ "Dostop do številk in simbolov"
+ "Če besedo želite dodati v slovar, jo pridržite"
+ "Dotaknite se tega nasveta za nadaljevanje »"
+ "Dotaknite se tukaj, da zaprete nasvet in začnete tipkati!"
+ "Tipkovnice se odpre, kadar se dotaknete besedilnega polja"
+ "Za ogled poudarkov pridržite tipko"\n"(ø, ö, ô, ó itd.)"
+ "Preklopite na številke in simbole z dotikom te tipke"
+ "Na črke se vrnete, če se še enkrat dotaknete te tipke"
+ "Pridržite to tipko, če želite spremeniti nastavitve tipkovnice, npr. samodokončanje"
+ "Poskusite!"
+ "Pojdi"
+ "Naprej"
+ "Dokončano"
+ "Pošlji"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Glasovni vnos"
+ "Glasovni vnos trenutno ni podprt v vašem jeziku, deluje pa v angleščini."
+ "Glasovni vnos je poskusna funkcija, ki uporablja Googlovo omrežno prepoznavanje govora."
+ "Če želite izklopiti glasovni vnos, pojdite na nastavitve tipkovnice."
+ "Če želite uporabiti glasovni vnos, pritisnite gumb z mikrofonom ali podrsajte s prstom po zaslonski tipkovnici."
+ "Začnite govoriti"
+ "Obdelava"
+
+ "Napaka. Poskusite znova."
+ "Povezava ni mogoča"
+ "Napaka, preveč govora."
+ "Težave z zvokom"
+ "Napaka strežnika"
+ "Govora se ne sliši"
+ "Ni rezultatov"
+ "Glasovno iskanje ni nameščeno"
+ "Nasvet:"" za govorjenje s prstom povlecite po tipkovnici"
+ "Nasvet:"" naslednjič poskusite ločila izgovoriti, npr. »pika«, »vejica« ali »vprašaj«."
+ "Prekliči"
+ "V redu"
+ "Glasovni vnos"
+
+ "Na glavni tipkovnici"
+ "Na tipkovnici s simboli"
+ "Izklopljeno"
+
+
+ "Mikrofon na glavni tipkovnici"
+ "Mikrofon na tipkovnici s simboli"
+ "Glasovni vnos je onemogočen"
+
+ "Samodejno pošlji po govoru"
+ "Samodejno pritisni »Enter« pri iskanju ali prehodu na naslednje polje."
+ "Odprite tipkovnico"\n\n"Dotaknite se katerega koli besedilnega polja."
+ "Zaprite tipkovnico"\n\n"Pritisnite tipko »Nazaj«."
+ "Pridržite tipko za ogled možnosti"\n\n"Dostop do ločil in poudarkov."
+ "Nastavitve "\n\n"Pridržite tipko ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Izberite način vnosa"
+ "Jeziki vnosa"
+ "Podrsajte s prstom po preslednici, da zamenjate jezik"
+ "← Še enkrat se dotaknite, da shranite"
+ "Slovar je na voljo"
+ "Omogoči povratne informacije uporabnikov"
+ "S samodejnim pošiljanjem statističnih podatkov o uporabi in poročil o zrušitvah Googlu nam lahko pomagate izboljšati urejevalnik načina vnosa."
+ "Dotaknite se besed in jih popravite"
+ "Dotaknite se vnesenih besed in jih popravite"
+ "Tema tipkovnice"
+ "tipkovnica"
+ "govor"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-sr/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-sr/strings.xml
new file mode 100644
index 00000000..7b00501a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-sr/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android тастатура"
+ "Подешавања Android тастатуре"
+ "Опције уноса"
+ "Вибрирај на притисак тастера"
+ "Звук на притисак тастера"
+ "Искачући прозор приликом притиска тастера"
+ "Исправи грешке у куцању"
+ "Омогућавање исправљања грешака током уноса"
+ "Грешке приликом уноса у положеном приказу"
+ "Омогућавање исправљања грешака током уноса"
+ "Предлагање речи"
+ "Аутоматско исправљање претходне речи"
+ "Предлагање речи"
+ "Подешавања за предлагање речи"
+ "Омогућавање аутоматског довршавања током уноса текста"
+ "Аутоматско довршавање"
+ "Повећај величину поља за текст"
+ "Скривање предложених речи у положеном приказу"
+ "Аутоматски унос великих слова"
+ "Унос великог слова на почетку реченице"
+ "Аутоматска интерпункција"
+
+ "Брзе исправке"
+ "Исправља честе грешке у куцању"
+ "Прикажи предлоге"
+ "Приказивање предложених речи током уноса текста"
+ "Аутоматско довршавање"
+ "Означена реч се аутоматски умеће када притиснете размак или знак интерпункције"
+ "Прикажи тастер за подешавања"
+ "Аутоматски"
+ "Увек прикажи"
+ "Увек сакриј"
+
+
+
+ "Bigram предлози"
+ "Користи претходну реч за побољшање предлога"
+
+ "Ништа"
+ "Основни"
+ "Напредно"
+
+ "%s : Сачувано"
+ "Држите тастер да бисте видели акценте (ø, ö итд.)"
+ "Притисните тастер „Назад“ ↶ у било ком тренутку да бисте затворили тастатуру"
+ "Приступите бројевима и симболима"
+ "Притисните и држите прву реч са леве стране да бисте је додали у речник"
+ "Додирните овај савет да бисте наставили »"
+ "Додирните овде да бисте затворили овај савет и почели да уносите текст!"
+ "Тастатура се отвара сваки пут када додирнете поље за текст"
+ "Додирните и држите тастер да бисте видели акценте"\n"(ø, ö, ô, ó, и тако даље)"
+ "Пређите на бројеве и симболе тако што ћете додирнути овај тастер"
+ "Вратите се на слова тако што ћете поново додирнути овај тастер"
+ "Додирните и држите овај тастер да бисте променили подешавања тастатуре, као што је аутоматско довршавање"
+ "Пробајте!"
+ "Иди"
+ "Следеће"
+ "Готово"
+ "Пошаљи"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Гласовни унос"
+ "Гласовни унос тренутно није подржан за ваш језик, али функционише на енглеском."
+ "Гласовни унос је експериментална функција која користи Google-ово мрежно препознавање гласа."
+ "Да бисте искључили гласовни унос, идите на подешавања тастатуре."
+ "Да бисте користили гласовни унос, притисните дугме за микрофон или превуците прст преко тастатуре на екрану."
+ "Говорите сада"
+ "Обрада"
+
+ "Грешка. Покушајте поново."
+ "Повезивање није могуће"
+ "Грешка, говорите предуго."
+ "Проблем са звуком"
+ "Грешка сервера"
+ "Не чује се говор"
+ "Нема подударања"
+ "Гласовна претрага није инсталирана"
+ "Савет:"" Превуците прстом преко тастатуре за гласовни унос"
+ "Савет:"" Следећи пут покушајте да изговорите знакове интерпункције као што су „тачка“, „зарез“ или „знак питања“."
+ "Откажи"
+ "Потврди"
+ "Гласовни унос"
+
+ "На главној тастатури"
+ "На тастатури са симболима"
+ "Искључено"
+
+
+ "Микрофон на главној тастатури"
+ "Микрофон на тастатури са симболима"
+ "Гласовни унос је онемогућен"
+
+ "Аутоматски пошаљи после гласа"
+ "Аутоматски притисак на enter приликом претраге или преласка на следеће поље."
+ "Активирање тастатуре"\n\n"Додирните било које поље за текст."
+ "Затварање тастатуре"\n\n"Притисните тастер „Назад“."
+ "Додирните и држите тастер да би се приказале опције"\n\n"Приступ знаковима интерпункције и акцентима."
+ "Подешавања тастатуре"\n\n"Додирните и држите тастер ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Изаберите метод уноса"
+ "Језици за унос"
+ "Превуците прст преко тастера за размак да бисте променили језик"
+ "← Поново додирните да бисте сачували"
+ "Речник је доступан"
+ "Омогући повратну информацију корисника"
+ "Помозите да се побољша овај уређивач режима уноса тако што ће се аутоматски послати статистика о коришћењу и извештаји о грешкама компанији Google."
+ "Додирните да бисте исправили речи"
+ "Додирните унете речи да бисте их исправили"
+ "Тема тастатуре"
+ "тастатура"
+ "глас"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-sv/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-sv/donottranslate-altchars.xml
new file mode 100644
index 00000000..4d26e6c4
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-sv/donottranslate-altchars.xml
@@ -0,0 +1,38 @@
+
+
+
+ áàâąã
+ 3éèêëę€
+ íìîï8
+ óòôõ9
+ úùûū7
+ śšşß
+ ńñň
+ çćč
+ ýÿü6
+ ðď
+ ř4
+ ťþ5
+ źžż
+ ł
+ w
+ æ
+ øœ
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-sv/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-sv/strings.xml
new file mode 100644
index 00000000..c736418f
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-sv/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Androids tangentbord"
+ "Inställningar för Androids tangentbord"
+ "Inmatningsalternativ"
+ "Vibrera vid tangenttryck"
+ "Knappljud"
+ "Popup vid knapptryck"
+ "Rätta skrivfel"
+ "Aktivera rättning av felaktiga inmatningar"
+ "Inmatningsfel i liggande vy"
+ "Aktivera rättning av felaktiga inmatningar"
+ "Ordförslag"
+ "Rätta automatiskt föregående ord"
+ "Ordförslag"
+ "Inställningar för ordförslag"
+ "Aktivera Komplettera automatiskt när du skriver"
+ "Komplettera automatiskt"
+ "Gör textfältet större"
+ "Dölj ordförslag i liggande vy"
+ "Automatiska versaler"
+ "Använd versal i början av mening"
+ "Automatiska punkter"
+
+ "Snabba lösningar"
+ "Åtgärdar automatiskt vanliga misstag"
+ "Visa förslag"
+ "Visar ordförslag när du skriver"
+ "Komplettera automatiskt"
+ "Blanksteg och punkt infogar automatiskt markerat ord"
+ "Visa inställningsknapp"
+ "Automatiskt"
+ "Visa alltid"
+ "Dölj alltid"
+
+
+
+ "Bigramförslag"
+ "Förbättra förslaget med föregående ord"
+
+ "Inget"
+ "Grundinställningar"
+ "Avancerade"
+
+ "%s: sparat"
+ "Håll nere en tangent om du vill visa accenter (ø, ö, etc.)"
+ "Tryck på Tillbaka ↶ om du vill stänga tangentbordet"
+ "För siffror och symboler"
+ "Tryck och håll ned ordet längst till vänster om du vill lägga till det i ordlistan"
+ "Tryck på tipset för att fortsätta »"
+ "Tryck här om du vill stänga tipset och börja skriva!"
+ "Tangentbordet öppnas när du trycker på ett textfält"
+ "Tryck och håll nere en tangent om du vill visa accenter"\n"(ø, ö, ô, ó och så vidare)"
+ "Växla till siffror och symboler med den här tangenten"
+ "Återvänd till bokstäver genom att trycka på tangenten en gång till"
+ "Tryck och håll ned tangenten om du vill ändra inställningarna för tangentbordet, till exempel Komplettera automatiskt"
+ "Testa!"
+ "Kör"
+ "Nästa"
+ "Färdig"
+ "Skicka"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Röstindata"
+ "Röstindata stöds inte på ditt språk än, men tjänsten fungerar på engelska."
+ "Röstinmatning är en funktion på experimentstadiet som använder Googles nätverks taligenkänning."
+ "Om du vill stänga av röstindata öppnar du inställningarna för tangentbordet."
+ "Om du vill använda röstinmatning trycker du på mikrofonknappen eller drar fingret över tangentbordet på skärmen."
+ "Tala nu"
+ "Fungerar"
+
+ "Fel. Försök igen."
+ "Det gick inte att ansluta"
+ "Fel, för mycket tal."
+ "Ljudproblem"
+ "Serverfel"
+ "Hörde inget tal"
+ "Inga träffar hittades"
+ "Voice Search är inte installerat"
+ "Tips!"" Dra över tangentbordet om du vill tala"
+ "Tips!"" Nästa gång testar du att säga skiljetecknen, som \"punkt\", \"komma\" eller \"frågetecken\"."
+ "Avbryt"
+ "OK"
+ "Röstindata"
+
+ "På huvudtangentbordet"
+ "På symboltangentbordet"
+ "Av"
+
+
+ "Mikrofon på huvudtangentbordet"
+ "Mikrofon på symboltangentbordet"
+ "Röstindata är inaktiverat"
+
+ "Skicka automatiskt efter röst"
+ "Tryck automatiskt på retur vid sökning eller när du fortsätter till nästa fält."
+ "Öppna tangentbordet"\n\n"Tryck på ett textfält."
+ "Stäng tangentbordet"\n\n"Tryck på Tillbaka."
+ "Tryck länge på en tangent om du vill se alternativ"\n\n"Använda skiljetecken och accenter."
+ "Tangentbordsinställningar"\n\n"Tryck länge på tangenten""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Välj inmatningsmetod"
+ "Inmatningsspråk"
+ "Dra med fingret på blanksteg om du vill ändra språk"
+ "← Tryck igen för att spara"
+ "En ordlista är tillgänglig"
+ "Aktivera synpunkter från användare"
+ "Du kan hjälpa till att förbättra inmatningsmetoden genom att automatiskt skicka användningsstatistik och felrapporter till Google."
+ "Tryck om du vill korrigera ord"
+ "Tryck på skrivna ord om du vill korrigera dem"
+ "Tangentbordstema"
+ "tangentbord"
+ "röst"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-th/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-th/strings.xml
new file mode 100644
index 00000000..0812a894
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-th/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "แป้นพิมพ์ Android"
+ "การตั้งค่าแป้นพิมพ์ Android"
+ "ตัวเลือกการป้อนข้อมูล"
+ "สั่นเมื่อกดปุ่ม"
+ "ส่งเสียงเมื่อกดปุ่ม"
+ "ป๊อปอัปเมื่อกดแป้น"
+ "แก้ไขข้อผิดพลาดในการพิมพ์"
+ "เปิดการใช้งานการแก้ไขข้อผิดพลาดในการป้อนข้อมูล"
+ "ข้อผิดพลาดในการป้อนข้อมูลแนวนอน"
+ "เปิดการใช้งานการแก้ไขข้อผิดพลาดในการป้อนข้อมูล"
+ "การแนะนำคำ"
+ "แก้ไขคำก่อนหน้าอัตโนมัติ"
+ "การแนะนำคำ"
+ "การตั้งค่าการแนะนำคำ"
+ "เปิดใช้งานการเติมคำอัตโนมัติขณะพิมพ์"
+ "เติมคำอัตโนมัติ"
+ "เพิ่มขนาดฟิลด์ข้อความ"
+ "ซ่อนการแนะนำคำในมุมมองแนวนอน"
+ "ปรับเป็นตัวพิมพ์ใหญ่อัตโนมัติ"
+ "ใช้ตัวพิมพ์ใหญ่เมื่อขึ้นต้นประโยค"
+ "ใส่เครื่องหมายวรรคตอนอัตโนมัติ"
+
+ "แก้ไขด่วน"
+ "แก้ไขข้อผิดพลาดในการพิมพ์ที่พบบ่อย"
+ "แสดงคำแนะนำ"
+ "แสดงคำที่แนะนำขณะพิมพ์"
+ "เติมคำอัตโนมัติ"
+ "ใช้แป้นเคาะวรรคและเครื่องหมายวรรคตอนเพื่อแทรกคำที่ไฮไลต์โดยอัตโนมัติ"
+ "แสดงแป้นการตั้งค่า"
+ "อัตโนมัติ"
+ "แสดงตลอดเวลา"
+ "ซ่อนตลอดเวลา"
+
+
+
+ "คำแนะนำ Bigram"
+ "ใช้คำก่อนหน้านี้เพื่อปรับปรุงคำแนะนำ"
+
+ "ไม่มี"
+ "พื้นฐาน"
+ "ขั้นสูง"
+
+ "%s : บันทึกแล้ว"
+ "กดปุ่มค้างไว้เพื่อดูการออกเสียง (ø, ö, ฯลฯ)"
+ "กดปุ่ม ย้อนกลับ เพื่อปิดแป้นพิมพ์เมื่อใดก็ได้"
+ "เข้าถึงหมายเลขและสัญลักษณ์"
+ "กดคำซ้ายสุดค้างไว้เพื่อเพิ่มลงในพจนานุกรม"
+ "แตะคำแนะนำนี้เพื่อทำงานต่อ »"
+ "แตะที่นี่เพื่อปิดคำแนะนำนี้และเริ่มพิมพ์!"
+ "แป้นพิมพ์จะเปิดขึ้นเมื่อคุณแตะฟิลด์ข้อความ"
+ "แตะปุ่มค้างไว้เพื่อดูการออกเสียง"\n"(ø, ö, ô, ó และอื่นๆ)"
+ "เปลี่ยนเป็นตัวเลขและสัญลักษณ์เมื่อแตะปุ่มนี้"
+ "กลับไปที่ตัวอักษรโดยการแตะปุ่มนี้อีกครั้ง"
+ "แตะปุ่มนี้ค้างไว้เพื่อเปลี่ยนการตั้งค่าแป้นพิมพ์ เช่น การเติมคำอัตโนมัติ"
+ "ลองดูสิ!"
+ "ไป"
+ "ถัดไป"
+ "เสร็จสิ้น"
+ "ส่ง"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "การป้อนข้อมูลด้วยเสียง"
+ "ขณะนี้การป้อนข้อมูลด้วยเสียงยังไม่ได้รับการสนับสนุนในภาษาของคุณ แต่ใช้ได้ในภาษาอังกฤษ"
+ "การป้อนข้อมูลด้วยเสียงเป็นคุณลักษณะทดลองที่ใช้การจดจำเสียงที่มีการสร้างเครือข่ายไว้ของ Google"
+ "หากต้องการปิดการป้อนข้อมูลด้วยเสียง ไปที่การตั้งค่าแป้นพิมพ์"
+ "หากต้องการใช้การป้อนข้อมูลด้วยเสียง กดปุ่มไมโครโฟนหรือเลื่อนนิ้วผ่านแป้นพิมพ์บนหน้าจอ"
+ "พูดได้เลย"
+ "กำลังทำงาน"
+
+ "ข้อผิดพลาด โปรดลองอีกครั้ง"
+ "ไม่สามารถเชื่อมต่อได้"
+ "ข้อผิดพลาด คำพูดยาวเกินไป"
+ "ปัญหาด้านเสียง"
+ "ข้อผิดพลาดของเซิร์ฟเวอร์"
+ "ไม่ได้ยินเสียง"
+ "ไม่พบรายการที่ตรงกัน"
+ "ไม่ได้ติดตั้ง Voice Search"
+ "คำแนะนำ:"" กวาดผ่านแป้นพิมพ์เพื่อพูด"
+ "คำแนะนำ:"" ครั้งต่อไป ให้ลองเอ่ยถึงเครื่องหมายวรรคตอน เช่น \"มหัพภาค\" \"จุลภาค\" หรือ \"เครื่องหมายคำถาม\""
+ "ยกเลิก"
+ "ตกลง"
+ "การป้อนข้อมูลด้วยเสียง"
+
+ "บนแป้นพิมพ์หลัก"
+ "บนแป้นพิมพ์สัญลักษณ์"
+ "ปิด"
+
+
+ "ไมโครโฟนบนแป้นพิมพ์หลัก"
+ "ไมโครโฟนบนแป้นพิมพ์สัญลักษณ์"
+ "การป้อนข้อมูลด้วยเสียงถูกปิดการใช้งาน"
+
+ "ส่งอัตโนมัติหลังบันทึกเสียง"
+ "กด Enter อัตโนมัติเมื่อค้นหาหรือไปที่ฟิลด์ถัดไป"
+ "เปิดแป้นพิมพ์"\n\n"แตะฟิลด์ข้อความใดก็ได้"
+ "ปิดแป้นพิมพ์"\n\n"กดปุ่ม ย้อนกลับ"
+ "แตะปุ่มค้างไว้เพื่อดูตัวเลือก "\n\n"เข้าถึงเครื่องหมายวรรคตอนและการออกเสียง"
+ "การตั้งค่าแป้นพิมพ์"\n\n"แตะปุ่ม ""?123""ค้างไว้"
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "เลือกวิธีการป้อนข้อมูล"
+ "ภาษาในการป้อนข้อมูล"
+ "เลื่อนนิ้วไปบนแป้นเคาะวรรคเพื่อเปลี่ยนภาษา"
+ "← แตะอีกครั้งเพื่อบันทึก"
+ "มีพจนานุกรมให้ใช้งาน"
+ "เปิดใช้งานการแสดงความคิดเห็นจากผู้ใช้"
+ "ช่วยปรับปรุงตัวแก้ไขวิธีการป้อนข้อมูลนี้โดยการส่งสถิติการใช้งานและรายงานการขัดข้องถึง Google โดยอัตโนมัติ"
+ "แตะเพื่อแก้ไขคำ"
+ "แตะคำที่ป้อนไว้เพื่อแก้ไข"
+ "ชุดรูปแบบแป้นพิมพ์"
+ "แป้นพิมพ์"
+ "เสียง"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-tl/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-tl/strings.xml
new file mode 100644
index 00000000..d2c25d87
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-tl/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android keyboard"
+ "Mga setting ng Android keyboard"
+ "Mga pagpipilian sa input"
+ "Mag-vibrate sa keypress"
+ "Tunog sa keypress"
+ "Popup sa keypress"
+ "Itama ang mga error sa pag-type"
+ "Paganahin ang pagtatama ng error sa pag-input"
+ "Mga error sa pag-input ng landscape"
+ "Paganahin ang pagtatama ng error sa pag-input"
+ "Mga suhestiyon ng salita"
+ "Awtomatikong itama ang nakaraang salita"
+ "Mga suhestiyon ng salita"
+ "Mga setting ng suhestiyon ng salita"
+ "Paganahin ang awtomatikong pagkumpleto habang nagta-type"
+ "Awtomatikong pagkumpleto"
+ "Taasan ang laki ng field ng teksto"
+ "Itago ang mga suhestiyon ng salita sa lanscape na view"
+ "Auto-capitalization"
+ "I-capitalize ang simula ng isang pangungusap"
+ "I-auto-punctuate"
+
+ "Mga mabilisang pagsasaayos"
+ "Itinatama ang mga karaniwang na-type na mali"
+ "Ipakita ang mga suhestiyon"
+ "Ipakita ang mga iminumungkahing salita habang nagta-type"
+ "I-auto-complete"
+ "Awtomatikong ipinapasok ng spacebar at bantas ang naka-highlight na salita"
+ "Ipakita ang key ng mga setting"
+ "Awtomatiko"
+ "Palaging ipakita"
+ "Palaging itago"
+
+
+
+ "Mga Suhestiyon na Bigram"
+ "Gamitin ang nakaraang salita upang pahusayin ang suhestiyon"
+
+ "Wala"
+ "Batayan"
+ "Advanced"
+
+ "%s : Na-save"
+ "Pinduting nang matagal ang isang key pababa upang makita ang mga accent (ø, ö, atbp.)"
+ "Pindutin ang key na bumalik ↶ upang isara ang keyboard anumang oras"
+ "I-access ang mga numero at simbolo"
+ "Pindutin nang matagal ang salita sa kaliwang bahagi upang idagdag ito sa diksyunaryo"
+ "Galawin ang pahiwatig na ito upang magpatuloy »"
+ "Galawin dito upang isara ang pahiwatig na ito at simulan ang pag-type!"
+ "Nagbubukas ang keyboard anumang oras na galawin mo ang field ng teksto"
+ "Galawin & pinduting nang matagal ang isang key upang tingnan ang mga accent"\n"(ø, ö, ô, ó, at iba pa)"
+ "Lumipat sa mga numero at simbolo sa pamamagitan ng paggalaw sa key na "" na ito"
+ "Pumunta muli sa mga titik sa pamamagitan ng muling paggalaw sa key na ito"
+ "Galawin & pinduting nang matagal ang key na ito upang baguhin ang mga setting ng keyboard, tulad ng awtomatikong pagkumpleto"
+ "Subukan ito!"
+ "Punta"
+ "Susunod"
+ "Tapos na"
+ "Ipadala"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Pag-input ng boses"
+ "Hindi kasalukuyang suportado ang pag-input ng boses para sa iyong wika, ngunit gumagana sa Ingles."
+ "Ang pag-input ng boses ay isang tampok na pang-eksperimento na gumagamit ng naka-network na pagkilala sa pananalita ng Google."
+ "Upang i-off ang pag-input ng boses, pumunta sa mga setting ng keyboard."
+ "Upang gumamit ng pag-input ng boses, pindutin ang pindutang microphone o i-slide ang iyong daliri sa screen keyboard."
+ "Magsalita ngayon"
+ "Nagtatrabaho"
+
+ "Error. Pakisubukang muli."
+ "Hindi makakonekta"
+ "Error, masyadong maraming pananalita."
+ "Problema sa audio"
+ "Error sa server"
+ "Walang narinig na pananalita"
+ "Walang nakitang mga tugma"
+ "Hindi naka-install ang paghahanap ng boses"
+ "Pahiwatig:"" Mag-swipe sa keyboard upang magsalita"
+ "Pahiwatig:"" Sa susunod, subukang magsalita ng bantas tulad ng \"tuldok\", \"kuwit\", o \"tandang pananong\"."
+ "Kanselahin"
+ "OK"
+ "Pag-input ng boses"
+
+ "I-on ang pangunahing keyboard"
+ "Sa mga simbolo ng keyboard"
+ "Naka-off"
+
+
+ "Mic sa pangunahing keyboard"
+ "Mic sa keyboard ng mga simbolo"
+ "Hindi pinagana ang pag-input ng boses"
+
+ "Awtomatikong isumite pagkatapos ng boses"
+ "Awtomatikong pindutin ang enter kapag naghahanap o pupunta sa susunod na field."
+ "Buksan ang keyboard"\n\n"Galawin ang kahit anong field ng teksto."
+ "Isara ang keyboard"\n\n"Pindutin ang key na Bumalik."
+ "Galawin & pinduting nang matagal ang isang key para sa mga pagpipilian"\n\n"I-access ang bantas at mga accent."
+ "Mga setting ng keyboard"\n\n"Galawin & pindutin nang matagal ang ""?123"" na key."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Pumili ng paraan ng pag-input"
+ "Mag-input ng mga wika"
+ "I-slide ang daliri sa spacebar upang palitan ang wika"
+ "← Pinduting muli upang i-save"
+ "Available ang diksyunaryo"
+ "Paganahin ang feedback ng user"
+ "Tumulong na pahusayin ang editor ng paraan ng pag-input na ito sa pamamagitan ng awtomatikong pagpapadala ng mga istatistika ng paggamit at mga ulat ng crash sa Google."
+ "Pindutin upang itama ang mga salita"
+ "Pindutin ang mga ipinasok na salita upang itama ang mga ito"
+ "Tema ng Keyboard"
+ "keyboard"
+ "boses"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-tr/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-tr/donottranslate-altchars.xml
new file mode 100644
index 00000000..fb2419c1
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-tr/donottranslate-altchars.xml
@@ -0,0 +1,31 @@
+
+
+
+ â
+ 3
+ īįíìïîı8
+ ōøõóòœôö9
+ ūúùûü7
+ śşßš
+
+ čćç
+ 6
+ ğ
+
\ No newline at end of file
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-tr/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-tr/strings.xml
new file mode 100644
index 00000000..9248ac4f
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-tr/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android klavyesi"
+ "Android klavye ayarları"
+ "Giriş seçenekleri"
+ "Tuşa basıldığında titret"
+ "Tuşa basıldığında ses çıkar"
+ "Tuşa basıldığında pop-up aç"
+ "Yazım hatalarını düzelt"
+ "Giriş hatası düzeltmeyi etkinleştir"
+ "Yatay giriş hataları"
+ "Giriş hatası düzeltmeyi etkinleştir"
+ "Kelime önerileri"
+ "Önceki kelimeyi otomatik olarak düzelt"
+ "Kelime önerileri"
+ "Kelime önerme ayarları"
+ "Yazarken otomatik tamamlamayı etkinleştir"
+ "Otomatik tamamlama"
+ "Metin alanı boyutunu artır"
+ "Yatay görünümde kelime önerilerini gizle"
+ "Otomatik olarak büyük harf yap"
+ "Cümlenin baş harfini büyük yap"
+ "Otomatik noktalama"
+
+ "Hızlı onarımlar"
+ "Yaygın olarak yapılan yazım hatalarını düzeltir"
+ "Önerileri göster"
+ "Yazarken önerilen kelimeleri görüntüle"
+ "Otomatik tamamla"
+ "Boşluk tuşu ve noktalama vurgulanan kelimeyi otomatik ekler"
+ "Ayarları göster tuşu"
+ "Otomatik"
+ "Her zaman göster"
+ "Her zaman gizle"
+
+
+
+ "Bigram Önerileri"
+ "Öneriyi geliştirmek için önceki kelimeyi kullanın"
+
+ "Yok"
+ "Temel"
+ "Gelişmiş"
+
+ "%s : Kaydedildi"
+ "Vurguları görmek için bir tuşu basılı tutun (ø, ö, v.b.)"
+ "Klavyeyi herhangi bir anda kapatmak için geri tuşuna ↶ basın"
+ "Sayılara ve simgelere erişin"
+ "Sözlüğe eklemek için en soldaki kelimeye basın ve basılı tutun"
+ "Devam etmek için bu ipucuna dokunun »"
+ "Bu ipucunu kapatmak için buraya dokunun ve yazmaya başlayın!"
+ "Bir metin alanına dokunduğunuzda klavye açılır"
+ "Vurguları görüntülemek için bir tuşa basın ve basılı tutun"\n"(ø, ö, ô, ó v.b.)"
+ "Bu tuşa dokunarak sayılar ve simgeler arasında geçiş yap"
+ "Bu tuşa tekrar dokunarak harflere geri dönün"
+ "Otomatik tamamlama gibi klavye ayarlarını değiştirmek için bu tuşa basın ve basılı tutun"
+ "Deneyin!"
+ "Git"
+ "İleri"
+ "Bitti"
+ "Gönder"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Ses girişi"
+ "Ses girişi, şu anda sizin diliniz için desteklenmiyor ama İngilizce dilinde kullanılabilir."
+ "Ses girişi, Google\'ın ağ bağlantılı ses tanıma işlevini kullanan deneysel bir özelliktir."
+ "Ses girişini kapatmak için klavye ayarlarına gidin."
+ "Ses girişini kullanmak için mikrofon düğmesine basın veya parmağınızı dokunmatik klavye üzerinde kaydırın."
+ "Şimdi konuşun"
+ "Çalışıyor"
+
+ "Hata. Lütfen tekrar deneyin."
+ "Bağlanamadı"
+ "Hata, çok uzun konuşma."
+ "Ses sorunu"
+ "Sunucu hatası"
+ "Konuşma duyulmadı"
+ "Eşleşme bulunamadı"
+ "Sesle arama yüklenmedi"
+ "İpucu:"" Konuşmak için parmağınızı klavye üzerinde kaydırın"
+ "İpucu:"" Sonraki sefer, \"nokta\", \"virgül\" veya \"soru işareti\" gibi noktalama işaretlerini telaffuz etmeyi deneyin."
+ "İptal"
+ "Tamam"
+ "Ses girişi"
+
+ "Ana klavyede"
+ "Simge klavyesinde"
+ "Kapalı"
+
+
+ "Ana klavyedeki mikrofon"
+ "Simge klavyesindeki mikrofon"
+ "Sesle giriş devre dışı bırakıldı"
+
+ "Sesten sonra otomatik gönder"
+ "Arama yaparken veya bir sonraki alana giderken enter tuşuna otomatik olarak basın."
+ "Klavyeyi açın"\n\n"Herhangi bir metin alanına dokunun."
+ "Klavyeyi kapatın"\n\n"Geri tuşuna basın."
+ "Seçenekler için bir tuşa dokunun ve basılı tutun"\n\n"Noktalama ve vurgulama işaretlerine erişin."
+ "Klavye ayarları"\n\n"?123"" tuşuna dokunun ve basılı tutun."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Giriş yöntemini seç"
+ "Giriş dilleri"
+ "Dili değiştirmek için parmağınızı boşluk çubuğu üzerinde kaydırın"
+ "← Kaydetmek için tekrar dokunun"
+ "Sözlük kullanılabilir"
+ "Kullanıcı geri bildirimini etkinleştir"
+ "Kullanım istatistiklerini ve kilitlenme raporlarını Google\'a otomatik olarak göndererek bu giriş yöntemi düzenleyicisinin iyileştirilmesine yardımcı olun."
+ "Kelimeleri düzeltmek için dokunun"
+ "Düzeltmek için, girilen kelimelere dokunun"
+ "Klavye Teması"
+ "klavye"
+ "ses"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-uk/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-uk/strings.xml
new file mode 100644
index 00000000..8788021b
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-uk/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Клавіатура Android"
+ "Налашт-ня клавіат. Android"
+ "Парам. введення"
+ "Вібр при натиску клав."
+ "Звук при натиску клав."
+ "Сплив. при нат.клав."
+ "Виправ. помилки вводу"
+ "Увімкн. виправл. помилок вводу"
+ "Помилки альбомного вводу"
+ "Увімкн. виправл. помилок вводу"
+ "Пропозиції слів"
+ "Автоматично виправляти попереднє слово"
+ "Пропозиції слів"
+ "Налашт-ня пропозицій слів"
+ "Увімкн. автозаповнення при вводі"
+ "Автозаповнення"
+ "Збільш. розмір текст. поля"
+ "Сховати пропозиції слів в альбом. режимі"
+ "Авто викор. вел. літер"
+ "Поч. писати речення з великої літери"
+ "Авто пунктуація"
+
+ "Шв. виправлення"
+ "Виправляє поширені помилки"
+ "Показати пропозиції"
+ "Відображати при вводі пропоновані слова"
+ "Автозаповнення"
+ "Пробіл і пунктуація автоматично вставляє виділене слово"
+ "Показ. клав. налашт."
+ "Автоматично"
+ "Завжди показ."
+ "Завжди ховати"
+
+
+
+ "Двобуквені пропозиції"
+ "Викор. попер. слово для покращ. пропозиції"
+
+ "Немає"
+ "Базовий"
+ "Розшир."
+
+ "%s : збережено"
+ "Утр. клав. натис., щоб див. нагол. (ø, ö, тощо)"
+ "Натисн. клавішу назад ↶, щоб будь-коли закрити клавіат."
+ "Доступ до цифр і символів"
+ "Натисн. і утримуйте ліве крайнє слово, щоб додати його до словн."
+ "Натис. цю підказку для продовж.»"
+ "Натисн. тут, щоб закрити цю підказку і почати ввод."
+ "Клавіатура відривається при торканні текстового поля"
+ "Натис. і утрим. клавішу для перегл. наголосів"\n"(ø, ö, ô, ó тощо)"
+ "Перемк. до цифр і символів, натиснувши цю кнопку "
+ "Поверніться до літер, знову натиснувши цю клавішу"
+ "Натис. і утрим. клавішу, щоб змін. налашт-ння клавіат., такі як автозапов."
+ "Спробуйте!"
+ "Іти"
+ "Далі"
+ "Готово"
+ "Надісл."
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Голос. ввід"
+ "Голос. ввід наразі не підтрим. для вашої мови, але можна користуватися англійською."
+ "Голос. ввід є експеремент. ф-цією, яка викор. мережеве розпізнавання голосу Google."
+ "Щоб вимкн. голос ввід, йдіть до налашт-нь клавіатури."
+ "Щоб викор. голос. ввід, натисніть кнопку мікрофона або пересуньте палець на екранній клавіатурі."
+ "Диктуйте"
+ "Працює"
+
+ "Помилка. Спробуйте ще раз."
+ "Неможл. під\'єднатися"
+ "Помилка. Забагато продикт."
+ "Проблема з аудіо"
+ "Помилка сервера"
+ "Не чути диктув."
+ "Збігів не знайдено"
+ "Голос. пошук не встановлено"
+ "Підк:"" горт. на клавіат., щоб продикт."
+ "Підказка:"" наступного разу продикт. знаки пункт. такі як \"крапка\", \"кома\" чи \"знак пит\"."
+ "Скасувати"
+ "OK"
+ "Голос. ввід"
+
+ "На осн. клавіатурі"
+ "Символьна клавіатура"
+ "Вимк."
+
+
+ "Miкр. на осн. клавіатурі"
+ "Miкр. на символ. клавіатурі"
+ "Голос. ввід вимкнуто"
+
+ "Авто подав. після гол. пош."
+ "Автомат. натиск. enter під час пошуку або переходу до наступного поля."
+ "Відкр. клавіатуру"\n\n"Натисн. якесь текст. поле."
+ "Закрити клавіатуру"\n\n"Натисн. клавішу Назад."
+ "Натис.і утрим. клавішк для отрим. парам."\n\n"Доступ до пункт. та наголос."
+ "Налашт-ння клавіатури"\n\n"Натисн. і утрим. клавішу ""?123"
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Вибрати метод введення"
+ "Мови вводу"
+ "Переміст. палець на пробіл, щоб змін. мову"
+ "← Торкн. ще, щоб збер."
+ "Словник доступний"
+ "Увімк. відгуки корист."
+ "Допоможіть покращ. редактор методу введ., автомат. надсилаючи в Google статистику використ. та звіти про збої."
+ "Торкн., щоб виправ. слова"
+ "Торкн. введених слів, щоб виправити їх"
+ "Тема клавіатури"
+ "клавіатура"
+ "голос."
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-vi/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-vi/strings.xml
new file mode 100644
index 00000000..53ec91c1
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-vi/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Bàn phím Android"
+ "Cài đặt bàn phím Android"
+ "Tùy chọn nhập"
+ "Rung khi nhấn phím"
+ "Âm thanh khi nhấn phím"
+ "Cửa sổ bật lên khi nhấn phím"
+ "Sửa lỗi đánh máy"
+ "Bật sửa lỗi nhập"
+ "Lỗi nhập theo khổ ngang"
+ "Bật sửa lỗi nhập"
+ "Đề xuất từ"
+ "Tự động sửa từ trước đó"
+ "Đề xuất từ"
+ "Cài đặt đề xuất từ"
+ "Bật tự động hoàn tất khi nhập"
+ "Tự động hoàn tất"
+ "Tăng kích cỡ trường văn bản"
+ "Ẩn đề xuất từ trong chế độ xem ngang"
+ "Tự động viết hoa"
+ "Viết hoa chữ cái đầu câu"
+ "Tự động chấm câu"
+
+ "Sửa nhanh"
+ "Sửa lỗi nhập thông thường"
+ "Hiển thị đề xuất"
+ "Hiển thị từ được đề xuất khi nhập"
+ "Tự động hoàn tất"
+ "Dấu cách và dấu câu tự động chèn vào từ được đánh dấu"
+ "Hiển thị phím cài đặt"
+ "Tự động"
+ "Luôn hiển thị"
+ "Luôn ẩn"
+
+
+
+ "Đề xuất Bigram"
+ "Sử dụng từ trước đó để cải tiến đề xuất"
+
+ "Không"
+ "Cơ bản"
+ "Nâng cao"
+
+ "%s : Đã lưu"
+ "Giữ phím xuống để xem dấu trọng âm (ø, ö, v.v...)"
+ "Nhấn phím quay lại ↶ để đóng bàn phím bất kỳ lúc nào"
+ "Truy cập các số và ký hiệu"
+ "Nhấn và giữ từ ngoài cùng bên trái để thêm từ đó vào từ điển"
+ "Chạm vào gợi ý này để tiếp tục »"
+ "Chạm vào đây để đóng gợi ý này và bắt đầu nhập"
+ "Bàn phím mở ra bất cứ khi nào bạn chạm vào trường văn bản"
+ "Chạm & giữ phím để xem dấu trọng âm"\n"(ø, ö, ô, ó, v.v...)"
+ "Chuyển sang số và ký hiệu bằng cách chạm vào phím này"
+ "Quay lại các chữ cái bằng cách chạm vào phím này lần nữa"
+ "Chạm & giữ phím này để thay đổi cài đặt bàn phím, như tự động hoàn tất"
+ "Hãy dùng thử!"
+ "Đến"
+ "Tiếp theo"
+ "Xong"
+ "Gửi"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "Nhập liệu bằng giọng nói"
+ "Nhập liệu bằng giọng nói hiện không được hỗ trợ cho ngôn ngữ của bạn nhưng hoạt động với ngôn ngữ tiếng Anh."
+ "Nhập liệu bằng giọng nói là tính năng thử nghiệm sử dụng nhận dạng tiếng nói được kết nối mạng của Google."
+ "Để tắt nhập liệu bằng giọng nói, đi tới cài đặt bàn phím."
+ "Để sử dụng nhập liệu bằng giọng nói, hãy nhấn nút micrô hoặc trượt ngón tay trên bàn phím ảo."
+ "Xin mời nói"
+ "Đang hoạt động"
+
+ "Lỗi. Vui lòng thử lại."
+ "Không thể kết nối"
+ "Lỗi, quá nhiều câu thoại."
+ "Sự cố âm thanh"
+ "Lỗi máy chủ"
+ "Không nghe thấy tiếng nói nào"
+ "Không tìm thấy kết quả phù hợp"
+ "Tìm kiếm bằng giọng nói chưa được cài đặt"
+ "Gợi ý:"" Trượt qua bàn phím để nói"
+ "Gợi ý:"" Lần tới, thử nói dấu câu như \"dấu chấm\", \"dấu phẩy\" hoặc \"dấu hỏi\"."
+ "Huỷ"
+ "OK"
+ "Nhập liệu bằng giọng nói"
+
+ "Trên bàn phím chính"
+ "Trên bàn phím có biểu tượng"
+ "Tắt"
+
+
+ "Micrô trên bàn phím chính"
+ "Micrô trên bàn phím có biểu tượng"
+ "Nhập liệu bằng giọng nói đã bị vô hiệu hoá"
+
+ "Tự động gửi sau thoại"
+ "Tự đông nhấn enter khi tìm kiếm hoặc đi tới trường tiếp theo."
+ "Mở bàn phím"\n\n"Chạm vào bất kỳ trường văn bản nào."
+ "Đóng bàn phím"\n\n"Nhấn phím Quay lại."
+ "Chạm & giữ phím cho các tuỳ chọn"\n\n"Truy cập dấu câu và dấu trọng âm."
+ "Cài đặt bàn phím"\n\n"Chạm & giữ phím ""?123""."
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "Chọn phương thức nhập"
+ "Ngôn ngữ nhập"
+ "Trượt ngón tay trên phím cách để thay đổi ngôn ngữ"
+ "← Chạm lại để lưu"
+ "Có sẵn từ điển"
+ "Bật phản hồi của người dùng"
+ "Giúp nâng cao trình chỉnh sửa phương thức nhập này bằng cách tự động gửi thống kê sử dụng và báo cáo sự cố cho Google."
+ "Chạm để sửa từ"
+ "Chạm các từ đã nhập để sửa"
+ "Chủ đề bàn phím"
+ "bàn phím"
+ "thoại"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-zh-rCN/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-zh-rCN/donottranslate-altchars.xml
new file mode 100644
index 00000000..c165b11c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-zh-rCN/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ èéêë
+ ìíîï
+ òóôõöœø
+ ùúûü
+ §ß
+ ñ
+ ç
+ ýÿ
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-zh-rCN/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-zh-rCN/strings.xml
new file mode 100644
index 00000000..9e8df756
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-zh-rCN/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android 键盘"
+ "Android 键盘设置"
+ "输入选项"
+ "按键时振动"
+ "按键时播放音效"
+ "按键时显示弹出窗口"
+ "纠正输入错误"
+ "启用输入错误纠正功能"
+ "横向输入错误"
+ "启用输入错误纠正功能"
+ "字词建议"
+ "自动纠正前面的字词"
+ "字词建议"
+ "字词建议设置"
+ "输入时启用自动填写功能"
+ "自动完成"
+ "扩大文字字段"
+ "在横向视图中隐藏字词建议"
+ "自动大写"
+ "句首字母大写"
+ "自动加标点"
+
+ "快速纠正"
+ "纠正常见的输入错误"
+ "显示建议"
+ "输入时启用联想提示"
+ "自动填写"
+ "按空格键和标点符号时自动插入突出显示的字词"
+ "显示设置键"
+ "自动"
+ "始终显示"
+ "始终隐藏"
+
+
+
+ "双连词建议"
+ "使用以前的字词改进建议"
+
+ "无"
+ "基本模式"
+ "高级"
+
+ "%s:已保存"
+ "按住某个键可看到重音符号(例如 ø、ö 等)"
+ "随时可以通过按后退键 ↶ 关闭键盘"
+ "访问数字和符号"
+ "长按最左侧的字可将其添加到词典中"
+ "轻触此提示继续 »"
+ "轻触此处可关闭该提示,然后便可开始输入内容!"
+ "您可以随时通过触摸文字字段打开键盘"
+ "轻触并按住某个键可以查看重音符号"\n"(ø、ö、ô、ó 等)"
+ "轻触该键即可切换到数字和符号键盘"
+ "再次轻触该键即可返回字母键盘"
+ "触摸并按住该键可更改键盘设置,例如自动完成"
+ "试试吧!"
+ "开始"
+ "下一步"
+ "完成"
+ "发送"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "语音输入"
+ "语音输入功能当前还不支持您的语言,您只能输入英语语音。"
+ "语音输入是一项试验性的功能,它采用了 Google 的网络语音识别功能。"
+ "要关闭语音输入功能,请转至键盘设置。"
+ "要使用语音输入,请按麦克风按钮或者在屏幕键盘上滑动手指。"
+ "请开始说话"
+ "正在处理"
+
+ "出错,请重试。"
+ "无法连接"
+ "出错,语音过长。"
+ "音频问题"
+ "服务器出错"
+ "未听到语音"
+ "未找到匹配项"
+ "未安装语音搜索"
+ "提示:""在键盘上滑动手指可激活语音功能"
+ "提示:""稍后,请尝试使用语音输入标点符号,如“句号”、“逗号”或“问号”。"
+ "取消"
+ "确定"
+ "语音输入"
+
+ "主键盘上"
+ "符号键盘上"
+ "关"
+
+
+ "主键盘上的麦克风"
+ "符号键盘上的麦克风"
+ "已停用语音输入"
+
+ "语音结束后自动提交"
+ "搜索或转到下一字段时自动按 Enter。"
+ "打开键盘"\n\n"触摸任意文本字段。"
+ "关闭键盘"\n\n"按“返回”键。"
+ "触摸并按住选项键"\n\n"进入标点/重音符号界面。"
+ "键盘设置"\n\n"触摸并按住 ""?123"" 键。"
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "选择输入法"
+ "输入语言"
+ "在空格键上滑动手指可更改语言"
+ "← 再次触摸即可保存"
+ "提供字典"
+ "启用用户反馈"
+ "自动向 Google 发送使用情况统计信息和崩溃报告,帮助改进该输入法编辑器。"
+ "触摸以更正字词"
+ "触摸所输入字词以进行更正"
+ "键盘主题"
+ "键盘"
+ "语音"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-zh-rTW/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values-zh-rTW/donottranslate-altchars.xml
new file mode 100644
index 00000000..c165b11c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-zh-rTW/donottranslate-altchars.xml
@@ -0,0 +1,30 @@
+
+
+
+ àáâãäåæ
+ èéêë
+ ìíîï
+ òóôõöœø
+ ùúûü
+ §ß
+ ñ
+ ç
+ ýÿ
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values-zh-rTW/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values-zh-rTW/strings.xml
new file mode 100644
index 00000000..dd5996d2
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values-zh-rTW/strings.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ "Android 鍵盤"
+ "Android 鍵盤設定"
+ "輸入選項"
+ "按鍵時震動"
+ "按鍵時播放音效"
+ "按鍵時顯示彈出式視窗"
+ "修正輸入錯誤"
+ "啟用輸入錯誤修正功能"
+ "橫向輸入錯誤"
+ "啟用輸入錯誤修正功能"
+ "字詞建議"
+ "自動修正前一個字詞"
+ "字詞建議"
+ "字詞建議設定"
+ "輸入時啟用自動完成"
+ "自動完成"
+ "放大文字欄位大小"
+ "在橫向檢視模式中隱藏字詞建議"
+ "自動大寫"
+ "句首字母大寫"
+ "自動標點"
+
+ "快速修正"
+ "修正一般打字錯誤"
+ "顯示建議"
+ "打字時顯示建議字詞"
+ "自動完成"
+ "在反白顯示的字詞處自動插入空白鍵和標點符號鍵盤"
+ "顯示設定金鑰"
+ "自動"
+ "一律顯示"
+ "永遠隱藏"
+
+
+
+ "雙連詞建議"
+ "根據前一個字詞自動找出更適合的建議"
+
+ "無"
+ "基本模式"
+ "進階模式"
+
+ "%s:已儲存"
+ "按住按鍵可查看重音符號 (ø、ö 等)"
+ "隨時可以透過按後退鍵 ↶ 關閉鍵盤"
+ "使用數字和符號"
+ "按住最左邊的字詞,將其新增到字典中"
+ "輕觸此提示繼續 »"
+ "輕觸此處以關閉提示,並開始打字!"
+ "輕觸文字欄位時即會開啟鍵盤"
+ "輕觸並按住某個鍵即可查看聲調"\n"(ø、ö、ô、ó 等)"
+ "輕觸此鍵即可切換到數字和符號鍵盤"
+ "再次輕觸此鍵即可返回到字母鍵盤"
+ "輕觸並按住此鍵即可變更鍵盤設定,例如自動完成"
+ "試試看!"
+ "開始"
+ "繼續"
+ "完成"
+ "傳送"
+ "?123"
+ "123"
+ "ABC"
+ "ALT"
+ "語音輸入"
+ "語音輸入目前不支援您的語言,但是可以辨識英文。"
+ "語音輸入這項實驗功能運用了 Google 的網路語音辨識系統。"
+ "請前往鍵盤設定來關閉語音輸入。"
+ "如要使用語音輸入,按下 [麥克風] 按鈕,或將手指滑過螢幕小鍵盤即可。"
+ "請說話"
+ "辨識中"
+
+ "發生錯誤,請再試一次。"
+ "無法連線"
+ "錯誤:語音內容過長。"
+ "音訊問題"
+ "伺服器錯誤"
+ "沒有聽到任何聲音"
+ "找不到相符的項目"
+ "未安裝語音搜尋"
+ "提示:""滑過鍵盤即可說話"
+ "提示:""下次可嘗試說出標點符號,例如「句號」、「逗號」或「問號」。"
+ "取消"
+ "確定"
+ "語音輸入"
+
+ "於主鍵盤"
+ "符號鍵盤上"
+ "關閉"
+
+
+ "主鍵盤上的麥克風"
+ "符號鍵盤上的麥克風"
+ "已停用語音輸入"
+
+ "說話後自動提交"
+ "搜尋或前往下一個欄位時自動按下輸入。"
+ "開啟鍵盤"\n\n"輕觸任何文字欄位。"
+ "關閉鍵盤"\n\n"按下 Back 鍵。"
+ \n"輕觸並按住按鍵開啟選項"\n"輸入標點與輕重音。"
+ "鍵盤設定"\n\n"輕觸並按住 ""?123"" 鍵。"
+ ".com"
+ ".net"
+ ".org"
+ ".gov"
+ ".edu"
+ "選取輸入法"
+ "輸入語言"
+ "以手指在空白鍵上滑動可變更語言"
+ "← 再次輕觸即可儲存"
+ "可使用字典"
+ "啟用使用者意見回饋"
+ "自動將使用統計資料和當機報告傳送給 Google,協助改善這個輸入法編輯器。"
+ "輕觸此處可修正字詞"
+ "輕觸輸入的字詞即可加以修正"
+ "鍵盤主題"
+ "鍵盤"
+ "語音"
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/attrs.xml b/src/java/KP2ASoftKeyboard2/java/res/values/attrs.xml
new file mode 100644
index 00000000..995373e8
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/attrs.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/bools.xml b/src/java/KP2ASoftKeyboard2/java/res/values/bools.xml
new file mode 100644
index 00000000..5a24e4c6
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/bools.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ true
+
+ false
+
+ true
+ true
+
+ true
+ true
+ true
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/colors.xml b/src/java/KP2ASoftKeyboard2/java/res/values/colors.xml
new file mode 100644
index 00000000..0161589a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/colors.xml
@@ -0,0 +1,32 @@
+
+
+
+ #FFFFFFFF
+ #FFFCAE00
+ #FFFCAE00
+ #00000000
+ #80000000
+ #80FFFFFF
+ #FFC0C0C0
+ #A0000000
+ #FFFFFFFF
+ #FFFFFFFF
+ #FF000000
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/config.xml b/src/java/KP2ASoftKeyboard2/java/res/values/config.xml
new file mode 100644
index 00000000..edb6cd84
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ 0
+ 10
+ 0
+ 70
+ 0
+ 100
+ 400
+ 50
+ 400
+ 800
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/dimens.xml b/src/java/KP2ASoftKeyboard2/java/res/values/dimens.xml
new file mode 100644
index 00000000..0c3b6ad2
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/dimens.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 0.290in
+ 0.035in
+ 0.325in
+ 0.06in
+ 22dip
+ 42dip
+ 63dip
+ 4dip
+
+ 2.5in
+ 0.13in
+ 0.083in
+ 40sp
+ 0.000in
+
+ 80sp
+
+
+ 0.553in
+
+ -0.325in
+ 0.05in
+
+ -0.05in
+ 0.3in
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/donottranslate-altchars.xml b/src/java/KP2ASoftKeyboard2/java/res/values/donottranslate-altchars.xml
new file mode 100644
index 00000000..bba7282c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/donottranslate-altchars.xml
@@ -0,0 +1,46 @@
+
+
+
+ àáâãäåæ
+ èéêë
+ ìíîï
+ òóôõöœø
+ ùúûü
+ §ß
+ ñ
+ ç
+ ýÿ
+ 1
+ 2
+
+ 4
+ 5
+
+
+
+ 0
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/donottranslate.xml b/src/java/KP2ASoftKeyboard2/java/res/values/donottranslate.xml
new file mode 100644
index 00000000..93660992
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/donottranslate.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ .\u0009\u0020,;:!?\n()[]*&@{}/<>_+=|\u0022
+
+ .,!?)
+
+ !?,\u0022\u0027:()-/@_
+
+
+
+ 0
+
+ 1
+
+ 2
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/durations.xml b/src/java/KP2ASoftKeyboard2/java/res/values/durations.xml
new file mode 100644
index 00000000..92af68e3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/durations.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ 40
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/keycodes.xml b/src/java/KP2ASoftKeyboard2/java/res/values/keycodes.xml
new file mode 100644
index 00000000..6149f9dc
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/keycodes.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ 9
+ 10
+ 32
+ -1
+ -2
+ -5
+
+ -100
+ -102
+ -103
+ -200
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/strings.xml b/src/java/KP2ASoftKeyboard2/java/res/values/strings.xml
new file mode 100644
index 00000000..6644d222
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/strings.xml
@@ -0,0 +1,379 @@
+
+
+
+
+ Android keyboard
+
+ Android keyboard settings
+
+ Input options
+
+
+ Vibrate on keypress
+
+
+ Sound on keypress
+
+
+ Popup on keypress
+
+
+ Correct typing errors
+
+
+ Enable input error correction
+
+
+ Landscape input errors
+
+
+ Enable input error correction
+
+
+ Word suggestions
+
+
+ Automatically correct the previous word
+
+
+ Word suggestions
+
+ Word suggestion settings
+
+ Enable auto completion while typing
+
+
+ Auto completion
+
+
+ Increase text field size
+
+ Hide word suggestions in landscape view
+
+
+ Auto-capitalization
+
+ Capitalize the start of a sentence
+
+ Auto-punctuate
+
+
+
+
+ Quick fixes
+
+ Corrects commonly typed mistakes
+
+
+ Show suggestions
+
+ Display suggested words while typing
+
+
+ Auto-complete
+
+ Spacebar and punctuation automatically insert highlighted word
+
+
+ Show settings key
+
+
+ @string/settings_key_mode_auto
+ @string/settings_key_mode_always_show
+ @string/settings_key_mode_always_hide
+
+
+ Automatic
+
+ Always show
+
+ Always hide
+
+
+ @string/settings_key_mode_auto_name
+ @string/settings_key_mode_always_show_name
+ @string/settings_key_mode_always_hide_name
+
+
+
+ Bigram Suggestions
+
+ Use previous word to improve suggestion
+
+
+
+ None
+ Basic
+ Advanced
+
+
+
+ 0
+
+ 1
+
+ 2
+
+
+ @string/prediction_none
+ @string/prediction_basic
+ @string/prediction_full
+
+
+
+ %s : Saved
+
+
+ Hold a key down to see accents (ø, ö, etc.)
+
+ Press the back key \u21B6 to close the keyboard at any point
+
+ Access numbers and symbols
+
+ Press and hold the left-most word to add it to the dictionary
+
+
+
+ Touch this hint to continue »
+
+
+ Touch here to close this hint and start typing!
+
+
+ The keyboard opens any time you touch a text field
+
+
+ Touch & hold a key to view accents\n(ø, ö, ô, ó, and so on)
+
+
+
+ Switch to numbers and symbols by touching this key
+
+
+ Go back to letters by touching this key again
+
+
+ Touch & hold this key to change keyboard settings, like auto complete
+
+
+ Try it!
+
+
+
+ Go
+
+ Next
+
+ Done
+
+ Send
+
+ \?123
+
+ 123
+
+ ABC
+
+ ALT
+
+
+
+
+ Voice input
+
+
+ Voice input is not currently supported for your language, but does work in English.
+
+
+ Voice input is an experimental feature using Google\'s networked speech recognition.
+
+
+ To turn off voice input, go to keyboard settings.
+
+
+ To use voice input, press the microphone button or slide your finger across the on-screen keyboard.
+
+
+ Speak now
+
+
+ Working
+
+
+
+
+
+ Error. Please try again.
+
+
+ Couldn\'t connect
+
+
+ Error, too much speech.
+
+
+ Audio problem
+
+
+ Server error
+
+
+ No speech heard
+
+
+ No matches found
+
+
+ Voice search not installed
+
+
+ Hint: Swipe across keyboard to speak
+
+
+ Hint: Next time, try speaking punctuation like \"period\", \"comma\", or \"question mark\".
+
+
+ Cancel
+
+
+ OK
+
+
+ Voice input
+
+
+
+ On main keyboard
+ On symbols keyboard
+ Off
+
+
+
+ 0
+
+ 1
+
+ 2
+
+
+ @string/voice_mode_main
+ @string/voice_mode_symbols
+ @string/voice_mode_off
+
+
+
+
+ Mic on main keyboard
+ Mic on symbols keyboard
+ Voice input is disabled
+
+
+
+ Auto submit after voice
+
+
+ Automatically press enter when searching or going to the next field.
+
+
+
+ Open the keyboard\n\nTouch any text field.
+
+
+ Close the keyboard\n\nPress the Back key.
+
+
+ Touch \u0026 hold a key for options\n\nAccess punctuation and accents.
+
+
+ Keyboard settings\n\nTouch \u0026 hold the \?123\ key.
+
+
+ ".com"
+
+ ".net"
+
+ ".org"
+
+ ".gov"
+
+ ".edu"
+
+
+ Select input method
+
+
+ Input languages
+
+ Slide finger on spacebar to change language
+
+
+ \u2190 Touch again to save
+
+
+ Dictionary available
+
+
+ Enable user feedback
+
+ Help improve this input method editor by automatically sending usage statistics and crash reports to Google.
+
+ Touch to correct words
+
+ Touch entered words to correct them
+
+
+ Keyboard Theme
+ Basic
+ Basic (High Contrast)
+ Stone (bold)
+ Stone (normal)
+ Gingerbread
+
+
+ @string/layout_basic
+ @string/layout_high_contrast
+ @string/layout_stone_normal
+ @string/layout_stone_bold
+ @string/layout_gingerbread
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+
+
+ keyboard
+ voice
+
+
+ Android keyboard Debug settings
+ Debug Mode
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/values/styles.xml b/src/java/KP2ASoftKeyboard2/java/res/values/styles.xml
new file mode 100644
index 00000000..0372b07c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/values/styles.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-da/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-da/kbd_qwerty.xml
new file mode 100644
index 00000000..e2ec674f
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-da/kbd_qwerty.xml
@@ -0,0 +1,536 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-da/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-da/kbd_qwerty_black.xml
new file mode 100644
index 00000000..50a57b93
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-da/kbd_qwerty_black.xml
@@ -0,0 +1,478 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-de/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-de/kbd_qwerty.xml
new file mode 100644
index 00000000..2d790f9a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-de/kbd_qwerty.xml
@@ -0,0 +1,515 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-de/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-de/kbd_qwerty_black.xml
new file mode 100644
index 00000000..01b5f6a3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-de/kbd_qwerty_black.xml
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-fr/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-fr/kbd_qwerty.xml
new file mode 100644
index 00000000..d7615020
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-fr/kbd_qwerty.xml
@@ -0,0 +1,516 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-fr/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-fr/kbd_qwerty_black.xml
new file mode 100644
index 00000000..2f89a82a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-fr/kbd_qwerty_black.xml
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-iw/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-iw/kbd_qwerty.xml
new file mode 100644
index 00000000..9a0c6c2e
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-iw/kbd_qwerty.xml
@@ -0,0 +1,474 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-iw/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-iw/kbd_qwerty_black.xml
new file mode 100644
index 00000000..056d18b8
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-iw/kbd_qwerty_black.xml
@@ -0,0 +1,416 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-nb/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-nb/kbd_qwerty.xml
new file mode 100644
index 00000000..2a7df8ae
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-nb/kbd_qwerty.xml
@@ -0,0 +1,536 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-nb/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-nb/kbd_qwerty_black.xml
new file mode 100644
index 00000000..24c29674
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-nb/kbd_qwerty_black.xml
@@ -0,0 +1,478 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-ru/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-ru/kbd_qwerty.xml
new file mode 100644
index 00000000..38f687e0
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-ru/kbd_qwerty.xml
@@ -0,0 +1,514 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-ru/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-ru/kbd_qwerty_black.xml
new file mode 100644
index 00000000..63111144
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-ru/kbd_qwerty_black.xml
@@ -0,0 +1,456 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-sr/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-sr/kbd_qwerty.xml
new file mode 100644
index 00000000..c137b105
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-sr/kbd_qwerty.xml
@@ -0,0 +1,507 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-sr/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-sr/kbd_qwerty_black.xml
new file mode 100644
index 00000000..fec63804
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-sr/kbd_qwerty_black.xml
@@ -0,0 +1,449 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-sv/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-sv/kbd_qwerty.xml
new file mode 100644
index 00000000..9a367015
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-sv/kbd_qwerty.xml
@@ -0,0 +1,537 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml-sv/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml-sv/kbd_qwerty_black.xml
new file mode 100644
index 00000000..083040b3
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml-sv/kbd_qwerty_black.xml
@@ -0,0 +1,480 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/dictionary.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/dictionary.xml
new file mode 100644
index 00000000..7b770a8b
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/dictionary.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone.xml
new file mode 100644
index 00000000..10774c66
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_black.xml
new file mode 100644
index 00000000..5afa9a19
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_black.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_symbols.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_symbols.xml
new file mode 100644
index 00000000..4c928a8d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_symbols.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_symbols_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_symbols_black.xml
new file mode 100644
index 00000000..4d686e14
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_phone_symbols_black.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_popup_narrow_template.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_popup_narrow_template.xml
new file mode 100644
index 00000000..23c686e8
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_popup_narrow_template.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_popup_template.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_popup_template.xml
new file mode 100644
index 00000000..a287be1f
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_popup_template.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_qwerty.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_qwerty.xml
new file mode 100644
index 00000000..9173df6a
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_qwerty.xml
@@ -0,0 +1,505 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_qwerty_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_qwerty_black.xml
new file mode 100644
index 00000000..167a3416
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_qwerty_black.xml
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols.xml
new file mode 100644
index 00000000..91a3f9c0
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols.xml
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_black.xml
new file mode 100644
index 00000000..95b92d31
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_black.xml
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_shift.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_shift.xml
new file mode 100644
index 00000000..71697d68
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_shift.xml
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_shift_black.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_shift_black.xml
new file mode 100644
index 00000000..bcaabda2
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/kbd_symbols_shift_black.xml
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/language_prefs.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/language_prefs.xml
new file mode 100644
index 00000000..b7a4c07d
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/language_prefs.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/method.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/method.xml
new file mode 100644
index 00000000..3cf8d2dd
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/method.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/popup_at.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_at.xml
new file mode 100644
index 00000000..197eea44
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_at.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/popup_comma.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_comma.xml
new file mode 100644
index 00000000..7666f4b6
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_comma.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/popup_domains.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_domains.xml
new file mode 100644
index 00000000..4e9789ff
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_domains.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/popup_mic.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_mic.xml
new file mode 100644
index 00000000..5bbd7dfa
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_mic.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/popup_punctuation.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_punctuation.xml
new file mode 100644
index 00000000..c429e38b
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_punctuation.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/popup_slash.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_slash.xml
new file mode 100644
index 00000000..a38fde0e
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_slash.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/popup_smileys.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_smileys.xml
new file mode 100644
index 00000000..1a14e1df
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/popup_smileys.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/prefs.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/prefs.xml
new file mode 100644
index 00000000..247f3bc5
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/prefs.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/res/xml/prefs_for_debug.xml b/src/java/KP2ASoftKeyboard2/java/res/xml/prefs_for_debug.xml
new file mode 100644
index 00000000..8177d3c6
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/res/xml/prefs_for_debug.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/AutoDictionary.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/AutoDictionary.java
new file mode 100644
index 00000000..cb427a2c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/AutoDictionary.java
@@ -0,0 +1,259 @@
+/*
+ * Copyright (C) 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package keepass2android.softkeyboard;
+
+import java.util.HashMap;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.database.sqlite.SQLiteQueryBuilder;
+import android.os.AsyncTask;
+import android.provider.BaseColumns;
+import android.util.Log;
+
+/**
+ * Stores new words temporarily until they are promoted to the user dictionary
+ * for longevity. Words in the auto dictionary are used to determine if it's ok
+ * to accept a word that's not in the main or user dictionary. Using a new word
+ * repeatedly will promote it to the user dictionary.
+ */
+public class AutoDictionary extends ExpandableDictionary {
+ // Weight added to a user picking a new word from the suggestion strip
+ static final int FREQUENCY_FOR_PICKED = 3;
+ // Weight added to a user typing a new word that doesn't get corrected (or is reverted)
+ static final int FREQUENCY_FOR_TYPED = 1;
+ // A word that is frequently typed and gets promoted to the user dictionary, uses this
+ // frequency.
+ static final int FREQUENCY_FOR_AUTO_ADD = 250;
+ // If the user touches a typed word 2 times or more, it will become valid.
+ private static final int VALIDITY_THRESHOLD = 2 * FREQUENCY_FOR_PICKED;
+ // If the user touches a typed word 4 times or more, it will be added to the user dict.
+ private static final int PROMOTION_THRESHOLD = 4 * FREQUENCY_FOR_PICKED;
+
+ private KP2AKeyboard mIme;
+ // Locale for which this auto dictionary is storing words
+ private String mLocale;
+
+ private HashMap mPendingWrites = new HashMap();
+ private final Object mPendingWritesLock = new Object();
+
+ private static final String DATABASE_NAME = "auto_dict.db";
+ private static final int DATABASE_VERSION = 1;
+
+ // These are the columns in the dictionary
+ // TODO: Consume less space by using a unique id for locale instead of the whole
+ // 2-5 character string.
+ private static final String COLUMN_ID = BaseColumns._ID;
+ private static final String COLUMN_WORD = "word";
+ private static final String COLUMN_FREQUENCY = "freq";
+ private static final String COLUMN_LOCALE = "locale";
+
+ /** Sort by descending order of frequency. */
+ public static final String DEFAULT_SORT_ORDER = COLUMN_FREQUENCY + " DESC";
+
+ /** Name of the words table in the auto_dict.db */
+ private static final String AUTODICT_TABLE_NAME = "words";
+
+ private static HashMap sDictProjectionMap;
+
+ static {
+ sDictProjectionMap = new HashMap();
+ sDictProjectionMap.put(COLUMN_ID, COLUMN_ID);
+ sDictProjectionMap.put(COLUMN_WORD, COLUMN_WORD);
+ sDictProjectionMap.put(COLUMN_FREQUENCY, COLUMN_FREQUENCY);
+ sDictProjectionMap.put(COLUMN_LOCALE, COLUMN_LOCALE);
+ }
+
+ private static DatabaseHelper sOpenHelper = null;
+
+ public AutoDictionary(Context context, KP2AKeyboard ime, String locale, int dicTypeId) {
+ super(context, dicTypeId);
+ mIme = ime;
+ mLocale = locale;
+ if (sOpenHelper == null) {
+ sOpenHelper = new DatabaseHelper(getContext());
+ }
+ if (mLocale != null && mLocale.length() > 1) {
+ loadDictionary();
+ }
+ }
+
+ @Override
+ public boolean isValidWord(CharSequence word) {
+ final int frequency = getWordFrequency(word);
+ return frequency >= VALIDITY_THRESHOLD;
+ }
+
+ @Override
+ public void close() {
+ flushPendingWrites();
+ // Don't close the database as locale changes will require it to be reopened anyway
+ // Also, the database is written to somewhat frequently, so it needs to be kept alive
+ // throughout the life of the process.
+ // mOpenHelper.close();
+ super.close();
+ }
+
+ @Override
+ public void loadDictionaryAsync() {
+ // Load the words that correspond to the current input locale
+ Cursor cursor = query(COLUMN_LOCALE + "=?", new String[] { mLocale });
+ try {
+ if (cursor.moveToFirst()) {
+ int wordIndex = cursor.getColumnIndex(COLUMN_WORD);
+ int frequencyIndex = cursor.getColumnIndex(COLUMN_FREQUENCY);
+ while (!cursor.isAfterLast()) {
+ String word = cursor.getString(wordIndex);
+ int frequency = cursor.getInt(frequencyIndex);
+ // Safeguard against adding really long words. Stack may overflow due
+ // to recursive lookup
+ if (word.length() < getMaxWordLength()) {
+ super.addWord(word, frequency);
+ }
+ cursor.moveToNext();
+ }
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+
+ @Override
+ public void addWord(String word, int addFrequency) {
+ final int length = word.length();
+ // Don't add very short or very long words.
+ if (length < 2 || length > getMaxWordLength()) return;
+ if (mIme.getCurrentWord().isAutoCapitalized()) {
+ // Remove caps before adding
+ word = Character.toLowerCase(word.charAt(0)) + word.substring(1);
+ }
+ int freq = getWordFrequency(word);
+ freq = freq < 0 ? addFrequency : freq + addFrequency;
+ super.addWord(word, freq);
+
+ if (freq >= PROMOTION_THRESHOLD) {
+ mIme.promoteToUserDictionary(word, FREQUENCY_FOR_AUTO_ADD);
+ freq = 0;
+ }
+
+ synchronized (mPendingWritesLock) {
+ // Write a null frequency if it is to be deleted from the db
+ mPendingWrites.put(word, freq == 0 ? null : new Integer(freq));
+ }
+ }
+
+ /**
+ * Schedules a background thread to write any pending words to the database.
+ */
+ public void flushPendingWrites() {
+ synchronized (mPendingWritesLock) {
+ // Nothing pending? Return
+ if (mPendingWrites.isEmpty()) return;
+ // Create a background thread to write the pending entries
+ new UpdateDbTask(getContext(), sOpenHelper, mPendingWrites, mLocale).execute();
+ // Create a new map for writing new entries into while the old one is written to db
+ mPendingWrites = new HashMap();
+ }
+ }
+
+ /**
+ * This class helps open, create, and upgrade the database file.
+ */
+ private static class DatabaseHelper extends SQLiteOpenHelper {
+
+ DatabaseHelper(Context context) {
+ super(context, DATABASE_NAME, null, DATABASE_VERSION);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ db.execSQL("CREATE TABLE " + AUTODICT_TABLE_NAME + " ("
+ + COLUMN_ID + " INTEGER PRIMARY KEY,"
+ + COLUMN_WORD + " TEXT,"
+ + COLUMN_FREQUENCY + " INTEGER,"
+ + COLUMN_LOCALE + " TEXT"
+ + ");");
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ Log.w("AutoDictionary", "Upgrading database from version " + oldVersion + " to "
+ + newVersion + ", which will destroy all old data");
+ db.execSQL("DROP TABLE IF EXISTS " + AUTODICT_TABLE_NAME);
+ onCreate(db);
+ }
+ }
+
+ private Cursor query(String selection, String[] selectionArgs) {
+ SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
+ qb.setTables(AUTODICT_TABLE_NAME);
+ qb.setProjectionMap(sDictProjectionMap);
+
+ // Get the database and run the query
+ SQLiteDatabase db = sOpenHelper.getReadableDatabase();
+ Cursor c = qb.query(db, null, selection, selectionArgs, null, null,
+ DEFAULT_SORT_ORDER);
+ return c;
+ }
+
+ /**
+ * Async task to write pending words to the database so that it stays in sync with
+ * the in-memory trie.
+ */
+ private static class UpdateDbTask extends AsyncTask {
+ private final HashMap mMap;
+ private final DatabaseHelper mDbHelper;
+ private final String mLocale;
+
+ public UpdateDbTask(Context context, DatabaseHelper openHelper,
+ HashMap pendingWrites, String locale) {
+ mMap = pendingWrites;
+ mLocale = locale;
+ mDbHelper = openHelper;
+ }
+
+ @Override
+ protected Void doInBackground(Void... v) {
+ SQLiteDatabase db = mDbHelper.getWritableDatabase();
+ // Write all the entries to the db
+ Set> mEntries = mMap.entrySet();
+ for (Entry entry : mEntries) {
+ Integer freq = entry.getValue();
+ db.delete(AUTODICT_TABLE_NAME, COLUMN_WORD + "=? AND " + COLUMN_LOCALE + "=?",
+ new String[] { entry.getKey(), mLocale });
+ if (freq != null) {
+ db.insert(AUTODICT_TABLE_NAME, null,
+ getContentValues(entry.getKey(), freq, mLocale));
+ }
+ }
+ return null;
+ }
+
+ private ContentValues getContentValues(String word, int frequency, String locale) {
+ ContentValues values = new ContentValues(4);
+ values.put(COLUMN_WORD, word);
+ values.put(COLUMN_FREQUENCY, frequency);
+ values.put(COLUMN_LOCALE, locale);
+ return values;
+ }
+ }
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/BinaryDictionary.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/BinaryDictionary.java
new file mode 100644
index 00000000..63184ad6
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/BinaryDictionary.java
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package keepass2android.softkeyboard;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.Channels;
+import java.util.Arrays;
+
+import android.content.Context;
+import android.util.Log;
+
+/**
+ * Implements a static, compacted, binary dictionary of standard words.
+ */
+public class BinaryDictionary extends Dictionary {
+
+ /**
+ * There is difference between what java and native code can handle.
+ * This value should only be used in BinaryDictionary.java
+ * It is necessary to keep it at this value because some languages e.g. German have
+ * really long words.
+ */
+ protected static final int MAX_WORD_LENGTH = 48;
+
+ private static final String TAG = "BinaryDictionary";
+ private static final int MAX_ALTERNATIVES = 16;
+ private static final int MAX_WORDS = 18;
+ private static final int MAX_BIGRAMS = 60;
+
+ private static final int TYPED_LETTER_MULTIPLIER = 2;
+ private static final boolean ENABLE_MISSED_CHARACTERS = true;
+
+ private int mDicTypeId;
+ private int mNativeDict;
+ private int mDictLength;
+ private int[] mInputCodes = new int[MAX_WORD_LENGTH * MAX_ALTERNATIVES];
+ private char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS];
+ private char[] mOutputChars_bigrams = new char[MAX_WORD_LENGTH * MAX_BIGRAMS];
+ private int[] mFrequencies = new int[MAX_WORDS];
+ private int[] mFrequencies_bigrams = new int[MAX_BIGRAMS];
+ // Keep a reference to the native dict direct buffer in Java to avoid
+ // unexpected deallocation of the direct buffer.
+ private ByteBuffer mNativeDictDirectBuffer;
+
+ static {
+ try {
+ System.loadLibrary("jni_latinime");
+ } catch (UnsatisfiedLinkError ule) {
+ Log.e("BinaryDictionary", "Could not load native library jni_latinime");
+ }
+ }
+
+ /**
+ * Create a dictionary from a raw resource file
+ * @param context application context for reading resources
+ * @param resId the resource containing the raw binary dictionary
+ */
+ public BinaryDictionary(Context context, int[] resId, int dicTypeId) {
+ if (resId != null && resId.length > 0 && resId[0] != 0) {
+ loadDictionary(context, resId);
+ }
+ mDicTypeId = dicTypeId;
+ }
+
+ /**
+ * Create a dictionary from a byte buffer. This is used for testing.
+ * @param context application context for reading resources
+ * @param byteBuffer a ByteBuffer containing the binary dictionary
+ */
+ public BinaryDictionary(Context context, ByteBuffer byteBuffer, int dicTypeId) {
+ if (byteBuffer != null) {
+ if (byteBuffer.isDirect()) {
+ mNativeDictDirectBuffer = byteBuffer;
+ } else {
+ mNativeDictDirectBuffer = ByteBuffer.allocateDirect(byteBuffer.capacity());
+ byteBuffer.rewind();
+ mNativeDictDirectBuffer.put(byteBuffer);
+ }
+ mDictLength = byteBuffer.capacity();
+ mNativeDict = openNative(mNativeDictDirectBuffer,
+ TYPED_LETTER_MULTIPLIER, FULL_WORD_FREQ_MULTIPLIER);
+ }
+ mDicTypeId = dicTypeId;
+ }
+
+ private native int openNative(ByteBuffer bb, int typedLetterMultiplier,
+ int fullWordMultiplier);
+ private native void closeNative(int dict);
+ private native boolean isValidWordNative(int nativeData, char[] word, int wordLength);
+ private native int getSuggestionsNative(int dict, int[] inputCodes, int codesSize,
+ char[] outputChars, int[] frequencies, int maxWordLength, int maxWords,
+ int maxAlternatives, int skipPos, int[] nextLettersFrequencies, int nextLettersSize);
+ private native int getBigramsNative(int dict, char[] prevWord, int prevWordLength,
+ int[] inputCodes, int inputCodesLength, char[] outputChars, int[] frequencies,
+ int maxWordLength, int maxBigrams, int maxAlternatives);
+
+ private final void loadDictionary(Context context, int[] resId) {
+ InputStream[] is = null;
+ try {
+ // merging separated dictionary into one if dictionary is separated
+ int total = 0;
+ is = new InputStream[resId.length];
+ for (int i = 0; i < resId.length; i++) {
+ is[i] = context.getResources().openRawResource(resId[i]);
+ total += is[i].available();
+ }
+
+ mNativeDictDirectBuffer =
+ ByteBuffer.allocateDirect(total).order(ByteOrder.nativeOrder());
+ int got = 0;
+ for (int i = 0; i < resId.length; i++) {
+ got += Channels.newChannel(is[i]).read(mNativeDictDirectBuffer);
+ }
+ if (got != total) {
+ Log.e(TAG, "Read " + got + " bytes, expected " + total);
+ } else {
+ mNativeDict = openNative(mNativeDictDirectBuffer,
+ TYPED_LETTER_MULTIPLIER, FULL_WORD_FREQ_MULTIPLIER);
+ mDictLength = total;
+ }
+ } catch (IOException e) {
+ Log.w(TAG, "No available memory for binary dictionary");
+ } finally {
+ try {
+ if (is != null) {
+ for (int i = 0; i < is.length; i++) {
+ is[i].close();
+ }
+ }
+ } catch (IOException e) {
+ Log.w(TAG, "Failed to close input stream");
+ }
+ }
+ }
+
+
+ @Override
+ public void getBigrams(final WordComposer codes, final CharSequence previousWord,
+ final WordCallback callback, int[] nextLettersFrequencies) {
+
+ char[] chars = previousWord.toString().toCharArray();
+ Arrays.fill(mOutputChars_bigrams, (char) 0);
+ Arrays.fill(mFrequencies_bigrams, 0);
+
+ int codesSize = codes.size();
+ Arrays.fill(mInputCodes, -1);
+ int[] alternatives = codes.getCodesAt(0);
+ System.arraycopy(alternatives, 0, mInputCodes, 0,
+ Math.min(alternatives.length, MAX_ALTERNATIVES));
+
+ int count = getBigramsNative(mNativeDict, chars, chars.length, mInputCodes, codesSize,
+ mOutputChars_bigrams, mFrequencies_bigrams, MAX_WORD_LENGTH, MAX_BIGRAMS,
+ MAX_ALTERNATIVES);
+
+ for (int j = 0; j < count; j++) {
+ if (mFrequencies_bigrams[j] < 1) break;
+ int start = j * MAX_WORD_LENGTH;
+ int len = 0;
+ while (mOutputChars_bigrams[start + len] != 0) {
+ len++;
+ }
+ if (len > 0) {
+ callback.addWord(mOutputChars_bigrams, start, len, mFrequencies_bigrams[j],
+ mDicTypeId, DataType.BIGRAM);
+ }
+ }
+ }
+
+ @Override
+ public void getWords(final WordComposer codes, final WordCallback callback,
+ int[] nextLettersFrequencies) {
+ final int codesSize = codes.size();
+ // Won't deal with really long words.
+ if (codesSize > MAX_WORD_LENGTH - 1) return;
+
+ Arrays.fill(mInputCodes, -1);
+ for (int i = 0; i < codesSize; i++) {
+ int[] alternatives = codes.getCodesAt(i);
+ System.arraycopy(alternatives, 0, mInputCodes, i * MAX_ALTERNATIVES,
+ Math.min(alternatives.length, MAX_ALTERNATIVES));
+ }
+ Arrays.fill(mOutputChars, (char) 0);
+ Arrays.fill(mFrequencies, 0);
+
+ int count = getSuggestionsNative(mNativeDict, mInputCodes, codesSize,
+ mOutputChars, mFrequencies,
+ MAX_WORD_LENGTH, MAX_WORDS, MAX_ALTERNATIVES, -1,
+ nextLettersFrequencies,
+ nextLettersFrequencies != null ? nextLettersFrequencies.length : 0);
+
+ // If there aren't sufficient suggestions, search for words by allowing wild cards at
+ // the different character positions. This feature is not ready for prime-time as we need
+ // to figure out the best ranking for such words compared to proximity corrections and
+ // completions.
+ if (ENABLE_MISSED_CHARACTERS && count < 5) {
+ for (int skip = 0; skip < codesSize; skip++) {
+ int tempCount = getSuggestionsNative(mNativeDict, mInputCodes, codesSize,
+ mOutputChars, mFrequencies,
+ MAX_WORD_LENGTH, MAX_WORDS, MAX_ALTERNATIVES, skip,
+ null, 0);
+ count = Math.max(count, tempCount);
+ if (tempCount > 0) break;
+ }
+ }
+
+ for (int j = 0; j < count; j++) {
+ if (mFrequencies[j] < 1) break;
+ int start = j * MAX_WORD_LENGTH;
+ int len = 0;
+ while (mOutputChars[start + len] != 0) {
+ len++;
+ }
+ if (len > 0) {
+ callback.addWord(mOutputChars, start, len, mFrequencies[j], mDicTypeId,
+ DataType.UNIGRAM);
+ }
+ }
+ }
+
+ @Override
+ public boolean isValidWord(CharSequence word) {
+ if (word == null) return false;
+ char[] chars = word.toString().toCharArray();
+ return isValidWordNative(mNativeDict, chars, chars.length);
+ }
+
+ public int getSize() {
+ return mDictLength; // This value is initialized on the call to openNative()
+ }
+
+ @Override
+ public synchronized void close() {
+ if (mNativeDict != 0) {
+ closeNative(mNativeDict);
+ mNativeDict = 0;
+ }
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ close();
+ super.finalize();
+ }
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/CandidateView.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/CandidateView.java
new file mode 100644
index 00000000..429eaa4c
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/CandidateView.java
@@ -0,0 +1,487 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package keepass2android.softkeyboard;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Paint.Align;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.GestureDetector;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.PopupWindow;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class CandidateView extends View {
+
+ private static final int OUT_OF_BOUNDS_WORD_INDEX = -1;
+ private static final int OUT_OF_BOUNDS_X_COORD = -1;
+
+ private KP2AKeyboard mService;
+ private final ArrayList mSuggestions = new ArrayList();
+ private boolean mShowingCompletions;
+ private CharSequence mSelectedString;
+ private int mSelectedIndex;
+ private int mTouchX = OUT_OF_BOUNDS_X_COORD;
+ private final Drawable mSelectionHighlight;
+ private boolean mTypedWordValid;
+
+ private boolean mHaveMinimalSuggestion;
+
+ private Rect mBgPadding;
+
+ private final TextView mPreviewText;
+ private final PopupWindow mPreviewPopup;
+ private int mCurrentWordIndex;
+ private Drawable mDivider;
+
+ private static final int MAX_SUGGESTIONS = 32;
+ private static final int SCROLL_PIXELS = 20;
+
+ private final int[] mWordWidth = new int[MAX_SUGGESTIONS];
+ private final int[] mWordX = new int[MAX_SUGGESTIONS];
+ private int mPopupPreviewX;
+ private int mPopupPreviewY;
+
+ private static final int X_GAP = 10;
+
+ private final int mColorNormal;
+ private final int mColorRecommended;
+ private final int mColorOther;
+ private final Paint mPaint;
+ private final int mDescent;
+ private boolean mScrolled;
+ private boolean mShowingAddToDictionary;
+ private CharSequence mAddToDictionaryHint;
+
+ private int mTargetScrollX;
+
+ private final int mMinTouchableWidth;
+
+ private int mTotalWidth;
+
+ private final GestureDetector mGestureDetector;
+
+ /**
+ * Construct a CandidateView for showing suggested words for completion.
+ * @param context
+ * @param attrs
+ */
+ public CandidateView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mSelectionHighlight = context.getResources().getDrawable(
+ R.drawable.list_selector_background_pressed);
+
+ LayoutInflater inflate =
+ (LayoutInflater) context
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ Resources res = context.getResources();
+ mPreviewPopup = new PopupWindow(context);
+ mPreviewText = (TextView) inflate.inflate(R.layout.candidate_preview, null);
+ mPreviewPopup.setWindowLayoutMode(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+ mPreviewPopup.setContentView(mPreviewText);
+ mPreviewPopup.setBackgroundDrawable(null);
+ mPreviewPopup.setAnimationStyle(R.style.KeyPreviewAnimation);
+ mColorNormal = res.getColor(R.color.candidate_normal);
+ mColorRecommended = res.getColor(R.color.candidate_recommended);
+ mColorOther = res.getColor(R.color.candidate_other);
+ mDivider = res.getDrawable(R.drawable.keyboard_suggest_strip_divider);
+ mAddToDictionaryHint = res.getString(R.string.hint_add_to_dictionary);
+
+ mPaint = new Paint();
+ mPaint.setColor(mColorNormal);
+ mPaint.setAntiAlias(true);
+ mPaint.setTextSize(mPreviewText.getTextSize());
+ mPaint.setStrokeWidth(0);
+ mPaint.setTextAlign(Align.CENTER);
+ mDescent = (int) mPaint.descent();
+ mMinTouchableWidth = (int)res.getDimension(R.dimen.candidate_min_touchable_width);
+
+ mGestureDetector = new GestureDetector(
+ new CandidateStripGestureListener(mMinTouchableWidth));
+ setWillNotDraw(false);
+ setHorizontalScrollBarEnabled(false);
+ setVerticalScrollBarEnabled(false);
+ scrollTo(0, getScrollY());
+ }
+
+ private class CandidateStripGestureListener extends GestureDetector.SimpleOnGestureListener {
+ private final int mTouchSlopSquare;
+
+ public CandidateStripGestureListener(int touchSlop) {
+ // Slightly reluctant to scroll to be able to easily choose the suggestion
+ mTouchSlopSquare = touchSlop * touchSlop;
+ }
+
+ @Override
+ public void onLongPress(MotionEvent me) {
+ if (mSuggestions.size() > 0) {
+ if (me.getX() + getScrollX() < mWordWidth[0] && getScrollX() < 10) {
+ longPressFirstWord();
+ }
+ }
+ }
+
+ @Override
+ public boolean onDown(MotionEvent e) {
+ mScrolled = false;
+ return false;
+ }
+
+ @Override
+ public boolean onScroll(MotionEvent e1, MotionEvent e2,
+ float distanceX, float distanceY) {
+ if (!mScrolled) {
+ // This is applied only when we recognize that scrolling is starting.
+ final int deltaX = (int) (e2.getX() - e1.getX());
+ final int deltaY = (int) (e2.getY() - e1.getY());
+ final int distance = (deltaX * deltaX) + (deltaY * deltaY);
+ if (distance < mTouchSlopSquare) {
+ return true;
+ }
+ mScrolled = true;
+ }
+
+ final int width = getWidth();
+ mScrolled = true;
+ int scrollX = getScrollX();
+ scrollX += (int) distanceX;
+ if (scrollX < 0) {
+ scrollX = 0;
+ }
+ if (distanceX > 0 && scrollX + width > mTotalWidth) {
+ scrollX -= (int) distanceX;
+ }
+ mTargetScrollX = scrollX;
+ scrollTo(scrollX, getScrollY());
+ hidePreview();
+ invalidate();
+ return true;
+ }
+ }
+
+ /**
+ * A connection back to the service to communicate with the text field
+ * @param listener
+ */
+ public void setService(KP2AKeyboard listener) {
+ mService = listener;
+ }
+
+ @Override
+ public int computeHorizontalScrollRange() {
+ return mTotalWidth;
+ }
+
+ /**
+ * If the canvas is null, then only touch calculations are performed to pick the target
+ * candidate.
+ */
+ @Override
+ protected void onDraw(Canvas canvas) {
+ if (canvas != null) {
+ super.onDraw(canvas);
+ }
+ mTotalWidth = 0;
+
+ final int height = getHeight();
+ if (mBgPadding == null) {
+ mBgPadding = new Rect(0, 0, 0, 0);
+ if (getBackground() != null) {
+ getBackground().getPadding(mBgPadding);
+ }
+ mDivider.setBounds(0, 0, mDivider.getIntrinsicWidth(),
+ mDivider.getIntrinsicHeight());
+ }
+
+ final int count = mSuggestions.size();
+ final Rect bgPadding = mBgPadding;
+ final Paint paint = mPaint;
+ final int touchX = mTouchX;
+ final int scrollX = getScrollX();
+ final boolean scrolled = mScrolled;
+ final boolean typedWordValid = mTypedWordValid;
+ final int y = (int) (height + mPaint.getTextSize() - mDescent) / 2;
+
+ boolean existsAutoCompletion = false;
+
+ int x = 0;
+ for (int i = 0; i < count; i++) {
+ CharSequence suggestion = mSuggestions.get(i);
+ if (suggestion == null) continue;
+ final int wordLength = suggestion.length();
+
+ paint.setColor(mColorNormal);
+ if (mHaveMinimalSuggestion
+ && ((i == 1 && !typedWordValid) || (i == 0 && typedWordValid))) {
+ paint.setTypeface(Typeface.DEFAULT_BOLD);
+ paint.setColor(mColorRecommended);
+ existsAutoCompletion = true;
+ } else if (i != 0 || (wordLength == 1 && count > 1)) {
+ // HACK: even if i == 0, we use mColorOther when this suggestion's length is 1 and
+ // there are multiple suggestions, such as the default punctuation list.
+ paint.setColor(mColorOther);
+ }
+ int wordWidth;
+ if ((wordWidth = mWordWidth[i]) == 0) {
+ float textWidth = paint.measureText(suggestion, 0, wordLength);
+ wordWidth = Math.max(mMinTouchableWidth, (int) textWidth + X_GAP * 2);
+ mWordWidth[i] = wordWidth;
+ }
+
+ mWordX[i] = x;
+
+ if (touchX != OUT_OF_BOUNDS_X_COORD && !scrolled
+ && touchX + scrollX >= x && touchX + scrollX < x + wordWidth) {
+ if (canvas != null && !mShowingAddToDictionary) {
+ canvas.translate(x, 0);
+ mSelectionHighlight.setBounds(0, bgPadding.top, wordWidth, height);
+ mSelectionHighlight.draw(canvas);
+ canvas.translate(-x, 0);
+ }
+ mSelectedString = suggestion;
+ mSelectedIndex = i;
+ }
+
+ if (canvas != null) {
+ canvas.drawText(suggestion, 0, wordLength, x + wordWidth / 2, y, paint);
+ paint.setColor(mColorOther);
+ canvas.translate(x + wordWidth, 0);
+ // Draw a divider unless it's after the hint
+ if (!(mShowingAddToDictionary && i == 1)) {
+ mDivider.draw(canvas);
+ }
+ canvas.translate(-x - wordWidth, 0);
+ }
+ paint.setTypeface(Typeface.DEFAULT);
+ x += wordWidth;
+ }
+ mService.onAutoCompletionStateChanged(existsAutoCompletion);
+ mTotalWidth = x;
+ if (mTargetScrollX != scrollX) {
+ scrollToTarget();
+ }
+ }
+
+ private void scrollToTarget() {
+ int scrollX = getScrollX();
+ if (mTargetScrollX > scrollX) {
+ scrollX += SCROLL_PIXELS;
+ if (scrollX >= mTargetScrollX) {
+ scrollX = mTargetScrollX;
+ scrollTo(scrollX, getScrollY());
+ requestLayout();
+ } else {
+ scrollTo(scrollX, getScrollY());
+ }
+ } else {
+ scrollX -= SCROLL_PIXELS;
+ if (scrollX <= mTargetScrollX) {
+ scrollX = mTargetScrollX;
+ scrollTo(scrollX, getScrollY());
+ requestLayout();
+ } else {
+ scrollTo(scrollX, getScrollY());
+ }
+ }
+ invalidate();
+ }
+
+ public void setSuggestions(List suggestions, boolean completions,
+ boolean typedWordValid, boolean haveMinimalSuggestion) {
+ clear();
+ if (suggestions != null) {
+ int insertCount = Math.min(suggestions.size(), MAX_SUGGESTIONS);
+ for (CharSequence suggestion : suggestions) {
+ mSuggestions.add(suggestion);
+ if (--insertCount == 0)
+ break;
+ }
+ }
+ mShowingCompletions = completions;
+ mTypedWordValid = typedWordValid;
+ scrollTo(0, getScrollY());
+ mTargetScrollX = 0;
+ mHaveMinimalSuggestion = haveMinimalSuggestion;
+ // Compute the total width
+ onDraw(null);
+ invalidate();
+ requestLayout();
+ }
+
+ public boolean isShowingAddToDictionaryHint() {
+ return mShowingAddToDictionary;
+ }
+
+ public void showAddToDictionaryHint(CharSequence word) {
+ ArrayList suggestions = new ArrayList();
+ suggestions.add(word);
+ suggestions.add(mAddToDictionaryHint);
+ setSuggestions(suggestions, false, false, false);
+ mShowingAddToDictionary = true;
+ }
+
+ public boolean dismissAddToDictionaryHint() {
+ if (!mShowingAddToDictionary) return false;
+ clear();
+ return true;
+ }
+
+ /* package */ List getSuggestions() {
+ return mSuggestions;
+ }
+
+ public void clear() {
+ // Don't call mSuggestions.clear() because it's being used for logging
+ // in LatinIME.pickSuggestionManually().
+ mSuggestions.clear();
+ mTouchX = OUT_OF_BOUNDS_X_COORD;
+ mSelectedString = null;
+ mSelectedIndex = -1;
+ mShowingAddToDictionary = false;
+ invalidate();
+ Arrays.fill(mWordWidth, 0);
+ Arrays.fill(mWordX, 0);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent me) {
+
+ if (mGestureDetector.onTouchEvent(me)) {
+ return true;
+ }
+
+ int action = me.getAction();
+ int x = (int) me.getX();
+ int y = (int) me.getY();
+ mTouchX = x;
+
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ invalidate();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ if (y <= 0) {
+ // Fling up!?
+ if (mSelectedString != null) {
+ // If there are completions from the application, we don't change the state to
+ // STATE_PICKED_SUGGESTION
+ if (!mShowingCompletions) {
+ // This "acceptedSuggestion" will not be counted as a word because
+ // it will be counted in pickSuggestion instead.
+ TextEntryState.acceptedSuggestion(mSuggestions.get(0),
+ mSelectedString);
+ }
+ mService.pickSuggestionManually(mSelectedIndex, mSelectedString);
+ mSelectedString = null;
+ mSelectedIndex = -1;
+ }
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ if (!mScrolled) {
+ if (mSelectedString != null) {
+ if (mShowingAddToDictionary) {
+ longPressFirstWord();
+ clear();
+ } else {
+ if (!mShowingCompletions) {
+ TextEntryState.acceptedSuggestion(mSuggestions.get(0),
+ mSelectedString);
+ }
+ mService.pickSuggestionManually(mSelectedIndex, mSelectedString);
+ }
+ }
+ }
+ mSelectedString = null;
+ mSelectedIndex = -1;
+ requestLayout();
+ hidePreview();
+ invalidate();
+ break;
+ }
+ return true;
+ }
+
+ private void hidePreview() {
+ mTouchX = OUT_OF_BOUNDS_X_COORD;
+ mCurrentWordIndex = OUT_OF_BOUNDS_WORD_INDEX;
+ mPreviewPopup.dismiss();
+ }
+
+ private void showPreview(int wordIndex, String altText) {
+ int oldWordIndex = mCurrentWordIndex;
+ mCurrentWordIndex = wordIndex;
+ // If index changed or changing text
+ if (oldWordIndex != mCurrentWordIndex || altText != null) {
+ if (wordIndex == OUT_OF_BOUNDS_WORD_INDEX) {
+ hidePreview();
+ } else {
+ CharSequence word = altText != null? altText : mSuggestions.get(wordIndex);
+ mPreviewText.setText(word);
+ mPreviewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ int wordWidth = (int) (mPaint.measureText(word, 0, word.length()) + X_GAP * 2);
+ final int popupWidth = wordWidth
+ + mPreviewText.getPaddingLeft() + mPreviewText.getPaddingRight();
+ final int popupHeight = mPreviewText.getMeasuredHeight();
+ //mPreviewText.setVisibility(INVISIBLE);
+ mPopupPreviewX = mWordX[wordIndex] - mPreviewText.getPaddingLeft() - getScrollX()
+ + (mWordWidth[wordIndex] - wordWidth) / 2;
+ mPopupPreviewY = - popupHeight;
+ int [] offsetInWindow = new int[2];
+ getLocationInWindow(offsetInWindow);
+ if (mPreviewPopup.isShowing()) {
+ mPreviewPopup.update(mPopupPreviewX, mPopupPreviewY + offsetInWindow[1],
+ popupWidth, popupHeight);
+ } else {
+ mPreviewPopup.setWidth(popupWidth);
+ mPreviewPopup.setHeight(popupHeight);
+ mPreviewPopup.showAtLocation(this, Gravity.NO_GRAVITY, mPopupPreviewX,
+ mPopupPreviewY + offsetInWindow[1]);
+ }
+ mPreviewText.setVisibility(VISIBLE);
+ }
+ }
+ }
+
+ private void longPressFirstWord() {
+ CharSequence word = mSuggestions.get(0);
+ if (word.length() < 2) return;
+ if (mService.addWordToDictionary(word.toString())) {
+ showPreview(0, getContext().getResources().getString(R.string.added_word, word));
+ }
+ }
+
+ @Override
+ public void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ hidePreview();
+ }
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/ContactsDictionary.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/ContactsDictionary.java
new file mode 100644
index 00000000..247f8bad
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/ContactsDictionary.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package keepass2android.softkeyboard;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.os.SystemClock;
+import android.provider.ContactsContract.Contacts;
+import android.text.TextUtils;
+import android.util.Log;
+
+public class ContactsDictionary extends ExpandableDictionary {
+
+ private static final String[] PROJECTION = {
+ Contacts._ID,
+ Contacts.DISPLAY_NAME,
+ };
+
+ private static final String TAG = "ContactsDictionary";
+
+ /**
+ * Frequency for contacts information into the dictionary
+ */
+ private static final int FREQUENCY_FOR_CONTACTS = 128;
+ private static final int FREQUENCY_FOR_CONTACTS_BIGRAM = 90;
+
+ private static final int INDEX_NAME = 1;
+
+ private ContentObserver mObserver;
+
+ private long mLastLoadedContacts;
+
+ public ContactsDictionary(Context context, int dicTypeId) {
+ super(context, dicTypeId);
+ // Perform a managed query. The Activity will handle closing and requerying the cursor
+ // when needed.
+ ContentResolver cres = context.getContentResolver();
+
+ cres.registerContentObserver(
+ Contacts.CONTENT_URI, true,mObserver = new ContentObserver(null) {
+ @Override
+ public void onChange(boolean self) {
+ setRequiresReload(true);
+ }
+ });
+ loadDictionary();
+ }
+
+ @Override
+ public synchronized void close() {
+ if (mObserver != null) {
+ getContext().getContentResolver().unregisterContentObserver(mObserver);
+ mObserver = null;
+ }
+ super.close();
+ }
+
+ @Override
+ public void startDictionaryLoadingTaskLocked() {
+ long now = SystemClock.uptimeMillis();
+ if (mLastLoadedContacts == 0
+ || now - mLastLoadedContacts > 30 * 60 * 1000 /* 30 minutes */) {
+ super.startDictionaryLoadingTaskLocked();
+ }
+ }
+
+ @Override
+ public void loadDictionaryAsync() {
+ /*try {
+ Cursor cursor = getContext().getContentResolver()
+ .query(Contacts.CONTENT_URI, PROJECTION, null, null, null);
+ if (cursor != null) {
+ addWords(cursor);
+ }
+ } catch(IllegalStateException e) {
+ Log.e(TAG, "Contacts DB is having problems");
+ }
+ mLastLoadedContacts = SystemClock.uptimeMillis();*/
+ }
+
+ private void addWords(Cursor cursor) {
+ clearDictionary();
+
+ final int maxWordLength = getMaxWordLength();
+ try {
+ if (cursor.moveToFirst()) {
+ while (!cursor.isAfterLast()) {
+ String name = cursor.getString(INDEX_NAME);
+
+ if (name != null) {
+ int len = name.length();
+ String prevWord = null;
+
+ // TODO: Better tokenization for non-Latin writing systems
+ for (int i = 0; i < len; i++) {
+ if (Character.isLetter(name.charAt(i))) {
+ int j;
+ for (j = i + 1; j < len; j++) {
+ char c = name.charAt(j);
+
+ if (!(c == '-' || c == '\'' ||
+ Character.isLetter(c))) {
+ break;
+ }
+ }
+
+ String word = name.substring(i, j);
+ i = j - 1;
+
+ // Safeguard against adding really long words. Stack
+ // may overflow due to recursion
+ // Also don't add single letter words, possibly confuses
+ // capitalization of i.
+ final int wordLen = word.length();
+ if (wordLen < maxWordLength && wordLen > 1) {
+ super.addWord(word, FREQUENCY_FOR_CONTACTS);
+ if (!TextUtils.isEmpty(prevWord)) {
+ // TODO Do not add email address
+ // Not so critical
+ super.setBigram(prevWord, word,
+ FREQUENCY_FOR_CONTACTS_BIGRAM);
+ }
+ prevWord = word;
+ }
+ }
+ }
+ }
+ cursor.moveToNext();
+ }
+ }
+ cursor.close();
+ } catch(IllegalStateException e) {
+ Log.e(TAG, "Contacts DB is having problems");
+ }
+ }
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/Dictionary.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/Dictionary.java
new file mode 100644
index 00000000..2b93599b
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/Dictionary.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package keepass2android.softkeyboard;
+
+/**
+ * Abstract base class for a dictionary that can do a fuzzy search for words based on a set of key
+ * strokes.
+ */
+abstract public class Dictionary {
+ /**
+ * Whether or not to replicate the typed word in the suggested list, even if it's valid.
+ */
+ protected static final boolean INCLUDE_TYPED_WORD_IF_VALID = false;
+
+ /**
+ * The weight to give to a word if it's length is the same as the number of typed characters.
+ */
+ protected static final int FULL_WORD_FREQ_MULTIPLIER = 2;
+
+ public static enum DataType {
+ UNIGRAM, BIGRAM
+ }
+
+ /**
+ * Interface to be implemented by classes requesting words to be fetched from the dictionary.
+ * @see #getWords(WordComposer, WordCallback)
+ */
+ public interface WordCallback {
+ /**
+ * Adds a word to a list of suggestions. The word is expected to be ordered based on
+ * the provided frequency.
+ * @param word the character array containing the word
+ * @param wordOffset starting offset of the word in the character array
+ * @param wordLength length of valid characters in the character array
+ * @param frequency the frequency of occurence. This is normalized between 1 and 255, but
+ * can exceed those limits
+ * @param dicTypeId of the dictionary where word was from
+ * @param dataType tells type of this data
+ * @return true if the word was added, false if no more words are required
+ */
+ boolean addWord(char[] word, int wordOffset, int wordLength, int frequency, int dicTypeId,
+ DataType dataType);
+ }
+
+ /**
+ * Searches for words in the dictionary that match the characters in the composer. Matched
+ * words are added through the callback object.
+ * @param composer the key sequence to match
+ * @param callback the callback object to send matched words to as possible candidates
+ * @param nextLettersFrequencies array of frequencies of next letters that could follow the
+ * word so far. For instance, "bracke" can be followed by "t", so array['t'] will have
+ * a non-zero value on returning from this method.
+ * Pass in null if you don't want the dictionary to look up next letters.
+ * @see WordCallback#addWord(char[], int, int)
+ */
+ abstract public void getWords(final WordComposer composer, final WordCallback callback,
+ int[] nextLettersFrequencies);
+
+ /**
+ * Searches for pairs in the bigram dictionary that matches the previous word and all the
+ * possible words following are added through the callback object.
+ * @param composer the key sequence to match
+ * @param callback the callback object to send possible word following previous word
+ * @param nextLettersFrequencies array of frequencies of next letters that could follow the
+ * word so far. For instance, "bracke" can be followed by "t", so array['t'] will have
+ * a non-zero value on returning from this method.
+ * Pass in null if you don't want the dictionary to look up next letters.
+ */
+ public void getBigrams(final WordComposer composer, final CharSequence previousWord,
+ final WordCallback callback, int[] nextLettersFrequencies) {
+ // empty base implementation
+ }
+
+ /**
+ * Checks if the given word occurs in the dictionary
+ * @param word the word to search for. The search should be case-insensitive.
+ * @return true if the word exists, false otherwise
+ */
+ abstract public boolean isValidWord(CharSequence word);
+
+ /**
+ * Compares the contents of the character array with the typed word and returns true if they
+ * are the same.
+ * @param word the array of characters that make up the word
+ * @param length the number of valid characters in the character array
+ * @param typedWord the word to compare with
+ * @return true if they are the same, false otherwise.
+ */
+ protected boolean same(final char[] word, final int length, final CharSequence typedWord) {
+ if (typedWord.length() != length) {
+ return false;
+ }
+ for (int i = 0; i < length; i++) {
+ if (word[i] != typedWord.charAt(i)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Override to clean up any resources.
+ */
+ public void close() {
+ }
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/EditingUtil.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/EditingUtil.java
new file mode 100644
index 00000000..3f3df704
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/EditingUtil.java
@@ -0,0 +1,337 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package keepass2android.softkeyboard;
+
+import android.text.TextUtils;
+import android.view.inputmethod.ExtractedText;
+import android.view.inputmethod.ExtractedTextRequest;
+import android.view.inputmethod.InputConnection;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.regex.Pattern;
+
+/**
+ * Utility methods to deal with editing text through an InputConnection.
+ */
+public class EditingUtil {
+ /**
+ * Number of characters we want to look back in order to identify the previous word
+ */
+ private static final int LOOKBACK_CHARACTER_NUM = 15;
+
+ // Cache Method pointers
+ private static boolean sMethodsInitialized;
+ private static Method sMethodGetSelectedText;
+ private static Method sMethodSetComposingRegion;
+
+ private EditingUtil() {};
+
+ /**
+ * Append newText to the text field represented by connection.
+ * The new text becomes selected.
+ */
+ public static void appendText(InputConnection connection, String newText) {
+ if (connection == null) {
+ return;
+ }
+
+ // Commit the composing text
+ connection.finishComposingText();
+
+ // Add a space if the field already has text.
+ CharSequence charBeforeCursor = connection.getTextBeforeCursor(1, 0);
+ if (charBeforeCursor != null
+ && !charBeforeCursor.equals(" ")
+ && (charBeforeCursor.length() > 0)) {
+ newText = " " + newText;
+ }
+
+ connection.setComposingText(newText, 1);
+ }
+
+ private static int getCursorPosition(InputConnection connection) {
+ ExtractedText extracted = connection.getExtractedText(
+ new ExtractedTextRequest(), 0);
+ if (extracted == null) {
+ return -1;
+ }
+ return extracted.startOffset + extracted.selectionStart;
+ }
+
+ /**
+ * @param connection connection to the current text field.
+ * @param sep characters which may separate words
+ * @param range the range object to store the result into
+ * @return the word that surrounds the cursor, including up to one trailing
+ * separator. For example, if the field contains "he|llo world", where |
+ * represents the cursor, then "hello " will be returned.
+ */
+ public static String getWordAtCursor(
+ InputConnection connection, String separators, Range range) {
+ Range r = getWordRangeAtCursor(connection, separators, range);
+ return (r == null) ? null : r.word;
+ }
+
+ /**
+ * Removes the word surrounding the cursor. Parameters are identical to
+ * getWordAtCursor.
+ */
+ public static void deleteWordAtCursor(
+ InputConnection connection, String separators) {
+
+ Range range = getWordRangeAtCursor(connection, separators, null);
+ if (range == null) return;
+
+ connection.finishComposingText();
+ // Move cursor to beginning of word, to avoid crash when cursor is outside
+ // of valid range after deleting text.
+ int newCursor = getCursorPosition(connection) - range.charsBefore;
+ connection.setSelection(newCursor, newCursor);
+ connection.deleteSurroundingText(0, range.charsBefore + range.charsAfter);
+ }
+
+ /**
+ * Represents a range of text, relative to the current cursor position.
+ */
+ public static class Range {
+ /** Characters before selection start */
+ public int charsBefore;
+
+ /**
+ * Characters after selection start, including one trailing word
+ * separator.
+ */
+ public int charsAfter;
+
+ /** The actual characters that make up a word */
+ public String word;
+
+ public Range() {}
+
+ public Range(int charsBefore, int charsAfter, String word) {
+ if (charsBefore < 0 || charsAfter < 0) {
+ throw new IndexOutOfBoundsException();
+ }
+ this.charsBefore = charsBefore;
+ this.charsAfter = charsAfter;
+ this.word = word;
+ }
+ }
+
+ private static Range getWordRangeAtCursor(
+ InputConnection connection, String sep, Range range) {
+ if (connection == null || sep == null) {
+ return null;
+ }
+ CharSequence before = connection.getTextBeforeCursor(1000, 0);
+ CharSequence after = connection.getTextAfterCursor(1000, 0);
+ if (before == null || after == null) {
+ return null;
+ }
+
+ // Find first word separator before the cursor
+ int start = before.length();
+ while (start > 0 && !isWhitespace(before.charAt(start - 1), sep)) start--;
+
+ // Find last word separator after the cursor
+ int end = -1;
+ while (++end < after.length() && !isWhitespace(after.charAt(end), sep));
+
+ int cursor = getCursorPosition(connection);
+ if (start >= 0 && cursor + end <= after.length() + before.length()) {
+ String word = before.toString().substring(start, before.length())
+ + after.toString().substring(0, end);
+
+ Range returnRange = range != null? range : new Range();
+ returnRange.charsBefore = before.length() - start;
+ returnRange.charsAfter = end;
+ returnRange.word = word;
+ return returnRange;
+ }
+
+ return null;
+ }
+
+ private static boolean isWhitespace(int code, String whitespace) {
+ return whitespace.contains(String.valueOf((char) code));
+ }
+
+ private static final Pattern spaceRegex = Pattern.compile("\\s+");
+
+ public static CharSequence getPreviousWord(InputConnection connection,
+ String sentenceSeperators) {
+ //TODO: Should fix this. This could be slow!
+ CharSequence prev = connection.getTextBeforeCursor(LOOKBACK_CHARACTER_NUM, 0);
+ if (prev == null) {
+ return null;
+ }
+ String[] w = spaceRegex.split(prev);
+ if (w.length >= 2 && w[w.length-2].length() > 0) {
+ char lastChar = w[w.length-2].charAt(w[w.length-2].length() -1);
+ if (sentenceSeperators.contains(String.valueOf(lastChar))) {
+ return null;
+ }
+ return w[w.length-2];
+ } else {
+ return null;
+ }
+ }
+
+ public static class SelectedWord {
+ public int start;
+ public int end;
+ public CharSequence word;
+ }
+
+ /**
+ * Takes a character sequence with a single character and checks if the character occurs
+ * in a list of word separators or is empty.
+ * @param singleChar A CharSequence with null, zero or one character
+ * @param wordSeparators A String containing the word separators
+ * @return true if the character is at a word boundary, false otherwise
+ */
+ private static boolean isWordBoundary(CharSequence singleChar, String wordSeparators) {
+ return TextUtils.isEmpty(singleChar) || wordSeparators.contains(singleChar);
+ }
+
+ /**
+ * Checks if the cursor is inside a word or the current selection is a whole word.
+ * @param ic the InputConnection for accessing the text field
+ * @param selStart the start position of the selection within the text field
+ * @param selEnd the end position of the selection within the text field. This could be
+ * the same as selStart, if there's no selection.
+ * @param wordSeparators the word separator characters for the current language
+ * @return an object containing the text and coordinates of the selected/touching word,
+ * null if the selection/cursor is not marking a whole word.
+ */
+ public static SelectedWord getWordAtCursorOrSelection(final InputConnection ic,
+ int selStart, int selEnd, String wordSeparators) {
+ if (selStart == selEnd) {
+ // There is just a cursor, so get the word at the cursor
+ EditingUtil.Range range = new EditingUtil.Range();
+ CharSequence touching = getWordAtCursor(ic, wordSeparators, range);
+ if (!TextUtils.isEmpty(touching)) {
+ SelectedWord selWord = new SelectedWord();
+ selWord.word = touching;
+ selWord.start = selStart - range.charsBefore;
+ selWord.end = selEnd + range.charsAfter;
+ return selWord;
+ }
+ } else {
+ // Is the previous character empty or a word separator? If not, return null.
+ CharSequence charsBefore = ic.getTextBeforeCursor(1, 0);
+ if (!isWordBoundary(charsBefore, wordSeparators)) {
+ return null;
+ }
+
+ // Is the next character empty or a word separator? If not, return null.
+ CharSequence charsAfter = ic.getTextAfterCursor(1, 0);
+ if (!isWordBoundary(charsAfter, wordSeparators)) {
+ return null;
+ }
+
+ // Extract the selection alone
+ CharSequence touching = getSelectedText(ic, selStart, selEnd);
+ if (TextUtils.isEmpty(touching)) return null;
+ // Is any part of the selection a separator? If so, return null.
+ final int length = touching.length();
+ for (int i = 0; i < length; i++) {
+ if (wordSeparators.contains(touching.subSequence(i, i + 1))) {
+ return null;
+ }
+ }
+ // Prepare the selected word
+ SelectedWord selWord = new SelectedWord();
+ selWord.start = selStart;
+ selWord.end = selEnd;
+ selWord.word = touching;
+ return selWord;
+ }
+ return null;
+ }
+
+ /**
+ * Cache method pointers for performance
+ */
+ private static void initializeMethodsForReflection() {
+ try {
+ // These will either both exist or not, so no need for separate try/catch blocks.
+ // If other methods are added later, use separate try/catch blocks.
+ sMethodGetSelectedText = InputConnection.class.getMethod("getSelectedText", int.class);
+ sMethodSetComposingRegion = InputConnection.class.getMethod("setComposingRegion",
+ int.class, int.class);
+ } catch (NoSuchMethodException exc) {
+ // Ignore
+ }
+ sMethodsInitialized = true;
+ }
+
+ /**
+ * Returns the selected text between the selStart and selEnd positions.
+ */
+ private static CharSequence getSelectedText(InputConnection ic, int selStart, int selEnd) {
+ // Use reflection, for backward compatibility
+ CharSequence result = null;
+ if (!sMethodsInitialized) {
+ initializeMethodsForReflection();
+ }
+ if (sMethodGetSelectedText != null) {
+ try {
+ result = (CharSequence) sMethodGetSelectedText.invoke(ic, 0);
+ return result;
+ } catch (InvocationTargetException exc) {
+ // Ignore
+ } catch (IllegalArgumentException e) {
+ // Ignore
+ } catch (IllegalAccessException e) {
+ // Ignore
+ }
+ }
+ // Reflection didn't work, try it the poor way, by moving the cursor to the start,
+ // getting the text after the cursor and moving the text back to selected mode.
+ // TODO: Verify that this works properly in conjunction with
+ // LatinIME#onUpdateSelection
+ ic.setSelection(selStart, selEnd);
+ result = ic.getTextAfterCursor(selEnd - selStart, 0);
+ ic.setSelection(selStart, selEnd);
+ return result;
+ }
+
+ /**
+ * Tries to set the text into composition mode if there is support for it in the framework.
+ */
+ public static void underlineWord(InputConnection ic, SelectedWord word) {
+ // Use reflection, for backward compatibility
+ // If method not found, there's nothing we can do. It still works but just wont underline
+ // the word.
+ if (!sMethodsInitialized) {
+ initializeMethodsForReflection();
+ }
+ if (sMethodSetComposingRegion != null) {
+ try {
+ sMethodSetComposingRegion.invoke(ic, word.start, word.end);
+ } catch (InvocationTargetException exc) {
+ // Ignore
+ } catch (IllegalArgumentException e) {
+ // Ignore
+ } catch (IllegalAccessException e) {
+ // Ignore
+ }
+ }
+ }
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/ExpandableDictionary.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/ExpandableDictionary.java
new file mode 100644
index 00000000..95737626
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/ExpandableDictionary.java
@@ -0,0 +1,691 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package keepass2android.softkeyboard;
+
+import java.util.LinkedList;
+
+import android.content.Context;
+import android.os.AsyncTask;
+
+/**
+ * Base class for an in-memory dictionary that can grow dynamically and can
+ * be searched for suggestions and valid words.
+ */
+public class ExpandableDictionary extends Dictionary {
+ /**
+ * There is difference between what java and native code can handle.
+ * It uses 32 because Java stack overflows when greater value is used.
+ */
+ protected static final int MAX_WORD_LENGTH = 32;
+
+ private Context mContext;
+ private char[] mWordBuilder = new char[MAX_WORD_LENGTH];
+ private int mDicTypeId;
+ private int mMaxDepth;
+ private int mInputLength;
+ private int[] mNextLettersFrequencies;
+ private StringBuilder sb = new StringBuilder(MAX_WORD_LENGTH);
+
+ private static final char QUOTE = '\'';
+
+ private boolean mRequiresReload;
+
+ private boolean mUpdatingDictionary;
+
+ // Use this lock before touching mUpdatingDictionary & mRequiresDownload
+ private Object mUpdatingLock = new Object();
+
+ static class Node {
+ char code;
+ int frequency;
+ boolean terminal;
+ Node parent;
+ NodeArray children;
+ LinkedList ngrams; // Supports ngram
+ }
+
+ static class NodeArray {
+ Node[] data;
+ int length = 0;
+ private static final int INCREMENT = 2;
+
+ NodeArray() {
+ data = new Node[INCREMENT];
+ }
+
+ void add(Node n) {
+ if (length + 1 > data.length) {
+ Node[] tempData = new Node[length + INCREMENT];
+ if (length > 0) {
+ System.arraycopy(data, 0, tempData, 0, length);
+ }
+ data = tempData;
+ }
+ data[length++] = n;
+ }
+ }
+
+ static class NextWord {
+ Node word;
+ NextWord nextWord;
+ int frequency;
+
+ NextWord(Node word, int frequency) {
+ this.word = word;
+ this.frequency = frequency;
+ }
+ }
+
+
+ private NodeArray mRoots;
+
+ private int[][] mCodes;
+
+ ExpandableDictionary(Context context, int dicTypeId) {
+ mContext = context;
+ clearDictionary();
+ mCodes = new int[MAX_WORD_LENGTH][];
+ mDicTypeId = dicTypeId;
+ }
+
+ public void loadDictionary() {
+ synchronized (mUpdatingLock) {
+ startDictionaryLoadingTaskLocked();
+ }
+ }
+
+ public void startDictionaryLoadingTaskLocked() {
+ if (!mUpdatingDictionary) {
+ mUpdatingDictionary = true;
+ mRequiresReload = false;
+ new LoadDictionaryTask().execute();
+ }
+ }
+
+ public void setRequiresReload(boolean reload) {
+ synchronized (mUpdatingLock) {
+ mRequiresReload = reload;
+ }
+ }
+
+ public boolean getRequiresReload() {
+ return mRequiresReload;
+ }
+
+ /** Override to load your dictionary here, on a background thread. */
+ public void loadDictionaryAsync() {
+ }
+
+ Context getContext() {
+ return mContext;
+ }
+
+ int getMaxWordLength() {
+ return MAX_WORD_LENGTH;
+ }
+
+ public void addWord(String word, int frequency) {
+ addWordRec(mRoots, word, 0, frequency, null);
+ }
+
+ private void addWordRec(NodeArray children, final String word, final int depth,
+ final int frequency, Node parentNode) {
+ final int wordLength = word.length();
+ final char c = word.charAt(depth);
+ // Does children have the current character?
+ final int childrenLength = children.length;
+ Node childNode = null;
+ boolean found = false;
+ for (int i = 0; i < childrenLength; i++) {
+ childNode = children.data[i];
+ if (childNode.code == c) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ childNode = new Node();
+ childNode.code = c;
+ childNode.parent = parentNode;
+ children.add(childNode);
+ }
+ if (wordLength == depth + 1) {
+ // Terminate this word
+ childNode.terminal = true;
+ childNode.frequency = Math.max(frequency, childNode.frequency);
+ if (childNode.frequency > 255) childNode.frequency = 255;
+ return;
+ }
+ if (childNode.children == null) {
+ childNode.children = new NodeArray();
+ }
+ addWordRec(childNode.children, word, depth + 1, frequency, childNode);
+ }
+
+ @Override
+ public void getWords(final WordComposer codes, final WordCallback callback,
+ int[] nextLettersFrequencies) {
+ synchronized (mUpdatingLock) {
+ // If we need to update, start off a background task
+ if (mRequiresReload) startDictionaryLoadingTaskLocked();
+ // Currently updating contacts, don't return any results.
+ if (mUpdatingDictionary) return;
+ }
+
+ mInputLength = codes.size();
+ mNextLettersFrequencies = nextLettersFrequencies;
+ if (mCodes.length < mInputLength) mCodes = new int[mInputLength][];
+ // Cache the codes so that we don't have to lookup an array list
+ for (int i = 0; i < mInputLength; i++) {
+ mCodes[i] = codes.getCodesAt(i);
+ }
+ mMaxDepth = mInputLength * 3;
+ getWordsRec(mRoots, codes, mWordBuilder, 0, false, 1, 0, -1, callback);
+ for (int i = 0; i < mInputLength; i++) {
+ getWordsRec(mRoots, codes, mWordBuilder, 0, false, 1, 0, i, callback);
+ }
+ }
+
+ @Override
+ public synchronized boolean isValidWord(CharSequence word) {
+ synchronized (mUpdatingLock) {
+ // If we need to update, start off a background task
+ if (mRequiresReload) startDictionaryLoadingTaskLocked();
+ if (mUpdatingDictionary) return false;
+ }
+ final int freq = getWordFrequency(word);
+ return freq > -1;
+ }
+
+ /**
+ * Returns the word's frequency or -1 if not found
+ */
+ public int getWordFrequency(CharSequence word) {
+ Node node = searchNode(mRoots, word, 0, word.length());
+ return (node == null) ? -1 : node.frequency;
+ }
+
+ /**
+ * Recursively traverse the tree for words that match the input. Input consists of
+ * a list of arrays. Each item in the list is one input character position. An input
+ * character is actually an array of multiple possible candidates. This function is not
+ * optimized for speed, assuming that the user dictionary will only be a few hundred words in
+ * size.
+ * @param roots node whose children have to be search for matches
+ * @param codes the input character codes
+ * @param word the word being composed as a possible match
+ * @param depth the depth of traversal - the length of the word being composed thus far
+ * @param completion whether the traversal is now in completion mode - meaning that we've
+ * exhausted the input and we're looking for all possible suffixes.
+ * @param snr current weight of the word being formed
+ * @param inputIndex position in the input characters. This can be off from the depth in
+ * case we skip over some punctuations such as apostrophe in the traversal. That is, if you type
+ * "wouldve", it could be matching "would've", so the depth will be one more than the
+ * inputIndex
+ * @param callback the callback class for adding a word
+ */
+ protected void getWordsRec(NodeArray roots, final WordComposer codes, final char[] word,
+ final int depth, boolean completion, int snr, int inputIndex, int skipPos,
+ WordCallback callback) {
+ final int count = roots.length;
+ final int codeSize = mInputLength;
+ // Optimization: Prune out words that are too long compared to how much was typed.
+ if (depth > mMaxDepth) {
+ return;
+ }
+ int[] currentChars = null;
+ if (codeSize <= inputIndex) {
+ completion = true;
+ } else {
+ currentChars = mCodes[inputIndex];
+ }
+
+ for (int i = 0; i < count; i++) {
+ final Node node = roots.data[i];
+ final char c = node.code;
+ final char lowerC = toLowerCase(c);
+ final boolean terminal = node.terminal;
+ final NodeArray children = node.children;
+ final int freq = node.frequency;
+ if (completion) {
+ word[depth] = c;
+ if (terminal) {
+ if (!callback.addWord(word, 0, depth + 1, freq * snr, mDicTypeId,
+ DataType.UNIGRAM)) {
+ return;
+ }
+ // Add to frequency of next letters for predictive correction
+ if (mNextLettersFrequencies != null && depth >= inputIndex && skipPos < 0
+ && mNextLettersFrequencies.length > word[inputIndex]) {
+ mNextLettersFrequencies[word[inputIndex]]++;
+ }
+ }
+ if (children != null) {
+ getWordsRec(children, codes, word, depth + 1, completion, snr, inputIndex,
+ skipPos, callback);
+ }
+ } else if ((c == QUOTE && currentChars[0] != QUOTE) || depth == skipPos) {
+ // Skip the ' and continue deeper
+ word[depth] = c;
+ if (children != null) {
+ getWordsRec(children, codes, word, depth + 1, completion, snr, inputIndex,
+ skipPos, callback);
+ }
+ } else {
+ // Don't use alternatives if we're looking for missing characters
+ final int alternativesSize = skipPos >= 0? 1 : currentChars.length;
+ for (int j = 0; j < alternativesSize; j++) {
+ final int addedAttenuation = (j > 0 ? 1 : 2);
+ final int currentChar = currentChars[j];
+ if (currentChar == -1) {
+ break;
+ }
+ if (currentChar == lowerC || currentChar == c) {
+ word[depth] = c;
+
+ if (codeSize == inputIndex + 1) {
+ if (terminal) {
+ if (INCLUDE_TYPED_WORD_IF_VALID
+ || !same(word, depth + 1, codes.getTypedWord())) {
+ int finalFreq = freq * snr * addedAttenuation;
+ if (skipPos < 0) finalFreq *= FULL_WORD_FREQ_MULTIPLIER;
+ callback.addWord(word, 0, depth + 1, finalFreq, mDicTypeId,
+ DataType.UNIGRAM);
+ }
+ }
+ if (children != null) {
+ getWordsRec(children, codes, word, depth + 1,
+ true, snr * addedAttenuation, inputIndex + 1,
+ skipPos, callback);
+ }
+ } else if (children != null) {
+ getWordsRec(children, codes, word, depth + 1,
+ false, snr * addedAttenuation, inputIndex + 1,
+ skipPos, callback);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ protected int setBigram(String word1, String word2, int frequency) {
+ return addOrSetBigram(word1, word2, frequency, false);
+ }
+
+ protected int addBigram(String word1, String word2, int frequency) {
+ return addOrSetBigram(word1, word2, frequency, true);
+ }
+
+ /**
+ * Adds bigrams to the in-memory trie structure that is being used to retrieve any word
+ * @param frequency frequency for this bigrams
+ * @param addFrequency if true, it adds to current frequency
+ * @return returns the final frequency
+ */
+ private int addOrSetBigram(String word1, String word2, int frequency, boolean addFrequency) {
+ Node firstWord = searchWord(mRoots, word1, 0, null);
+ Node secondWord = searchWord(mRoots, word2, 0, null);
+ LinkedList bigram = firstWord.ngrams;
+ if (bigram == null || bigram.size() == 0) {
+ firstWord.ngrams = new LinkedList();
+ bigram = firstWord.ngrams;
+ } else {
+ for (NextWord nw : bigram) {
+ if (nw.word == secondWord) {
+ if (addFrequency) {
+ nw.frequency += frequency;
+ } else {
+ nw.frequency = frequency;
+ }
+ return nw.frequency;
+ }
+ }
+ }
+ NextWord nw = new NextWord(secondWord, frequency);
+ firstWord.ngrams.add(nw);
+ return frequency;
+ }
+
+ /**
+ * Searches for the word and add the word if it does not exist.
+ * @return Returns the terminal node of the word we are searching for.
+ */
+ private Node searchWord(NodeArray children, String word, int depth, Node parentNode) {
+ final int wordLength = word.length();
+ final char c = word.charAt(depth);
+ // Does children have the current character?
+ final int childrenLength = children.length;
+ Node childNode = null;
+ boolean found = false;
+ for (int i = 0; i < childrenLength; i++) {
+ childNode = children.data[i];
+ if (childNode.code == c) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ childNode = new Node();
+ childNode.code = c;
+ childNode.parent = parentNode;
+ children.add(childNode);
+ }
+ if (wordLength == depth + 1) {
+ // Terminate this word
+ childNode.terminal = true;
+ return childNode;
+ }
+ if (childNode.children == null) {
+ childNode.children = new NodeArray();
+ }
+ return searchWord(childNode.children, word, depth + 1, childNode);
+ }
+
+ // @VisibleForTesting
+ boolean reloadDictionaryIfRequired() {
+ synchronized (mUpdatingLock) {
+ // If we need to update, start off a background task
+ if (mRequiresReload) startDictionaryLoadingTaskLocked();
+ // Currently updating contacts, don't return any results.
+ return mUpdatingDictionary;
+ }
+ }
+
+ private void runReverseLookUp(final CharSequence previousWord, final WordCallback callback) {
+ Node prevWord = searchNode(mRoots, previousWord, 0, previousWord.length());
+ if (prevWord != null && prevWord.ngrams != null) {
+ reverseLookUp(prevWord.ngrams, callback);
+ }
+ }
+
+ @Override
+ public void getBigrams(final WordComposer codes, final CharSequence previousWord,
+ final WordCallback callback, int[] nextLettersFrequencies) {
+ if (!reloadDictionaryIfRequired()) {
+ runReverseLookUp(previousWord, callback);
+ }
+ }
+
+ /**
+ * Used only for testing purposes
+ * This function will wait for loading from database to be done
+ */
+ void waitForDictionaryLoading() {
+ while (mUpdatingDictionary) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+
+ /**
+ * reverseLookUp retrieves the full word given a list of terminal nodes and adds those words
+ * through callback.
+ * @param terminalNodes list of terminal nodes we want to add
+ */
+ private void reverseLookUp(LinkedList terminalNodes,
+ final WordCallback callback) {
+ Node node;
+ int freq;
+ for (NextWord nextWord : terminalNodes) {
+ node = nextWord.word;
+ freq = nextWord.frequency;
+ // TODO Not the best way to limit suggestion threshold
+ if (freq >= UserBigramDictionary.SUGGEST_THRESHOLD) {
+ sb.setLength(0);
+ do {
+ sb.insert(0, node.code);
+ node = node.parent;
+ } while(node != null);
+
+ // TODO better way to feed char array?
+ callback.addWord(sb.toString().toCharArray(), 0, sb.length(), freq, mDicTypeId,
+ DataType.BIGRAM);
+ }
+ }
+ }
+
+ /**
+ * Search for the terminal node of the word
+ * @return Returns the terminal node of the word if the word exists
+ */
+ private Node searchNode(final NodeArray children, final CharSequence word, final int offset,
+ final int length) {
+ // TODO Consider combining with addWordRec
+ final int count = children.length;
+ char currentChar = word.charAt(offset);
+ for (int j = 0; j < count; j++) {
+ final Node node = children.data[j];
+ if (node.code == currentChar) {
+ if (offset == length - 1) {
+ if (node.terminal) {
+ return node;
+ }
+ } else {
+ if (node.children != null) {
+ Node returnNode = searchNode(node.children, word, offset + 1, length);
+ if (returnNode != null) return returnNode;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ protected void clearDictionary() {
+ mRoots = new NodeArray();
+ }
+
+ private class LoadDictionaryTask extends AsyncTask {
+ @Override
+ protected Void doInBackground(Void... v) {
+ loadDictionaryAsync();
+ synchronized (mUpdatingLock) {
+ mUpdatingDictionary = false;
+ }
+ return null;
+ }
+ }
+
+ static char toLowerCase(char c) {
+ if (c < BASE_CHARS.length) {
+ c = BASE_CHARS[c];
+ }
+ if (c >= 'A' && c <= 'Z') {
+ c = (char) (c | 32);
+ } else if (c > 127) {
+ c = Character.toLowerCase(c);
+ }
+ return c;
+ }
+
+ /**
+ * Table mapping most combined Latin, Greek, and Cyrillic characters
+ * to their base characters. If c is in range, BASE_CHARS[c] == c
+ * if c is not a combined character, or the base character if it
+ * is combined.
+ */
+ static final char BASE_CHARS[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x0020, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x0020, 0x00a9, 0x0061, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0020,
+ 0x00b0, 0x00b1, 0x0032, 0x0033, 0x0020, 0x03bc, 0x00b6, 0x00b7,
+ 0x0020, 0x0031, 0x006f, 0x00bb, 0x0031, 0x0031, 0x0033, 0x00bf,
+ 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x00c6, 0x0043,
+ 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049,
+ 0x00d0, 0x004e, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x00d7,
+ 0x004f, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x00de, 0x0073, // Manually changed d8 to 4f
+ // Manually changed df to 73
+ 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x00e6, 0x0063,
+ 0x0065, 0x0065, 0x0065, 0x0065, 0x0069, 0x0069, 0x0069, 0x0069,
+ 0x00f0, 0x006e, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x00f7,
+ 0x006f, 0x0075, 0x0075, 0x0075, 0x0075, 0x0079, 0x00fe, 0x0079, // Manually changed f8 to 6f
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063,
+ 0x0043, 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064,
+ 0x0110, 0x0111, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065,
+ 0x0045, 0x0065, 0x0045, 0x0065, 0x0047, 0x0067, 0x0047, 0x0067,
+ 0x0047, 0x0067, 0x0047, 0x0067, 0x0048, 0x0068, 0x0126, 0x0127,
+ 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069,
+ 0x0049, 0x0131, 0x0049, 0x0069, 0x004a, 0x006a, 0x004b, 0x006b,
+ 0x0138, 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x004c,
+ 0x006c, 0x0141, 0x0142, 0x004e, 0x006e, 0x004e, 0x006e, 0x004e,
+ 0x006e, 0x02bc, 0x014a, 0x014b, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x004f, 0x006f, 0x0152, 0x0153, 0x0052, 0x0072, 0x0052, 0x0072,
+ 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073,
+ 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0166, 0x0167,
+ 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075,
+ 0x0055, 0x0075, 0x0055, 0x0075, 0x0057, 0x0077, 0x0059, 0x0079,
+ 0x0059, 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0073,
+ 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185, 0x0186, 0x0187,
+ 0x0188, 0x0189, 0x018a, 0x018b, 0x018c, 0x018d, 0x018e, 0x018f,
+ 0x0190, 0x0191, 0x0192, 0x0193, 0x0194, 0x0195, 0x0196, 0x0197,
+ 0x0198, 0x0199, 0x019a, 0x019b, 0x019c, 0x019d, 0x019e, 0x019f,
+ 0x004f, 0x006f, 0x01a2, 0x01a3, 0x01a4, 0x01a5, 0x01a6, 0x01a7,
+ 0x01a8, 0x01a9, 0x01aa, 0x01ab, 0x01ac, 0x01ad, 0x01ae, 0x0055,
+ 0x0075, 0x01b1, 0x01b2, 0x01b3, 0x01b4, 0x01b5, 0x01b6, 0x01b7,
+ 0x01b8, 0x01b9, 0x01ba, 0x01bb, 0x01bc, 0x01bd, 0x01be, 0x01bf,
+ 0x01c0, 0x01c1, 0x01c2, 0x01c3, 0x0044, 0x0044, 0x0064, 0x004c,
+ 0x004c, 0x006c, 0x004e, 0x004e, 0x006e, 0x0041, 0x0061, 0x0049,
+ 0x0069, 0x004f, 0x006f, 0x0055, 0x0075, 0x00dc, 0x00fc, 0x00dc,
+ 0x00fc, 0x00dc, 0x00fc, 0x00dc, 0x00fc, 0x01dd, 0x00c4, 0x00e4,
+ 0x0226, 0x0227, 0x00c6, 0x00e6, 0x01e4, 0x01e5, 0x0047, 0x0067,
+ 0x004b, 0x006b, 0x004f, 0x006f, 0x01ea, 0x01eb, 0x01b7, 0x0292,
+ 0x006a, 0x0044, 0x0044, 0x0064, 0x0047, 0x0067, 0x01f6, 0x01f7,
+ 0x004e, 0x006e, 0x00c5, 0x00e5, 0x00c6, 0x00e6, 0x00d8, 0x00f8,
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065,
+ 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f,
+ 0x0052, 0x0072, 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075,
+ 0x0053, 0x0073, 0x0054, 0x0074, 0x021c, 0x021d, 0x0048, 0x0068,
+ 0x0220, 0x0221, 0x0222, 0x0223, 0x0224, 0x0225, 0x0041, 0x0061,
+ 0x0045, 0x0065, 0x00d6, 0x00f6, 0x00d5, 0x00f5, 0x004f, 0x006f,
+ 0x022e, 0x022f, 0x0059, 0x0079, 0x0234, 0x0235, 0x0236, 0x0237,
+ 0x0238, 0x0239, 0x023a, 0x023b, 0x023c, 0x023d, 0x023e, 0x023f,
+ 0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246, 0x0247,
+ 0x0248, 0x0249, 0x024a, 0x024b, 0x024c, 0x024d, 0x024e, 0x024f,
+ 0x0250, 0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0257,
+ 0x0258, 0x0259, 0x025a, 0x025b, 0x025c, 0x025d, 0x025e, 0x025f,
+ 0x0260, 0x0261, 0x0262, 0x0263, 0x0264, 0x0265, 0x0266, 0x0267,
+ 0x0268, 0x0269, 0x026a, 0x026b, 0x026c, 0x026d, 0x026e, 0x026f,
+ 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277,
+ 0x0278, 0x0279, 0x027a, 0x027b, 0x027c, 0x027d, 0x027e, 0x027f,
+ 0x0280, 0x0281, 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287,
+ 0x0288, 0x0289, 0x028a, 0x028b, 0x028c, 0x028d, 0x028e, 0x028f,
+ 0x0290, 0x0291, 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297,
+ 0x0298, 0x0299, 0x029a, 0x029b, 0x029c, 0x029d, 0x029e, 0x029f,
+ 0x02a0, 0x02a1, 0x02a2, 0x02a3, 0x02a4, 0x02a5, 0x02a6, 0x02a7,
+ 0x02a8, 0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad, 0x02ae, 0x02af,
+ 0x0068, 0x0266, 0x006a, 0x0072, 0x0279, 0x027b, 0x0281, 0x0077,
+ 0x0079, 0x02b9, 0x02ba, 0x02bb, 0x02bc, 0x02bd, 0x02be, 0x02bf,
+ 0x02c0, 0x02c1, 0x02c2, 0x02c3, 0x02c4, 0x02c5, 0x02c6, 0x02c7,
+ 0x02c8, 0x02c9, 0x02ca, 0x02cb, 0x02cc, 0x02cd, 0x02ce, 0x02cf,
+ 0x02d0, 0x02d1, 0x02d2, 0x02d3, 0x02d4, 0x02d5, 0x02d6, 0x02d7,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x02de, 0x02df,
+ 0x0263, 0x006c, 0x0073, 0x0078, 0x0295, 0x02e5, 0x02e6, 0x02e7,
+ 0x02e8, 0x02e9, 0x02ea, 0x02eb, 0x02ec, 0x02ed, 0x02ee, 0x02ef,
+ 0x02f0, 0x02f1, 0x02f2, 0x02f3, 0x02f4, 0x02f5, 0x02f6, 0x02f7,
+ 0x02f8, 0x02f9, 0x02fa, 0x02fb, 0x02fc, 0x02fd, 0x02fe, 0x02ff,
+ 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307,
+ 0x0308, 0x0309, 0x030a, 0x030b, 0x030c, 0x030d, 0x030e, 0x030f,
+ 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317,
+ 0x0318, 0x0319, 0x031a, 0x031b, 0x031c, 0x031d, 0x031e, 0x031f,
+ 0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327,
+ 0x0328, 0x0329, 0x032a, 0x032b, 0x032c, 0x032d, 0x032e, 0x032f,
+ 0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337,
+ 0x0338, 0x0339, 0x033a, 0x033b, 0x033c, 0x033d, 0x033e, 0x033f,
+ 0x0300, 0x0301, 0x0342, 0x0313, 0x0308, 0x0345, 0x0346, 0x0347,
+ 0x0348, 0x0349, 0x034a, 0x034b, 0x034c, 0x034d, 0x034e, 0x034f,
+ 0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0357,
+ 0x0358, 0x0359, 0x035a, 0x035b, 0x035c, 0x035d, 0x035e, 0x035f,
+ 0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367,
+ 0x0368, 0x0369, 0x036a, 0x036b, 0x036c, 0x036d, 0x036e, 0x036f,
+ 0x0370, 0x0371, 0x0372, 0x0373, 0x02b9, 0x0375, 0x0376, 0x0377,
+ 0x0378, 0x0379, 0x0020, 0x037b, 0x037c, 0x037d, 0x003b, 0x037f,
+ 0x0380, 0x0381, 0x0382, 0x0383, 0x0020, 0x00a8, 0x0391, 0x00b7,
+ 0x0395, 0x0397, 0x0399, 0x038b, 0x039f, 0x038d, 0x03a5, 0x03a9,
+ 0x03ca, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
+ 0x03a0, 0x03a1, 0x03a2, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
+ 0x03a8, 0x03a9, 0x0399, 0x03a5, 0x03b1, 0x03b5, 0x03b7, 0x03b9,
+ 0x03cb, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
+ 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
+ 0x03c8, 0x03c9, 0x03b9, 0x03c5, 0x03bf, 0x03c5, 0x03c9, 0x03cf,
+ 0x03b2, 0x03b8, 0x03a5, 0x03d2, 0x03d2, 0x03c6, 0x03c0, 0x03d7,
+ 0x03d8, 0x03d9, 0x03da, 0x03db, 0x03dc, 0x03dd, 0x03de, 0x03df,
+ 0x03e0, 0x03e1, 0x03e2, 0x03e3, 0x03e4, 0x03e5, 0x03e6, 0x03e7,
+ 0x03e8, 0x03e9, 0x03ea, 0x03eb, 0x03ec, 0x03ed, 0x03ee, 0x03ef,
+ 0x03ba, 0x03c1, 0x03c2, 0x03f3, 0x0398, 0x03b5, 0x03f6, 0x03f7,
+ 0x03f8, 0x03a3, 0x03fa, 0x03fb, 0x03fc, 0x03fd, 0x03fe, 0x03ff,
+ 0x0415, 0x0415, 0x0402, 0x0413, 0x0404, 0x0405, 0x0406, 0x0406,
+ 0x0408, 0x0409, 0x040a, 0x040b, 0x041a, 0x0418, 0x0423, 0x040f,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0418, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0438, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+ 0x0435, 0x0435, 0x0452, 0x0433, 0x0454, 0x0455, 0x0456, 0x0456,
+ 0x0458, 0x0459, 0x045a, 0x045b, 0x043a, 0x0438, 0x0443, 0x045f,
+ 0x0460, 0x0461, 0x0462, 0x0463, 0x0464, 0x0465, 0x0466, 0x0467,
+ 0x0468, 0x0469, 0x046a, 0x046b, 0x046c, 0x046d, 0x046e, 0x046f,
+ 0x0470, 0x0471, 0x0472, 0x0473, 0x0474, 0x0475, 0x0474, 0x0475,
+ 0x0478, 0x0479, 0x047a, 0x047b, 0x047c, 0x047d, 0x047e, 0x047f,
+ 0x0480, 0x0481, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487,
+ 0x0488, 0x0489, 0x048a, 0x048b, 0x048c, 0x048d, 0x048e, 0x048f,
+ 0x0490, 0x0491, 0x0492, 0x0493, 0x0494, 0x0495, 0x0496, 0x0497,
+ 0x0498, 0x0499, 0x049a, 0x049b, 0x049c, 0x049d, 0x049e, 0x049f,
+ 0x04a0, 0x04a1, 0x04a2, 0x04a3, 0x04a4, 0x04a5, 0x04a6, 0x04a7,
+ 0x04a8, 0x04a9, 0x04aa, 0x04ab, 0x04ac, 0x04ad, 0x04ae, 0x04af,
+ 0x04b0, 0x04b1, 0x04b2, 0x04b3, 0x04b4, 0x04b5, 0x04b6, 0x04b7,
+ 0x04b8, 0x04b9, 0x04ba, 0x04bb, 0x04bc, 0x04bd, 0x04be, 0x04bf,
+ 0x04c0, 0x0416, 0x0436, 0x04c3, 0x04c4, 0x04c5, 0x04c6, 0x04c7,
+ 0x04c8, 0x04c9, 0x04ca, 0x04cb, 0x04cc, 0x04cd, 0x04ce, 0x04cf,
+ 0x0410, 0x0430, 0x0410, 0x0430, 0x04d4, 0x04d5, 0x0415, 0x0435,
+ 0x04d8, 0x04d9, 0x04d8, 0x04d9, 0x0416, 0x0436, 0x0417, 0x0437,
+ 0x04e0, 0x04e1, 0x0418, 0x0438, 0x0418, 0x0438, 0x041e, 0x043e,
+ 0x04e8, 0x04e9, 0x04e8, 0x04e9, 0x042d, 0x044d, 0x0423, 0x0443,
+ 0x0423, 0x0443, 0x0423, 0x0443, 0x0427, 0x0447, 0x04f6, 0x04f7,
+ 0x042b, 0x044b, 0x04fa, 0x04fb, 0x04fc, 0x04fd, 0x04fe, 0x04ff,
+ };
+
+ // generated with:
+ // cat UnicodeData.txt | perl -e 'while (<>) { @foo = split(/;/); $foo[5] =~ s/<.*> //; $base[hex($foo[0])] = hex($foo[5]);} for ($i = 0; $i < 0x500; $i += 8) { for ($j = $i; $j < $i + 8; $j++) { printf("0x%04x, ", $base[$j] ? $base[$j] : $j)}; print "\n"; }'
+
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/Hints.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/Hints.java
new file mode 100644
index 00000000..58c15cd8
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/Hints.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package keepass2android.softkeyboard;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.view.inputmethod.InputConnection;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Logic to determine when to display hints on usage to the user.
+ */
+public class Hints {
+ public interface Display {
+ public void showHint(int viewResource);
+ }
+
+ private static final String PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN =
+ "voice_hint_num_unique_days_shown";
+ private static final String PREF_VOICE_HINT_LAST_TIME_SHOWN =
+ "voice_hint_last_time_shown";
+ private static final String PREF_VOICE_INPUT_LAST_TIME_USED =
+ "voice_input_last_time_used";
+ private static final String PREF_VOICE_PUNCTUATION_HINT_VIEW_COUNT =
+ "voice_punctuation_hint_view_count";
+ private static final int DEFAULT_SWIPE_HINT_MAX_DAYS_TO_SHOW = 7;
+ private static final int DEFAULT_PUNCTUATION_HINT_MAX_DISPLAYS = 7;
+
+ private Context mContext;
+ private Display mDisplay;
+ private boolean mVoiceResultContainedPunctuation;
+ private int mSwipeHintMaxDaysToShow;
+ private int mPunctuationHintMaxDisplays;
+
+ // Only show punctuation hint if voice result did not contain punctuation.
+ static final Map SPEAKABLE_PUNCTUATION
+ = new HashMap();
+ static {
+ SPEAKABLE_PUNCTUATION.put(",", "comma");
+ SPEAKABLE_PUNCTUATION.put(".", "period");
+ SPEAKABLE_PUNCTUATION.put("?", "question mark");
+ }
+
+ public Hints(Context context, Display display) {
+ mContext = context;
+ mDisplay = display;
+
+ ContentResolver cr = mContext.getContentResolver();
+
+ }
+
+ public boolean showSwipeHintIfNecessary(boolean fieldRecommended) {
+ if (fieldRecommended && shouldShowSwipeHint()) {
+ showHint(R.layout.voice_swipe_hint);
+ return true;
+ }
+
+ return false;
+ }
+
+ public boolean showPunctuationHintIfNecessary(InputConnection ic) {
+ if (!mVoiceResultContainedPunctuation
+ && ic != null
+ && getAndIncrementPref(PREF_VOICE_PUNCTUATION_HINT_VIEW_COUNT)
+ < mPunctuationHintMaxDisplays) {
+ CharSequence charBeforeCursor = ic.getTextBeforeCursor(1, 0);
+ if (SPEAKABLE_PUNCTUATION.containsKey(charBeforeCursor)) {
+ showHint(R.layout.voice_punctuation_hint);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public void registerVoiceResult(String text) {
+ // Update the current time as the last time voice input was used.
+ SharedPreferences.Editor editor =
+ PreferenceManager.getDefaultSharedPreferences(mContext).edit();
+ editor.putLong(PREF_VOICE_INPUT_LAST_TIME_USED, System.currentTimeMillis());
+ SharedPreferencesCompat.apply(editor);
+
+ mVoiceResultContainedPunctuation = false;
+ for (CharSequence s : SPEAKABLE_PUNCTUATION.keySet()) {
+ if (text.indexOf(s.toString()) >= 0) {
+ mVoiceResultContainedPunctuation = true;
+ break;
+ }
+ }
+ }
+
+ private boolean shouldShowSwipeHint() {
+
+
+ return false;
+ }
+
+ /**
+ * Determines whether the provided time is from some time today (i.e., this day, month,
+ * and year).
+ */
+ private boolean isFromToday(long timeInMillis) {
+ if (timeInMillis == 0) return false;
+
+ Calendar today = Calendar.getInstance();
+ today.setTimeInMillis(System.currentTimeMillis());
+
+ Calendar timestamp = Calendar.getInstance();
+ timestamp.setTimeInMillis(timeInMillis);
+
+ return (today.get(Calendar.YEAR) == timestamp.get(Calendar.YEAR) &&
+ today.get(Calendar.DAY_OF_MONTH) == timestamp.get(Calendar.DAY_OF_MONTH) &&
+ today.get(Calendar.MONTH) == timestamp.get(Calendar.MONTH));
+ }
+
+ private void showHint(int hintViewResource) {
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext);
+
+ int numUniqueDaysShown = sp.getInt(PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN, 0);
+ long lastTimeHintWasShown = sp.getLong(PREF_VOICE_HINT_LAST_TIME_SHOWN, 0);
+
+ // If this is the first time the hint is being shown today, increase the saved values
+ // to represent that. We don't need to increase the last time the hint was shown unless
+ // it is a different day from the current value.
+ if (!isFromToday(lastTimeHintWasShown)) {
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putInt(PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN, numUniqueDaysShown + 1);
+ editor.putLong(PREF_VOICE_HINT_LAST_TIME_SHOWN, System.currentTimeMillis());
+ SharedPreferencesCompat.apply(editor);
+ }
+
+ if (mDisplay != null) {
+ mDisplay.showHint(hintViewResource);
+ }
+ }
+
+ private int getAndIncrementPref(String pref) {
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext);
+ int value = sp.getInt(pref, 0);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putInt(pref, value + 1);
+ SharedPreferencesCompat.apply(editor);
+ return value;
+ }
+}
diff --git a/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/InputLanguageSelection.java b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/InputLanguageSelection.java
new file mode 100644
index 00000000..0d4d00c0
--- /dev/null
+++ b/src/java/KP2ASoftKeyboard2/java/src/keepass2android/softkeyboard/InputLanguageSelection.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2008-2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package keepass2android.softkeyboard;
+
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceManager;
+import android.text.TextUtils;
+
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Locale;
+
+public class InputLanguageSelection extends PreferenceActivity {
+
+ private String mSelectedLanguages;
+ private ArrayList mAvailableLanguages = new ArrayList();
+
+ private static final String[] WHITELIST_LANGUAGES = {
+ "cs", "da", "de", "en_GB", "en_US", "es", "es_US", "fr", "it", "nb", "nl", "pl", "pt",
+ "ru", "tr",
+ };
+
+ private static boolean isWhitelisted(String lang) {
+ for (String s : WHITELIST_LANGUAGES) {
+ if (s.equalsIgnoreCase(lang)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static class Loc implements Comparable